libpwizlite-3.0.5/000077500000000000000000000000001444255175000140645ustar00rootroot00000000000000libpwizlite-3.0.5/.gitignore000066400000000000000000000000511444255175000160500ustar00rootroot00000000000000compile_commands.json .ycm_extra_conf.py libpwizlite-3.0.5/CMakeLists.txt000066400000000000000000000217361444255175000166350ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.12) # CMake script for pwizlite library # Author: Filippo Rusconi # Created: 29/05/2020 ############################################################ ############################################################ # Basic information about project set(PROJECT pwizlite) project(${PROJECT} CXX C) set(PWIZLITE_VERSION_MAJOR "3") set(PWIZLITE_VERSION_MINOR "0") set(PWIZLITE_VERSION_PATCH "5") set(PWIZLITE_VERSION "${PWIZLITE_VERSION_MAJOR}.${PWIZLITE_VERSION_MINOR}.${PWIZLITE_VERSION_PATCH}") # This VERSION is parseable by the makeOrigTarball script. set(VERSION 3.0.5) message(STATUS "${BoldYellow}CMAKE_LIBRARY_ARCHITECTURE: ${CMAKE_LIBRARY_ARCHITECTURE}${ColourReset}") # This line MUST be located prior to include'ing GNUInstallDirs !!! # if CMAKE_INSTALL_PREFIX is /usr/local (default), then # the CMAKE_LIBRARY_ARCHITECTURE above is not honoured when # computing the CMAKE_INSTALL_FULL_LIBDIR. set(CMAKE_INSTALL_PREFIX /usr) message(STATUS "Set CMAKE_INSTALL_PREFIX to ${CMAKE_INSTALL_PREFIX}") include(GNUInstallDirs) message(STATUS "Install directory prefix: ${CMAKE_INSTALL_PREFIX}") message(STATUS "CMAKE_INSTALL_FULL_LIBDIR: ${CMAKE_INSTALL_FULL_LIBDIR}") message(STATUS "CMAKE_INSTALL_FULL_INCLUDEDIR: ${CMAKE_INSTALL_FULL_INCLUDEDIR}") # Add folder where are supportive functions set(CMAKE_UTILS_PATH ${CMAKE_SOURCE_DIR}/CMakeStuff) set(CMAKE_TOOLCHAINS_PATH ${CMAKE_UTILS_PATH}/toolchains) set(CMAKE_MODULE_PATH ${CMAKE_UTILS_PATH}/modules) #message("CMAKE_MODULE_PATH:" ${CMAKE_MODULE_PATH}) set(CMAKE_INCLUDE_CURRENT_DIR ON) # Include the system's uname that fills in SYSTEM_UNAME_S. # Sets WIN64 if SYSTEM_UNAME_S is "^.*MING64.*" include(${CMAKE_UTILS_PATH}/systemUname.cmake) # Include the various colors we want to use in the output include(${CMAKE_UTILS_PATH}/outputColors.cmake) set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_VERBOSE_MAKEFILE ON) message("\n${BoldRed}Configuring build for project ${PROJECT}${ColourReset}\n") # This export will allow using the flags to be used by # youcompleteme (vim plugin). set(CMAKE_EXPORT_COMPILE_COMMANDS 1) if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json" ) execute_process( COMMAND cmake -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json ${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json ) endif() # We want C++17 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) message(STATUS "Set CMAKE_CXX_STANDARD to 17 (required)") message(STATUS "${BoldGreen}CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}${ColourReset}") ############################################################# # We do not want warnings for unknown pragmas: message(STATUS "Setting definition -Wno-unknown-pragmas.${ColourReset}") add_definitions(-Wno-unknown-pragmas) # Enable warnings and possibly treat them as errors message(STATUS "${BoldGreen}Setting definition -Wall.${ColourReset}") add_definitions(-Wall) message(STATUS "${BoldGreen}Setting definition -Wextra.${ColourReset}") add_definitions(-Wextra) if(WARN_AS_ERROR) message(STATUS "${BoldYellow}Setting definition -Werror.${ColourReset}") add_definitions(-Werror) endif() message(STATUS "${BoldRed}CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}${ColourReset}") # Initialize a list variable that will be updated depending on the specific # platforms below. list(APPEND PLATFORM_SPECIFIC_LINK_LIBRARIES "") ############################################################# ############################################################# # Platform-specific CMake configuration if(MXE) include(${CMAKE_TOOLCHAINS_PATH}/mxe-toolchain.cmake) # Set the name to the systemUname variable because in this situation that name # is not found, it it passed as a flag in the command line. set(SYSTEM_UNAME_S "mxe") elseif(UNIX AND NOT APPLE) include(${CMAKE_TOOLCHAINS_PATH}/unix-toolchain.cmake) elseif(WIN32 OR _WIN32) if(WIN10MINGW64) # The file below will actually #define WIN10MINGW64 for # consumption by the src/pwiz/utility/misc/Filesystem.cpp file ! include(${CMAKE_TOOLCHAINS_PATH}/win10-mingw64-toolchain.cmake) endif() elseif(APPLE) include(${CMAKE_TOOLCHAINS_PATH}/apple-macport-toolchain.cmake) endif() message("") message(STATUS "${BoldGreen}Starting configuration of ${PROJECT}${ColourReset}") message("") message(STATUS "${BoldYellow}The build toolchain is: ${SYSTEM_UNAME_S}${ColourReset}") message("") ############################################################# ############################################################# # Essential software configuration message(STATUS "CMAKE_CURRENT_BINARY_DIR: " ${CMAKE_CURRENT_BINARY_DIR}) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Type of build, options are: None, Debug, Release, RelWithDebInfo, MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE) if(CMAKE_BUILD_TYPE MATCHES "Release") message(STATUS "Compiling in release mode.") add_definitions("-DQT_NO_DEBUG_OUTPUT") endif() if(CMAKE_BUILD_TYPE MATCHES "Debug") message(STATUS "Compiling in debug mode: ${MAKE_TEST}.") message(STATUS "Add definition -ggdb3 to format debug output for GDB.") add_definitions(-ggdb3) endif() if(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") message(STATUS "Compiling in release with debug info mode.") endif( CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo" ) message(STATUS "${BoldYellow}CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}.${ColourReset}") # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set the CMAKE_PREFIX_PATH for the find_library fonction when using non # standard install location if(CMAKE_INSTALL_PREFIX) set(CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}" ${CMAKE_PREFIX_PATH}) endif() # Subdirectories message(STATUS "Adding subdirectory src for PROJECT: ${PROJECT}") add_subdirectory(src) # There are situations where we do not want CPack processing. # For that, configure the build using -DNO_CPACK=1. if(NOT NO_CPACK) message("STATUS: Now managing the CPack process") set(CPACK_CMAKE_GENERATOR "Unix Makefiles") set(CPACK_GENERATOR "STGZ;TGZ;TZ") set(CPACK_OUTPUT_CONFIG_FILE "./CPackConfig.cmake") #set(CPACK_PACKAGE_DESCRIPTION_FILE ${LIBODSSTREAM_SOURCE_DIR}/COPYING) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A library that contains a subset of the ProteoWizard libpwiz library with code mainly aimed at loading MS files (XML-based and MGF).") set(CPACK_PACKAGE_EXECUTABLES "libpwizlite") set(CPACK_SOURCE_PACKAGE_FILE_NAME "libpwizlite-${PWIZLITE_VERSION}") set(CPACK_SYSTEM_NAME "Linux-i686") set(CPACK_PACKAGE_FILE_NAME "libpwizlite-${PWIZLITE_VERSION}-${CPACK_SYSTEM_NAME}") set(CPACK_PACKAGE_INSTALL_DIRECTORY "libpwizlite ${PWIZLITE_VERSION}") set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "libpwizlite ${PWIZLITE_VERSION}") set(CPACK_PACKAGE_NAME "libpwizlite") set(CPACK_PACKAGE_VENDOR "PAPPSO") set(CPACK_PACKAGE_VERSION ${PWIZLITE_VERSION}) set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/debian/copyright) set(CPACK_SOURCE_GENERATOR "TGZ;TZ") set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "./CPackSourceConfig.cmake") set(CPACK_SOURCE_STRIP_FILES "") set(CPACK_SYSTEM_NAME "Linux-i686") set(CPACK_TOPLEVEL_TAG "Linux-i686") set(CPACK_SOURCE_PACKAGE_FILE_NAME "libpwizlite-${PWIZLITE_VERSION}") set(CPACK_SOURCE_IGNORE_FILES ".*\\\\.tar\\\\.gz" "moc_.*cxx" "\\\\.#.*" ".*\\\\.aux" ".*\\\\.bbl" ".*\\\\.blg" ".*\\\\.log" ".*\\\\.out" ".*\\\\.toc" "/devel_archives/" "/doc\\\\/html/" "/doc\\\\/latex/" "Makefile" "install_manifest.txt" "CMakeCache.txt" "CPackConfig.cmake" "CPackSourceConfig.cmake" "/CMakeFiles/" "/_CPack_Packages/" "/Debug/" "/Release/" "/tests/" "/\\\\.externalToolBuilders/" "/\\\\.git/" "/\\\\.kdev4/" "/\\\\.settings/" "Makefile" "\\\\.gitignore" "\\\\.cdtbuild" "\\\\.cdtproject" "\\\\.project" "\\\\.cproject" "/win32/" "/win64/" "/build/" "/buildwin64/" "/cbuild/" "/wbuild/" "/bin/" "/buildmingw/" "test\\\\.ods" "buildwin32.cmd" "libpwizlite.so" "OpenDocument-v1.0-os.pdf" ) set(CPACK_PACKAGE_EXECUTABLES "libpwizlite" "libpwizlite") # for debian package : set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Olivier Langella ") set(DEBIAN_PACKAGE_BUILDS_DEPENDS "Olivier Langella ") include(CPack) # to create a TGZ archive of the source code type shell command # cpack -G TGZ --config CPackSourceConfig.cmake add_custom_target(targz cpack -G TGZ --config CPackSourceConfig.cmake && tar xvfz libpwizlite-${PWIZLITE_VERSION}.tar.gz WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Creating .tar.gz" VERBATIM ) add_custom_target(deb ln -s libpwizlite-${PWIZLITE_VERSION}.tar.gz libpwizlite_${PWIZLITE_VERSION}.orig.tar.gz && cd libpwizlite-${PWIZLITE_VERSION} && dpkg-buildpackage -sa DEPENDS targz WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Creating Debian package" VERBATIM ) else() message("STATUS: Not including CPack") endif(NOT NO_CPACK) libpwizlite-3.0.5/CMakeStuff/000077500000000000000000000000001444255175000160545ustar00rootroot00000000000000libpwizlite-3.0.5/CMakeStuff/modules/000077500000000000000000000000001444255175000175245ustar00rootroot00000000000000libpwizlite-3.0.5/CMakeStuff/modules/FindPwizLite.cmake000066400000000000000000000014021444255175000230730ustar00rootroot00000000000000# Copyright : Filippo Rusconi # License : GPL-3.0+ # Authors : Filippo Rusconi find_path(PwizLite_INCLUDE_DIRS pwizlite/pwiz/utility/misc/Export.hpp PATHS /usr/local/include /usr/include PATH_SUFFIXES pwizlite libpwizlite ENV PATH) find_library(PwizLite_LIBRARY NAMES pwizlite) if(PwizLite_INCLUDE_DIRS AND PwizLite_LIBRARY) set(PwizLite_FOUND TRUE) endif() if(PwizLite_FOUND) if(NOT PwizLite_FIND_QUIETLY) message(STATUS "Found PwizLite_LIBRARY: ${PwizLite_LIBRARY}") endif() if(NOT TARGET PwizLite::PwizLite) add_library(PwizLite::PwizLite UNKNOWN IMPORTED) set_target_properties(PwizLite::PwizLite PROPERTIES IMPORTED_LOCATION "${PwizLite_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${PwizLite_INCLUDE_DIRS}") endif() endif() libpwizlite-3.0.5/CMakeStuff/modules/PwizLiteConfig.cmake.in000066400000000000000000000010751444255175000240330ustar00rootroot00000000000000# Copyright : Filippo Rusconi # License : GPL-3.0+ # Authors : Filippo Rusconi set(PwizLite_INCLUDE_DIRS ${CMAKE_INSTALL_FULL_INCLUDEDIR}/pwizlite) set(PwizLite_LIBRARIES ${CMAKE_INSTALL_FULL_LIBDIR}/libpwizlite.so.${PWIZLITE_VERSION}) if(NOT TARGET PwizLite::PwizLite) add_library(PwizLite::PwizLite UNKNOWN IMPORTED) set_target_properties(PwizLite::PwizLite PROPERTIES IMPORTED_LOCATION "${CMAKE_INSTALL_FULL_LIBDIR}/libpwizlite.so.${PWIZLITE_VERSION}" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_INSTALL_FULL_INCLUDEDIR}/pwizlite") endif() set(PwizLite_FOUND 1) libpwizlite-3.0.5/CMakeStuff/modules/pkgconfig/000077500000000000000000000000001444255175000214735ustar00rootroot00000000000000libpwizlite-3.0.5/CMakeStuff/modules/pkgconfig/libpwizlite.pc.in000066400000000000000000000004571444255175000247700ustar00rootroot00000000000000prefix=${CMAKE_INSTALL_PREFIX} exec_prefix=${prefix} libdir=${CMAKE_INSTALL_LIBDIR} includedir=${CMAKE_INSTALL_INCLUDEDIR} Name: libpwizlite Description: PwizLite library (subset of libpwiz from ProteoWizard) Version: 3.0.0 Libs: -lpwizlite Cflags: -I${includedir}/pwizlite -I${includedir} Requires: libpwizlite-3.0.5/CMakeStuff/outputColors.cmake000066400000000000000000000010651444255175000216020ustar00rootroot00000000000000# We want to use some colors for the message output. string(ASCII 27 Esc) set(ColourReset "${Esc}[m") set(ColourBold "${Esc}[1m") set(Red "${Esc}[31m") set(Green "${Esc}[32m") set(Yellow "${Esc}[33m") set(Blue "${Esc}[34m") set(Magenta "${Esc}[35m") set(Cyan "${Esc}[36m") set(White "${Esc}[37m") set(BoldRed "${Esc}[1;31m") set(BoldGreen "${Esc}[1;32m") set(BoldYellow "${Esc}[1;33m") set(BoldBlue "${Esc}[1;34m") set(BoldMagenta "${Esc}[1;35m") set(BoldCyan "${Esc}[1;36m") set(BoldWhite "${Esc}[1;37m") libpwizlite-3.0.5/CMakeStuff/systemUname.cmake000066400000000000000000000012361444255175000213720ustar00rootroot00000000000000# Ask that uname -s be performed and store the value in SYSTEM_UNAME_S for # later reference. macro(get_uname_string) execute_process(COMMAND uname -s OUTPUT_VARIABLE SYSTEM_UNAME_S) if(${SYSTEM_UNAME_S} MATCHES "MINGW64_NT-10.*") message(STATUS "System detected as Windows10 with MINGW64, setting WIN32 AND WIN10MINGW64") # Note that WIN32 is set even on 64 bits systems. set(WIN32 1) # This setting is only for CMake consumption set(WIN10MINGW64 1) # This definition is to be able to test #ifdef WIN10MINGW64 in source code files add_definitions(-DWIN10MINGW64) #else() #message(STATUS "System is not Windows.") endif() endmacro() get_uname_string() libpwizlite-3.0.5/CMakeStuff/toolchains/000077500000000000000000000000001444255175000202175ustar00rootroot00000000000000libpwizlite-3.0.5/CMakeStuff/toolchains/apple-macport-toolchain.cmake000066400000000000000000000002321444255175000257400ustar00rootroot00000000000000# https://github.com/TRIQS/triqs/issues/523 add_definitions(-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR) # Only for Apple macport set(CMAKE_MACOSX_RPATH 0) libpwizlite-3.0.5/CMakeStuff/toolchains/mxe-toolchain.cmake000066400000000000000000000016251444255175000237740ustar00rootroot00000000000000# File:///home/langella/developpement/git/pappsomspp/CMakeStuff/toolchains/mxe-toolchain.cmake# # This file should be included if the command line reads like this: # x86_64-w64-mingw32.shared-cmake -DCMAKE_BUILD_TYPE=Release -DMXE=1 .. message("MXE (M cross environment) https://mxe.cc/") message("Please run the configuration like this:") message("x86_64-w64-mingw32.shared-cmake -DMXE= 1 -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Release ../../development") #set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${HOME_DEVEL_DIR}/mxe/usr/x86_64-w64-mingw32.shared/include) #set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${HOME_DEVEL_DIR}/mxe/usr/x86_64-w64-mingw32.shared/include) if(WIN32 OR _WIN32) message(STATUS "Building with WIN32 defined.") endif() message(STATUS "${BoldGreen}Setting definition -DPMSPP_LIBRARY for symbol DLL export.${ColourReset}") add_definitions(-DPMSPP_LIBRARY) find_package(ZLIB REQUIRED) libpwizlite-3.0.5/CMakeStuff/toolchains/unix-toolchain.cmake000066400000000000000000000020001444255175000241520ustar00rootroot00000000000000message("UNIX non APPLE environment") message("Please run the configuration like this:") message("cmake -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Debug ../development") set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES /usr/include) set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES /usr/include) find_package(ZLIB REQUIRED) find_package(Boost COMPONENTS iostreams thread filesystem chrono REQUIRED ) add_definitions(-fPIC) # Install cmake module install(FILES ${CMAKE_MODULE_PATH}/FindPwizLite.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pwizlite) # Install cmake config configure_file (${CMAKE_MODULE_PATH}/PwizLiteConfig.cmake.in ${CMAKE_BINARY_DIR}/PwizLiteConfig.cmake) install(FILES ${CMAKE_BINARY_DIR}/PwizLiteConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pwizlite) # Install the PkgConfig config file configure_file (${CMAKE_MODULE_PATH}/pkgconfig/libpwizlite.pc.in ${CMAKE_BINARY_DIR}/libpwizlite.pc) install(FILES ${CMAKE_BINARY_DIR}/libpwizlite.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) libpwizlite-3.0.5/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake000066400000000000000000000027401444255175000254310ustar00rootroot00000000000000message("\n${BoldRed}WIN10-MINGW64 environment${ColourReset}\n") message("Please run the configuration like this:") message("cmake -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Release ../development") set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "c:/msys64/mingw64/include") set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "c:/msys64/mingw64/bin") if(WIN32 OR _WIN32) message(STATUS "Building with WIN32 or _WIN32 defined and WIN10MINGW64 defined also.") endif() find_package(ZLIB REQUIRED) find_package(Boost COMPONENTS iostreams thread filesystem chrono REQUIRED ) # see https://cmake.org/pipermail/cmake/2015-December/062166.html set(CMAKE_NO_SYSTEM_FROM_IMPORTED 1) # Specific library to link to: message(STATUS "Add psapi.dll as a win64-specific link-time dependency.") list(APPEND PLATFORM_SPECIFIC_LINK_LIBRARIES "psapi") # On Win10 all the code is relocatable. remove_definitions(-fPIC) # Install cmake module install(FILES ${CMAKE_MODULE_PATH}/FindPwizLite.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pwizlite) # Install cmake config configure_file (${CMAKE_MODULE_PATH}/PwizLiteConfig.cmake.in ${CMAKE_BINARY_DIR}/PwizLiteConfig.cmake) install(FILES ${CMAKE_BINARY_DIR}/PwizLiteConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pwizlite) # Install the PkgConfig config file configure_file (${CMAKE_MODULE_PATH}/pkgconfig/libpwizlite.pc.in ${CMAKE_BINARY_DIR}/libpwizlite.pc) install(FILES ${CMAKE_BINARY_DIR}/libpwizlite.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) libpwizlite-3.0.5/maintainer-scripts/000077500000000000000000000000001444255175000177005ustar00rootroot00000000000000libpwizlite-3.0.5/maintainer-scripts/extract-files-from-proteowizard-source-tree.sh000077500000000000000000000076361444255175000307500ustar00rootroot00000000000000#!/bin/bash set -e usage() { printf "\nUsage: $(basename $0) [ [ --dry-run ] [ --must-exist ] [ --test-deb-package ] ]\n" printf "\nThis program will duplicate a source tree directory (arg 1) to a destination tree directory (arg 2).\n" printf "\nTo perform a dry run, add --dry-run to the command line.\n" printf "\nOptionally, the files are copied from source to destination only if the destination file already exists. This process allows one to refresh the contents of an existing destination tree with a new copy from a more recent source tree. To apply this condition provide a third argument : --must-exist.\n" printf "\n Optionally, the files can be tested for their shipment by a Debian package. To perform this test, provide a fourth argument: --test-deb-package.\n" printf "\nPlease provide a source directory to find files from\n" printf "\nand a destination directory to store the files into.\n\n" printf "\nNote that you must be located in the directory that is up one depth from the source directory of interest, providing a relative path to it. The destination directory might be absolute." printf "A typical invocation might be:\n" printf "$0 \n\n" exit 1 } dry_run=0 no_create_new_file=0 test_deb_package=0 POSITIONAL=() while [[ $# -gt 0 ]] do key="$1" case $key in --dry-run) dry_run=1 printf "Performing a dry run.\n" shift # past argument ;; --must-exist) no_create_new_file=1 printf "Only refreshing existing files.\n" shift # past argument ;; --test-deb-package) test_deb_package=1 printf "Test if Debian package ships the file.\n" shift # past argument ;; --default) DEFAULT=YES shift # past argument ;; *) # unknown option POSITIONAL+=("$1") # save it in an array for later printf "One positional argument: $1.\n" shift # past argument ;; esac done # Restore the position arguments and check that there are 2 ! set -- "${POSITIONAL[@]}" # restore positional parameters #printf "Argument count: $#\n" if test $# -gt 2; then printf "\nError in the command line. Check it for typos, please.\n" usage fi if test $# -lt 2; then printf "\nThere must be at least two compulsory arguments. Please check your command line.\n" usage fi if test ! -d $1; then printf "\nSource directory does not exist\n" exit 1 fi if test ! -d $2; then printf "\nDestination directory does not exist\n" exit 1 fi src_tree_dir=$1 dest_tree_dir=$2 for file in $(find ${src_tree_dir} -type f) do printf "Working on ${file}... \n" dir_name=$(dirname ${file}) base_name=$(basename ${file}) # If we only refresh existing files if test ${no_create_new_file} -eq 1; then # We need to test if the file exists already if test -f ${dest_tree_dir}/${file}; then # If the file exists, then perform the refresh by copying the file if test ${dry_run} -ne 1; then # Only if this is not a dry run. printf "mkdir -p ${dest_tree_dir}/${dir_name}\n" mkdir -p ${dest_tree_dir}/${dir_name} printf "cp ${file} ${dest_tree_dir}/${file}\n" cp ${file} ${dest_tree_dir}/${file} else printf "Dry run, not copying ${file} to ${dest_tree_dir}/${file}.\n" fi else # The file does not exist: do nothing. printf "${file} does not exist in destination tree, skipping.\n" fi else # We are NOT only refreshing files, copy anything we find if test ${dry_run} -ne 1; then # Only if this is not a dry run. printf "mkdir -p ${dest_tree_dir}/${dir_name}\n" mkdir -p ${dest_tree_dir}/${dir_name} printf "cp ${file} ${dest_tree_dir}/${file}\n" cp ${file} ${dest_tree_dir}/${file} fi fi if test ${test_deb_package} -eq 1; then result=$(apt-file search ${file}) if test $? -ne 0; then printf "==> not provided by any package.\n\n" else printf "==> provided by the following package(s):\n ${result}\n\n" fi fi done libpwizlite-3.0.5/src/000077500000000000000000000000001444255175000146535ustar00rootroot00000000000000libpwizlite-3.0.5/src/CMakeLists.txt000066400000000000000000000075361444255175000174260ustar00rootroot00000000000000############################################################# # Enable warnings and possibly treat them as errors message(STATUS "${BoldYellow}Setting -Wall.${ColourReset}") add_definitions(-Wall) if(WARN_AS_ERROR) message(STATUS "${BoldYellow}Warnings treated as errors.${ColourReset}") add_definitions(-Werror) endif() find_package(ZLIB REQUIRED) # BOOST if(NOT Boost_FOUND) message(STATUS "Boost not yet found. Searching for it.") find_package(Boost COMPONENTS iostreams thread filesystem chrono REQUIRED) endif() message(STATUS "Boost_LIBRARIES found ${Boost_LIB_VERSION}") message(STATUS "Boost_INCLUDES: ${Boost_INCLUDE_DIRS}") message(STATUS "Boost_LIB_DIRS: ${Boost_LIBRARY_DIRS}") set(pwizlite_RCCS libpwizliteresources.qrc) # File list # find ./ -type f \( -iname "*.h" -o -iname "*.[ch]pp" -o -iname "*.inl" -o -iname "*.dk1" \) | grep \.cpp$ | sed 's/^\.\///' set(pwizlite_SRCS # # PWIZ pwiz/utility/minimxml/XMLWriter.cpp pwiz/utility/minimxml/SAXParser.cpp pwiz/utility/misc/IterationListener.cpp pwiz/utility/misc/BinaryData.cpp pwiz/utility/misc/Base64.cpp pwiz/utility/misc/random_access_compressed_ifstream.cpp pwiz/utility/misc/Filesystem.cpp pwiz/utility/misc/IntegerSet.cpp pwiz/utility/misc/SHA1.cpp pwiz/utility/misc/SHA1Calculator.cpp pwiz/utility/misc/String.cpp pwiz/data/msdata/Serializer_MGF.cpp pwiz/data/msdata/MSNumpress.cpp pwiz/data/msdata/Serializer_MSn.cpp pwiz/data/msdata/SpectrumInfo.cpp pwiz/data/msdata/IO.cpp pwiz/data/msdata/SpectrumList_BTDX.cpp pwiz/data/msdata/ChromatogramList_mzML.cpp pwiz/data/msdata/SpectrumList_mzML.cpp pwiz/data/msdata/Version.cpp pwiz/data/msdata/MSDataFile.cpp pwiz/data/msdata/SpectrumListBase.cpp pwiz/data/msdata/BinaryDataEncoder.cpp pwiz/data/msdata/SpectrumList_mzXML.cpp pwiz/data/msdata/MSData.cpp pwiz/data/msdata/LegacyAdapter.cpp pwiz/data/msdata/Reader.cpp pwiz/data/msdata/SpectrumList_MSn.cpp pwiz/data/msdata/Serializer_mzML.cpp pwiz/data/msdata/Index_mzML.cpp pwiz/data/msdata/SpectrumWorkerThreads.cpp pwiz/data/msdata/References.cpp pwiz/data/msdata/SpectrumList_MGF.cpp pwiz/data/msdata/DefaultReaderList.cpp pwiz/data/msdata/Serializer_mzXML.cpp pwiz/data/common/ParamTypes.cpp pwiz/data/common/cv.cpp pwiz/data/common/CVTranslator.cpp pwiz/data/common/diff_std.cpp # # BOOST # Only header files, as of 20200603 ) add_definitions(-DWITHOUT_MZ5) # Build the static lib add_library(pwizlite-static STATIC ${pwizlite_SRCS}) target_include_directories(pwizlite-static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/boost ) set_target_properties(pwizlite-static PROPERTIES OUTPUT_NAME pwizlite CLEAN_DIRECT_OUTPUT 1 ) target_link_libraries(pwizlite-static Boost::iostreams Boost::filesystem Boost::thread Boost::chrono ZLIB::ZLIB ${PLATFORM_SPECIFIC_LINK_LIBRARIES} ) add_library(pwizlite-shared SHARED ${pwizlite_SRCS} ${pwizlite_RCC_SRCS}) set_target_properties(pwizlite-shared PROPERTIES OUTPUT_NAME pwizlite CLEAN_DIRECT_OUTPUT 1 VERSION ${PWIZLITE_VERSION} SOVERSION ${PWIZLITE_VERSION_MAJOR} ) target_include_directories(pwizlite-shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/boost ) target_link_libraries(pwizlite-shared Boost::iostreams Boost::filesystem Boost::thread Boost::chrono ZLIB::ZLIB ${PLATFORM_SPECIFIC_LINK_LIBRARIES} ) # Install lib install(TARGETS pwizlite-shared pwizlite-static LIBRARY NAMELINK_SKIP ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # This one is for WIN32 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if(MXE) target_compile_definitions(pwizlite-shared PUBLIC MXE) target_compile_definitions(pwizlite-static PUBLIC MXE) endif(MXE) libpwizlite-3.0.5/src/boost/000077500000000000000000000000001444255175000160015ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/enum.hpp000066400000000000000000000012031444255175000174520ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // enum.hpp: top level header for BOOST_ENUM // // Copyright 2005 Frank Laub // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_ENUM_HPP #define BOOST_ENUM_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #endif libpwizlite-3.0.5/src/boost/enum/000077500000000000000000000000001444255175000167455ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/enum/base.hpp000066400000000000000000000057601444255175000204000ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // base.hpp: defines the enum_base type // // Copyright 2005 Frank Laub // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_ENUM_BASE_HPP #define BOOST_ENUM_BASE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include namespace boost { namespace detail { template class enum_base : private boost::totally_ordered { public: typedef enum_base this_type; typedef size_t index_type; typedef ValueType value_type; typedef enum_iterator const_iterator; typedef boost::optional optional; public: enum_base() {} enum_base(index_type index) : m_index(index) {} static const_iterator begin() { return const_iterator(0); } static const_iterator end() { return const_iterator(Derived::size); } static optional get_by_value(value_type value) { for(index_type i = 0; i < Derived::size; ++i) { typedef boost::optional optional_value; optional_value cur = Derived::values(enum_cast(i)); if(value == *cur) return Derived(enum_cast(i)); } return optional(); } static optional get_by_index(index_type index) { if(index >= Derived::size) return optional(); return optional(enum_cast(index)); } const char* str() const { const char* ret = Derived::names(enum_cast(m_index)); BOOST_ASSERT(ret); return ret; } value_type value() const { typedef boost::optional optional_value; optional_value ret = Derived::values(enum_cast(this->m_index)); BOOST_ASSERT(ret); return *ret; } index_type index() const { return m_index; } bool operator == (const this_type& rhs) const { return m_index == rhs.m_index; } bool operator < (const this_type& rhs) const { value_type lhs_value = value(); value_type rhs_value = rhs.value(); if(lhs_value == rhs_value) return m_index < rhs.m_index; return lhs_value < rhs_value; } protected: friend class enum_iterator; index_type m_index; }; template std::ostream& operator << (std::ostream& os, const enum_base& rhs) { return (os << rhs.str()); } template std::istream& operator >> (std::istream& is, enum_base& rhs) { std::string str; is >> str; BOOST_DEDUCED_TYPENAME D::optional ret = D::get_by_name(str.c_str()); if(ret) rhs = *ret; else is.setstate(std::ios::badbit); return is; } } // detail } // boost #endif libpwizlite-3.0.5/src/boost/enum/bitfield.hpp000066400000000000000000000165561444255175000212550ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // bitfield.hpp: defines the bitfield_base type // // Copyright 2005 Frank Laub // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_ENUM_BITFIELD_HPP #define BOOST_ENUM_BITFIELD_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #include #include namespace boost { namespace detail { // Befriending Templates requires the need for all this mess. // So that we can allow the templated ostream insertion operator to access private members. template class bitfield_base; template std::ostream& operator << (std::ostream& os, const bitfield_base& value); class bitfield_access { # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) // Tasteless as this may seem, making all members public allows member templates // to work in the absence of member template friends. public: # else template friend class bitfield_base; template friend std::ostream& operator << (std::ostream& os, const bitfield_base& value); #endif template static const char* names(BOOST_DEDUCED_TYPENAME T::domain index) { return T::names(index); } template static BOOST_DEDUCED_TYPENAME T::optional_value values( BOOST_DEDUCED_TYPENAME T::domain index) { return T::values(index); } template static T get_by_value(BOOST_DEDUCED_TYPENAME T::value_type value) { T ret(value, 0); return ret; } private: // objects of this class are useless bitfield_access(); //undefined }; template class bitfield_base : private boost::bitwise , private boost::totally_ordered { public: typedef bitfield_base this_type; typedef size_t index_type; typedef size_t value_type; typedef enum_iterator const_iterator; typedef boost::optional optional; protected: bitfield_base(value_type value, int) : m_value(value) {} public: bitfield_base() : m_value(0) {} bitfield_base(index_type index) { optional_value value = bitfield_access::values(enum_cast(index)); if(value) m_value = *value; } static const_iterator begin() { return const_iterator(0); } static const_iterator end() { return const_iterator(T::size); } static optional get_by_value(value_type value) { // make sure that 'value' is valid optional_value not_mask = bitfield_access::values(T::not_mask); BOOST_ASSERT(not_mask); if(value & *not_mask) return optional(); return bitfield_access::get_by_value(value); } static optional get_by_index(index_type index) { if(index >= T::size) return optional(); return optional(enum_cast(index)); } std::string str() const { std::stringstream ss; ss << *this; return ss.str(); } value_type value() const { return m_value; } bool operator == (const this_type& rhs) const { return m_value == rhs.m_value; } bool operator < (const this_type& rhs) const { return m_value < rhs.m_value; } T& operator |= (const this_type& rhs) { m_value |= rhs.m_value; return static_cast(*this); } T& operator &= (const this_type& rhs) { m_value &= rhs.m_value; return static_cast(*this); } T& operator ^= (const this_type& rhs) { m_value ^= rhs.m_value; return static_cast(*this); } bool operator[] (index_type pos) const { optional element = get_by_index(pos); if(!element) return false; return operator[](*element); } bool operator[] (const this_type& rhs) const { return (m_value & rhs.m_value) != 0; } bool set(index_type pos, bool bit = true) { if(!bit) return reset(pos); optional element = get_by_index(pos); if(!element) return false; return set(*element, bit); } bool set(const this_type& rhs, bool bit = true) { if(!bit) return reset(rhs); value_type new_value = m_value | rhs.m_value; if(!get_by_value(new_value)) return false; m_value = new_value; return true; } bool reset(index_type pos) { optional element = get_by_index(pos); if(!element) return false; return reset(*element); } bool reset(const this_type& rhs) { value_type new_value = m_value & ~(rhs.m_value); if(!get_by_value(new_value)) return false; m_value = new_value; return true; } // TODO: implement me size_t count() const { return 0; } // TODO: implement me bool any() const { return false; } // TODO: implement me bool none() const { return false; } private: typedef boost::optional optional_value; friend class bitfield_access; value_type m_value; }; template std::ostream& operator << (std::ostream& os, const bitfield_base& rhs) { typedef BOOST_DEDUCED_TYPENAME T::value_type value_type; typedef BOOST_DEDUCED_TYPENAME T::index_type index_type; typedef boost::optional optional_value; value_type remain = rhs.value(); optional_value all_mask = bitfield_access::values(T::all_mask); if(remain == *all_mask) { os << "all_mask"; return os; } optional_value not_mask = bitfield_access::values(T::not_mask); if(remain == *not_mask) { os << "not_mask"; return os; } // FIXME: there might be a reason the user wants to define the value 0 // or perhaps 0 is never legitimate for their usage bool isZero = (remain == 0); bool isFirst = true; for(index_type i = 0; i < T::size; ++i) { optional_value mask = bitfield_access::values(enum_cast(i)); if(*mask == 0 && isZero) { const char* name = bitfield_access::names(enum_cast(i)); BOOST_ASSERT(name); os << name; return os; } else if(remain & *mask) { if(isFirst) isFirst = false; else os << '|'; const char* name = bitfield_access::names(enum_cast(i)); BOOST_ASSERT(name); os << name; remain &= ~(*mask); if(remain == 0) return os; } } if(remain) { if(!isFirst) os << '|'; os.fill('0'); os.width(8); os << std::hex << remain; } else if(isZero) { os << ""; } return os; } template std::istream& operator >> (std::istream& is, bitfield_base& rhs) { std::string str; is >> str; std::vector tokens; boost::algorithm::split(tokens, str, boost::is_any_of("|,")); BOOST_FOREACH(const std::string& token, tokens) { BOOST_DEDUCED_TYPENAME T::optional ret = T::get_by_name(token.c_str()); if(ret) rhs.set(*ret); else { is.setstate(std::ios::badbit); break; } } return is; } } // detail } // boost #endif libpwizlite-3.0.5/src/boost/enum/iterator.hpp000066400000000000000000000037031444255175000213120ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // iterator.hpp: defines the enum_iterator type // // Copyright 2005 Frank Laub // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_ENUM_ITERATOR_HPP #define BOOST_ENUM_ITERATOR_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include namespace boost { namespace detail { template BOOST_DEDUCED_TYPENAME T::domain enum_cast( BOOST_DEDUCED_TYPENAME T::index_type index) { return static_cast(index); } template class enum_iterator : public boost::iterator_facade < enum_iterator , const T , boost::random_access_traversal_tag> { typedef boost::iterator_facade < enum_iterator , const T , boost::random_access_traversal_tag> facade; typedef enum_iterator this_type; public: enum_iterator(size_t index) : m_value(enum_cast(index)) , m_index(index) {} private: friend class boost::iterator_core_access; const T& dereference() const { return m_value; } void increment() { ++m_index; m_value = enum_cast(m_index); } void decrement() { --m_index; m_value = enum_cast(m_index); } bool equal(const this_type& rhs) const { return m_index == rhs.m_index; } void advance(BOOST_DEDUCED_TYPENAME facade::difference_type n) { m_index += n; m_value = enum_cast(m_index); } BOOST_DEDUCED_TYPENAME facade::difference_type distance_to( const this_type& rhs) const { return rhs.m_index - m_index; } private: T m_value; size_t m_index; }; } // detail } // boost #endif libpwizlite-3.0.5/src/boost/enum/macros.hpp000066400000000000000000000165551444255175000207560ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // enum_macros.hpp: macros to generate an enum model // // Copyright 2005 Frank Laub // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_ENUM_MACROS_HPP #define BOOST_ENUM_MACROS_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #define BOOST_ENUM_IS_COLUMN_2(i, k) \ BOOST_PP_EQUAL(BOOST_PP_MOD(i, 2), k) #define BOOST_ENUM_GET_COLUMN_2(r, data, i, elem) \ BOOST_PP_IF(BOOST_ENUM_IS_COLUMN_2(i, data), BOOST_PP_IDENTITY((elem)), BOOST_PP_EMPTY)() #define BOOST_ENUM_VISITOR1(_seq, _macro, _col) \ BOOST_PP_SEQ_FOR_EACH_I(_macro, _, _seq) #define BOOST_ENUM_VISITOR2(_seq, _macro, _col) \ BOOST_PP_SEQ_FOR_EACH_I( \ _macro, \ _, \ BOOST_PP_SEQ_FOR_EACH_I(BOOST_ENUM_GET_COLUMN_2, _col, _seq) \ ) #define BOOST_ENUM_DOMAIN_ITEM(r, data, i, elem) \ BOOST_PP_COMMA_IF(i) elem #define BOOST_ENUM_domain(_seq, _col, _colsize) \ enum domain \ { \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_DOMAIN_ITEM, _col) \ }; \ BOOST_STATIC_CONSTANT(index_type, size = BOOST_ENUM_size(_seq, _colsize)); #define BOOST_ENUM_size(_seq, _colsize) \ BOOST_PP_DIV(BOOST_PP_SEQ_SIZE(_seq), _colsize) #define BOOST_ENUM_PARSE_ITEM(r, data, i, elem) \ if(strcmp(str, BOOST_PP_STRINGIZE(elem)) == 0) return optional(elem); #define BOOST_ENUM_get_by_name(_name, _seq, _col, _colsize) \ static optional get_by_name(const char* str) \ { \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_PARSE_ITEM, _col) \ return optional(); \ } #define BOOST_ENUM_CASE_STRING(r, data, i, elem) \ case elem: return BOOST_PP_STRINGIZE(elem); #define BOOST_ENUM_names(_seq, _col, _colsize) \ static const char* names(domain index) \ { \ BOOST_ASSERT(static_cast(index) < size); \ switch(index) \ { \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_CASE_STRING, _col) \ default: return NULL; \ } \ } #define BOOST_ENUM_CASE_PART(elem) \ case (elem): #define BOOST_ENUM_VALUE_PART(elem) \ return optional_value(elem); #define BOOST_ENUM_VALUE_LINE(r, data, i, elem) \ BOOST_PP_IF(BOOST_ENUM_IS_COLUMN_2(i, 0), \ BOOST_ENUM_CASE_PART(elem), \ BOOST_ENUM_VALUE_PART(elem) \ ) #define BOOST_ENUM_values_identity() \ typedef boost::optional optional_value; \ static optional_value values(domain index) \ { \ if(static_cast(index) < size) return optional_value(index); \ return optional_value(); \ } #define BOOST_ENUM_values(_seq, _name_col, _value_col, _colsize) \ typedef boost::optional optional_value; \ static optional_value values(domain index) \ { \ switch(index) \ { \ BOOST_PP_SEQ_FOR_EACH_I(BOOST_ENUM_VALUE_LINE, _, _seq) \ default: return optional_value(); \ } \ } #define BOOST_BITFIELD_names(_seq, _col, _colsize) \ static const char* names(domain index) \ { \ BOOST_ASSERT(static_cast(index) < size); \ switch(index) \ { \ case all_mask: return "all_mask"; \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_CASE_STRING, _col) \ default: return NULL; \ } \ } #define BOOST_BITFIELD_OR_ITEM(r, data, i, elem) \ | (elem) #define BOOST_BITFIELD_domain(_seq, _col, _colsize) \ enum domain \ { \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_DOMAIN_ITEM, _col), \ all_mask, \ not_mask \ }; \ BOOST_STATIC_CONSTANT(index_type, size = BOOST_ENUM_size(_seq, _colsize)); #define BOOST_BITFIELD_all_mask(_seq, _col, _colsize) \ 0 BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_BITFIELD_OR_ITEM, _col) #define BOOST_BITFIELD_get_by_name(_name, _seq, _col, _colsize) \ static optional get_by_name(const char* str) \ { \ if(strcmp(str, "all_mask") == 0) return optional(all_mask); \ if(strcmp(str, "not_mask") == 0) return optional(not_mask); \ BOOST_PP_CAT(BOOST_ENUM_VISITOR, _colsize) \ (_seq, BOOST_ENUM_PARSE_ITEM, _col) \ return optional(); \ } #define BOOST_BITFIELD_values(_seq, _name_col, _value_col, _colsize) \ typedef boost::optional optional_value; \ static optional_value values(domain index) \ { \ switch(index) \ { \ BOOST_PP_SEQ_FOR_EACH_I(BOOST_ENUM_VALUE_LINE, _, _seq) \ case all_mask: return optional_value(BOOST_BITFIELD_all_mask(_seq, _value_col, _colsize)); \ case not_mask: return optional_value(~(BOOST_BITFIELD_all_mask(_seq, _value_col, _colsize))); \ default: return optional_value(); \ } \ } #define BOOST_ENUM_EX(_name, _interface, _seq) \ class _interface _name : public boost::detail::enum_base<_name> \ { \ public: \ BOOST_ENUM_domain(_seq, 0, 1) \ _name() {} \ _name(domain index) : boost::detail::enum_base<_name>(index) {} \ BOOST_ENUM_get_by_name(_name, _seq, 0, 1) \ private: \ friend class boost::detail::enum_base<_name>; \ BOOST_ENUM_names(_seq, 0, 1) \ BOOST_ENUM_values_identity() \ }; #define BOOST_ENUM(_name, _seq) BOOST_ENUM_EX(_name, , _seq) #define BOOST_ENUM_VALUES_EX(_name, _interface, _type, _seq) \ class _interface _name : public boost::detail::enum_base<_name, _type> \ { \ public: \ BOOST_ENUM_domain(_seq, 0, 2) \ _name() {} \ _name(domain index) : boost::detail::enum_base<_name, _type>(index) {} \ BOOST_ENUM_get_by_name(_name, _seq, 0, 2) \ private: \ friend class boost::detail::enum_base<_name, _type>; \ BOOST_ENUM_names(_seq, 0, 2) \ BOOST_ENUM_values(_seq, 0, 1, 2) \ }; #define BOOST_ENUM_VALUES(_name, _type, _seq) BOOST_ENUM_VALUES_EX(_name, , _type, _seq) #define BOOST_BITFIELD_EX(_name, _interface, _seq) \ class _interface _name : public boost::detail::bitfield_base<_name> \ { \ public: \ BOOST_BITFIELD_domain(_seq, 0, 2) \ _name() {} \ _name(domain index) : boost::detail::bitfield_base<_name>(index) {} \ BOOST_ENUM_get_by_name(_name, _seq, 0, 2) \ private: \ friend class boost::detail::bitfield_access; \ _name(value_type raw, int) : boost::detail::bitfield_base<_name>(raw, 0) {} \ BOOST_BITFIELD_names(_seq, 0, 2) \ BOOST_BITFIELD_values(_seq, 0, 1, 2) \ }; #define BOOST_BITFIELD(_name, _seq) BOOST_BITFIELD_EX(_name, , _seq) #define BOOST_ENUM_DOMAIN_OPERATORS(_name) \ inline bool operator== (const _name::domain& lhs, const _name& rhs) {return rhs == lhs;} \ inline bool operator!= (const _name::domain& lhs, const _name& rhs) {return rhs != lhs;} \ inline bool operator< (const _name::domain& lhs, const _name& rhs) {return rhs < lhs;} \ inline bool operator> (const _name::domain& lhs, const _name& rhs) {return rhs > lhs;} \ inline bool operator<= (const _name::domain& lhs, const _name& rhs) {return rhs <= lhs;} \ inline bool operator>= (const _name::domain& lhs, const _name& rhs) {return rhs >= lhs;} #define BOOST_BITFIELD_DOMAIN_OPERATORS(_name) \ BOOST_ENUM_DOMAIN_OPERATORS(_name) \ inline _name operator| (const _name::domain& lhs, const _name::domain& rhs) {return _name(lhs) | rhs;} \ inline _name operator& (const _name::domain& lhs, const _name::domain& rhs) {return _name(lhs) & rhs;} #endif libpwizlite-3.0.5/src/boost/foreach_field.hpp000066400000000000000000000036031444255175000212660ustar00rootroot00000000000000// $Id$ // // Copyright 2009 Chris Purcell. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Taken from http://lists.boost.org/Archives/boost/2009/09/156509.php // This file should be deleted if/when this makes it into boost. #ifndef BOOST_FOREACH_FIELD #include #include #include #include // for boost::fusion::ignore #define BOOST_FOREACH_ASSIGN_VAR(R, ROW, I, VAR) \ for (VAR = boost::fusion::at_c(ROW); \ !BOOST_FOREACH_ID(_foreach_leave_outerloop); \ BOOST_FOREACH_ID(_foreach_leave_outerloop) = true) #define BOOST_FOREACH_FIELD(VARS, COL) \ BOOST_FOREACH_PREAMBLE() \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} \ else if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_BEGIN(COL)) {} \ else if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_END(COL)) {} \ else for (bool BOOST_FOREACH_ID(_foreach_continue) = true, BOOST_FOREACH_ID(_foreach_leave_outerloop) = true; \ BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_DONE(COL); \ BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_NEXT(COL) : (void)0) \ if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} \ else if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_leave_outerloop))) {} \ else BOOST_PP_SEQ_FOR_EACH_I(BOOST_FOREACH_ASSIGN_VAR, BOOST_FOREACH_DEREF(COL), VARS) \ for (;!BOOST_FOREACH_ID(_foreach_continue);BOOST_FOREACH_ID(_foreach_continue) = true) #endif // BOOST_FOREACH_FIELD libpwizlite-3.0.5/src/boost/iostreams/000077500000000000000000000000001444255175000200075ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/iostreams/arbitrary_positional_facade.hpp000066400000000000000000000256741444255175000262610ustar00rootroot00000000000000// arbitrary_positional_facade.hpp: a base class of repositional stream facade // Copyright Takeshi Mouri 2006, 2007. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://hamigaki.sourceforge.jp/libs/iostreams for library home page. #ifndef HAMIGAKI_IOSTREAMS_ARBITRARY_POSITIONAL_FACADE_HPP #define HAMIGAKI_IOSTREAMS_ARBITRARY_POSITIONAL_FACADE_HPP #include #include #include #include #include namespace boost { namespace iostreams { template class arbitrary_positional_facade; class core_access { #if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) public: #else template friend class arbitrary_positional_facade; friend struct device_operations; template friend struct filter_operations; #endif template static std::streamsize read_blocks( RepositionalSource& src, CharT* s, std::streamsize n) { return src.read_blocks(s, n); } template static std::streamsize read_blocks( RepositionalInputFilter& filter, Source& src, typename boost::iostreams::char_type_of::type* s, std::streamsize n) { return filter.read_blocks(src, s, n); } template static std::streamsize write_blocks( RepositionalSink& sink, const CharT* s, std::streamsize n) { return sink.write_blocks(s, n); } template static std::streamsize write_blocks( RepositionalOutputFilter& filter, Sink& sink, const typename boost::iostreams::char_type_of::type* s, std::streamsize n) { return filter.write_blocks(sink, s, n); } template static void close_with_flush( RepositionalSink& sink, const CharT* s, std::streamsize n) { return sink.close_with_flush(s, n); } template static void close_with_flush( RepositionalOutputFilter& filter, Sink& sink, const typename boost::iostreams::char_type_of::type* s, std::streamsize n) { return filter.close_with_flush(sink, s, n); } template static std::streampos seek_blocks( RepositionalDevice& dev, boost::iostreams::stream_offset off, BOOST_IOS::seekdir way) { return dev.seek_blocks(off, way); } struct device_operations { template std::streamsize read_blocks( RepositionalDevice& t, CharT* s, std::streamsize n) const { return core_access::read_blocks(t, s, n); } template std::streamsize write_blocks( RepositionalDevice& t, const CharT* s, std::streamsize n) const { return core_access::write_blocks(t, s, n); } }; template struct filter_operations { typedef typename boost::iostreams:: char_type_of::type char_type; Device* dev_ptr_; explicit filter_operations(Device& dev) : dev_ptr_(&dev) {} template std::streamsize read_blocks( RepositionalInputFilter& t, char_type* s, std::streamsize n) const { return core_access::read_blocks(t, *dev_ptr_, s, n); } template std::streamsize write_blocks( RepositionalOutputFilter& t, const char_type* s, std::streamsize n) const { return core_access::write_blocks(t, *dev_ptr_, s, n); } }; }; template class arbitrary_positional_facade { private: typedef CharT char_type; Derived& derived() { return *static_cast(this); } protected: typedef arbitrary_positional_facade< Derived,CharT,MaxBlockSize> arbitrary_positional_facade_; void block_size(std::streamsize n) { block_size_ = n; } public: arbitrary_positional_facade() : block_size_(MaxBlockSize), count_(0) { } explicit arbitrary_positional_facade(std::streamsize block_size) : block_size_(block_size), count_(0) { BOOST_ASSERT(block_size_ <= MaxBlockSize); } std::streamsize read(char_type* s, std::streamsize n) { return read_impl(core_access::device_operations(), s, n); } template std::streamsize read(Source& src, char_type* s, std::streamsize n) { return read_impl(core_access::filter_operations(src), s, n); } std::streamsize write(const char_type* s, std::streamsize n) { return write_impl(core_access::device_operations(), s, n); } template std::streamsize write(Sink& sink, const char_type* s, std::streamsize n) { return write_impl(core_access::filter_operations(sink), s, n); } void close() { BOOST_ASSERT(count_ < block_size_); core_access::close_with_flush(derived(), buffer_, count_); } template void close(Sink& sink) { BOOST_ASSERT(count_ < block_size_); core_access::close_with_flush(derived(), sink, buffer_, count_); } std::streampos seek( boost::iostreams::stream_offset off, BOOST_IOS::seekdir way) { if (way == BOOST_IOS::beg) { core_access::seek_blocks(derived(), off/block_size_, way); std::streamsize skip = static_cast(off%block_size_); if (skip == 0) count_ = 0; else { std::streamsize res = core_access::read_blocks(derived(), buffer_, 1); if (res != 1) throw BOOST_IOSTREAMS_FAILURE("bad seek"); count_ = block_size_ - skip; } return boost::iostreams::offset_to_position(off); } else if (way == BOOST_IOS::cur) { std::streampos pos = core_access::seek_blocks( derived(), (off-count_)/block_size_, way); std::streamsize skip = static_cast((off-count_)%block_size_); if (skip == 0) { count_ = 0; return boost::iostreams::offset_to_position( boost::iostreams::position_to_offset(pos) * block_size_); } else { std::streamsize res = core_access::read_blocks(derived(), buffer_, 1); if (res != 1) throw BOOST_IOSTREAMS_FAILURE("bad seek"); count_ = block_size_ - skip; return boost::iostreams::offset_to_position( boost::iostreams::position_to_offset(pos) * block_size_ + block_size_-count_); } } else { std::streampos pos = core_access::seek_blocks( derived(), (off-block_size_+1)/block_size_, way); count_ = static_cast((-off)%block_size_); if (count_ == 0) { return boost::iostreams::offset_to_position( boost::iostreams::position_to_offset(pos) * block_size_); } else { std::streamsize res = core_access::read_blocks(derived(), buffer_, 1); if (res != 1) throw BOOST_IOSTREAMS_FAILURE("bad seek"); return boost::iostreams::offset_to_position( boost::iostreams::position_to_offset(pos) * block_size_ + block_size_-count_); } } } private: char_type buffer_[MaxBlockSize]; std::streamsize block_size_; std::streamsize count_; template std::streamsize read_impl(const Op& op, char_type* s, std::streamsize n) { std::streamsize total = 0; if (count_ != 0) { std::streamsize amt = (std::min)(n, count_); char_type* start = buffer_ + (block_size_ - count_); s = std::copy(start, start+amt, s); n -= amt; count_ -= amt; total += amt; } if (n >= block_size_) { BOOST_ASSERT(count_ == 0); std::streamsize request = n/block_size_; std::streamsize res = op.read_blocks(derived(), s, request); if (res != -1) { s += res; n -= res; total += res; } if (res < request*block_size_) return total != 0 ? total : -1; } if (n != 0) { BOOST_ASSERT(n < block_size_); BOOST_ASSERT(count_ == 0); std::streamsize res = op.read_blocks(derived(), buffer_, 1); if (res > 0) { s = std::copy(buffer_, buffer_+n, s); count_ = block_size_ - n; total += n; } } return total != 0 ? total : -1; } template std::streamsize write_impl( const Op& op, const char_type* s, std::streamsize n) { std::streamsize total = 0; if (count_ != 0) { std::streamsize amt = (std::min)(n, block_size_-count_); std::copy(s, s+amt, buffer_+count_); s += amt; n -= amt; count_ += amt; total += amt; if (count_ == block_size_) { op.write_blocks(derived(), buffer_, 1); count_ = 0; } } if (n >= block_size_) { BOOST_ASSERT(count_ == 0); std::streamsize request = n/block_size_; op.write_blocks(derived(), s, request); std::streamsize amt = request*block_size_; s += amt; n -= amt; total += amt; } if (n != 0) { BOOST_ASSERT(n < block_size_); BOOST_ASSERT(count_ == 0); std::copy(s, s+n, buffer_); count_ = n; total += n; } return total != 0 ? total : -1; } }; } } // End namespaces iostreams, boost. #endif // HAMIGAKI_IOSTREAMS_ARBITRARY_POSITIONAL_FACADE_HPP libpwizlite-3.0.5/src/boost/iostreams/filter/000077500000000000000000000000001444255175000212745ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/iostreams/filter/base64.hpp000066400000000000000000000210431444255175000230710ustar00rootroot00000000000000// base64.hpp: Base64 filter // Copyright Takeshi Mouri 2006, 2007. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://hamigaki.sourceforge.jp/libs/iostreams for library home page. #ifndef HAMIGAKI_IOSTREAMS_FILTER_BASE64_HPP #define HAMIGAKI_IOSTREAMS_FILTER_BASE64_HPP #include #include #include #include #include #include namespace boost { namespace iostreams { struct base64_traits { static const char padding = '='; static char encode(unsigned char n) { const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; return table[n]; } static unsigned char decode(char c) { // TODO: should support non-ASCII const unsigned char table[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0xFF, 0x3F, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned char uc = static_cast(c); if (static_cast(uc) >= sizeof(table)) throw BOOST_IOSTREAMS_FAILURE("bad Base64 sequence"); unsigned char val = table[uc]; if (val == 0xFF) throw BOOST_IOSTREAMS_FAILURE("bad Base64 sequence"); return val; } }; struct urlsafe_base64_traits { static const char padding = '='; static char encode(unsigned char n) { const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789-_"; return table[n]; } static unsigned char decode(char c) { // TODO: should support non-ASCII const unsigned char table[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned char uc = static_cast(c); if (static_cast(uc) >= sizeof(table)) throw BOOST_IOSTREAMS_FAILURE("bad URL-safe Base64 sequence"); unsigned char val = table[uc]; if (val == 0xFF) throw BOOST_IOSTREAMS_FAILURE("bad URL-safe Base64 sequence"); return val; } }; template class basic_base64_encoder : public arbitrary_positional_facade, char, 3> { friend class core_access; typedef boost::uint_t<24>::fast uint24_t; public: typedef char char_type; struct category : public boost::iostreams::output , public boost::iostreams::filter_tag , public boost::iostreams::multichar_tag , public boost::iostreams::closable_tag {}; private: static uint24_t char_to_uint24(char c) { return static_cast(static_cast(c) & 0xFF); } static void encode(char* dst, const char* src) { uint24_t tmp = (char_to_uint24(src[0]) << 16) | (char_to_uint24(src[1]) << 8) | (char_to_uint24(src[2]) ) ; dst[0] = Traits::encode((tmp >> 18) & 0x3F); dst[1] = Traits::encode((tmp >> 12) & 0x3F); dst[2] = Traits::encode((tmp >> 6) & 0x3F); dst[3] = Traits::encode((tmp ) & 0x3F); } template std::streamsize write_blocks(Sink& sink, const char* s, std::streamsize n) { for (int i = 0; i < n; ++i) { char buf[4]; encode(buf, s); boost::iostreams::write(sink, buf, sizeof(buf)); s += 3; } return n*3; } template void close_with_flush(Sink& sink, const char* s, std::streamsize n) { if (n != 0) { char src[3] = { 0, 0, 0 }; std::copy(s, s+n, &src[0]); char buf[4]; encode(buf, src); if (n == 1) buf[2] = Traits::padding; buf[3] = Traits::padding; boost::iostreams::write(sink, buf, sizeof(buf)); } } }; template class basic_base64_decoder : public arbitrary_positional_facade, char, 3> { friend class core_access; typedef boost::uint_t<24>::fast uint24_t; typedef boost::uint_t<6>::least uint6_t; public: typedef char char_type; struct category : public boost::iostreams::input , public boost::iostreams::filter_tag , public boost::iostreams::multichar_tag , public boost::iostreams::closable_tag {}; private: static char uint24_to_char(uint24_t n) { return static_cast(static_cast(n & 0xFF)); } static uint24_t decode(char c) { return Traits::decode(c); } static std::streamsize decode(char* dst, const char* src) { char buf[4]; std::copy(src, src+4, buf); if (src[3] == Traits::padding) { buf[3] = Traits::encode(0); if (src[2] == Traits::padding) buf[2] = Traits::encode(0); } uint24_t tmp = (decode(buf[0]) << 18) | (decode(buf[1]) << 12) | (decode(buf[2]) << 6) | (decode(buf[3]) ) ; std::streamsize n = 0; dst[n++] = uint24_to_char(tmp >> 16); if (src[2] != Traits::padding) dst[n++] = uint24_to_char(tmp >> 8); if (src[3] != Traits::padding) dst[n++] = uint24_to_char(tmp ); return n; } template std::streamsize read_blocks(Source& src, char* s, std::streamsize n) { std::streamsize total = 0; for (int i = 0; i < n; ++i) { char buf[4]; std::streamsize res = boost::iostreams::read(src, buf, sizeof(buf)); if (res == -1) break; std::streamsize amt = decode(s, buf); s += amt; total += amt; } return (total != 0) ? total : -1; } template void close_with_flush(Source&, const char*, std::streamsize) { } }; typedef basic_base64_encoder base64_encoder; typedef basic_base64_decoder base64_decoder; typedef basic_base64_encoder urlsafe_base64_encoder; typedef basic_base64_decoder urlsafe_base64_decoder; } } // End namespaces iostreams, boost. #endif // HAMIGAKI_IOSTREAMS_FILTER_BASE64_HPP libpwizlite-3.0.5/src/boost/nowide/000077500000000000000000000000001444255175000172665ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/nowide/args.hpp000066400000000000000000000111571444255175000207400ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_ARGS_HPP_INCLUDED #define BOOST_NOWIDE_ARGS_HPP_INCLUDED #include #include #include #ifdef BOOST_WINDOWS #include #endif namespace boost { namespace nowide { #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) class args { public: args(int &,char **&) {} args(int &,char **&,char **&){} ~args() {} }; #else /// /// \brief args is a class that fixes standard main() function arguments and changes them to UTF-8 under /// Microsoft Windows. /// /// The class uses \c GetCommandLineW(), \c CommandLineToArgvW() and \c GetEnvironmentStringsW() /// in order to obtain the information. It does not relates to actual values of argc,argv and env /// under Windows. /// /// It restores the original values in its destructor /// /// \note the class owns the memory of the newly allocated strings /// class args { public: /// /// Fix command line agruments /// args(int &argc,char **&argv) : old_argc_(argc), old_argv_(argv), old_env_(0), old_argc_ptr_(&argc), old_argv_ptr_(&argv), old_env_ptr_(0) { fix_args(argc,argv); } /// /// Fix command line agruments and environment /// args(int &argc,char **&argv,char **&en) : old_argc_(argc), old_argv_(argv), old_env_(en), old_argc_ptr_(&argc), old_argv_ptr_(&argv), old_env_ptr_(&en) { fix_args(argc,argv); fix_env(en); } /// /// Restore original argc,argv,env values, if changed /// ~args() { if(old_argc_ptr_) *old_argc_ptr_ = old_argc_; if(old_argv_ptr_) *old_argv_ptr_ = old_argv_; if(old_env_ptr_) *old_env_ptr_ = old_env_; } private: void fix_args(int &argc,char **&argv) { int wargc; wchar_t **wargv = CommandLineToArgvW(GetCommandLineW(),&wargc); if(!wargv) { argc = 0; static char *dummy = 0; argv = &dummy; return; } try{ args_.resize(wargc+1,0); arg_values_.resize(wargc); for(int i=0;i args_; std::vector arg_values_; stackstring env_; std::vector envp_; int old_argc_; char **old_argv_; char **old_env_; int *old_argc_ptr_; char ***old_argv_ptr_; char ***old_env_ptr_; }; #endif } // nowide } // namespace boost #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/cenv.hpp000066400000000000000000000070251444255175000207360ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CENV_H_INCLUDED #define BOOST_NOWIDE_CENV_H_INCLUDED #include #include #include #include #include #include #ifdef BOOST_WINDOWS #include #endif namespace boost { namespace nowide { #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) using ::getenv; using ::setenv; using ::unsetenv; using ::putenv; #else /// /// \brief UTF-8 aware getenv. Returns 0 if the variable is not set. /// /// This function is not thread safe or reenterable as defined by the standard library /// inline char *getenv(char const *key) { static stackstring value; wshort_stackstring name; if(!name.convert(key)) return 0; static const size_t buf_size = 64; wchar_t buf[buf_size]; std::vector tmp; wchar_t *ptr = buf; size_t n = GetEnvironmentVariableW(name.c_str(),buf,buf_size); if(n == 0 && GetLastError() == 203) // ERROR_ENVVAR_NOT_FOUND return 0; if(n >= buf_size) { tmp.resize(n+1,L'\0'); n = GetEnvironmentVariableW(name.c_str(),&tmp[0],tmp.size() - 1); // The size may have changed if(n >= tmp.size() - 1) return 0; ptr = &tmp[0]; } if(!value.convert(ptr)) return 0; return value.c_str(); } /// /// \brief UTF-8 aware setenv, \a key - the variable name, \a value is a new UTF-8 value, /// /// if override is not 0, that the old value is always overridded, otherwise, /// if the variable exists it remains unchanged /// inline int setenv(char const *key,char const *value,int override) { wshort_stackstring name; if(!name.convert(key)) return -1; if(!override) { wchar_t unused[2]; if(!(GetEnvironmentVariableW(name.c_str(),unused,2)==0 && GetLastError() == 203)) // ERROR_ENVVAR_NOT_FOUND return 0; } wstackstring wval; if(!wval.convert(value)) return -1; if(SetEnvironmentVariableW(name.c_str(),wval.c_str())) return 0; return -1; } /// /// \brief Remove enviroment variable \a key /// inline int unsetenv(char const *key) { wshort_stackstring name; if(!name.convert(key)) return -1; if(SetEnvironmentVariableW(name.c_str(),0)) return 0; return -1; } /// /// \brief UTF-8 aware putenv implementation, expects string in format KEY=VALUE /// inline int putenv(char *string) { char const *key = string; char const *key_end = string; while(*key_end!='=' && key_end!='\0') key_end++; if(*key_end == '\0') return -1; wshort_stackstring wkey; if(!wkey.convert(key,key_end)) return -1; wstackstring wvalue; if(!wvalue.convert(key_end+1)) return -1; if(SetEnvironmentVariableW(wkey.c_str(),wvalue.c_str())) return 0; return -1; } #endif } // nowide } // namespace boost #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/config.hpp000066400000000000000000000027451444255175000212540ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CONFIG_HPP_INCLUDED #define BOOST_NOWIDE_CONFIG_HPP_INCLUDED #include #ifndef BOOST_SYMBOL_VISIBLE # define BOOST_SYMBOL_VISIBLE #endif #ifdef BOOST_HAS_DECLSPEC # if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_NOWIDE_DYN_LINK) # ifdef BOOST_NOWIDE_SOURCE # define BOOST_NOWIDE_DECL BOOST_SYMBOL_EXPORT # else # define BOOST_NOWIDE_DECL BOOST_SYMBOL_IMPORT # endif // BOOST_NOWIDE_SOURCE # endif // DYN_LINK #endif // BOOST_HAS_DECLSPEC #ifndef BOOST_NOWIDE_DECL # define BOOST_NOWIDE_DECL #endif // // Automatically link to the correct build variant where possible. // #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_NOWIDE_NO_LIB) && !defined(BOOST_NOWIDE_SOURCE) // // Set the name of our library, this will get undef'ed by auto_link.hpp // once it's done with it: // #define BOOST_LIB_NAME boost_nowide // // If we're importing code from a dll, then tell auto_link.hpp about it: // #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_NOWIDE_DYN_LINK) # define BOOST_DYN_LINK #endif // // And include the header that does the work: // #include #endif // auto-linking disabled #endif // boost/nowide/config.hpp // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4libpwizlite-3.0.5/src/boost/nowide/convert.hpp000066400000000000000000000121611444255175000214600ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CONVERT_H_INCLUDED #define BOOST_NOWIDE_CONVERT_H_INCLUDED #include #include namespace boost { namespace nowide { /// /// \brief Template function that converts a buffer of UTF sequence in range [source_begin,source_end) /// to the output \a buffer of size \a buffer_size. /// /// In case of success a NUL terminated string returned (buffer), otherwise 0 is returned. /// /// If there is not enough room in the buffer or the source sequence contains invalid UTF /// 0 is returned, and the contend of the buffer is undefined. /// template CharOut *basic_convert(CharOut *buffer,size_t buffer_size,CharIn const *source_begin,CharIn const *source_end) { CharOut *rv = buffer; if(buffer_size == 0) return 0; buffer_size --; while(source_begin!=source_end) { using namespace boost::locale::utf; code_point c = utf_traits::template decode(source_begin,source_end); if(c==illegal || c==incomplete) { rv = 0; break; } size_t width = utf_traits::width(c); if(buffer_size < width) { rv=0; break; } buffer = utf_traits::template encode(c,buffer); buffer_size -= width; } *buffer++ = 0; return rv; } /// \cond INTERNAL namespace details { // // wcslen defined only in C99... So we will not use it // template Char const *basic_strend(Char const *s) { while(*s) s++; return s; } } /// \endcond /// /// Convert NUL terminated UTF source string to NUL terminated \a output string of size at /// most output_size (including NUL) /// /// In case of surcess output is returned, if the input sequence is illegal, /// or there is not enough room NULL is returned /// inline char *narrow(char *output,size_t output_size,wchar_t const *source) { return basic_convert(output,output_size,source,details::basic_strend(source)); } /// /// Convert UTF text in range [begin,end) to NUL terminated \a output string of size at /// most output_size (including NUL) /// /// In case of surcess output is returned, if the input sequence is illegal, /// or there is not enough room NULL is returned /// inline char *narrow(char *output,size_t output_size,wchar_t const *begin,wchar_t const *end) { return basic_convert(output,output_size,begin,end); } /// /// Convert NUL terminated UTF source string to NUL terminated \a output string of size at /// most output_size (including NUL) /// /// In case of surcess output is returned, if the input sequence is illegal, /// or there is not enough room NULL is returned /// inline wchar_t *widen(wchar_t *output,size_t output_size,char const *source) { return basic_convert(output,output_size,source,details::basic_strend(source)); } /// /// Convert UTF text in range [begin,end) to NUL terminated \a output string of size at /// most output_size (including NUL) /// /// In case of surcess output is returned, if the input sequence is illegal, /// or there is not enough room NULL is returned /// inline wchar_t *widen(wchar_t *output,size_t output_size,char const *begin,char const *end) { return basic_convert(output,output_size,begin,end); } /// /// Convert between Wide - UTF-16/32 string and UTF-8 string. /// /// boost::locale::conv::conversion_error is thrown in a case of a error /// inline std::string narrow(wchar_t const *s) { return boost::locale::conv::utf_to_utf(s); } /// /// Convert between UTF-8 and UTF-16 string, implemented only on Windows platform /// /// boost::locale::conv::conversion_error is thrown in a case of a error /// inline std::wstring widen(char const *s) { return boost::locale::conv::utf_to_utf(s); } /// /// Convert between Wide - UTF-16/32 string and UTF-8 string /// /// boost::locale::conv::conversion_error is thrown in a case of a error /// inline std::string narrow(std::wstring const &s) { return boost::locale::conv::utf_to_utf(s); } /// /// Convert between UTF-8 and UTF-16 string, implemented only on Windows platform /// /// boost::locale::conv::conversion_error is thrown in a case of a error /// inline std::wstring widen(std::string const &s) { return boost::locale::conv::utf_to_utf(s); } } // nowide } // namespace boost #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/cstdio.hpp000066400000000000000000000046621444255175000212740ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CSTDIO_H_INCLUDED #define BOOST_NOWIDE_CSTDIO_H_INCLUDED #include #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4996) #endif namespace boost { namespace nowide { #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) using std::fopen; using std::freopen; using std::remove; using std::rename; #else /// /// \brief Same as freopen but file_name and mode are UTF-8 strings /// /// In invalid UTF-8 given, NULL is returned and errno is set to EINVAL /// inline FILE *freopen(char const *file_name,char const *mode,FILE *stream) { wstackstring wname; wshort_stackstring wmode; if(!wname.convert(file_name) || !wmode.convert(mode)) { errno = EINVAL; return 0; } return _wfreopen(wname.c_str(),wmode.c_str(),stream); } /// /// \brief Same as fopen but file_name and mode are UTF-8 strings /// /// In invalid UTF-8 given, NULL is returned and errno is set to EINVAL /// inline FILE *fopen(char const *file_name,char const *mode) { wstackstring wname; wshort_stackstring wmode; if(!wname.convert(file_name) || !wmode.convert(mode)) { errno = EINVAL; return 0; } return _wfopen(wname.c_str(),wmode.c_str()); } /// /// \brief Same as rename but old_name and new_name are UTF-8 strings /// /// In invalid UTF-8 given, -1 is returned and errno is set to EINVAL /// inline int rename(char const *old_name,char const *new_name) { wstackstring wold,wnew; if(!wold.convert(old_name) || !wnew.convert(new_name)) { errno = EINVAL; return -1; } return _wrename(wold.c_str(),wnew.c_str()); } /// /// \brief Same as rename but name is UTF-8 string /// /// In invalid UTF-8 given, -1 is returned and errno is set to EINVAL /// inline int remove(char const *name) { wstackstring wname; if(!wname.convert(name)) { errno = EINVAL; return -1; } return _wremove(wname.c_str()); } #endif } // nowide } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/cstdlib.hpp000066400000000000000000000006631444255175000214300ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CSTDLIB_HPP_INCLUDED #define BOOST_NOWIDE_CSTDLIB_HPP_INCLUDED #include #include #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/filebuf.hpp000066400000000000000000000271301444255175000214160ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_FILEBUF_HPP #define BOOST_NOWIDE_FILEBUF_HPP #include #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4996 4244) #endif namespace boost { namespace nowide { #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_FSTREAM_TESTS) && !defined(BOOST_NOWIDE_DOXYGEN) using std::basic_filebuf; using std::filebuf; #else // Windows /// /// \brief This forward declaration defined the basic_filebuf type. /// /// it is implemented and specialized for CharType = char, it behaves /// implements std::filebuf over standard C I/O /// template > class basic_filebuf; /// /// \brief This is implementation of std::filebuf /// /// it is implemented and specialized for CharType = char, it behaves /// implements std::filebuf over standard C I/O /// template<> class basic_filebuf : public std::basic_streambuf { public: /// /// Creates new filebuf /// basic_filebuf() : buffer_size_(4), buffer_(0), file_(0), own_(true), mode_(std::ios::in | std::ios::out) { setg(0,0,0); setp(0,0); } virtual ~basic_filebuf() { if(file_) { ::fclose(file_); file_ = 0; } if(own_ && buffer_) delete [] buffer_; } /// /// Same as std::filebuf::open but s is UTF-8 string /// basic_filebuf *open(std::string const &s,std::ios_base::openmode mode) { return open(s.c_str(),mode); } /// /// Same as std::filebuf::open but s is UTF-8 string /// basic_filebuf *open(char const *s,std::ios_base::openmode mode) { if(file_) { sync(); ::fclose(file_); file_ = 0; } wchar_t const *smode = get_mode(mode); if(!smode) return 0; wstackstring name; if(!name.convert(s)) return 0; #ifdef BOOST_NOWIDE_FSTREAM_TESTS FILE *f = ::fopen(s,boost::nowide::convert(smode).c_str()); #else FILE *f = ::_wfopen(name.c_str(),smode); #endif if(!f) return 0; file_ = f; return this; } /// /// Same as std::filebuf::close() /// basic_filebuf *close() { bool res = sync() == 0; if(file_) { if(::fclose(file_)!=0) res = false; file_ = 0; } return res ? this : 0; } /// /// Same as std::filebuf::is_open() /// bool is_open() const { return file_ != 0; } private: void make_buffer() { if(buffer_) return; if(buffer_size_ > 0) { buffer_ = new char [buffer_size_]; own_ = true; } } protected: virtual std::streambuf *setbuf(char *s,std::streamsize n) { if(!buffer_ && n>=0) { buffer_ = s; buffer_size_ = n; own_ = false; } return this; } #ifdef BOOST_NOWIDE_DEBUG_FILEBUF void print_buf(char *b,char *p,char *e) { std::cerr << "-- Is Null: " << (b==0) << std::endl;; if(b==0) return; if(e != 0) std::cerr << "-- Total: " << e - b <<" offset from start " << p - b << std::endl; else std::cerr << "-- Total: " << p - b << std::endl; std::cerr << "-- ["; for(char *ptr = b;ptrprint_state(); } ~print_guard() { std::cerr << "Out: " << f << std::endl; self->print_state(); } basic_filebuf *self; char const *f; }; #else #endif int overflow(int c) { #ifdef BOOST_NOWIDE_DEBUG_FILEBUF print_guard g(this,__FUNCTION__); #endif if(!file_) return EOF; if(fixg() < 0) return EOF; size_t n = pptr() - pbase(); if(n > 0) { if(::fwrite(pbase(),1,n,file_) < n) return -1; } if(buffer_size_ > 0) { make_buffer(); setp(buffer_,buffer_+buffer_size_); if(c!=EOF) sputc(c); } else if(c!=EOF) { if(::fputc(c,file_)==EOF) return EOF; } return 0; } int sync() { return (file_ == 0 || overflow(EOF)==EOF || 0 <= fflush(file_)) ? 0 : -1; } int underflow() { #ifdef BOOST_NOWIDE_DEBUG_FILEBUF print_guard g(this,__FUNCTION__); #endif if(!file_) return EOF; if(fixp() < 0) return EOF; if(buffer_size_ == 0) { int c = ::fgetc(file_); if(c==EOF) { return EOF; } last_char_ = c; setg(&last_char_,&last_char_,&last_char_ + 1); return c; } make_buffer(); size_t n = ::fread(buffer_,1,buffer_size_,file_); setg(buffer_,buffer_,buffer_+n); if(n == 0) return EOF; return std::char_traits::to_int_type(*gptr()); } int pbackfail(int) { return pubseekoff(-1,std::ios::cur); } std::streampos seekoff(std::streamoff off, std::ios_base::seekdir seekdir, std::ios_base::openmode /*m*/) { #ifdef BOOST_NOWIDE_DEBUG_FILEBUF print_guard g(this,__FUNCTION__); #endif if(!file_) return EOF; if(fixp() < 0 || fixg() < 0) return EOF; if(seekdir == std::ios_base::cur) { if (::_fseeki64(file_, off, SEEK_CUR) < 0) return EOF; } else if(seekdir == std::ios_base::beg) { if (::_fseeki64(file_, off, SEEK_SET) < 0) return EOF; } else if(seekdir == std::ios_base::end) { if (::_fseeki64(file_, off, SEEK_END) < 0) return EOF; } else return -1; return _ftelli64(file_); } std::streampos seekpos(std::streampos off,std::ios_base::openmode m) { return seekoff(std::streamoff(off),std::ios_base::beg,m); } private: int fixg() { if(gptr()!=egptr()) { std::streamsize off = gptr() - egptr(); setg(0,0,0); if (_fseeki64(file_, off, SEEK_CUR) != 0) return -1; } setg(0,0,0); return 0; } int fixp() { if(pptr()!=0) { int r = sync(); setp(0,0); return r; } return 0; } void reset(FILE *f = 0) { sync(); if(file_) { fclose(file_); file_ = 0; } file_ = f; } static wchar_t const *get_mode(std::ios_base::openmode mode) { // // done according to n2914 table 106 27.9.1.4 // // note can't use switch case as overload operator can't be used // in constant expression if(mode == (std::ios_base::out)) return L"w"; if(mode == (std::ios_base::out | std::ios_base::app)) return L"a"; if(mode == (std::ios_base::app)) return L"a"; if(mode == (std::ios_base::out | std::ios_base::trunc)) return L"w"; if(mode == (std::ios_base::in)) return L"r"; if(mode == (std::ios_base::in | std::ios_base::out)) return L"r+"; if(mode == (std::ios_base::in | std::ios_base::out | std::ios_base::trunc)) return L"w+"; if(mode == (std::ios_base::in | std::ios_base::out | std::ios_base::app)) return L"a+"; if(mode == (std::ios_base::in | std::ios_base::app)) return L"a+"; if(mode == (std::ios_base::binary | std::ios_base::out)) return L"wb"; if(mode == (std::ios_base::binary | std::ios_base::out | std::ios_base::app)) return L"ab"; if(mode == (std::ios_base::binary | std::ios_base::app)) return L"ab"; if(mode == (std::ios_base::binary | std::ios_base::out | std::ios_base::trunc)) return L"wb"; if(mode == (std::ios_base::binary | std::ios_base::in)) return L"rb"; if(mode == (std::ios_base::binary | std::ios_base::in | std::ios_base::out)) return L"r+b"; if(mode == (std::ios_base::binary | std::ios_base::in | std::ios_base::out | std::ios_base::trunc)) return L"w+b"; if(mode == (std::ios_base::binary | std::ios_base::in | std::ios_base::out | std::ios_base::app)) return L"a+b"; if(mode == (std::ios_base::binary | std::ios_base::in | std::ios_base::app)) return L"a+b"; return 0; } size_t buffer_size_; char *buffer_; FILE *file_; bool own_; char last_char_; std::ios::openmode mode_; }; /// /// \brief Convinience typedef /// typedef basic_filebuf filebuf; #endif // windows } // nowide } // namespace boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/fstream.hpp000066400000000000000000000156241444255175000214500ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_FSTREAM_INCLUDED_HPP #define BOOST_NOWIDE_FSTREAM_INCLUDED_HPP #include #include #include #include #include #include #include namespace boost { /// /// \brief This namespace includes implementation of the standard library functios /// such that they accept UTF-8 strings on Windows. On other platforms it is just an alias /// of std namespace (i.e. not on Windows) /// namespace nowide { #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_FSTREAM_TESTS) && !defined(BOOST_NOWIDE_DOXYGEN) using std::basic_ifstream; using std::basic_ofstream; using std::basic_fstream; using std::ifstream; using std::ofstream; using std::fstream; #else /// /// \brief Same as std::basic_ifstream but accepts UTF-8 strings under Windows /// template > class basic_ifstream : public std::basic_istream { public: typedef basic_filebuf internal_buffer_type; typedef std::basic_istream internal_stream_type; basic_ifstream() : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); } explicit basic_ifstream(char const *file_name,std::ios_base::openmode mode = std::ios_base::in) : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); open(file_name,mode); } void open(char const *file_name,std::ios_base::openmode mode = std::ios_base::in) { if(!buf_->open(file_name,mode | std::ios_base::in)) { this->setstate(std::ios_base::failbit); } else { this->clear(); } } bool is_open() { return buf_->is_open(); } bool is_open() const { return buf_->is_open(); } void close() { if(!buf_->close()) this->setstate(std::ios_base::failbit); else this->clear(); } internal_buffer_type *rdbuf() const { return buf_.get(); } ~basic_ifstream() { buf_->close(); } private: boost::scoped_ptr buf_; }; /// /// \brief Same as std::basic_ofstream but accepts UTF-8 strings under Windows /// template > class basic_ofstream : public std::basic_ostream { public: typedef basic_filebuf internal_buffer_type; typedef std::basic_ostream internal_stream_type; basic_ofstream() : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); } explicit basic_ofstream(char const *file_name,std::ios_base::openmode mode = std::ios_base::out) : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); open(file_name,mode); } void open(char const *file_name,std::ios_base::openmode mode = std::ios_base::out) { if(!buf_->open(file_name,mode | std::ios_base::out)) { this->setstate(std::ios_base::failbit); } else { this->clear(); } } bool is_open() { return buf_->is_open(); } bool is_open() const { return buf_->is_open(); } void close() { if(!buf_->close()) this->setstate(std::ios_base::failbit); else this->clear(); } internal_buffer_type *rdbuf() const { return buf_.get(); } ~basic_ofstream() { buf_->close(); } private: boost::scoped_ptr buf_; }; /// /// \brief Same as std::basic_fstream but accepts UTF-8 strings under Windows /// template > class basic_fstream : public std::basic_iostream { public: typedef basic_filebuf internal_buffer_type; typedef std::basic_iostream internal_stream_type; basic_fstream() : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); } explicit basic_fstream(char const *file_name,std::ios_base::openmode mode = std::ios_base::out | std::ios_base::in) : internal_stream_type(0) { buf_.reset(new internal_buffer_type()); std::ios::rdbuf(buf_.get()); open(file_name,mode); } void open(char const *file_name,std::ios_base::openmode mode = std::ios_base::out | std::ios_base::out) { if(!buf_->open(file_name,mode)) { this->setstate(std::ios_base::failbit); } else { this->clear(); } } bool is_open() { return buf_->is_open(); } bool is_open() const { return buf_->is_open(); } void close() { if(!buf_->close()) this->setstate(std::ios_base::failbit); else this->clear(); } internal_buffer_type *rdbuf() const { return buf_.get(); } ~basic_fstream() { buf_->close(); } private: boost::scoped_ptr buf_; }; /// /// \brief Same as std::filebuf but accepts UTF-8 strings under Windows /// typedef basic_filebuf filebuf; /// /// Same as std::ifstream but accepts UTF-8 strings under Windows /// typedef basic_ifstream ifstream; /// /// Same as std::ofstream but accepts UTF-8 strings under Windows /// typedef basic_ofstream ofstream; /// /// Same as std::fstream but accepts UTF-8 strings under Windows /// typedef basic_fstream fstream; #endif } // nowide } // namespace boost #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/iostream.hpp000066400000000000000000000113011444255175000216160ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED #define BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4251) #endif // Filippo Rusconi // This code unit breaks the link in mingw64 with this message: // So I try to check if I can make without the Win-specific code. //[ 42%] Linking CXX shared library libpwizlite.dll //cd C:/msys64/home/mydar/devel/pwizlite/build-area/mingw64/src && C:/msys64/mingw64/bin/cmake.exe -E rm -f CMakeFiles/pwizlite-shared.dir/objects.a //cd C:/msys64/home/mydar/devel/pwizlite/build-area/mingw64/src && C:/msys64/mingw64/bin/ar.exe cr CMakeFiles/pwizlite-shared.dir/objects.a @CMakeFiles/pwizlite-shared.dir/objects1.rsp //cd C:/msys64/home/mydar/devel/pwizlite/build-area/mingw64/src && C:/msys64/mingw64/bin/c++.exe -O3 -DNDEBUG -shared -o libpwizlite.dll -Wl,--out-implib,libpwizlite.dll.a -Wl,--major-image-version,3,--minor-image-version,0 -Wl,--whole-archive CMakeFiles/pwizlite-shared.dir/objects.a -Wl,--no-whole-archive @CMakeFiles/pwizlite-shared.dir/linklibs.rsp //C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/pwizlite-shared.dir/objects.a(Filesystem.cpp.obj):Filesystem.cpp:(.text+0x196a): undefined reference to `GetMappedFileNameW' //C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/pwizlite-shared.dir/objects.a(Filesystem.cpp.obj):Filesystem.cpp:(.text+0x1c3c): undefined reference to `GetMappedFileNameW' //C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/pwizlite-shared.dir/objects.a(Filesystem.cpp.obj):Filesystem.cpp:(.text+0x1e1b): undefined reference to `GetMappedFileNameW' //C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/pwizlite-shared.dir/objects.a(BinaryDataEncoder.cpp.obj):BinaryDataEncoder.cpp:(.rdata$.refptr._ZN5boost6nowide4cerrE[.refptr._ZN5boost6nowide4cerrE]+0x0): undefined reference to `boost::nowide::cerr' //col namespace boost { namespace nowide { //#if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) using std::cout; using std::cerr; using std::cin; using std::clog; //#else ///// \cond INTERNAL //namespace details { //class console_output_buffer; //class console_input_buffer; //class BOOST_NOWIDE_DECL winconsole_ostream : public std::ostream { //winconsole_ostream(winconsole_ostream const &); //void operator=(winconsole_ostream const &); //public: //winconsole_ostream(int fd); //~winconsole_ostream(); //private: //boost::scoped_ptr d; //}; //class BOOST_NOWIDE_DECL winconsole_istream : public std::istream { //winconsole_istream(winconsole_istream const &); //void operator=(winconsole_istream const &); //public: //winconsole_istream(); //~winconsole_istream(); //private: //struct data; //boost::scoped_ptr d; //}; //} // details ///// \endcond ///// ///// \brief Same as std::cin, but uses UTF-8 ///// ///// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio ///// //extern BOOST_NOWIDE_DECL details::winconsole_istream cin; ///// ///// \brief Same as std::cout, but uses UTF-8 ///// ///// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio ///// //extern BOOST_NOWIDE_DECL details::winconsole_ostream cout; ///// ///// \brief Same as std::cerr, but uses UTF-8 ///// ///// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio ///// //extern BOOST_NOWIDE_DECL details::winconsole_ostream cerr; ///// ///// \brief Same as std::clog, but uses UTF-8 ///// ///// Note, the stream is not synchronized with stdio and not affected by std::ios::sync_with_stdio ///// //extern BOOST_NOWIDE_DECL details::winconsole_ostream clog; //#endif } // nowide } // namespace boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/stackstring.hpp000066400000000000000000000076001444255175000223360ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_DETAILS_WIDESTR_H_INCLUDED #define BOOST_NOWIDE_DETAILS_WIDESTR_H_INCLUDED #include #include #include namespace boost { namespace nowide { /// /// \brief A class that allows to create a temporary wide or narrow UTF strings from /// wide or narrow UTF source. /// /// It uses on stack buffer of the string is short enough /// and allocated a buffer on the heap if the size of the buffer is too small /// template class basic_stackstring { public: static const size_t buffer_size = BufferSize; typedef CharOut output_char; typedef CharIn input_char; basic_stackstring(basic_stackstring const &other) : mem_buffer_(0) { clear(); if(other.mem_buffer_) { size_t len = 0; while(other.mem_buffer_[len]) len ++; mem_buffer_ = new output_char[len + 1]; memcpy(mem_buffer_,other.mem_buffer_,sizeof(output_char) * (len+1)); } else { memcpy(buffer_,other.buffer_,buffer_size * sizeof(output_char)); } } void swap(basic_stackstring &other) { std::swap(mem_buffer_,other.mem_buffer_); for(size_t i=0;i wstackstring; /// /// Convinience typedef /// typedef basic_stackstring stackstring; /// /// Convinience typedef /// typedef basic_stackstring wshort_stackstring; /// /// Convinience typedef /// typedef basic_stackstring short_stackstring; } // nowide } // namespace boost #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/system.hpp000066400000000000000000000055511444255175000213310ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CSTDLIB_HPP #define BOOST_NOWIDE_CSTDLIB_HPP #include #include #include namespace boost { namespace nowide { // Filippo Rusconi // This code unit breaks the build in mingw64 with this message: // [ 1%] Building CXX object src/CMakeFiles/pwizlite-shared.dir/pwiz/utility/minimxml/XMLWriter.cpp.obj // cd C:/msys64/home/mydar/devel/pwizlite/build-area/mingw64/src && C:/msys64/mingw64/bin/c++.exe -DQT_NO_DEBUG_OUTPUT -DWITHOUT_MZ5 -Dpwizlite_shared_EXPORTS @CMakeFiles/pwizlite-shared.dir/includes_CXX.rsp -O3 -DNDEBUG -Wno-unknown-pragmas -Wall -Wextra -Wall -std=gnu++17 -o CMakeFiles/pwizlite-shared.dir/pwiz/utility/minimxml/XMLWriter.cpp.obj -c C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/minimxml/XMLWriter.cpp // In file included from C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/misc/Std.hpp:32, // from C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/minimxml/XMLWriter.cpp:26: // C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/misc/Stream.hpp:60:12: error: 'int boost::nowide::system(const char*)' conflicts with a previous declaration // 60 | using bnw::system; // unqualified system() calls will be ambiguous, by intention, to force developers to consider UTF-8 compatibility // | ^~~~~~ // In file included from C:/msys64/mingw64/include/c++/9.3.0/cstdlib:75, // from C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/misc/optimized_lexical_cast.hpp:27, // from C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/minimxml/XMLWriter.hpp:29, // from C:/msys64/home/mydar/devel/pwizlite/development/src/pwiz/utility/minimxml/XMLWriter.cpp:25: // C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h:519:15: note: previous declaration 'int system(const char*)' // 519 | int __cdecl system(const char *_Command); // | ^~~~~~ // I thus try to check if not using this unit is ok. using ::system; // Not #if 0 out everything else #if 0 #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) using ::system; #else // Windows /// /// Same as std::system but cmd is UTF-8. /// /// If the input is not valid UTF-8, -1 returned and errno set to EINVAL /// inline int system(char const *cmd) { if(!cmd) return _wsystem(0); wstackstring wcmd; if(!wcmd.convert(cmd)) { errno = EINVAL; return -1; } return _wsystem(wcmd.c_str()); } #endif #endif // 0 } // nowide } // namespace boost #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/nowide/windows.hpp000066400000000000000000000023111444255175000214660ustar00rootroot00000000000000// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_WINDOWS_HPP_INCLUDED #define BOOST_NOWIDE_WINDOWS_HPP_INCLUDED #include #ifdef BOOST_NOWIDE_USE_WINDOWS_H #include #else // // These are function prototypes... Allow to to include windows.h // extern "C" { __declspec(dllimport) wchar_t* __stdcall GetEnvironmentStringsW(void); __declspec(dllimport) int __stdcall FreeEnvironmentStringsW(wchar_t *); __declspec(dllimport) wchar_t* __stdcall GetCommandLineW(void); __declspec(dllimport) wchar_t** __stdcall CommandLineToArgvW(wchar_t const *,int *); __declspec(dllimport) unsigned long __stdcall GetLastError(); __declspec(dllimport) void* __stdcall LocalFree(void *); __declspec(dllimport) int __stdcall SetEnvironmentVariableW(wchar_t const *,wchar_t const *); __declspec(dllimport) unsigned long __stdcall GetEnvironmentVariableW(wchar_t const *,wchar_t *,unsigned long); } #endif #endif /// // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 libpwizlite-3.0.5/src/boost/utility/000077500000000000000000000000001444255175000175045ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/utility/detail/000077500000000000000000000000001444255175000207465ustar00rootroot00000000000000libpwizlite-3.0.5/src/boost/utility/detail/member_dereference.hpp000066400000000000000000000072631444255175000252650ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ // Purpose: // // Function object template to return from operator->*. Binds 'this', // providing optimal forwarding. // // Example: // // template< typename MP > // inline typename detail::member_dereference::type // operator->*(MP mp) const // { // return detail::member_dereference(ptr_that,mp); // } #ifndef BOOST_UTILITY_DETAIL_MEMBER_DEREFERENCE_HPP_INCLUDED # ifndef BOOST_PP_IS_ITERATING # include # include # include # include # include # include # include # include # include # include # ifndef BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY # define BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY 10 # elif BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY < 3 # undef BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY # define BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY 3 # endif namespace boost { namespace detail { template< class C, typename MP, std::size_t Arity = ::boost::function_types::function_arity::value, bool IsMFP = ::boost::function_types::is_member_function_pointer::value > class member_dereference; template< class C, typename T, class MPC> class member_dereference { C* ptr_that; T MPC::* ptr_member; public: member_dereference(C* that, T MPC::* member) : ptr_that(that), ptr_member(member) { } // T C::* is *not* a typo here, but to calculate proper constness typedef typename function_types::result_type::type type; inline operator type() const { return ptr_that->*ptr_member; } }; # define BOOST_PP_FILENAME_1 # define BOOST_PP_ITERATION_LIMITS \ (1,BOOST_UTILITY_MEMBER_DEREFERENCE_MAX_ARITY+1) # include BOOST_PP_ITERATE() }} # define BOOST_UTILITY_DETAIL_MEMBER_DEREFERENCE_HPP_INCLUDED # else // defined(BOOST_PP_IS_ITERATING) # define N BOOST_PP_ITERATION() template< class C, typename MP> class member_dereference { C* ptr_that; MP ptr_member; typedef function_types::parameter_types parameter_types; public: member_dereference(C* that, MP member) : ptr_that(that), ptr_member(member) { } typedef typename function_types::result_type::type result_type; # define M(z,i,d) typename boost::call_traits< typename mpl::at_c< \ parameter_types, i >::type >::param_type BOOST_PP_CAT(a,i) inline result_type operator()( BOOST_PP_ENUM_SHIFTED(N,M,~) ) const { return (ptr_that->*ptr_member)(BOOST_PP_ENUM_SHIFTED_PARAMS(N,a)); } # undef M typedef member_dereference type; }; # undef N # endif // defined(BOOST_PP_IS_ITERATING) #endif // include guard libpwizlite-3.0.5/src/boost/utility/detail/restricted.hpp000066400000000000000000000027651444255175000236410ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ // Purpose: // // Restrict access to otherwise public member functions or constructors, // using a special parameter 'restricted', to specific, boost-side clients. // // Example: // // struct X // { // void framework_only(restricted); // }; // // template // struct Y // { // // Note: Can't make friends with T and inheritance might be unsuitable // // to gain access // // void f() // { // y.framework_only(detail::restricted_argument()); // } // }; #ifndef BOOST_UTILITY_DETAIL_RESTRICTED_HPP_INCLUDED # define BOOST_UTILITY_DETAIL_RESTRICTED_HPP_INCLUDED namespace boost { namespace detail { class restrictor : boost::noncopyable { restrictor() { } friend inline restrictor const & restricted_argument(); }; inline restrictor const & restricted_argument() { static restrictor const result; return result; } } typedef detail::restrictor const & restricted; } #endif libpwizlite-3.0.5/src/boost/utility/detail/singleton_manager.hpp000066400000000000000000000146551444255175000251660ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ #ifndef BOOST_UTILITY_DETAIL_SINGLETON_MANAGER_HPP_INCLUDED # define BOOST_UTILITY_DETAIL_SINGLETON_MANAGER_HPP_INCLUDED # include # include # include # ifdef BOOST_HAS_THREADS # include # include # include # endif # if defined(__GNUC__) && __GNUC__ >= 4 # pragma GCC visibility push(hidden) # endif namespace boost { namespace detail { struct singleton_manager_context { void* ptr_that; void (*fnc_dtor)(singleton_manager_context*); int val_slot; singleton_manager_context* ptr_next; // templates to initialize fnc_dtor with: template< typename T > static void call_dtor(singleton_manager_context* ctx) { static_cast(ctx->ptr_that) -> ~T(); } template< typename T > static void call_delete(singleton_manager_context* ctx) { delete static_cast(ctx->ptr_that); } }; # define BOOST_DETAIL_SINGLETON_CONTEXT_INIT(disposal,type,slot) \ { 0l, & detail::singleton_manager_context:: disposal < type >, slot, 0l } template< typename Tag > class singleton_manager { typedef singleton_manager_context context; context* volatile ptr_first; # ifdef BOOST_HAS_THREADS boost::mutex obj_mutex; # endif static singleton_manager* ptr_instance; struct destruction_sensor { ~destruction_sensor() { singleton_manager::cleanup(); } }; static destruction_sensor const obj_destruction_sensor; static void create_instance() { static typename boost::aligned_storage< sizeof(singleton_manager), ::boost::alignment_of< singleton_manager >::value >::type buf_instance; ptr_instance = new (& buf_instance) singleton_manager(); } inline singleton_manager() : ptr_first(0l) { } public: inline void insert_context(context& d) { context*volatile* hook = & this->ptr_first; context* next = *hook; for (; !!next && next->val_slot < d.val_slot; next = *hook) hook = & next->ptr_next; d.ptr_next = next; *hook = & d; } static inline void attach(context& d) { # ifdef BOOST_HAS_THREADS static boost::once_flag initialized = BOOST_ONCE_INIT; boost::call_once(& create_instance, initialized); boost::mutex::scoped_lock lock(ptr_instance->obj_mutex); # else if (! ptr_instance) create_instance(); # endif ptr_instance->insert_context(d); } static inline void cleanup() { if (!!ptr_instance) { context* i; while ((i = ptr_instance->ptr_first) != 0) { context* next = i->ptr_next; i->fnc_dtor(i); ptr_instance->ptr_first = next; } } } # ifdef BOOST_HAS_THREADS static inline void again(boost::once_flag& of) { static boost::once_flag uninitialized = BOOST_ONCE_INIT; std::memcpy(& of, & uninitialized, sizeof(boost::once_flag)); } # endif }; template< typename Tag > singleton_manager* singleton_manager::ptr_instance = 0l; template< typename Tag > typename singleton_manager::destruction_sensor const singleton_manager::obj_destruction_sensor = destruction_sensor(); // struct singleton_initialization { struct udc { template< typename T > udc(T const&); }; template< class T, void(*X)() > struct has_member; template< class T > static char has_placement_tester( has_member*); template< class T > static char (& has_placement_tester(udc))[2]; template< class C, class Base > static inline typename Base::context_type call_impl( mpl::bool_ const&) { return C::singleton_placement(); } template< class C, class Base > static inline typename Base::context_type call_impl( mpl::bool_ const&) { return Base::instance_proxy::init(); } template< class C, class Base > static inline typename Base::context_type call() { return singleton_initialization::call_impl( mpl::bool_< 1 == sizeof( has_placement_tester(0l)) >() ); } }; } // namespace detail template< typename SubsystemTag > inline void destroy_singletons() { detail::singleton_manager::cleanup(); } inline void destroy_singletons() { detail::singleton_manager::cleanup(); } # if defined(__GNUC__) && __GNUC__ >= 4 # pragma GCC visibility pop # endif # define BOOST_SINGLETON_PLACEMENT_DECLARATION \ friend struct boost::detail::singleton_initialization; \ static context_type singleton_placement(); # define BOOST_SINGLETON_PLACEMENT(Type) \ Type::context_type Type::singleton_placement() \ { \ typedef Type::base_class_type b; \ return boost::detail::singleton_initialization::call_impl( \ boost::mpl::bool_() ); \ } } // namespace boost #endif libpwizlite-3.0.5/src/boost/utility/mutexed_singleton.hpp000066400000000000000000000162201444255175000237530ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ #ifndef BOOST_UTILITY_MUTEXED_SINGLETON_HPP_INCLUDED # define BOOST_UTILITY_MUTEXED_SINGLETON_HPP_INCLUDED # include # ifdef BOOST_HAS_THREADS # include # include # include # include # include # include # include # include # include namespace boost { namespace detail { struct mutexed_singleton_context { detail::singleton_manager_context obj_mgr_context; boost::once_flag flg_initialized; boost::recursive_mutex* ptr_mutex; }; } template< class Derived, int DisposalSlot = 0, typename SubsystemTag = void > class mutexed_singleton : boost::noncopyable { class instance_proxy; public: static instance_proxy const instance; class lease; protected: inline mutexed_singleton() { // enforce instantiation to ensure proper ctor static_cast(& instance_proxy::create_instance); } inline ~mutexed_singleton() { detail::singleton_manager::again( instance_proxy::obj_context.flg_initialized); } typedef mutexed_singleton base_class_type; typedef detail::mutexed_singleton_context& context_type; friend struct detail::singleton_initialization; }; template< class Derived, int DisposalSlot, typename SubsystemTag > class mutexed_singleton::lease # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) // friends don't work correctly prior to VS 2005 SP1 : protected mutexed_singleton ::instance_proxy # endif { detail::mutexed_singleton_context* ptr_context; mutable boost::recursive_mutex::scoped_lock lock; public: inline lease() : ptr_context( & detail::singleton_initialization::call >() ) , lock(*ptr_context->ptr_mutex) { } inline lease(lease const & that) : ptr_context(that.ptr_context) , lock(*ptr_context->ptr_mutex) { } inline Derived* operator->() const { return static_cast(ptr_context->obj_mgr_context.ptr_that); } template< typename MP > inline typename detail::member_dereference::type operator->*(MP mp) const { return detail::member_dereference(static_cast( ptr_context->obj_mgr_context.ptr_that), mp); } friend lease get_pointer(lease const& that) { return lease(that); } }; template< class Derived, int DisposalSlot, typename SubsystemTag > class mutexed_singleton::instance_proxy { # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) protected: # endif static detail::mutexed_singleton_context obj_context; template< typename MP > struct member_deref_proxy : private lease, public detail::member_dereference { member_deref_proxy(MP mp) : lease(), detail::member_dereference( lease::operator->(), mp) { } }; # if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) public: inline lease operator->() const { return lease(); } # else // strange workaround to keep MSVC from ICEing: struct lease_ : lease { }; public: inline lease_ operator->() const { return lease_(); } # endif template< typename MP > inline typename member_deref_proxy::type operator->*(MP mp) const { return member_deref_proxy(mp); } friend instance_proxy const& get_pointer(instance_proxy const& that) { return that; } private: # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) protected: # endif inline static detail::mutexed_singleton_context& init() { boost::call_once(& create_instance, obj_context.flg_initialized); return obj_context; } static void create_instance() { static typename boost::aligned_storage< sizeof(Derived), ::boost::alignment_of::value >::type buf_instance; obj_context.obj_mgr_context.ptr_that = new (& buf_instance) Derived( detail::restricted_argument() ); static typename boost::aligned_storage< sizeof(boost::recursive_mutex), ::boost::alignment_of::value >::type buf_mutex; obj_context.ptr_mutex = new (& buf_mutex) boost::recursive_mutex(); detail::singleton_manager::attach( obj_context.obj_mgr_context); } friend class lease; template< class D, int DS, typename ST > friend class mutexed_singleton; friend struct detail::singleton_initialization; instance_proxy() { } instance_proxy(instance_proxy const &) { } }; template< class Derived, int DisposalSlot, typename SubsystemTag > detail::mutexed_singleton_context mutexed_singleton::instance_proxy ::obj_context = { BOOST_DETAIL_SINGLETON_CONTEXT_INIT(call_dtor,Derived,DisposalSlot) , BOOST_ONCE_INIT, 0l }; template< class Derived, int DisposalSlot, typename SubsystemTag > typename mutexed_singleton ::instance_proxy const mutexed_singleton::instance = typename mutexed_singleton:: instance_proxy(); # else // !defined(BOOST_HAS_THREADS) # include namespace boost { // In a single threaded environment a simple singleton behaves as if it // was mutexed template< class Derived, int DisposalSlot = 0, typename SubsystemTag = void > class mutexed_singleton : public boost::singleton { protected: mutexed_singleton() { } }; # endif } // namespace boost #endif // include guard libpwizlite-3.0.5/src/boost/utility/singleton.hpp000066400000000000000000000151161444255175000222230ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ #ifndef BOOST_UTILITY_SINGLETON_HPP_INCLUDED # define BOOST_UTILITY_SINGLETON_HPP_INCLUDED # include # include # include # include # include # include # include # include # ifdef BOOST_HAS_THREADS # include # endif //# if defined(__GNUC__) && __GNUC__ >= 4 # if ! defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 # define BOOST_UTILITY_SINGLETON_API __attribute__ ((visibility("default"))) # pragma GCC visibility push(hidden) # else # define BOOST_UTILITY_SINGLETON_API # endif namespace boost { namespace detail { struct singleton_context; } template< class Derived, int DisposalSlot = 0, typename SubsystemTag = void > class BOOST_UTILITY_SINGLETON_API singleton : boost::noncopyable { class instance_proxy; public: static instance_proxy const instance; class lease; protected: inline singleton() { // enforce instantiation to ensure proper ctor static_cast(& instance_proxy::create_instance); } inline ~singleton() { # ifdef BOOST_HAS_THREADS detail::singleton_manager::again( instance_proxy::obj_context.flg_initialized); # else instance_proxy::obj_context.obj_mgr_context.ptr_that = 0l; # endif } typedef singleton base_class_type; typedef detail::singleton_context context_type; friend struct detail::singleton_initialization; }; namespace detail { struct singleton_context { detail::singleton_manager_context obj_mgr_context; # ifdef BOOST_HAS_THREADS boost::once_flag flg_initialized; # endif }; } template< class Derived, int DisposalSlot, typename SubsystemTag > class BOOST_UTILITY_SINGLETON_API singleton::instance_proxy { # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) // friends don't work correctly prior to VS 2005 SP1 protected: # endif static detail::singleton_context obj_context; public: inline Derived* operator->() const { return static_cast( detail::singleton_initialization::call >() .obj_mgr_context.ptr_that ); } template< typename MP > inline typename detail::member_dereference::type operator->*(MP mp) const { return detail::member_dereference( static_cast( detail::singleton_initialization::call >() .obj_mgr_context.ptr_that), mp); } friend Derived* get_pointer(instance_proxy const & x) { return x.operator->(); } private: # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) protected: # endif inline static detail::singleton_context& init() { # ifdef BOOST_HAS_THREADS boost::call_once(& create_instance, obj_context.flg_initialized); # else if (! obj_context.obj_mgr_context.ptr_that) create_instance(); # endif return obj_context; } static void create_instance() { static typename boost::aligned_storage< sizeof(Derived), ::boost::alignment_of::value >::type buf_instance; obj_context.obj_mgr_context.ptr_that = new (& buf_instance) Derived( detail::restricted_argument() ); detail::singleton_manager::attach( obj_context.obj_mgr_context); } template< class D, int DS, typename ST > friend class singleton; friend class lease; friend struct detail::singleton_initialization; instance_proxy() { } instance_proxy(instance_proxy const &) { } }; template< class Derived, int DisposalSlot, typename SubsystemTag > class BOOST_UTILITY_SINGLETON_API singleton::lease # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) : singleton::instance_proxy # endif { Derived* ptr_that; public: inline lease() : ptr_that( static_cast( detail::singleton_initialization::call >() .obj_mgr_context.ptr_that )) { } inline Derived* operator->() const { return this->ptr_that; } template< typename MP > inline typename detail::member_dereference::type operator->*(MP mp) const { return detail::member_dereference(this->ptr_that,mp); } friend Derived* get_pointer(lease const& x) { return x.operator->(); } }; template< class Derived, int DisposalSlot, typename SubsystemTag > detail::singleton_context singleton::instance_proxy ::obj_context = { BOOST_DETAIL_SINGLETON_CONTEXT_INIT(call_dtor,Derived,DisposalSlot) # ifdef BOOST_HAS_THREADS , BOOST_ONCE_INIT # endif }; template< class Derived, int DisposalSlot, typename SubsystemTag > typename singleton::instance_proxy const singleton::instance = typename singleton:: instance_proxy(); } // namespace boost //# if defined(__GNUC__) && __GNUC__ >= 4 # if ! defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 # pragma GCC visibility pop # endif #endif libpwizlite-3.0.5/src/boost/utility/thread_specific_singleton.hpp000066400000000000000000000147231444255175000254220ustar00rootroot00000000000000/*============================================================================= Copyright (c) 2007 Tobias Schwinger Use modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ==============================================================================*/ #ifndef BOOST_UTILITY_THREAD_SPECIFIC_SINGLETON_HPP_INCLUDED # define BOOST_UTILITY_THREAD_SPECIFIC_SINGLETON_HPP_INCLUDED # include # ifdef BOOST_HAS_THREADS # include # include # include # include # include # include # include # include # include namespace boost { template< class Derived, int DisposalSlot = 0, typename SubsystemTag = void > class thread_specific_singleton : boost::noncopyable { class instance_proxy; public: static instance_proxy const instance; class lease; protected: inline thread_specific_singleton() { // enforce instantiation to ensure proper ctor static_cast(& instance_proxy::get); } inline ~thread_specific_singleton() { instance_proxy::ptr_tsp->release(); } typedef void* context_type; friend struct detail::singleton_initialization; }; template< class Derived, int DisposalSlot, typename SubsystemTag > class thread_specific_singleton ::instance_proxy { # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) // friends don't work correctly prior to VS 2005 SP1 protected: # endif struct holder; typedef boost::thread_specific_ptr ts_ptr; static ts_ptr* ptr_tsp; public: inline Derived* operator->() const { return get(); } template< typename MP > inline typename detail::member_dereference::type operator->*(MP mp) const { return detail::member_dereference(get(),mp); } friend Derived* get_pointer(instance_proxy const &) { return get(); } private: # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) protected: # endif struct holder { detail::singleton_manager_context obj_context; Derived obj_instance; holder() : obj_instance(detail::restricted_argument()) { obj_context.ptr_that = this; obj_context.fnc_dtor = & detail::singleton_manager_context::call_delete; obj_context.val_slot = DisposalSlot; } }; static void no_delete(holder*) { } inline static void* init() { static boost::once_flag flg_initialized = BOOST_ONCE_INIT; boost::call_once(& create_tsp, flg_initialized); holder* result = ptr_tsp->get(); if (! result) { ptr_tsp->reset((result = new holder())); detail::singleton_manager::attach( result->obj_context); } return result; } inline static Derived* get() { return & reinterpret_cast( detail::singleton_initialization::call< Derived, thread_specific_singleton >())->obj_instance; } static void create_tsp() { static typename boost::aligned_storage< sizeof(ts_ptr), ::boost::alignment_of::value >::type buf_tsp; ptr_tsp = new (& buf_tsp) ts_ptr(& no_delete); } template< class D, int DS, typename ST > friend class thread_specific_singleton; friend class lease; friend struct detail::singleton_initialization; instance_proxy() { } instance_proxy(instance_proxy const &) { } }; template< class Derived, int DisposalSlot, typename SubsystemTag > class thread_specific_singleton ::lease # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) : thread_specific_singleton ::instance_proxy # endif { Derived* ptr_instance; public: inline lease() : ptr_instance(instance_proxy::get()) { } inline Derived* operator->() const { return this->ptr_instance; } template< typename MP > inline typename detail::member_dereference::type operator->*(MP mp) const { return detail::member_dereference( this->ptr_instance,mp); } friend Derived* get_pointer(lease const& that) { return that.ptr_instance; } }; template< class Derived, int DisposalSlot, typename SubsystemTag > typename thread_specific_singleton ::instance_proxy::ts_ptr* thread_specific_singleton:: instance_proxy::ptr_tsp = 0l; template< class Derived, int DisposalSlot, typename SubsystemTag > typename thread_specific_singleton ::instance_proxy const thread_specific_singleton ::instance = typename thread_specific_singleton::instance_proxy(); # else // !defined(BOOST_HAS_THREADS) # include namespace boost { // In a single threaded environment a simple singleton behaves as if // it was thread-specific template< class Derived, int DisposalSlot = 0, typename SubsystemTag = void > class thread_specific_singleton : public boost::singleton { protected: inline thread_specific_singleton() { } }; # endif } // namespace boost #endif // include guard libpwizlite-3.0.5/src/pwiz/000077500000000000000000000000001444255175000156445ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/Version.hpp000066400000000000000000000023451444255175000200060ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _PWIZ_VERSION_HPP_ #define _PWIZ_VERSION_HPP_ #include "utility/misc/Export.hpp" #include namespace pwiz { struct PWIZ_API_DECL Version { static int Major(); static int Minor(); static int Revision(); static std::string Branch(); // Source control branch name (usually "master", indicating trunk code line in Git) static std::string str(); static std::string LastModified(); }; } // namespace pwiz #endif // _PWIZ_VERSION_HPP_ libpwizlite-3.0.5/src/pwiz/analysis/000077500000000000000000000000001444255175000174675ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/analysis/demux/000077500000000000000000000000001444255175000206115ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/analysis/demux/DemuxDataProcessingStrings.hpp000066400000000000000000000017521444255175000266120ustar00rootroot00000000000000// // $Id$ // // // Original author: Jarrett Egertson // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _DEMUXDATAPROCESSINGSTRINGS_HPP #define _DEMUXDATAPROCESSINGSTRINGS_HPP #include namespace DemuxDataProcessingStrings { static const std::string kDEMUX_NAME = "Demultiplexing"; ///< This is a flag used by SpectrumWorkerThreads to handle demultiplexing } // namespace DemuxTypes #endif //_DEMUXDATAPROCESSINGSTRINGS_HPP libpwizlite-3.0.5/src/pwiz/analysis/spectrum_processing/000077500000000000000000000000001444255175000235655ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp000066400000000000000000000113031444255175000300740ustar00rootroot00000000000000// // $Id$ // // // Original author: Jarrett Egertson // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLIST_DEMUX_HPP #define _SPECTRUMLIST_DEMUX_HPP #include "pwiz/data/msdata/SpectrumListWrapper.hpp" #include #include "pwiz/utility/chemistry/MZTolerance.hpp" #include "boost/enum.hpp" namespace pwiz { namespace analysis { /// SpectrumList decorator implementation that can demultiplex spectra of several precursor windows acquired in the same scan. /** * SpectrumList_Demux can separate multiplexed spectra into several demultiplexed spectra by inferring from adjacent multiplexed spectra. This method * can handle variable fill times, requiring that the user specify whether the fill times have varied. */ class PWIZ_API_DECL SpectrumList_Demux : public msdata::SpectrumListWrapper { public: /// User-defined options for demultiplexing struct Params { /// Optimization methods available BOOST_ENUM(Optimization, (NONE) (OVERLAP_ONLY) ); /// Converts an optimization enum to a string static std::string optimizationToString(Optimization opt); /// Converts a string to an optimization enum (returns NONE enum if no enum matches the string) static Optimization stringToOptimization(const std::string& s); Params() : massError(10, pwiz::chemistry::MZTolerance::PPM), demuxBlockExtra(0.0), nnlsMaxIter(50), nnlsEps(1e-10), applyWeighting(true), regularizeSums(true), variableFill(false), interpolateRetentionTime(true), optimization(Optimization::NONE), minimumWindowSize(0.2) {} /// Error scalar for extracting MS/MS peaks. pwiz::chemistry::MZTolerance massError; /// Multiplier to expand or reduce the # of spectra considered when demux'ing. /// If 0, a fully determined system of equation is built. If > 1.0, the number /// of rows included in the system is extended demuxBlockExtra * (# scans in 1 duty cycle) double demuxBlockExtra; /// Maximum iterations for NNLS solve int nnlsMaxIter; /// Epsilon value for convergence criterion of NNLS solver double nnlsEps; /// Weight the spectra nearby to the input spectrum more heavily in the solve /// than the outer ones. This is only applied if interpolateRetentionTime is false bool applyWeighting; /// After demux solve, scale the sum of the intensities contributed form each /// of the input windows to match the non-demux'd intensity bool regularizeSums; /// Set to true if fill times are allowed to vary for each scan window bool variableFill; bool interpolateRetentionTime; /// Optimizations can be chosen when experimental design is known Optimization optimization; double minimumWindowSize; }; /// Generates an abstract SpectrumList_Demux decorator from inner SpectrumList /// @param inner The inner SpectrumList /// @param p User-defined options SpectrumList_Demux(const msdata::SpectrumListPtr& inner, const Params& p = Params()); virtual ~SpectrumList_Demux(); /// \name SpectrumList Interface ///@{ msdata::SpectrumPtr spectrum(size_t index, bool getBinaryData = false) const; msdata::SpectrumPtr spectrum(size_t index, msdata::DetailLevel detailLevel) const; size_t size() const; const msdata::SpectrumIdentity& spectrumIdentity(size_t index) const; ///@} private: class Impl; boost::scoped_ptr impl_; }; typedef SpectrumList_Demux::Params::Optimization DemuxOptimization; } // namespace analysis } // namespace pwiz #endif // _SPECTRUMLIST_DEMUX_HPPlibpwizlite-3.0.5/src/pwiz/data/000077500000000000000000000000001444255175000165555ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/data/common/000077500000000000000000000000001444255175000200455ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/data/common/BinaryIndexStream.hpp000066400000000000000000000030341444255175000241460ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2009 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _BINARYINDEX_HPP_ #define _BINARYINDEX_HPP_ #include "Index.hpp" #include namespace pwiz { namespace data { /// index implementation in a stream (intended for fstreams but any iostream works); /// find(string id) is O(logN); /// find(ordinal index) is O(1); /// memory footprint is negligible class PWIZ_API_DECL BinaryIndexStream : public Index { public: BinaryIndexStream(boost::shared_ptr indexStreamPtr); virtual void create(std::vector& entries); virtual size_t size() const; virtual EntryPtr find(const std::string& id) const; virtual EntryPtr find(size_t index) const; private: class Impl; boost::shared_ptr impl_; }; } // namespace data } // namespace pwiz #endif // _BINARYINDEX_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/CVTranslator.cpp000066400000000000000000000130511444255175000231330ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #define PWIZ_SOURCE #include "CVTranslator.hpp" #include "boost/algorithm/string/predicate.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace data { using namespace pwiz::cv; // // default extra translations // namespace { struct ExtraEntry { const char* text; CVID cvid; }; ExtraEntry defaultExtraEntries_[] = { {"ITMS", MS_ion_trap}, {"FTMS", MS_FT_ICR}, }; size_t defaultExtraEntriesSize_ = sizeof(defaultExtraEntries_)/sizeof(ExtraEntry); } // namespace // // CVTranslator::Impl // class CVTranslator::Impl { public: Impl(); void insert(const string& text, CVID cvid); CVID translate(const string& text) const; private: typedef map Map; Map map_; void insertCVTerms(); void insertDefaultExtraEntries(); }; CVTranslator::Impl::Impl() { insertCVTerms(); insertDefaultExtraEntries(); } namespace { inline char alnum_lower(char c) { // c -> lower-case, whitespace, or + return isalnum(c) ? static_cast(tolower(c)) : c == '+' ? c : ' '; } inline char alnum_lower_regex(char c) { // c -> lower-case, whitespace, +, or _ for things that appear to be part of a regex return isalnum(c) ? static_cast(tolower(c)) : c == '+' ? c : '_'; } string preprocess(const string& s) { string result = s; if (bal::starts_with(s, "(?<=")) // Looks like a regex { transform(result.begin(), result.end(), result.begin(), alnum_lower_regex); } else { transform(result.begin(), result.end(), result.begin(), alnum_lower); } return result; } string canonicalize(const string& s) { // remove non-alnum characters istringstream iss(preprocess(s)); // remove whitespace around tokens vector tokens; copy(istream_iterator(iss), istream_iterator(), back_inserter(tokens)); // concatenate with underscores ostringstream oss; copy(tokens.begin(), tokens.end(), ostream_iterator(oss, "_")); return oss.str(); } } // namespace bool shouldIgnore(const string& key, CVID value, CVID cvid) { return (key=="unit_" && value==MS_unit_OBSOLETE && cvid==UO_unit || key=="pi_" && value==MS_PI && cvid==UO_pi || // MS_PI==photoionization, UO_pi==3.14 key=="pi_" && value==MS_PI && cvid==MS_pI || // MS_pI==isoelectric point key=="de_" && value==MS_DE && cvid==1001274 || // conflict between 1000246 and 1001274 cvid == UO_volt_second_per_square_centimeter); // conflict between 1002814 200010007 (volt-second per square centimeter) } bool shouldReplace(const string& key, CVID value, CVID cvid) { return false; } void CVTranslator::Impl::insert(const string& text, CVID cvid) { string key = canonicalize(text); if (map_.count(key)) { if (shouldIgnore(key, map_[key], cvid)) return; if (!shouldReplace(key, map_[key], cvid)) { throw runtime_error("[CVTranslator::insert()] Collision: " + lexical_cast(map_[key]) + " " + lexical_cast(cvid)); } } map_[key] = cvid; } CVID CVTranslator::Impl::translate(const string& text) const { Map::const_iterator it = map_.find(canonicalize(text)); if (it != map_.end()) return it->second; return CVID_Unknown; } void CVTranslator::Impl::insertCVTerms() { for (vector::const_iterator cvid=cvids().begin(); cvid!=cvids().end(); ++cvid) { const CVTermInfo& info = cvTermInfo(*cvid); if (info.isObsolete) continue; if (!(bal::starts_with(info.id, "MS") || bal::starts_with(info.id, "UO"))) continue; // insert name insert(info.name, *cvid); // insert synonyms if (*cvid < 100000000) // prefix == "MS" { for (vector::const_iterator syn=info.exactSynonyms.begin(); syn!=info.exactSynonyms.end(); ++syn) insert(*syn, *cvid); } } } void CVTranslator::Impl::insertDefaultExtraEntries() { for (const ExtraEntry* it=defaultExtraEntries_; it!=defaultExtraEntries_+defaultExtraEntriesSize_; ++it) insert(it->text, it->cvid); } // // CVTranslator // PWIZ_API_DECL CVTranslator::CVTranslator() : impl_(new Impl) {} PWIZ_API_DECL void CVTranslator::insert(const string& text, CVID cvid) {impl_->insert(text, cvid);} PWIZ_API_DECL CVID CVTranslator::translate(const string& text) const {return impl_->translate(text);} } // namespace data } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/common/CVTranslator.hpp000066400000000000000000000031441444255175000231420ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #ifndef _CVTRANSLATOR_HPP_ #define _CVTRANSLATOR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "cv.hpp" #include "boost/shared_ptr.hpp" namespace pwiz { namespace data { /// translates text to CV terms class PWIZ_API_DECL CVTranslator { public: /// constructor -- dictionary includes all /// CV term names and exact_synonyms CVTranslator(); /// insert a text-cvid pair into the dictionary void insert(const std::string& text, cv::CVID cvid); /// translate text -> CVID cv::CVID translate(const std::string& text) const; private: class Impl; boost::shared_ptr impl_; CVTranslator(CVTranslator&); CVTranslator& operator=(CVTranslator&); }; } // namespace data } // namespace pwiz #endif // _CVTRANSLATOR_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/Index.hpp000066400000000000000000000043141444255175000216270ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2009 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _INDEX_HPP_ #define _INDEX_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include #include namespace pwiz { namespace data { /// generic interface for creating and using an index on a stream of serialized objects class PWIZ_API_DECL Index { public: typedef boost::iostreams::stream_offset stream_offset; /// generic type identifying an indexed item by string id, ordinal index, and stream offset struct PWIZ_API_DECL Entry { std::string id; boost::uint64_t index; stream_offset offset; }; typedef boost::shared_ptr EntryPtr; /// create the index from specified list of entries; /// the list is non-const because the index implementation may resort the list virtual void create(std::vector& entries) = 0; /// returns the number of entries in the index virtual size_t size() const = 0; /// returns the entry for the specified string id, or null if the id is not in the index virtual EntryPtr find(const std::string& id) const = 0; /// returns the entry for the specified ordinal index, or null if the ordinal is not in the index virtual EntryPtr find(size_t index) const = 0; virtual ~Index() {} }; typedef boost::shared_ptr IndexPtr; } // namespace data } // namespace pwiz #endif // _INDEX_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/MemoryIndex.hpp000066400000000000000000000026621444255175000230240ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2009 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MEMORYINDEX_HPP_ #define _MEMORYINDEX_HPP_ #include "Index.hpp" namespace pwiz { namespace data { /// index implementation in memory; /// find(string id) is O(logN); /// find(ordinal index) is O(1); /// memory footprint is basically (number of entries * 2) class PWIZ_API_DECL MemoryIndex : public Index { public: MemoryIndex(); virtual void create(std::vector& entries); virtual size_t size() const; virtual EntryPtr find(const std::string& id) const; virtual EntryPtr find(size_t index) const; private: class Impl; boost::shared_ptr impl_; }; } // namespace data } // namespace pwiz #endif // _MEMORYINDEX_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/ParamTypes.cpp000066400000000000000000000171231444255175000226420ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "ParamTypes.hpp" #include "diff_std.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace data { // // CVParam // PWIZ_API_DECL CVParam::~CVParam() {} PWIZ_API_DECL string CVParam::name() const { return cvTermInfo(cvid).name; } PWIZ_API_DECL string CVParam::unitsName() const { return cvTermInfo(units).name; } double timeInSecondsHelper(CVID units, double value) { if (units == UO_second) return value; else if (units == UO_minute) return value * 60; else if (units == UO_hour) return value * 3600; else if (units == UO_millisecond) return value * 1e-3; else if (units == UO_microsecond) return value * 1e-6; else if (units == UO_nanosecond) return value * 1e-9; else if (units == UO_picosecond) return value * 1e-12; else if (units == MS_second_OBSOLETE) // mzML 1.0 support return value; else if (units == MS_minute_OBSOLETE) // mzML 1.0 support return value * 60; return 0; } PWIZ_API_DECL double CVParam::timeInSeconds() const { return timeInSecondsHelper(units, valueAs()); } /// convenience function to return value without scientific notation (throws if not a double) PWIZ_API_DECL std::string CVParam::valueFixedNotation() const { if (std::string::npos != value.find_first_of("eE")) return pwiz::util::toString(valueAs(), pwiz::util::RealConvertPolicy::FixedNotation); else return value; } PWIZ_API_DECL ostream& operator<<(ostream& os, const CVParam& param) { os << cvTermInfo(param.cvid).name; if (!param.value.empty()) os << ": " << param.value; if (param.units != CVID_Unknown) os << " " << cvTermInfo(param.units).name << "(s)"; return os; } // // UserParam // PWIZ_API_DECL UserParam::UserParam(const string& _name, const string& _value, const string& _type, CVID _units) : name(_name), value(_value), type(_type), units(_units) {} PWIZ_API_DECL UserParam::~UserParam() {} PWIZ_API_DECL UserParam::UserParam(const UserParam& other) {*this = other;} PWIZ_API_DECL UserParam& UserParam::operator=(const UserParam& rhs) { name = rhs.name; value = rhs.value; type = rhs.type; units = rhs.units; return *this; } PWIZ_API_DECL double UserParam::timeInSeconds() const { return timeInSecondsHelper(units, valueAs()); } PWIZ_API_DECL bool UserParam::empty() const { return name.empty() && value.empty() && type.empty() && units==CVID_Unknown; } PWIZ_API_DECL bool UserParam::operator==(const UserParam& that) const { return (name==that.name && value==that.value && type==that.type && units==that.units); } PWIZ_API_DECL bool UserParam::operator!=(const UserParam& that) const { return !operator==(that); } // // ParamContainer // PWIZ_API_DECL CVParam ParamContainer::cvParam(CVID cvid) const { // first look in our own cvParams vector::const_iterator it = find_if(cvParams.begin(), cvParams.end(), CVParamIs(cvid)); if (it!=cvParams.end()) return *it; // then recurse into paramGroupPtrs for (vector::const_iterator jt=paramGroupPtrs.begin(); jt!=paramGroupPtrs.end(); ++jt) { CVParam result = jt->get() ? (*jt)->cvParam(cvid) : CVParam(); if (result.cvid != CVID_Unknown) return result; } return CVParam(); } PWIZ_API_DECL CVParam ParamContainer::cvParamChild(CVID cvid) const { // first look in our own cvParams vector::const_iterator it = find_if(cvParams.begin(), cvParams.end(), CVParamIsChildOf(cvid)); if (it!=cvParams.end()) return *it; // then recurse into paramGroupPtrs for (vector::const_iterator jt=paramGroupPtrs.begin(); jt!=paramGroupPtrs.end(); ++jt) { CVParam result = jt->get() ? (*jt)->cvParamChild(cvid) : CVParam(); if (result.cvid != CVID_Unknown) return result; } return CVParam(); } PWIZ_API_DECL vector ParamContainer::cvParamChildren(CVID cvid) const { vector results; // first look in our own cvParams vector::const_iterator it; for(const CVParam& cvParam : cvParams) { if (cvIsA(cvParam.cvid, cvid)) results.push_back(cvParam); } // then recurse into paramGroupPtrs for(const ParamGroupPtr& paramGroupPtr : paramGroupPtrs) { vector pgResults = paramGroupPtr->cvParamChildren(cvid); results.insert(results.end(), pgResults.begin(), pgResults.end()); } return results; } PWIZ_API_DECL bool ParamContainer::hasCVParam(CVID cvid) const { CVParam param = cvParam(cvid); return (param.cvid != CVID_Unknown); } PWIZ_API_DECL bool ParamContainer::hasCVParamChild(CVID cvid) const { CVParam param = cvParamChild(cvid); return (param.cvid != CVID_Unknown); } namespace { struct HasName { string name_; HasName(const string& name) : name_(name) {} bool operator()(const UserParam& userParam) {return name_ == userParam.name;} }; } // namespace PWIZ_API_DECL UserParam ParamContainer::userParam(const string& name) const { vector::const_iterator it = find_if(userParams.begin(), userParams.end(), HasName(name)); return it!=userParams.end() ? *it : UserParam(); } PWIZ_API_DECL void ParamContainer::set(CVID cvid, const string& value, CVID units) { vector::iterator it = find_if(cvParams.begin(), cvParams.end(), CVParamIs(cvid)); if (it!=cvParams.end()) { it->value = value; it->units = units; return; } cvParams.push_back(CVParam(cvid, value, units)); } PWIZ_API_DECL void ParamContainer::set(CVID cvid, double value, CVID units) { set(cvid, pwiz::util::toString(value), units); } PWIZ_API_DECL void ParamContainer::set(CVID cvid, float value, CVID units) { set(cvid, pwiz::util::toString(value), units); } PWIZ_API_DECL void ParamContainer::set(CVID cvid, int value, CVID units) { set(cvid, pwiz::util::toString(value), units); } PWIZ_API_DECL bool ParamContainer::empty() const { return paramGroupPtrs.empty() && cvParams.empty() && userParams.empty(); } PWIZ_API_DECL void ParamContainer::clear() { paramGroupPtrs.clear(); cvParams.clear(); userParams.clear(); } PWIZ_API_DECL bool ParamContainer::operator==(const ParamContainer& that) const { return !Diff(*this, that); } PWIZ_API_DECL bool ParamContainer::operator!=(const ParamContainer& that) const { return !(*this == that); } // // ParamGroup // PWIZ_API_DECL ParamGroup::ParamGroup(const string& _id) : id(_id) {} PWIZ_API_DECL bool ParamGroup::empty() const { return id.empty() && ParamContainer::empty(); } } // namespace data } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/common/ParamTypes.hpp000066400000000000000000000261271444255175000226530ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _PARAMTYPES_HPP_ #define _PARAMTYPES_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/optimized_lexical_cast.hpp" #include "cv.hpp" #include #include #include namespace pwiz { namespace data { using namespace pwiz::cv; /// represents a tag-value pair, where the tag comes from the controlled vocabulary struct PWIZ_API_DECL CVParam { CVID cvid; std::string value; CVID units; CVParam(CVID _cvid, float _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, double _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, int _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, long _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, unsigned int _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, unsigned long _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(boost::lexical_cast(_value)), units(_units) {} CVParam(CVID _cvid, std::string _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(_value), units(_units) {} CVParam(CVID _cvid, const char* _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(_value), units(_units) {} /// special case for bool (no lexical_cast) CVParam(CVID _cvid, bool _value, CVID _units = CVID_Unknown) : cvid(_cvid), value(_value ? "true" : "false"), units(_units) {} /// constructor for non-valued CVParams CVParam(CVID _cvid = CVID_Unknown) : cvid(_cvid), units(CVID_Unknown) {} ~CVParam(); /// templated value access with type conversion template value_type valueAs() const { return !value.empty() ? boost::lexical_cast(value) : boost::lexical_cast(0); } /// convenience function to return string for the cvid std::string name() const; /// convenience function to return string for the units std::string unitsName() const; /// convenience function to return time in seconds (throws if units not a time unit) double timeInSeconds() const; /// convenience function to return value without scientific notation (throws if not a double) std::string valueFixedNotation() const; /// equality operator bool operator==(const CVParam& that) const { return that.cvid==cvid && that.value==value && that.units==units; } /// inequality operator bool operator!=(const CVParam& that) const { return !operator==(that); } bool empty() const {return cvid==CVID_Unknown && value.empty() && units==CVID_Unknown;} }; /// functor for finding CVParam with specified exact CVID in a collection of CVParams: /// /// vector::const_iterator it = /// find_if(params.begin(), params.end(), CVParamIs(MS_software)); /// struct PWIZ_API_DECL CVParamIs { CVParamIs(CVID cvid) : cvid_(cvid) {} bool operator()(const CVParam& param) const {return param.cvid == cvid_;} CVID cvid_; }; /// functor for finding children of a specified CVID in a collection of CVParams: /// /// vector::const_iterator it = /// find_if(params.begin(), params.end(), CVParamIsChildOf(MS_software)); /// struct PWIZ_API_DECL CVParamIsChildOf { CVParamIsChildOf(CVID cvid) : cvid_(cvid) {} bool operator()(const CVParam& param) const {return cvIsA(param.cvid, cvid_);} CVID cvid_; }; /// special case for bool (no lexical_cast) /// (this has to be outside the class for gcc 3.4, inline for msvc) template<> inline bool CVParam::valueAs() const { return value == "true"; } PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const CVParam& param); /// Uncontrolled user parameters (essentially allowing free text). Before using these, one should verify whether there is an appropriate CV term available, and if so, use the CV term instead struct PWIZ_API_DECL UserParam { /// the name for the parameter. std::string name; /// the value for the parameter, where appropriate. std::string value; /// the datatype of the parameter, where appropriate (e.g.: xsd:float). std::string type; /// an optional CV parameter for the unit term associated with the value, if any (e.g. MS_electron_volt). CVID units; UserParam(const std::string& _name = "", const std::string& _value = "", const std::string& _type = "", CVID _units = CVID_Unknown); ~UserParam(); UserParam(const UserParam& other); UserParam& operator=(const UserParam& rhs); /// convenience function to return time in seconds (throws if units not a time unit) double timeInSeconds() const; /// Templated value access with type conversion template value_type valueAs() const { return !value.empty() ? boost::lexical_cast(value) : boost::lexical_cast(0); } /// returns true iff name, value, type, and units are all empty bool empty() const; /// returns true iff name, value, type, and units are all pairwise equal bool operator==(const UserParam& that) const; /// returns !(this==that) bool operator!=(const UserParam& that) const; }; // Special case for bool (outside the class for gcc 3.4, and inline for msvc) template<> inline bool UserParam::valueAs() const { return value == "true"; } struct ParamGroup; typedef boost::shared_ptr ParamGroupPtr; /// The base class for elements that may contain cvParams, userParams, or paramGroup references struct PWIZ_API_DECL ParamContainer { /// a collection of references to ParamGroups std::vector paramGroupPtrs; /// a collection of controlled vocabulary terms std::vector cvParams; /// a collection of uncontrolled user terms std::vector userParams; /// finds cvid in the container: /// - returns first CVParam result such that (result.cvid == cvid); /// - if not found, returns CVParam(CVID_Unknown) /// - recursive: looks into paramGroupPtrs CVParam cvParam(CVID cvid) const; /// finds child of cvid in the container: /// - returns first CVParam result such that (result.cvid is_a cvid); /// - if not found, CVParam(CVID_Unknown) /// - recursive: looks into paramGroupPtrs CVParam cvParamChild(CVID cvid) const; /// finds cvid in the container: /// - returns first CVParam result's value such that (result.cvid == cvid); /// - if not found, returns the given default value /// - recursive: looks into paramGroupPtrs template ValueT cvParamValueOrDefault(CVID cvid, ValueT defaultValue) const { CVParam p = cvParam(cvid); return p.empty() ? defaultValue : p.valueAs(); } /// finds child of cvid in the container: /// - returns first CVParam result's value such that (result.cvid is_a cvid); /// - if not found, returns the given default value /// - recursive: looks into paramGroupPtrs template ValueT cvParamChildValueOrDefault(CVID cvid, ValueT defaultValue) const { CVParam p = cvParamChild(cvid); return p.empty() ? defaultValue : p.valueAs(); } /// finds all children of cvid in the container: /// - returns all CVParam results such that (result.cvid is_a cvid); /// - if not found, empty vector /// - recursive: looks into paramGroupPtrs std::vector cvParamChildren(CVID cvid) const; /// returns true iff cvParams contains exact cvid (recursive) bool hasCVParam(CVID cvid) const; /// returns true iff cvParams contains a child (is_a) of cvid (recursive) bool hasCVParamChild(CVID cvid) const; /// finds UserParam with specified name /// - returns UserParam() if name not found /// - not recursive: looks only at local userParams UserParam userParam(const std::string&) const; /// set/add a CVParam (not recursive) void set(CVID cvid, const std::string& value = "", CVID units = CVID_Unknown); /// set/add a CVParam (not recursive) void set(CVID cvid, double value, CVID units = CVID_Unknown); /// set/add a CVParam (not recursive) void set(CVID cvid, float value, CVID units = CVID_Unknown); /// set/add a CVParam (not recursive) void set(CVID cvid, int value, CVID units = CVID_Unknown); /// set/add a CVParam (not recursive) template void set(CVID cvid, value_type value, CVID units = CVID_Unknown) { set(cvid, boost::lexical_cast(value), units); } /// returns true iff the element contains no params or param groups bool empty() const; /// clears the collections void clear(); /// returns true iff this and that have the exact same cvParams and userParams /// - recursive: looks into paramGroupPtrs bool operator==(const ParamContainer& that) const; /// returns !(this==that) bool operator!=(const ParamContainer& that) const; }; /// special case for bool (outside the class for gcc 3.4, and inline for msvc) template<> inline void ParamContainer::set(CVID cvid, bool value, CVID units) { set(cvid, (value ? "true" : "false"), units); } /// A collection of CVParam and UserParam elements that can be referenced from elsewhere in this mzML document by using the 'paramGroupRef' element in that location to reference the 'id' attribute value of this element. struct PWIZ_API_DECL ParamGroup : public ParamContainer { /// the identifier with which to reference this ReferenceableParamGroup. std::string id; ParamGroup(const std::string& _id = ""); /// returns true iff the element contains no params or param groups bool empty() const; }; } // namespace data } // namespace pwiz #endif // _PARAMTYPES_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/Unimod.hpp000066400000000000000000000121371444255175000220150ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _UNIMOD_HPP_ #define _UNIMOD_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/chemistry/Chemistry.hpp" #include "pwiz/utility/chemistry/MZTolerance.hpp" #include "cv.hpp" #include #include namespace pwiz { namespace data { namespace unimod { using namespace cv; using namespace chemistry; using namespace boost::logic; BOOST_BITFIELD_EX(Site, PWIZ_API_DECL, (Any)(1<<0) (NTerminus)(1<<1) (CTerminus)(1<<2) (Alanine)(1<<3) (Cysteine)(1<<4) (AsparticAcid)(1<<5) (GlutamicAcid)(1<<6) (Phenylalanine)(1<<7) (Glycine)(1<<8) (Histidine)(1<<9) (Isoleucine)(1<<10) (Lysine)(1<<11) (Leucine)(1<<12) (Methionine)(1<<13) (Asparagine)(1<<14) (Proline)(1<<15) (Glutamine)(1<<16) (Arginine)(1<<17) (Serine)(1<<18) (Threonine)(1<<19) (Selenocysteine)(1<<20) (Valine)(1<<21) (Tryptophan)(1<<22) (Tyrosine)(1<<23) ) BOOST_BITFIELD_DOMAIN_OPERATORS(Site) BOOST_ENUM_EX(Position, PWIZ_API_DECL, (Anywhere) (AnyNTerminus) (AnyCTerminus) (ProteinNTerminus) (ProteinCTerminus) ) BOOST_ENUM_DOMAIN_OPERATORS(Position) BOOST_BITFIELD_EX(Classification, PWIZ_API_DECL, (Any)(1<<0) (Artifact)(1<<1) (ChemicalDerivative)(1<<2) (CoTranslational)(1<<3) (IsotopicLabel)(1<<4) (Multiple)(1<<5) (NLinkedGlycosylation)(1<<6) (NonStandardResidue)(1<<7) (OLinkedGlycosylation)(1<<8) (OtherGlycosylation)(1<<9) (Other)(1<<10) (PostTranslational)(1<<11) (PreTranslational)(1<<12) (Substitution)(1<<13) (SynthPepProtectGP)(1<<14) ) BOOST_BITFIELD_DOMAIN_OPERATORS(Classification) /// a modification from Unimod struct PWIZ_API_DECL Modification { struct PWIZ_API_DECL Specificity { Site site; Position position; bool hidden; Classification classification; }; CVID cvid; std::string name; Formula deltaComposition; double deltaMonoisotopicMass() const; double deltaAverageMass() const; bool approved; std::vector specificities; }; /// returns the Site given a one-letter residue code, or: /// 'x' for Site::Any, 'n' for Site::NTerminus, 'c' for Site::CTerminus PWIZ_API_DECL Site site(char symbol); /// returns a Position corresponding to one of the following CVIDs: /// CVID_Unknown: Position::Anywhere /// MS_modification_specificity_peptide_N_term: Position::AnyNTerminus /// MS_modification_specificity_peptide_C_term: Position::AnyCTerminus /// Else: invalid_argument exception PWIZ_API_DECL Position position(CVID cvid = CVID_Unknown); /// the entire list of Unimod modifications PWIZ_API_DECL const std::vector& modifications(); /// get a list of modifications by mass and tolerance; /// - mass is treated as monoisotopic if monoisotopic=true; if indeterminate, both average and monoisotopic lookups are done /// - if approved is not indeterminate, only approved/unapproved modifications are considered /// - the site, position, and classification parameters filter the resulting modifications such that /// every modification must have at least one specificity matching all three criteria; /// - if hidden is not indeterminate, matching site/position/classification specificities must be hidden (or not) PWIZ_API_DECL std::vector modifications(double mass, double tolerance, tribool monoisotopic = true, tribool approved = true, Site site = Site::Any, Position position = Position::Anywhere, Classification classification = Classification::Any, tribool hidden = indeterminate); /// find a modification by CVID PWIZ_API_DECL const Modification& modification(CVID cvid); /// find a modification by title, e.g. "Phospho" not "Phosphorylation" PWIZ_API_DECL const Modification& modification(const std::string& title); } // namespace unimod } // namespace data } // namespace pwiz #endif // _UNIMOD_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/cv.cpp000066400000000000000000072652031444255175000212000ustar00rootroot00000000000000// // $Id$ // // // Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // This file was generated by cvgen. // // Do not edit this file! Your changes will be lost next time cvgen is run - // see pwiz/scripts/misc/update_cv.bat for info on how that works. // Instead, edit cvgen.cpp itself, or the cv.inl include file if adding static // code or data. // #define PWIZ_SOURCE #include "cv.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/misc/Singleton.hpp" namespace pwiz { namespace cv { namespace { struct TermInfo { CVID cvid; const char* id; const char* name; const char* def; bool isObsolete; }; const TermInfo termInfos_[] = { {CVID_Unknown, "??:0000000", "CVID_Unknown", "CVID_Unknown", false}, {MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies, "MS:0000000", "Proteomics Standards Initiative Mass Spectrometry Vocabularies", "Proteomics Standards Initiative Mass Spectrometry Vocabularies.", false}, {PEFF_PEFF_CV_term, "PEFF:0000001", "PEFF CV term", "PSI Extended FASTA Format controlled vocabulary term.", false}, {PEFF_PEFF_file_header_section_term, "PEFF:0000002", "PEFF file header section term", "CV term that may appear in a PEFF file header section.", false}, {PEFF_PEFF_file_sequence_entry_term, "PEFF:0000003", "PEFF file sequence entry term", "CV term that may appear in a description line of a PEFF file individual sequence entry.", false}, {PEFF_DbName, "PEFF:0000008", "DbName", "PEFF keyword for the sequence database name.", false}, {PEFF_Prefix, "PEFF:0000009", "Prefix", "PEFF keyword for the sequence database prefix.", false}, {PEFF_DbDescription, "PEFF:0000010", "DbDescription", "PEFF keyword for the sequence database short description.", false}, {PEFF_Decoy, "PEFF:0000011", "Decoy", "PEFF keyword for the specifying whether the sequence database is a decoy database.", false}, {PEFF_DbSource, "PEFF:0000012", "DbSource", "PEFF keyword for the source of the database file.", false}, {PEFF_DbVersion, "PEFF:0000013", "DbVersion", "PEFF keyword for the database version (release date) according to database provider.", false}, {PEFF_DbDate_OBSOLETE, "PEFF:0000014", "DbDate", "PEFF keyword for the database date (release or file date of the source) according to database provider.", true}, {PEFF_NumberOfEntries, "PEFF:0000015", "NumberOfEntries", "PEFF keyword for the sumber of sequence entries in the database.", false}, {PEFF_Conversion, "PEFF:0000016", "Conversion", "PEFF keyword for the description of the conversion from original format to this current one.", false}, {PEFF_SequenceType, "PEFF:0000017", "SequenceType", "PEFF keyword for the molecular type of the sequences.", false}, {PEFF_SpecificKey, "PEFF:0000018", "SpecificKey", "PEFF keyword for database specific keywords not included in the current controlled vocabulary.", false}, {PEFF_SpecificValue, "PEFF:0000019", "SpecificValue", "PEFF keyword for the specific values for a custom key.", false}, {PEFF_DatabaseDescription, "PEFF:0000020", "DatabaseDescription", "PEFF keyword for the short description of the PEFF file.", false}, {PEFF_GeneralComment, "PEFF:0000021", "GeneralComment", "PEFF keyword for a general comment.", false}, {PEFF_ProteoformDb, "PEFF:0000022", "ProteoformDb", "PEFF keyword that when set to 'true' indicates that the database contains complete proteoforms.", false}, {PEFF_OptionalTagDef, "PEFF:0000023", "OptionalTagDef", "PEFF keyword for the short tag (abbreviation) and longer definition used to annotate a sequence annotation (such as variant or modification) in the OptionalTag location.", false}, {PEFF_HasAnnotationIdentifiers, "PEFF:0000024", "HasAnnotationIdentifiers", "PEFF keyword that when set to 'true' indicates that entries in the database have identifiers for each annotation.", false}, {PEFF_DbUniqueId_OBSOLETE, "PEFF:0001001", "DbUniqueId", "Sequence database unique identifier.", true}, {PEFF_PName, "PEFF:0001002", "PName", "PEFF keyword for the protein full name.", false}, {PEFF_NcbiTaxId, "PEFF:0001003", "NcbiTaxId", "PEFF keyword for the NCBI taxonomy identifier.", false}, {PEFF_TaxName, "PEFF:0001004", "TaxName", "PEFF keyword for the taxonomy name (latin or common name).", false}, {PEFF_GName, "PEFF:0001005", "GName", "PEFF keyword for the gene name.", false}, {PEFF_Length, "PEFF:0001006", "Length", "PEFF keyword for the sequence length.", false}, {PEFF_SV, "PEFF:0001007", "SV", "PEFF keyword for the sequence version.", false}, {PEFF_EV, "PEFF:0001008", "EV", "PEFF keyword for the entry version.", false}, {PEFF_PE, "PEFF:0001009", "PE", "PEFF keyword for the Protein Evidence; A UniProtKB code 1-5.", false}, {PEFF_Processed, "PEFF:0001010", "Processed", "PEFF keyword for information on how the full length original protein sequence can be processed into shorter components such as signal peptides and chains.", false}, {PEFF_Variant_OBSOLETE, "PEFF:0001011", "Variant", "Sequence variation (substitution, insertion, deletion).", true}, {PEFF_ModResPsi, "PEFF:0001012", "ModResPsi", "PEFF keyword for the modified residue with PSI-MOD identifier.", false}, {PEFF_ModRes, "PEFF:0001013", "ModRes", "PEFF keyword for the modified residue without aPSI-MOD or UniMod identifier.", false}, {PEFF_AltAC, "PEFF:0001014", "AltAC", "PEFF keyword for the Alternative Accession Code.", false}, {PEFF_SeqStatus, "PEFF:0001015", "SeqStatus", "PEFF keyword for the sequence status. Complete or Fragment.", false}, {PEFF_CC, "PEFF:0001016", "CC", "PEFF keyword for the entry associated comment.", false}, {PEFF_KW, "PEFF:0001017", "KW", "PEFF keyword for the entry associated keyword(s).", false}, {PEFF_GO, "PEFF:0001018", "GO", "PEFF keyword for the Gene Ontology code.", false}, {PEFF_XRef, "PEFF:0001019", "XRef", "PEFF keyword for the cross-reference to an external resource.", false}, {PEFF_mature_protein, "PEFF:0001020", "mature protein", "Portion of a newly synthesized protein that contributes to a final structure after other components such as signal peptides are removed.", false}, {PEFF_signal_peptide, "PEFF:0001021", "signal peptide", "Short peptide present at the N-terminus of a newly synthesized protein that is cleaved off and is not part of the final mature protein.", false}, {PEFF_transit_peptide, "PEFF:0001022", "transit peptide", "Short peptide present at the N-terminus of a newly synthesized protein that helps the protein through the membrane of its destination organelle.", false}, {PEFF_Conflict, "PEFF:0001023", "Conflict", "PEFF keyword for the sequence conflict; a UniProtKB term.", false}, {PEFF_Crc64, "PEFF:0001024", "Crc64", "PEFF keyword for the Sequence checksum in crc64.", false}, {PEFF_Domain, "PEFF:0001025", "Domain", "PEFF keyword for the sequence range of a domain.", false}, {PEFF_ID, "PEFF:0001026", "ID", "PEFF keyword for the UniProtKB specific Protein identifier ID; a UniProtKB term.", false}, {PEFF_ModResUnimod, "PEFF:0001027", "ModResUnimod", "PEFF keyword for the modified residue with UniMod identifier.", false}, {PEFF_VariantSimple, "PEFF:0001028", "VariantSimple", "PEFF keyword for the simple sequence variation of a single amino acid change. A change to a stop codon is permitted with a * symbol. More complex variations must be encoded with the VariantComplex term.", false}, {PEFF_VariantComplex, "PEFF:0001029", "VariantComplex", "PEFF keyword for a sequence variation that is more complex than a single amino acid change or change to a stop codon.", false}, {PEFF_Proteoform, "PEFF:0001030", "Proteoform", "PEFF keyword for the proteoforms of this protein, constructed as a set of annotation identifiers.", false}, {PEFF_DisulfideBond, "PEFF:0001031", "DisulfideBond", "PEFF keyword for the disulfide bonds in this protein, constructed as a sets of annotation identifiers of two half-cystine modifications.", false}, {PEFF_PEFF_molecule_processing_keyword, "PEFF:0001032", "PEFF molecule processing keyword", "PEFF keyword describing the type of processing event being described.", false}, {PEFF_Comment, "PEFF:0001033", "Comment", "PEFF keyword for the individual protein entry comment. It is discouraged to put parsable information here. This is only for free-text commentary.", false}, {PEFF_propeptide, "PEFF:0001034", "propeptide", "Short peptide that is cleaved off a newly synthesized protein and generally immediately degraded in the process of protein maturation, and is not a signal peptide or transit peptide.", false}, {PEFF_initiator_methionine, "PEFF:0001035", "initiator methionine", "N-terminal methionine residue of a protein that can be co-translationally cleaved.", false}, {MS_sample_number, "MS:1000001", "sample number", "A reference number relevant to the sample under study.", false}, {MS_sample_name, "MS:1000002", "sample name", "A reference string relevant to the sample under study.", false}, {MS_sample_state, "MS:1000003", "sample state", "The chemical phase of a pure sample, or the state of a mixed sample.", false}, {MS_sample_mass, "MS:1000004", "sample mass", "Total mass of sample used.", false}, {MS_sample_volume, "MS:1000005", "sample volume", "Total volume of solution used.", false}, {MS_sample_concentration, "MS:1000006", "sample concentration", "Concentration of sample in picomol/ul, femtomol/ul or attomol/ul solution used.", false}, {MS_inlet_type, "MS:1000007", "inlet type", "The nature of the sample inlet.", false}, {MS_ionization_type, "MS:1000008", "ionization type", "The method by which gas phase ions are generated from the sample.", false}, {MS_ionization_mode_OBSOLETE, "MS:1000009", "ionization mode", "Whether positive or negative ions are selected for analysis by the spectrometer.", true}, {MS_analyzer_type_OBSOLETE, "MS:1000010", "analyzer type", "The common name of the particular analyzer stage being described. Synonym of mass analyzer, should be obsoleted.", true}, {MS_mass_resolution, "MS:1000011", "mass resolution", "Smallest mass difference between two equal magnitude peaks so that the valley between them is a specified fraction of the peak height.", false}, {MS_resolution_measurement_method, "MS:1000012", "resolution measurement method", "Which of the available standard measures is used to define whether two peaks are separate.", false}, {MS_resolution_type_OBSOLETE, "MS:1000013", "resolution type", "Specify the nature of resolution for the mass analyzer. Resolution is usually either constant with respect to m/z or proportional to m/z.", true}, {MS_accuracy, "MS:1000014", "accuracy", "Accuracy is the degree of conformity of a measured mass to its actual value.", false}, {MS_scan_rate, "MS:1000015", "scan rate", "Rate in Th/sec for scanning analyzers.", false}, {MS_scan_start_time, "MS:1000016", "scan start time", "The time that an analyzer started a scan, relative to the start of the MS run.", false}, {MS_Scan_Function_OBSOLETE, "MS:1000017", "Scan Function", "Describes the type of mass analysis being performed. Two primary modes are: typical acquisition over a range of masses (Mass Scan), and Selected Ion Detection. The primary difference is that Selected Ion Detection produces a single value for the signal at the selected mass rather than producing a mass spectrum.", true}, {MS_scan_direction, "MS:1000018", "scan direction", "Direction in terms of m/z of the scan for scanning analyzers (low to high, or high to low).", false}, {MS_scan_law, "MS:1000019", "scan law", "Describes the function in control of the m/z scan (for scanning instruments). Commonly the scan function is linear, but in principle any function can be used.", false}, {MS_scanning_method_OBSOLETE, "MS:1000020", "scanning method", "Describes the acquisition data type produced by a tandem mass spectrometry experiment.", true}, {MS_reflectron_state, "MS:1000021", "reflectron state", "Status of the reflectron, turned on or off.", false}, {MS_TOF_Total_Path_Length, "MS:1000022", "TOF Total Path Length", "The length of the field free drift space in a time of flight mass spectrometer.", false}, {MS_isolation_width_OBSOLETE, "MS:1000023", "isolation width", "The total width (i.e. not half for plus-or-minus) of the gate applied around a selected precursor ion.", true}, {MS_final_MS_exponent, "MS:1000024", "final MS exponent", "Final MS level achieved when performing PFF with the ion trap (e.g. MS E10).", false}, {MS_magnetic_field_strength, "MS:1000025", "magnetic field strength", "A property of space that produces a force on a charged particle equal to qv x B where q is the particle charge and v its velocity.", false}, {MS_detector_type, "MS:1000026", "detector type", "Type of detector used in the mass spectrometer.", false}, {MS_detector_acquisition_mode, "MS:1000027", "detector acquisition mode", "Method by which detector signal is acquired by the data system.", false}, {MS_detector_resolution, "MS:1000028", "detector resolution", "The resolving power of the detector to detect the smallest difference between two ions so that the valley between them is a specified fraction of the peak height.", false}, {MS_sampling_frequency, "MS:1000029", "sampling frequency", "The rate of signal sampling (measurement) with respect to time.", false}, {MS_vendor_OBSOLETE, "MS:1000030", "vendor", "Name of instrument vendor.", true}, {MS_instrument_model, "MS:1000031", "instrument model", "Instrument model name not including the vendor's name.", false}, {MS_customization, "MS:1000032", "customization", "Free text description of a single customization made to the instrument; for several modifications, use several entries.", false}, {MS_deisotoping, "MS:1000033", "deisotoping", "The removal of isotope peaks to represent the fragment ion as one data point and is commonly done to reduce complexity. It is done in conjunction with the charge state deconvolution.", false}, {MS_charge_deconvolution, "MS:1000034", "charge deconvolution", "The determination of the mass of an ion based on the mass spectral peaks that represent multiple-charge ions.", false}, {MS_peak_picking, "MS:1000035", "peak picking", "Spectral peak processing conducted on the acquired data to convert profile data to centroided data.", false}, {MS_scan_mode_OBSOLETE, "MS:1000036", "scan mode", "OBSOLETE.", true}, {MS_polarity_OBSOLETE, "MS:1000037", "polarity", "Terms to describe the polarity setting of the instrument.", true}, {MS_minute_OBSOLETE, "MS:1000038", "minute", "Acquisition time in minutes.", true}, {MS_second_OBSOLETE, "MS:1000039", "second", "Acquisition time in seconds.", true}, {MS_m_z, "MS:1000040", "m/z", "Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit thomson (Th) is deprecated.", false}, {MS_charge_state, "MS:1000041", "charge state", "Number of net charges, positive or negative, on an ion.", false}, {MS_peak_intensity, "MS:1000042", "peak intensity", "Intensity of ions as measured by the height or area of a peak in a mass spectrum.", false}, {MS_intensity_unit, "MS:1000043", "intensity unit", "Intensity units are commonly arbitrary. Detected in counts per second (cps) when using counting detectors, but measured in volts when using analog detectors.", false}, {MS_dissociation_method, "MS:1000044", "dissociation method", "Fragmentation method used for dissociation or fragmentation.", false}, {MS_collision_energy, "MS:1000045", "collision energy", "Energy for an ion experiencing collision with a stationary gas particle resulting in dissociation of the ion.", false}, {MS_energy_unit_OBSOLETE, "MS:1000046", "energy unit", "Energy units are represented in either eV or Joules.", true}, {MS_emulsion, "MS:1000047", "emulsion", "State if the sample is in emulsion form.", false}, {MS_gaseous_sample_state, "MS:1000048", "gaseous sample state", "State if the sample is in gaseous form.", false}, {MS_liquid_sample_state, "MS:1000049", "liquid sample state", "State if the sample is in liquid form.", false}, {MS_solid_sample_state, "MS:1000050", "solid sample state", "State if the sample is in solid form.", false}, {MS_solution, "MS:1000051", "solution", "State if the sample is in solution form.", false}, {MS_suspension, "MS:1000052", "suspension", "State if the sample is in suspension form.", false}, {MS_sample_batch, "MS:1000053", "sample batch", "Sample batch lot identifier.", false}, {MS_chromatography_OBSOLETE, "MS:1000054", "chromatography", "Chromatographic conditions used to obtain the sample.", true}, {MS_continuous_flow_fast_atom_bombardment, "MS:1000055", "continuous flow fast atom bombardment", "Fast atom bombardment ionization in which the analyte in solution is entrained in a flowing liquid matrix.", false}, {MS_direct_inlet, "MS:1000056", "direct inlet", "The sample is directly inserted into the ion source, usually on the end of a heatable probe.", false}, {MS_electrospray_inlet, "MS:1000057", "electrospray inlet", "Inlet used for introducing the liquid sample into an electrospray ionization source.", false}, {MS_flow_injection_analysis, "MS:1000058", "flow injection analysis", "Sample is directly injected or infused into the ionization source.", false}, {MS_inductively_coupled_plasma, "MS:1000059", "inductively coupled plasma", "A gas discharge ion source in which the energy to the plasma is supplied by electromagnetic induction.", false}, {MS_infusion, "MS:1000060", "infusion", "The continuous flow of solution of a sample into the ionization source.", false}, {MS_jet_separator, "MS:1000061", "jet separator", "A device that separates carrier gas from gaseous analyte molecules on the basis of diffusivity.", false}, {MS_membrane_separator, "MS:1000062", "membrane separator", "A device to separate carrier molecules from analyte molecules on the basis of ease of diffusion across a semipermeable membrane.", false}, {MS_moving_belt, "MS:1000063", "moving belt", "Continuous moving surface in the form of a belt which passes through an ion source carrying analyte molecules.", false}, {MS_moving_wire, "MS:1000064", "moving wire", "Continuous moving surface in the form of a wire which passes through an ion source carrying analyte molecules.", false}, {MS_open_split, "MS:1000065", "open split", "A division of flowing stream of liquid into two streams.", false}, {MS_particle_beam, "MS:1000066", "particle beam", "Method for generating ions from a solution of an analyte.", false}, {MS_reservoir, "MS:1000067", "reservoir", "A sample inlet method involving a reservoir.", false}, {MS_septum, "MS:1000068", "septum", "A disc composed of a flexible material that seals the entrance to the reservoir. Can also be entrance to the vacuum chamber.", false}, {MS_thermospray_inlet, "MS:1000069", "thermospray inlet", "A method for generating gas phase ions from a solution of an analyte by rapid heating of the sample.", false}, {MS_atmospheric_pressure_chemical_ionization, "MS:1000070", "atmospheric pressure chemical ionization", "Chemical ionization that takes place at atmospheric pressure as opposed to the reduced pressure is normally used for chemical ionization.", false}, {MS_chemical_ionization, "MS:1000071", "chemical ionization", "The formation of a new ion by the reaction of a neutral species with an ion. The process may involve transfer of an electron, a proton or other charged species between the reactants. When a positive ion results from chemical ionization the term may be used without qualification. When a negative ion results the term negative ion chemical ionization should be used. Note that this term is not synonymous with chemi-ionization.", false}, {MS_Electronic_Ionization_OBSOLETE, "MS:1000072", "Electronic Ionization", "The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended.", true}, {MS_electrospray_ionization, "MS:1000073", "electrospray ionization", "A process in which ionized species in the gas phase are produced from an analyte-containing solution via highly charged fine droplets, by means of spraying the solution from a narrow-bore needle tip at atmospheric pressure in the presence of a high electric field. When a pressurized gas is used to aid in the formation of a stable spray, the term pneumatically assisted electrospray ionization is used. The term ion spray is not recommended.", false}, {MS_fast_atom_bombardment_ionization, "MS:1000074", "fast atom bombardment ionization", "The ionization of any species by the interaction of a focused beam of neutral atoms having a translational energy of several thousand eV with a sample that is typically dissolved in a solvent matrix. See also secondary ionization.", false}, {MS_matrix_assisted_laser_desorption_ionization, "MS:1000075", "matrix-assisted laser desorption ionization", "The formation of gas-phase ions from molecules that are present in a solid or solvent matrix that is irradiated with a pulsed laser. See also laser desorption/ionization.", false}, {MS_negative_ion_mode_OBSOLETE, "MS:1000076", "negative ion mode", "OBSOLETE.", true}, {MS_positive_ion_mode_OBSOLETE, "MS:1000077", "positive ion mode", "OBSOLETE.", true}, {MS_axial_ejection_linear_ion_trap, "MS:1000078", "axial ejection linear ion trap", "A linear ion trap mass spectrometer where ions are ejected along the axis of the analyzer.", false}, {MS_fourier_transform_ion_cyclotron_resonance_mass_spectrometer, "MS:1000079", "fourier transform ion cyclotron resonance mass spectrometer", "A mass spectrometer based on the principle of ion cyclotron resonance in which an ion in a magnetic field moves in a circular orbit at a frequency characteristic of its m/z value. Ions are coherently excited to a larger radius orbit using a pulse of radio frequency energy and their image charge is detected on receiver plates as a time domain signal. Fourier transformation of the time domain signal results in a frequency domain signal which is converted to a mass spectrum based in the inverse relationship between frequency and m/z.", false}, {MS_magnetic_sector, "MS:1000080", "magnetic sector", "A device that produces a magnetic field perpendicular to a charged particle beam that deflects the beam to an extent that is proportional to the particle momentum per unit charge. For a monoenergetic beam, the deflection is proportional to m/z.", false}, {MS_quadrupole, "MS:1000081", "quadrupole", "A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis.", false}, {MS_quadrupole_ion_trap, "MS:1000082", "quadrupole ion trap", "Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials.", false}, {MS_radial_ejection_linear_ion_trap, "MS:1000083", "radial ejection linear ion trap", "A linear ion trap mass spectrometer where ions are ejected along the radius of the analyzer.", false}, {MS_time_of_flight, "MS:1000084", "time-of-flight", "Instrument that separates ions by m/z in a field-free region after acceleration to a fixed acceleration energy.", false}, {MS_baseline, "MS:1000085", "baseline", "An attribute of resolution when recording the detector response in absence of the analyte.", false}, {MS_full_width_at_half_maximum, "MS:1000086", "full width at half-maximum", "A measure of resolution represented as width of the peak at half peak height.", false}, {MS_ten_percent_valley, "MS:1000087", "ten percent valley", "An attribute of resolution when the ratio between adjacent signals is 10% of the signal height.", false}, {MS_constant_OBSOLETE, "MS:1000088", "constant", "When resolution is constant with respect to m/z.", true}, {MS_proportional_OBSOLETE, "MS:1000089", "proportional", "When resolution is proportional with respect to m/z.", true}, {MS_mass_scan_OBSOLETE, "MS:1000090", "mass scan", "A variation of instrument where a selected mass is scanned.", true}, {MS_selected_ion_detection_OBSOLETE, "MS:1000091", "selected ion detection", "Please see Single Ion Monitoring.", true}, {MS_decreasing_m_z_scan, "MS:1000092", "decreasing m/z scan", "High to low direction in terms of m/z of the scan for scanning analyzers.", false}, {MS_increasing_m_z_scan, "MS:1000093", "increasing m/z scan", "Low to high direction in terms of m/z of the scan for scanning analyzers.", false}, {MS_exponential, "MS:1000094", "exponential", "The mass scan is done in exponential mode.", false}, {MS_linear_OBSOLETE, "MS:1000095", "linear", "The mass scan is done in linear mode.", true}, {MS_quadratic, "MS:1000096", "quadratic", "The mass scan is done in quadratic mode.", false}, {MS_constant_neutral_mass_loss_OBSOLETE, "MS:1000097", "constant neutral mass loss", "A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum.", true}, {MS_multiple_ion_monitoring_OBSOLETE, "MS:1000098", "multiple ion monitoring", "Data acquired when monitoring the ion current of a few specific m/z values. Remap to MS:1000205 -Selected Ion Monitoring.", true}, {MS_multiple_reaction_monitoring_OBSOLETE, "MS:1000099", "multiple reaction monitoring", "This term is not recommended. See Selected Reaction Monitoring.", true}, {MS_precursor_ion_scan_OBSOLETE, "MS:1000100", "precursor ion scan", "The specific scan function or process that will record a precursor ion spectrum.", true}, {MS_product_ion_scan_OBSOLETE, "MS:1000101", "product ion scan", "The specific scan function or process that records product ion spectrum.", true}, {MS_single_ion_monitoring_OBSOLETE, "MS:1000102", "single ion monitoring", "The operation of a mass spectrometer to monitor a single ion rather than scanning entire mass spectrum.", true}, {MS_single_reaction_monitoring_OBSOLETE, "MS:1000103", "single reaction monitoring", "This term is not recommended. See Selected Reaction Monitoring.", true}, {MS_None____OBSOLETE, "MS:1000104", "None ??", "None.", true}, {MS_reflectron_off, "MS:1000105", "reflectron off", "Reflectron is off.", false}, {MS_reflectron_on, "MS:1000106", "reflectron on", "Reflectron is on.", false}, {MS_channeltron, "MS:1000107", "channeltron", "A horn-shaped (or cone-shaped) continuous dynode particle multiplier. The ion strikes the inner surface of the device and induces the production of secondary electrons that in turn impinge on the inner surfaces to produce more secondary electrons. This avalanche effect produces an increase in signal in the final measured current pulse.", false}, {MS_conversion_dynode_electron_multiplier, "MS:1000108", "conversion dynode electron multiplier", "A surface that is held at high potential so that ions striking the surface produce electrons that are subsequently detected.", false}, {MS_conversion_dynode_photomultiplier, "MS:1000109", "conversion dynode photomultiplier", "A detector in which ions strike a conversion dynode to produce electrons that in turn generate photons through a phosphorescent screen that are detected by a photomultiplier.", false}, {MS_daly_detector, "MS:1000110", "daly detector", "Detector consisting of a conversion dynode, scintillator and photomultiplier. The metal knob at high potential emits secondary electrons when ions impinge on the surface. The secondary electrons are accelerated onto the scintillator that produces light that is then detected by the photomultiplier detector.", false}, {MS_electron_multiplier_tube, "MS:1000111", "electron multiplier tube", "A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons.", false}, {MS_faraday_cup, "MS:1000112", "faraday cup", "A conducting cup or chamber that intercepts a charged particle beam and is electrically connected to a current measuring device.", false}, {MS_focal_plane_array, "MS:1000113", "focal plane array", "An array of detectors for spatially disperse ion beams in which all ions simultaneously impinge on the detector plane.", false}, {MS_microchannel_plate_detector, "MS:1000114", "microchannel plate detector", "A thin plate that contains a closely spaced array of channels that each act as a continuous dynode particle multiplier. A charged particle, fast neutral particle, or photon striking the plate causes a cascade of secondary electrons that ultimately exits the opposite side of the plate.", false}, {MS_multi_collector, "MS:1000115", "multi-collector", "A detector system commonly used in inductively coupled plasma mass spectrometers.", false}, {MS_photomultiplier, "MS:1000116", "photomultiplier", "A detector for conversion of the ion/electron signal into photon(s) which are then amplified and detected.", false}, {MS_analog_digital_converter, "MS:1000117", "analog-digital converter", "Analog-to-digital converter (abbreviated ADC, A/D or A to D) is an electronic integrated circuit (i/c) that converts continuous signals to discrete digital numbers.", false}, {MS_pulse_counting, "MS:1000118", "pulse counting", "Definition to do.", false}, {MS_time_digital_converter, "MS:1000119", "time-digital converter", "A device for converting a signal of sporadic pluses into a digital representation of their time indices.", false}, {MS_transient_recorder, "MS:1000120", "transient recorder", "A detector acquisition mode used for detecting transient signals.", false}, {MS_SCIEX_instrument_model, "MS:1000121", "SCIEX instrument model", "The brand of instruments from the joint venture between Applied Biosystems and MDS Analytical Technologies (formerly MDS SCIEX). Previously branded as \\\"Applied Biosystems|MDS SCIEX\\\".", false}, {MS_Bruker_Daltonics_instrument_model, "MS:1000122", "Bruker Daltonics instrument model", "Bruker Daltonics' instrument model.", false}, {MS_IonSpec_instrument_model, "MS:1000123", "IonSpec instrument model", "IonSpec corporation instrument model.", false}, {MS_Shimadzu_instrument_model, "MS:1000124", "Shimadzu instrument model", "Shimadzu corporation instrument model.", false}, {MS_Thermo_Finnigan_instrument_model, "MS:1000125", "Thermo Finnigan instrument model", "ThermoFinnigan from Thermo Electron Corporation instrument model.", false}, {MS_Waters_instrument_model, "MS:1000126", "Waters instrument model", "Waters Corporation instrument model.", false}, {MS_centroid_spectrum, "MS:1000127", "centroid spectrum", "Processing of profile data to produce spectra that contains discrete peaks of zero width. Often used to reduce the size of dataset.", false}, {MS_profile_spectrum, "MS:1000128", "profile spectrum", "A profile mass spectrum is created when data is recorded with ion current (counts per second) on one axis and mass/charge ratio on another axis.", false}, {MS_negative_scan, "MS:1000129", "negative scan", "Polarity of the scan is negative.", false}, {MS_positive_scan, "MS:1000130", "positive scan", "Polarity of the scan is positive.", false}, {MS_number_of_detector_counts, "MS:1000131", "number of detector counts", "The number of counted events observed in one or a group of elements of a detector.", false}, {MS_percent_of_base_peak, "MS:1000132", "percent of base peak", "The magnitude of a peak or measurement element expressed in terms of the percentage of the magnitude of the base peak intensity.", false}, {MS_collision_induced_dissociation, "MS:1000133", "collision-induced dissociation", "The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended.", false}, {MS_plasma_desorption, "MS:1000134", "plasma desorption", "The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization.", false}, {MS_post_source_decay, "MS:1000135", "post-source decay", "A technique specific to reflectron time-of-flight mass spectrometers where product ions of metastable transitions or collision-induced dissociations generated in the drift tube prior to entering the reflectron are m/z separated to yield product ion spectra.", false}, {MS_surface_induced_dissociation, "MS:1000136", "surface-induced dissociation", "Fragmentation that results from the collision of an ion with a surface.", false}, {MS_electron_volt_OBSOLETE, "MS:1000137", "electron volt", "A non-SI unit of energy (eV) defined as the energy acquired by a particle containing one unit of charge through a potential difference of one volt. An electron-volt is equal to 1.602 176 53(14) x 10^-19 J.", true}, {MS_normalized_collision_energy, "MS:1000138", "normalized collision energy", "Instrument setting, expressed in percent, for adjusting collisional energies of ions in an effort to provide equivalent excitation of all ions.", false}, {MS_4000_QTRAP, "MS:1000139", "4000 QTRAP", "Applied Biosystems/MDS SCIEX Q 4000 TRAP MS.", false}, {MS_4700_Proteomics_Analyzer, "MS:1000140", "4700 Proteomics Analyzer", "Applied Biosystems/MDS SCIEX 4700 Proteomics Analyzer MS.", false}, {MS_apex_IV, "MS:1000141", "apex IV", "Bruker Daltonics' apex IV: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR.", false}, {MS_apex_Q, "MS:1000142", "apex Q", "Bruker Daltonics' apex Q: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR.", false}, {MS_API_150EX, "MS:1000143", "API 150EX", "Applied Biosystems/MDS SCIEX API 150EX MS.", false}, {MS_API_150EX_Prep, "MS:1000144", "API 150EX Prep", "Applied Biosystems/MDS SCIEX API 150EX Prep MS.", false}, {MS_API_2000, "MS:1000145", "API 2000", "Applied Biosystems/MDS SCIEX API 2000 MS.", false}, {MS_API_3000, "MS:1000146", "API 3000", "Applied Biosystems/MDS SCIEX API 3000 MS.", false}, {MS_API_4000, "MS:1000147", "API 4000", "Applied Biosystems/MDS SCIEX API 4000 MS.", false}, {MS_autoflex_II, "MS:1000148", "autoflex II", "Bruker Daltonics' autoflex II: MALDI TOF.", false}, {MS_autoflex_TOF_TOF, "MS:1000149", "autoflex TOF/TOF", "Bruker Daltonics' autoflex TOF/TOF MS: MALDI TOF.", false}, {MS_Auto_Spec_Ultima_NT, "MS:1000150", "Auto Spec Ultima NT", "Waters magnetic sector based AutoSpec Ultima NT MS.", false}, {MS_BioTOF_II, "MS:1000151", "BioTOF II", "Bruker Daltonics' BioTOF II: ESI TOF.", false}, {MS_BioTOF_Q, "MS:1000152", "BioTOF-Q", "Bruker Daltonics' BioTOF-Q: ESI Q-TOF.", false}, {MS_DELTA_plusAdvantage, "MS:1000153", "DELTA plusAdvantage", "ThermoFinnigan DELTA plusAdvantage MS.", false}, {MS_DELTAplusXP, "MS:1000154", "DELTAplusXP", "ThermoFinnigan DELTAplusXP MS.", false}, {MS_ELEMENT2_OBSOLETE, "MS:1000155", "ELEMENT2", "ThermoFinnigan ELEMENT2 MS.", true}, {MS_esquire_4000, "MS:1000156", "esquire 4000", "Bruker Daltonics' esquire 4000: linear ion trap, ESI, MALDI, Nanospray, APCI, APPI.", false}, {MS_esquire_6000, "MS:1000157", "esquire 6000", "Bruker Daltonics' esquire 6000: linear ion trap, ESI, MALDI, Nanospray, APCI, APPI.", false}, {MS_explorer, "MS:1000158", "explorer", "IonSpec Explorer MS.", false}, {MS_GCT, "MS:1000159", "GCT", "Waters oa-ToF based GCT.", false}, {MS_HCT, "MS:1000160", "HCT", "Bruker Daltonics' HCT: ESI Q-TOF, Nanospray, APCI, APPI.", false}, {MS_HCTplus, "MS:1000161", "HCTplus", "Bruker Daltonics' HCTplus: ESI Q-TOF, Nanospray, APCI, APPI.", false}, {MS_HiRes_ESI, "MS:1000162", "HiRes ESI", "IonSpec HiResESI MS.", false}, {MS_HiRes_MALDI, "MS:1000163", "HiRes MALDI", "IonSpec HiResMALDI MS.", false}, {MS_IsoPrime, "MS:1000164", "IsoPrime", "Waters IsoPrime MS.", false}, {MS_IsoProbe, "MS:1000165", "IsoProbe", "Waters IsoProbe MS.", false}, {MS_IsoProbe_T, "MS:1000166", "IsoProbe T", "Waters IsoProbe T MS.", false}, {MS_LCQ_Advantage, "MS:1000167", "LCQ Advantage", "ThermoFinnigan LCQ Advantage MS.", false}, {MS_LCQ_Classic, "MS:1000168", "LCQ Classic", "ThermoFinnigan LCQ Classic MS.", false}, {MS_LCQ_Deca_XP_Plus, "MS:1000169", "LCQ Deca XP Plus", "ThermoFinnigan LCQ Deca XP Plus MS.", false}, {MS_M_LDI_L, "MS:1000170", "M@LDI L", "Waters oa-ToF based MALDI L.", false}, {MS_M_LDI_LR, "MS:1000171", "M@LDI LR", "Waters oa-ToF based MALDI LR.", false}, {MS_MAT253, "MS:1000172", "MAT253", "ThermoFinnigan MAT253 MS.", false}, {MS_MAT900XP, "MS:1000173", "MAT900XP", "ThermoFinnigan MAT900XP MS.", false}, {MS_MAT900XP_Trap, "MS:1000174", "MAT900XP Trap", "ThermoFinnigan MAT900XP Trap MS.", false}, {MS_MAT95XP, "MS:1000175", "MAT95XP", "ThermoFinnigan MAT95XP MS.", false}, {MS_MAT95XP_Trap, "MS:1000176", "MAT95XP Trap", "ThermoFinnigan MAT95XP Trap MS.", false}, {MS_microflex, "MS:1000177", "microflex", "Bruker Daltonics' microflex: MALDI TOF.", false}, {MS_microTOF_LC, "MS:1000178", "microTOF LC", "Bruker Daltonics' microTOF LC: ESI TOF, Nanospray, APCI, APPI.", false}, {MS_neptune, "MS:1000179", "neptune", "ThermoFinnigan NEPTUNE MS.", false}, {MS_NG_5400, "MS:1000180", "NG-5400", "Waters NG-5400 MS.", false}, {MS_OMEGA, "MS:1000181", "OMEGA", "IonSpec OMEGA MS.", false}, {MS_OMEGA_2001, "MS:1000182", "OMEGA-2001", "IonSpec OMEGA-2001 MS.", false}, {MS_OmniFlex, "MS:1000183", "OmniFlex", "Bruker Daltonics' OmniFlex: MALDI TOF.", false}, {MS_Platform_ICP, "MS:1000184", "Platform ICP", "Waters Platform ICP MS.", false}, {MS_PolarisQ, "MS:1000185", "PolarisQ", "ThermoFinnigan PolarisQ MS.", false}, {MS_proteomics_solution_1, "MS:1000186", "proteomics solution 1", "Applied Biosystems/MDS SCIEX Proteomics Solution 1 MS.", false}, {MS_Q_TRAP, "MS:1000187", "Q TRAP", "Applied Biosystems/MDS SCIEX Q TRAP MS.", false}, {MS_Q_Tof_micro, "MS:1000188", "Q-Tof micro", "Waters oa-ToF based Q-Tof micro.", false}, {MS_Q_Tof_Ultima, "MS:1000189", "Q-Tof Ultima", "Waters oa-ToF based Q-Tof Ultima.", false}, {MS_QSTAR, "MS:1000190", "QSTAR", "Applied Biosystems/MDS SCIEX QSTAR MS.", false}, {MS_quattro_micro, "MS:1000191", "quattro micro", "Waters (triple) quadrupole based micro.", false}, {MS_Quattro_Ultima, "MS:1000192", "Quattro Ultima", "Waters (triple) quadrupole based Ultima.", false}, {MS_Surveyor_MSQ, "MS:1000193", "Surveyor MSQ", "ThermoFinnigan Surveyor MSQ MS.", false}, {MS_SymBiot_I, "MS:1000194", "SymBiot I", "Applied Biosystems/MDS SCIEX SymBiot I MS.", false}, {MS_SymBiot_XVI, "MS:1000195", "SymBiot XVI", "Applied Biosystems/MDS SCIEX SymBiot XVI MS.", false}, {MS_TEMPUS_TOF, "MS:1000196", "TEMPUS TOF", "ThermoFinnigan TEMPUS TOF MS.", false}, {MS_TRACE_DSQ, "MS:1000197", "TRACE DSQ", "ThermoFinnigan TRACE DSQ MS.", false}, {MS_TRITON, "MS:1000198", "TRITON", "ThermoFinnigan TRITON MS.", false}, {MS_TSQ_Quantum, "MS:1000199", "TSQ Quantum", "ThermoFinnigan TSQ Quantum MS.", false}, {MS_ultima, "MS:1000200", "ultima", "IonSpec Ultima MS.", false}, {MS_ultraflex, "MS:1000201", "ultraflex", "Bruker Daltonics' ultraflex: MALDI TOF.", false}, {MS_ultraflex_TOF_TOF, "MS:1000202", "ultraflex TOF/TOF", "Bruker Daltonics' ultraflex TOF/TOF: MALDI TOF.", false}, {MS_Voyager_DE_PRO, "MS:1000203", "Voyager-DE PRO", "Applied Biosystems/MDS SCIEX Voyager-DE PRO MS.", false}, {MS_Voyager_DE_STR, "MS:1000204", "Voyager-DE STR", "Applied Biosystems/MDS SCIEX Voyager-DE STR MS.", false}, {MS_selected_ion_monitoring, "MS:1000205", "selected ion monitoring", "The operation of a mass spectrometer in which the intensities of several specific m/z values are recorded rather than the entire mass spectrum.", false}, {MS_selected_reaction_monitoring, "MS:1000206", "selected reaction monitoring", "Data acquired from specific product ions corresponding to m/z selected precursor ions recorded via multiple stages of mass spectrometry. Selected reaction monitoring can be performed in time or in space.", false}, {MS_accurate_mass_OBSOLETE, "MS:1000207", "accurate mass", "An experimentally determined mass that is can be to determine a unique elemental formula. For ions less than 200 u, a measurement with 5 ppm accuracy is sufficient to determine the elemental composition.", true}, {MS_average_mass_OBSOLETE, "MS:1000208", "average mass", "The mass of an ion or molecule calculated using the average mass of each element weighted for its natural isotopic abundance.", true}, {MS_appearance_energy_OBSOLETE, "MS:1000209", "appearance energy", "The minimum energy that must be imparted to an atom or molecule to produce a specified ion. The term appearance potential is not recommended.", true}, {MS_base_peak, "MS:1000210", "base peak", "The peak in a mass spectrum that has the greatest intensity. This term may be applied to the spectra of pure substances or mixtures.", false}, {MS_OBSOLETE_charge_number_OBSOLETE, "MS:1000211", "OBSOLETE charge number", "The total charge on an ion divided by the electron charge e. OBSOLETED 2009-10-27 since this was viewed as a duplication of 00041 charge state.", true}, {MS_dalton_OBSOLETE, "MS:1000212", "dalton", "A non-SI unit of mass (symbol Da) that is equal to the unified atomic mass unit: 1.660 538 86(28) x 10^-27 kg.", true}, {MS_electron_affinity_OBSOLETE, "MS:1000213", "electron affinity", "The electron affinity of M is the minimum energy required for the process M- ? M + e where M- and M are in their ground rotational, vibrational and electronic states and the electron has zero kinetic energy.", true}, {MS_electron_energy_obsolete_OBSOLETE, "MS:1000214", "electron energy obsolete", "The potential difference through which electrons are accelerated before they are used to bring about electron ionization.", true}, {MS_exact_mass_OBSOLETE, "MS:1000215", "exact mass", "The calculated mass of an ion or molecule containing a single isotope of each atom.", true}, {MS_field_free_region, "MS:1000216", "field-free region", "A section of a mass spectrometer in which there are no electric or magnetic fields.", false}, {MS_ionization_cross_section_OBSOLETE, "MS:1000217", "ionization cross section", "A measure of the probability that a given ionization process will occur when an atom or molecule interacts with a photon, electron, atom or molecule.", true}, {MS_ionization_efficiency_OBSOLETE, "MS:1000218", "ionization efficiency", "The ratio of the number of ions formed to the number of electrons, molecules or photons used.", true}, {MS_ionization_energy_OBSOLETE, "MS:1000219", "ionization energy", "The minimum energy required to remove an electron from an atom or molecule to produce a positive ion.", true}, {MS_isotope_dilution_mass_spectrometry_OBSOLETE, "MS:1000220", "isotope dilution mass spectrometry", "A quantitative mass spectrometry technique in which an isotopically enriched compound is used as an internal standard.", true}, {MS_magnetic_deflection, "MS:1000221", "magnetic deflection", "The deflection of charged particles in a magnetic field due to a force equal to qvxB where q is the particle charge, v its velocity and B the magnetic field. Magnetic deflection of an ion beam is used for m/z separation in a magnetic sector mass spectrometer.", false}, {MS_mass_defect_OBSOLETE, "MS:1000222", "mass defect", "The difference between the monoisotopic and nominal mass of a molecule or atom.", true}, {MS_mass_number_OBSOLETE, "MS:1000223", "mass number", "The sum of the protons and neutrons in an atom, molecule or ion.", true}, {MS_molecular_mass, "MS:1000224", "molecular mass", "Mass of a molecule measured in unified atomic mass units (u or Da).", false}, {MS_monoisotopic_mass_OBSOLETE, "MS:1000225", "monoisotopic mass", "The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element.", true}, {MS_molecular_beam_mass_spectrometry_OBSOLETE, "MS:1000226", "molecular beam mass spectrometry", "A mass spectrometry technique in which the sample is introduced into the mass spectrometer as a molecular beam.", true}, {MS_multiphoton_ionization, "MS:1000227", "multiphoton ionization", "Photoionization of an atom or molecule in which in two or more photons are absorbed.", false}, {MS_nitrogen_rule_OBSOLETE, "MS:1000228", "nitrogen rule", "An organic molecule containing the elements C, H, O, S, P, or halogen has an odd nominal mass if it contains an odd number of nitrogen atoms.", true}, {MS_nominal_mass_OBSOLETE, "MS:1000229", "nominal mass", "The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element rounded to the nearest integer value.", true}, {MS_odd_electron_rule_OBSOLETE, "MS:1000230", "odd-electron rule", "Odd-electron ions may dissociate to form either odd or even-electron ions, whereas even-electron ions generally form even-electron fragment ions.", true}, {MS_peak, "MS:1000231", "peak", "A localized region of relatively large ion signal in a mass spectrum. Although peaks are often associated with particular ions, the terms peak and ion should not be used interchangeably.", false}, {MS_peak_intensity_OBSOLETE, "MS:1000232", "peak intensity", "The height or area of a peak in a mass spectrum.", true}, {MS_proton_affinity_OBSOLETE, "MS:1000233", "proton affinity", "The proton affinity of a species M is defined as the negative of the enthalpy change for the reaction M + H+ ->[M+H]+, where all species are in their ground rotational, vibrational and electronic states.", true}, {MS_mass_resolving_power_OBSOLETE, "MS:1000234", "mass resolving power", "In a mass spectrum, the observed mass divided by the difference between two masses that can be separated. The method by which delta m was obtained and the mass at which the measurement was made should be reported.", true}, {MS_total_ion_current_chromatogram, "MS:1000235", "total ion current chromatogram", "Representation of the total ion current detected in each of a series of mass spectra versus time.", false}, {MS_transmission, "MS:1000236", "transmission", "The ratio of the number of ions leaving a region of a mass spectrometer to the number entering that region.", false}, {MS_unified_atomic_mass_unit_OBSOLETE, "MS:1000237", "unified atomic mass unit", "A non-SI unit of mass (u) defined as one twelfth of ^12 C in its ground state and equal to 1.660 538 86(28) x 10^-27 kg.", true}, {MS_accelerator_mass_spectrometry_OBSOLETE, "MS:1000238", "accelerator mass spectrometry", "A mass spectrometry technique in which atoms extracted from a sample are ionized, accelerated to MeV energies and separated according to their momentum, charge and energy.", true}, {MS_atmospheric_pressure_matrix_assisted_laser_desorption_ionization, "MS:1000239", "atmospheric pressure matrix-assisted laser desorption ionization", "Matrix-assisted laser desorption ionization in which the sample target is at atmospheric pressure and the ions formed by the pulsed laser are sampled through a small aperture into the mass spectrometer.", false}, {MS_atmospheric_pressure_ionization, "MS:1000240", "atmospheric pressure ionization", "Any ionization process in which ions are formed in the gas phase at atmospheric pressure.", false}, {MS_Atmostpheric_Pressure_Photoionization_OBSOLETE, "MS:1000241", "Atmostpheric Pressure Photoionization", "Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization.", true}, {MS_blackbody_infrared_radiative_dissociation, "MS:1000242", "blackbody infrared radiative dissociation", "A special case of infrared multiphoton dissociation wherein excitation of the reactant ion is caused by absorption of infrared photons radiating from heated blackbody surroundings, which are usually the walls of a vacuum chamber. See also infrared multiphoton dissociation.", false}, {MS_charge_remote_fragmentation_OBSOLETE, "MS:1000243", "charge-remote fragmentation", "A fragmentation of an even-electron ion in which the cleaved bond is not adjacent to the apparent charge site.", true}, {MS_consecutive_reaction_monitoring_OBSOLETE_1000244, "MS:1000244", "consecutive reaction monitoring (MS:1000244)", "MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored.", true}, {MS_charge_stripping, "MS:1000245", "charge stripping", "The reaction of a positive ion with an atom or molecule that results in the removal of one or more electrons from the ion.", false}, {MS_delayed_extraction, "MS:1000246", "delayed extraction", "The application of the accelerating voltage pulse after a time delay in desorption ionization from a surface. The extraction delay can produce energy focusing in a time-of-flight mass spectrometer.", false}, {MS_desorption_ionization, "MS:1000247", "desorption ionization", "The formation of ions from a solid or liquid material after the rapid vaporization of that sample.", false}, {MS_direct_insertion_probe, "MS:1000248", "direct insertion probe", "A device for introducing a solid or liquid sample into a mass spectrometer ion source for desorption ionization.", false}, {MS_direct_liquid_introduction, "MS:1000249", "direct liquid introduction", "The delivery of a liquid sample into a mass spectrometer for spray or desorption ionization.", false}, {MS_electron_capture_dissociation, "MS:1000250", "electron capture dissociation", "A process in which a multiply protonated molecules interacts with a low energy electrons. Capture of the electron leads the liberation of energy and a reduction in charge state of the ion with the production of the (M + nH) (n-1)+ odd electron ion, which readily fragments.", false}, {MS_even_electron_ion_OBSOLETE, "MS:1000251", "even-electron ion", "An ion containing no unpaired electrons in its ground electronic state, e.g. CH3+ in its ground state.", true}, {MS_electron_induced_excitation_in_organics_OBSOLETE, "MS:1000252", "electron-induced excitation in organics", "The reaction of an ion with an electron in which the translational energy of the collision is converted into internal energy of the ion.", true}, {MS_electron_multiplier, "MS:1000253", "electron multiplier", "A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. The secondary electrons are then accelerated to other electrodes or parts of a continuous electrode to produce further secondary electrons.", false}, {MS_electrostatic_energy_analyzer, "MS:1000254", "electrostatic energy analyzer", "A device consisting of conducting parallel plates, concentric cylinders or concentric spheres that separates charged particles according to their kinetic energy by means of an electric field that is constant in time.", false}, {MS_flowing_afterglow, "MS:1000255", "flowing afterglow", "An ion source immersed in a flow of helium or other inert buffer gas that carries the ions through a meter-long reactor at pressures around 100 Pa.", false}, {MS_high_field_asymmetric_waveform_ion_mobility_spectrometry_OBSOLETE, "MS:1000256", "high-field asymmetric waveform ion mobility spectrometry", "The separation of ions between two concentric cylindrical electrodes due to application of a high voltage asymmetric waveform whereby ions migrate towards one of the two electrodes depending on the ratio of the high- to low-field mobility of the ion.", true}, {MS_field_desorption, "MS:1000257", "field desorption", "The formation of gas-phase ions from a material deposited on a solid surface in the presence of a high electric field. Because this process may encompass ionization by field ionization or other mechanisms, it is not recommended as a synonym for field desorption ionization.", false}, {MS_field_ionization, "MS:1000258", "field ionization", "The removal of electrons from any species by interaction with a high electric field.", false}, {MS_glow_discharge_ionization, "MS:1000259", "glow discharge ionization", "The formation of ions in the gas phase and from solid samples at the cathode by application of a voltage to a low pressure gas.", false}, {MS_ion_kinetic_energy_spectrometry_OBSOLETE, "MS:1000260", "ion kinetic energy spectrometry", "A method of analysis in which a beam of ions is separated according to the ratio of its translational energy to charge.", true}, {MS_ion_mobility_spectrometry_OBSOLETE, "MS:1000261", "ion mobility spectrometry", "The separation of ions according to their velocity through a buffer gas under the influence of an electric field.", true}, {MS_infrared_multiphoton_dissociation, "MS:1000262", "infrared multiphoton dissociation", "Multiphoton ionization where the reactant ion dissociates as a result of the absorption of multiple infrared photons.", false}, {MS_isotope_ratio_mass_spectrometry_OBSOLETE, "MS:1000263", "isotope ratio mass spectrometry", "The measurement of the relative quantity of the different isotopes of an element in a material with a mass spectrometer.", true}, {MS_ion_trap, "MS:1000264", "ion trap", "A device for spatially confining ions using electric and magnetic fields alone or in combination.", false}, {MS_kinetic_energy_release_distribution_OBSOLETE, "MS:1000265", "kinetic energy release distribution", "Distribution of values of translational kinetic energy release for an ensemble of metastable ions undergoing a specific dissociation reaction.", true}, {MS_Laser_Desorption_OBSOLETE, "MS:1000266", "Laser Desorption", "The formation of ions through the interaction of a laser with a material or with gas-phase ions or molecules.", true}, {MS_mass_analyzed_ion_kinetic_energy_spectrometry_OBSOLETE, "MS:1000267", "mass analyzed ion kinetic energy spectrometry", "Spectra that are obtained from a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector in reverse geometry. The accelerating voltage, V, and the magnetic sector field, B, are set at fixed values to select the precursor ions, which are then allowed to dissociate or to react in a field free region between the two sectors. The kinetic energy product ions of m/z selected precursor ions is analyzed by scanning the electric sector field, E. The width of the product ion spectrum peaks is related to the kinetic energy release distribution (KERD) for the dissociation process.", true}, {MS_mass_spectrometry_OBSOLETE, "MS:1000268", "mass spectrometry", "The branch of science that deals with all aspects of mass spectrometers and the results obtained with these instruments.", true}, {MS_mass_spectrometry_mass_spectrometry_OBSOLETE, "MS:1000269", "mass spectrometry/mass spectrometry", "The acquisition, study and spectra of the electrically charged products or precursors of a m/z selected ion or ions.", true}, {MS_multiple_stage_mass_spectrometry_OBSOLETE, "MS:1000270", "multiple stage mass spectrometry", "Multiple stages of precursor ion m/z selection followed by product ion detection for successive progeny ions.", true}, {MS_Negative_Ion_chemical_ionization, "MS:1000271", "Negative Ion chemical ionization", "Chemical ionization that results in the formation of negative ions.", false}, {MS_neutralization_reionization_mass_spectrometry, "MS:1000272", "neutralization reionization mass spectrometry", "With this technique, m/z selected ions form neutrals by charge transfer to a collision gas or by dissociation. The neutrals are separated from the remaining ions and ionized in collisions with a second gas. This method is used to investigate reaction intermediates and other unstable species.", false}, {MS_photoionization, "MS:1000273", "photoionization", "The ionization of an atom or molecule by a photon, written M + h? ? M^+ + e. The term photon impact is not recommended.", false}, {MS_pyrolysis_mass_spectrometry, "MS:1000274", "pyrolysis mass spectrometry", "A mass spectrometry technique in which the sample is heated to the point of decomposition and the gaseous decomposition products are introduced into the ion source.", false}, {MS_collision_quadrupole, "MS:1000275", "collision quadrupole", "A transmission quadrupole to which an oscillating potential is applied so as to focus a beam of ions through a collision gas with no m/z separation.", false}, {MS_resonance_enhanced_multiphoton_ionization, "MS:1000276", "resonance enhanced multiphoton ionization", "Multiphoton ionization in which the ionization cross section is significantly enhanced because the energy of the incident photons is resonant with an intermediate excited state of the neutral species.", false}, {MS_residual_gas_analyzer_OBSOLETE, "MS:1000277", "residual gas analyzer", "A mass spectrometer used to measure the composition and pressure of gasses in an evacuated chamber.", true}, {MS_surface_enhanced_laser_desorption_ionization, "MS:1000278", "surface enhanced laser desorption ionization", "The formation of ionized species in the gas phase from analytes deposited on a particular surface substrate which is irradiated with a laser beam of which wavelength is absorbed by the surface. See also desorption/ionization on silicon and laser desorption/ionization.", false}, {MS_surface_enhanced_neat_desorption, "MS:1000279", "surface enhanced neat desorption", "Matrix-assisted laser desorption ionization in which the matrix is covalently linked to the target surface.", false}, {MS_suface_ionization_OBSOLETE, "MS:1000280", "suface ionization", "The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature.", true}, {MS_selected_ion_flow_tube, "MS:1000281", "selected ion flow tube", "A device in which m/z selected ions are entrained in an inert carrier gas and undergo ion-molecule reactions.", false}, {MS_sustained_off_resonance_irradiation, "MS:1000282", "sustained off-resonance irradiation", "A technique associated with Fourier transform ion cyclotron resonance (FT-ICR) mass spectrometry to carry out ion/neutral reactions such as low-energy collision-induced dissociation. A radio-frequency electric field of slightly off-resonance to the cyclotron frequency of the reactant ion cyclically accelerates and decelerates the reactant ion that is confined in the Penning ion trap. The ion's orbit does not exceed the dimensions of ion trap while the ion undergoes an ion/neutral species process that produces a high average translational energy for an extended time.", false}, {MS_Spark_Source_Mass_Spectrometry_OBSOLETE, "MS:1000283", "Spark Source Mass Spectrometry", "Mass spectrometry using spark ionization.", true}, {MS_stored_waveform_inverse_fourier_transform, "MS:1000284", "stored waveform inverse fourier transform", "A technique to create excitation waveforms for ions in FT-ICR mass spectrometer or Paul ion trap. An excitation waveform in the time-domain is generated by taking the inverse Fourier transform of an appropriate frequency-domain programmed excitation spectrum, in which the resonance frequencies of ions to be excited are included. This technique may be used for selection of precursor ions in MS2 experiments.", false}, {MS_total_ion_current, "MS:1000285", "total ion current", "The sum of all the separate ion currents carried by the ions of different m/z contributing to a complete mass spectrum or in a specified m/z range of a mass spectrum.", false}, {MS_time_lag_focusing, "MS:1000286", "time lag focusing", "Energy focusing in a time-of-flight mass spectrometer that is accomplished by introducing a time delay between the formation of the ions and the application of the accelerating voltage pulse.", false}, {MS_time_of_flight_mass_spectrometer_OBSOLETE, "MS:1000287", "time-of-flight mass spectrometer", "An instrument that separates ions by m/z in a field-free region after acceleration to a fixed kinetic energy.", true}, {MS_cyclotron, "MS:1000288", "cyclotron", "A device that uses an oscillating electric field and magnetic field to accelerate charged particles.", false}, {MS_double_focusing_mass_spectrometer_OBSOLETE, "MS:1000289", "double-focusing mass spectrometer", "A mass spectrometer that uses a magnetic sector for m/z focusing and an electric sector for energy focusing of an ion beam.", true}, {MS_hybrid_mass_spectrometer_OBSOLETE, "MS:1000290", "hybrid mass spectrometer", "A mass spectrometer that combines m/z analyzers of different types to perform tandem mass spectrometry.", true}, {MS_linear_ion_trap, "MS:1000291", "linear ion trap", "A two dimensional Paul ion trap in which ions are confined in the axial dimension by means of an electric field at the ends of the trap.", false}, {MS_mass_spectrograph_obsolete_OBSOLETE, "MS:1000292", "mass spectrograph obsolete", "An instrument that separates a beam of ions according to their mass-to-charge ratio in which the ions are directed onto a focal plane detector such as a photographic plate.", true}, {MS_mass_spectrometer_OBSOLETE, "MS:1000293", "mass spectrometer", "An instrument that measures the mass-to-charge ratio and relative abundances of ions.", true}, {MS_mass_spectrum, "MS:1000294", "mass spectrum", "A plot of the relative abundance of a beam or other collection of ions as a function of the mass-to-charge ratio (m/z).", false}, {MS_mattauch_herzog_geometry_OBSOLETE, "MS:1000295", "mattauch-herzog geometry", "An arrangement for a double-focusing mass spectrometer in which a deflection of ?/(4 ?(2)) radians in a radial electric field is followed by a magnetic deflection of ?/2 radians.", true}, {MS_nier_johnson_geometry_OBSOLETE, "MS:1000296", "nier-johnson geometry", "An arrangement for a double-focusing mass spectrometer in which a deflection of ?/2 radians in a radial electric field analyzer is followed by a magnetic deflection of ?/3 radians.", true}, {MS_paul_ion_trap_OBSOLETE, "MS:1000297", "paul ion trap", "A device that permits the trapping of ions by means of an alternating current voltage. The ejection of ions with a m/z less than a prescribed value and retention of those with higher mass depends on the application of radio frequency voltages between a ring electrode and two end-cap electrodes to confine the ions in a circular path. The choice of these voltages determines the m/z below which ions are ejected.", true}, {MS_prolate_traochoidal_mass_spectrometer_OBSOLETE, "MS:1000298", "prolate traochoidal mass spectrometer", "A mass spectrometer in which the ions of different m/z are separated by means of crossed electric and magnetic fields in such a way that the selected ions follow a prolate trochoidal path.", true}, {MS_quistor_OBSOLETE, "MS:1000299", "quistor", "An abbreviation of quadrupole ion storage trap. This term is synonymous with Paul Ion Trap. If so then add a synonym to paul and obsolete this term.", true}, {MS_reflectron, "MS:1000300", "reflectron", "A time-of-flight mass spectrometer that uses a static electric field to reverse the direction of travel of the ions entering it. A reflectron improves mass resolution by assuring that ions of the same m/z but different kinetic energy arrive at the detector at the same time.", false}, {MS_sector_mass_spectrometer_OBSOLETE, "MS:1000301", "sector mass spectrometer", "A mass spectrometer consisting of one or more magnetic sectors for m/z selection in a beam of ions. Such instruments may also have one or more electric sectors for energy selection.", true}, {MS_tandem_mass_spectrometer_OBSOLETE, "MS:1000302", "tandem mass spectrometer", "A mass spectrometer designed for mass spectrometry/mass spectrometry.", true}, {MS_transmission_quadrupole_mass_spectrometer_OBSOLETE, "MS:1000303", "transmission quadrupole mass spectrometer", "A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis.", true}, {MS_accelerating_voltage, "MS:1000304", "accelerating voltage", "The electrical potential used to impart kinetic energy to ions in a mass spectrometer.", false}, {MS_cyclotron_motion_OBSOLETE, "MS:1000305", "cyclotron motion", "The circular motion of a charged particle moving at velocity v in a magnetic field B that results from the force qvB.", true}, {MS_dynamic_mass_spectrometry_OBSOLETE, "MS:1000306", "dynamic mass spectrometry", "A mass spectrometer in which m/z separation using one or more electric fields that vary with time.", true}, {MS_einzel_lens, "MS:1000307", "einzel lens", "Three element charged particle lens in which the first and third elements are held at the same voltage. Such a lens produces focusing without changing the translational energy of the particle.", false}, {MS_electric_field_strength, "MS:1000308", "electric field strength", "The magnitude of the force per unit charge at a given point in space.", false}, {MS_first_stability_region, "MS:1000309", "first stability region", "The region of a Mathieu stability diagram closest to the origin. Ions within this region can traverse the full length of a transmission quadrupole.", false}, {MS_fringing_field, "MS:1000310", "fringing field", "The electric or magnetic field that extends from the edge of a sector, lens or other ion optics element.", false}, {MS_kinetic_energy_analyzer, "MS:1000311", "kinetic energy analyzer", "A device for measuring the kinetic energy of charged particles using a retarding field, time-of-flight, or the extent of deflection in an electric or magnetic field.", false}, {MS_mass_limit_OBSOLETE, "MS:1000312", "mass limit", "The m/z value above which ions cannot be detected in a mass spectrometer.", true}, {MS_scan_m_z_range__OBSOLETE, "MS:1000313", "scan m/z range?", "The limit of m/z over which a mass spectrometer can detect ions.", true}, {MS_mass_selective_axial_ejection_OBSOLETE, "MS:1000314", "mass selective axial ejection", "The use of mass selective instability to eject ions of selected m/z values from an ion trap.", true}, {MS_mass_selective_instability_OBSOLETE, "MS:1000315", "mass selective instability", "A method for selective ejection of ions according to their m/z value in an ion trap.", true}, {MS_mathieu_stability_diagram_OBSOLETE, "MS:1000316", "mathieu stability diagram", "A graphical representation expressed in terms of reduced coordinates that describes charged particle motion in a quadrupole mass filter or quadrupole ion trap mass spectrometer.", true}, {MS_orthogonal_extraction_OBSOLETE, "MS:1000317", "orthogonal extraction", "The pulsed acceleration of ions perpendicular to their direction of travel into a time-of-flight mass spectrometer. Ions may be extracted from a directional ion source, drift tube or m/z separation stage.", true}, {MS_resonance_ion_ejection_OBSOLETE, "MS:1000318", "resonance ion ejection", "A mode of ion ejection in a quadrupole ion trap that relies on a auxiliary radio frequency voltage that is applied to the end-cap electrodes. The voltage is tuned to the secular frequency of a particular ion to eject it.", true}, {MS_space_charge_effect, "MS:1000319", "space charge effect", "The mutual repulsion of particles of like charge that limits the current in a charged-particle beam and causes beams or packets of charged particles to expand radially over time.", false}, {MS_static_field, "MS:1000320", "static field", "An electric or magnetic field that does not change in time.", false}, {MS_2E_Mass_Spectrum_OBSOLETE, "MS:1000321", "2E Mass Spectrum", "A mass spectrum obtained by setting the electric sector field E to twice the value required to transmit the main ion-beam thereby allowing ions with a kinetic energy-to-charge ratio twice that of the main ion-beam to be transmitted. Product ions resulting from partial charge transfer reactions such as m^2+ + N ? m^+ + N^+ that occur in a collision cell (containing a gas, N) located in a field-free region preceding a magnetic and electric sector combination are detected. When the magnetic sector field B is scanned, a mass spectrum of singly charged product ions of doubly charged precursor ions is obtained.", true}, {MS_charge_inversion_mass_spectrum, "MS:1000322", "charge inversion mass spectrum", "The measurement of the relative abundance of ions that result from a charge inversion reaction as a function of m/z.", false}, {MS_constant_neutral_loss_scan_OBSOLETE, "MS:1000323", "constant neutral loss scan", "Spectrum of all precursor ions that undergo a selected m/z decrement.", true}, {MS_constant_neutral_gain_scan_OBSOLETE, "MS:1000324", "constant neutral gain scan", "Spectrum of all precursor ions that undergo a selected m/z increment.", true}, {MS_constant_neutral_gain_spectrum, "MS:1000325", "constant neutral gain spectrum", "A spectrum formed of all product ions that have been produced by gain of a pre-selected neutral mass following the reaction with and addition of the gas in a collision cell.", false}, {MS_constant_neutral_loss_spectrum, "MS:1000326", "constant neutral loss spectrum", "A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum.", false}, {MS_consecutive_reaction_monitoring_OBSOLETE_1000327, "MS:1000327", "consecutive reaction monitoring (MS:1000327)", "A type of MS2 experiments with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored.", true}, {MS_e_2_mass_spectrum, "MS:1000328", "e/2 mass spectrum", "A mass spectrum obtained using a sector mass spectrometer in which the electric sector field E is set to half the value required to transmit the main ion-beam. This spectrum records the signal from doubly charged product ions of charge-stripping reactions.", false}, {MS_linked_scan_OBSOLETE, "MS:1000329", "linked scan", "A scan in an instrument with two or more m/z analysers or in a sector mass spectrometer that incorporates at least one magnetic sector and one electric sector. Two or more of the analyzers are scanned simultaneously so as to preserve a predetermined relationship between scan parameters to produce a product ion, precursor ion or constant neutral loss spectrum.", true}, {MS_linked_scan_at_constant_b_e_OBSOLETE, "MS:1000330", "linked scan at constant b/e", "A linked scan at constant B/E may be performed on a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector. The magnetic field B and the electric field E are scanned simultaneously while the accelerating voltage V is held constant, so as to maintain the ratio of the two fields constant. This linked scan may record a product ion spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors.", true}, {MS_Linked_Scan_at_Constant_E2_V_OBSOLETE, "MS:1000331", "Linked Scan at Constant E2/V", "A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector. The electric sector field, E, and the accelerating voltage, V, are scanned simultaneously, so as to maintain the ratio E2/V at a constant value. This linked scan recordss a product ion spectrum of dissociation or other reactions occurring in a field free region (FFR) preceding the two sectors.", true}, {MS_Linked_Scan_at_Constant_B2_E_OBSOLETE, "MS:1000332", "Linked Scan at Constant B2/E", "A linked scan performed on a sector mass spectrometer that incorporates at least one electric sector plus one magnetic sector in either order. The accelerating voltage is fixed and the magnetic field, B, and the electric field, E, are scanned simultaneously so as to maintain the ratio B2/E at a constant value. This linked scan records a precursor ion spectrum of dissociation or other reactions occurring in the field free region preceding the two sectors. The term B2/E linked scan is not recommended.", true}, {MS_Linked_Scan_at_Constant_B_1__E_E0___1_2___E_OBSOLETE, "MS:1000333", "Linked Scan at Constant B[1-(E/E0)]^1/2 / E", "A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector placed in either order. The accelerating voltage is fixed while scanning the magnetic field, B, and electric field, E, simultaneously, so as to maintain the quantity B[1-(E/E0)]1/2/E at a constant value. This linked scan records a constant neutral mass loss (or gain) spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors. E0 is the electric field required to transmit the singly charged analog of the desired neutral fragment. The term B[1-(E/E0)]1/2/E linked scan.", true}, {MS_MS_MS_in_Time_OBSOLETE, "MS:1000334", "MS/MS in Time", "A tandem mass spectrometry method in which product ion spectra are recorded in a single m/z analyzer (such as a Paul Ion Trap or FTMS) in discreet steps over time. Ions in a specific m/z range are selected, dissociated, and the product ions analyzed sequentially in time.", true}, {MS_MS_MS_in_Space_OBSOLETE, "MS:1000335", "MS/MS in Space", "A tandem mass spectrometry method in which product ion spectra are recorded in m/z analyzers separated in space. Specific m/z separation functions are designed such that in one section of the instrument ions are selected, dissociated in an intermediate region, and the product ions are then transmitted to another analyser for m/z separation and data acquisition.", true}, {MS_neutral_loss, "MS:1000336", "neutral loss", "The loss of an uncharged species during a rearrangement process. The value slot holds the molecular formula in Hill notation of the neutral loss molecule, see PMID: 21182243. This term must be used in conjunction with a child of the term MS:1002307 (fragmentation ion type).", false}, {MS_nth_generation_product_ion_OBSOLETE, "MS:1000337", "nth generation product ion", "Serial product ions from dissociation of selected precursor ions where n refers to the number of stages of dissociation. The term granddaughter ion is deprecated.", true}, {MS_nth_generation_product_ion_scan_OBSOLETE, "MS:1000338", "nth generation product ion scan", "The specific scan functions or processes that record the appropriate generation of product ion or ions of any m/z selected precursor ions.", true}, {MS_nth_generation_product_ion_spectrum_OBSOLETE, "MS:1000339", "nth generation product ion spectrum", "The mass spectrum recorded from any mass spectrometer in which the appropriate scan function can be set to record the appropriate generation product ion or ions of m/z selected precursor ions.", true}, {MS_precursor_ion_OBSOLETE, "MS:1000340", "precursor ion", "An ion that reacts to form particular product ions. The reaction can be unimolecular dissociation, ion/molecule reaction, isomerization, or change in charge state. The term parent ion is deprecated.", true}, {MS_precursor_ion_spectrum, "MS:1000341", "precursor ion spectrum", "Spectrum generated by scanning precursor m/z while monitoring a fixed product m/z.", false}, {MS_product_ion_OBSOLETE, "MS:1000342", "product ion", "An ion formed as the product of a reaction involving a particular precursor ion. The reaction can be unimolecular dissociation to form fragment ions, an ion/molecule reaction, or simply involve a change in the number of charges. The term fragment ion is deprecated. The term daughter ion is deprecated.", true}, {MS_product_ion_spectrum_OBSOLETE, "MS:1000343", "product ion spectrum", "A mass spectrum recorded from any spectrometer in which the appropriate m/z separation scan function is set to record the product ion or ions of selected precursor ions.", true}, {MS_progeny_ion_OBSOLETE, "MS:1000344", "progeny ion", "A charged product of a series of consecutive reactions that includes product ions, 1st generation product ions, 2nd generation product ions, etc. Given the sequential fragmentation scheme: M1+ -> M2+ -> M3+ -> M4+ -> M5+. M4+ is the precursor ion of M5+, a 1st generation product ion of M3+, a 2nd generation product ion of M2+ and a 3rd generation product ion of M1+.", true}, {MS_array_detector, "MS:1000345", "array detector", "Detector comprising several ion collection elements, arranged in a line or grid where each element is an individual detector.", false}, {MS_conversion_dynode, "MS:1000346", "conversion dynode", "A surface that is held at high potential such that ions striking the surface produce electrons that are subsequently detected.", false}, {MS_dynode, "MS:1000347", "dynode", "One of a series of electrodes in a photomultiplier tube. Such an arrangement is able to amplify the current emitted by the photocathode.", false}, {MS_focal_plane_collector, "MS:1000348", "focal plane collector", "A detector for spatially disperse ion beams in which all ions simultaneously impinge on the detector plane.", false}, {MS_ion_to_photon_detector, "MS:1000349", "ion-to-photon detector", "A detector in which ions strike a conversion dynode to produce electrons that in turn strike a phosphor and the resulting photons are detected by a photomultiplier.", false}, {MS_point_collector, "MS:1000350", "point collector", "A detector in which the ion beam is focused onto a point and the individual ions arrive sequentially.", false}, {MS_postacceleration_detector, "MS:1000351", "postacceleration detector", "A detector in which the charged particles are accelerated to a high velocity and impinge on a conversion dynode, emitting secondary electrons. The electrons are accelerated onto a phosphor screen, which emits photons that are in turn detected using a photomultiplier or other photon detector.", false}, {MS_secondary_electron_OBSOLETE, "MS:1000352", "secondary electron", "Electrons that are ejected from a sample surface as a result of bombardment by a primary beam of atoms, ions or photons. WAS IN DETECTOR TYPE. Where should it go.", true}, {MS_adduct_ion, "MS:1000353", "adduct ion", "Ion formed by the interaction of an ion with one or more atoms or molecules to form an ion containing all the constituent atoms of the precursor ion as well as the additional atoms from the associated atoms or molecules.", false}, {MS_aromatic_ion_OBSOLETE, "MS:1000354", "aromatic ion", "A planar cyclic ion that obeys the Hueckel (4n + 2) rule where n is a positive integer representing the number of conjugated Pi electrons. Charge delocalization leads to greater stability compared to a hypothetical localized structure.", true}, {MS_analog_ion_OBSOLETE, "MS:1000355", "analog ion", "Ions that have similar chemical valence, for example the acetyl cation CH3-CO+ and the thioacetyl cation CH3-CS+.", true}, {MS_anti_aromatic_ion_OBSOLETE, "MS:1000356", "anti-aromatic ion", "A planar cyclic ion with 4n ? electrons and is therefore not aromatic.", true}, {MS_cationized_molecule_OBSOLETE, "MS:1000357", "cationized molecule", "An ion formed by the association of a cation with a neutral molecule, M, for example [M+ Na]+ and [M + K]+. The terms quasi-molecular ion and pseudo-molecular ion should not be used.", true}, {MS_cluster_ion_OBSOLETE, "MS:1000358", "cluster ion", "An ion formed by a multi-component atomic or molecular assembly of one or more ions with atoms or molecules, such as [(H20)nH]+, [(NaCl)nNa]+ and [(H3PO3)nHPO3]-.", true}, {MS_Conventional_ion_OBSOLETE, "MS:1000359", "Conventional ion", "A radical cation or anion in which the charge site and the unpaired electron spin are both formally located in the same atom or group of atoms, as opposed to the spatially separate electronic configuration of distonic ions. The radical cation of methanol, CH3OH+, in which the charge and spin sites are formally located at the O atom is an example of a conventional ion, whereas .CH2-OH2+ is a distonic ion.", true}, {MS_diagnostic_ion_OBSOLETE, "MS:1000360", "diagnostic ion", "A product ion whose formation reveals structural or compositional information of its precursor. For instance, the phenyl cation in an electron ionization mass spectrum is a diagnostic ion for benzene and derivatives.", true}, {MS_dimeric_ion_OBSOLETE, "MS:1000361", "dimeric ion", "An ion formed by ionization of a dimer or by the association of an ion with its neutral counterpart such as [M2]+ or [M-H-M]+.", true}, {MS_distonic_ion_OBSOLETE, "MS:1000362", "distonic ion", "A radical cation or anion in which the charge site and the unpaired electron spin cannot be both formally located in the same atom or group of atoms as it can be with a conventional ion. For example, CH2-OH2+ is a distonic ion whereas the radical cation of methanol, CH3OH+ is a conventional ion.", true}, {MS_enium_ion_OBSOLETE, "MS:1000363", "enium ion", "A positively charged lower-valency ion of the nonmetallic elements. The methenium ion is CH3+. Other examples are the oxenium, sulfenium, nitrenium, phosphenium, and halenium ions.", true}, {MS_fragment_ion_OBSOLETE, "MS:1000364", "fragment ion", "A product ion that results from the dissociation of a precursor ion.", true}, {MS_ion__OBSOLETE, "MS:1000365", "ion?", "An atomic or molecular species having a net positive or negative electric charge.", true}, {MS_Isotopologue_ion_OBSOLETE, "MS:1000366", "Isotopologue ion", "An ion that differs only in the isotopic composition of one or more of its constituent atoms. For example CH4+ and CH3D+ or 10BF3 and 11BF3. The term isotopologue is a contraction of isotopic homologue.", true}, {MS_Isotopomeric_ion_OBSOLETE, "MS:1000367", "Isotopomeric ion", "Isomeric ion having the same numbers of each isotopic atom but differing in their positions. Isotopomeric ions can be either configurational isomers in which two atomic isotopes exchange positions or isotopic stereoisomers. The term isotopomer is a shortening of isotopic isomer.", true}, {MS_metastable_ion_OBSOLETE, "MS:1000368", "metastable ion", "An ion that is formed with internal energy higher than the threshold for dissociation but with a lifetime great enough to allow it to exit the ion source and enter the mass spectrometer where it dissociates before detection.", true}, {MS_molecular_ion_OBSOLETE, "MS:1000369", "molecular ion", "An ion formed by the removal of one or more electrons to form a positive ion or the addition off one or more electrons to form a negative ion.", true}, {MS_negative_ion_OBSOLETE, "MS:1000370", "negative ion", "An atomic or molecular species having a net negative electric charge.", true}, {MS_non_classical_ion_OBSOLETE, "MS:1000371", "non-classical ion", "Hyper-coordinated carbonium ion such as the penta-coordinated norbornyl cation. Note: Tri-coordinated carbenium ions are termed classical ions.", true}, {MS_onium_ion_OBSOLETE, "MS:1000372", "onium ion", "A positively charged hypervalent ion of the nonmetallic elements. Examples are the methonium ion CH5+, the hydrogenonium ion H3+ and the hydronium ion H3O+. Other examples are the carbonium, oxonium, sulfonium, nitronium, diazonium, phosphonium, and halonium ions. Onium ions are not limited to monopositive ions; multiply-charged onium ions exist such as the gitonic (proximal) oxonium dication H4O2+ and the distonic oxonium dication H2O+-CH2-CH2-OH2+.", true}, {MS_principal_ion_OBSOLETE, "MS:1000373", "principal ion", "Most abundant ion of an isotope cluster, such as the 11B79Br2 81Br+ ion of m/z 250 of the cluster of isotopologue molecular ions of BBr3. The term principal ion has also been used to describe ions that have been artificially isotopically enriched in one or more positions such as CH3 13CH3+ or CH2D2 +, but those are best defined as isotopologue ions.", true}, {MS_positive_ion_OBSOLETE, "MS:1000374", "positive ion", "An atomic or molecular species having a net positive electric charge.", true}, {MS_protonated_molecule_OBSOLETE, "MS:1000375", "protonated molecule", "An ion formed by interaction of a neutral molecule with a proton and represented by the symbol [M + H]+, where M is the neutral molecule. The term 'protonated molecular ion,' 'quasi-molecular ion' and 'pseudo-molecular ion' are not recommended.", true}, {MS_radical_ion_OBSOLETE, "MS:1000376", "radical ion", "An ion, either a cation or anion, containing unpaired electrons in its ground state. The unpaired electron is denoted by a superscript dot alongside the superscript symbol for charge, such as for the molecular ion of a molecule M, that is, M+. Radical ions with more than one charge and/or more than one unpaired electron are denoted such as M(2+)(2). Unless the positions of the unpaired electron and charge can be associated with specific atoms, superscript charge designation should be placed before the superscript dot designation.", true}, {MS_reference_ion_OBSOLETE, "MS:1000377", "reference ion", "A stable ion whose structure is known with certainty. These ions are usually formed by direct ionization of a neutral molecule of known structure and are used to verify by comparison the structure of an unknown ion.", true}, {MS_stable_ion_OBSOLETE, "MS:1000378", "stable ion", "An ion with internal energy sufficiently low that it does not rearrange or dissociate prior to detection in a mass spectrometer.", true}, {MS_unstable_ion_OBSOLETE, "MS:1000379", "unstable ion", "An ion with sufficient energy to dissociate within the ion source.", true}, {MS_adiabatic_ionization, "MS:1000380", "adiabatic ionization", "A process whereby an electron is removed from an atom, ion, or molecule to produce an ion in its lowest energy state.", false}, {MS_associative_ionization, "MS:1000381", "associative ionization", "An ionization process in which two excited atoms or molecules react to form a single positive ion and an electron.", false}, {MS_atmospheric_pressure_photoionization, "MS:1000382", "atmospheric pressure photoionization", "Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization.", false}, {MS_autodetachment, "MS:1000383", "autodetachment", "The formation of a neutral when a negative ion in a discrete state with an energy greater than the detachment threshold loses an electron spontaneously without further interaction with an energy source.", false}, {MS_autoionization, "MS:1000384", "autoionization", "The formation of an ion when an atom or molecule in a discrete state with an energy greater than the ionization threshold loses an electron spontaneously without further interaction with an energy source.", false}, {MS_charge_exchange_ionization, "MS:1000385", "charge exchange ionization", "The interaction of an ion with an atom or molecule in which the charge on the ion is transferred to the neutral without the dissociation of either. Synonymous with charge transfer ionization.", false}, {MS_chemi_ionization, "MS:1000386", "chemi-ionization", "The reaction of a neutral molecule with an internally excited molecule to form an ion. Note that this term is not synonymous with chemical ionization.", false}, {MS_desorption_ionization_on_silicon, "MS:1000387", "desorption/ionization on silicon", "The formation of ions by laser desorption ionization of a sample deposited on a porous silicon surface.", false}, {MS_dissociative_ionization, "MS:1000388", "dissociative ionization", "The reaction of a gas-phase molecule that results in its decomposition to form products, one of which is an ion.", false}, {MS_electron_ionization, "MS:1000389", "electron ionization", "The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended.", false}, {MS_ion_desolvation_OBSOLETE, "MS:1000390", "ion desolvation", "The removal of solvent molecules clustered around a gas-phase ion by means of heating and/or collisions with gas molecules.", true}, {MS_ion_pair_formation_OBSOLETE, "MS:1000391", "ion-pair formation", "The reaction of a molecule to form both a positive ion and negative ion fragment among the products.", true}, {MS_ionization_efficiency, "MS:1000392", "ionization efficiency", "The ratio of the number of ions formed to the number of electrons, molecules or photons used.", false}, {MS_laser_desorption_ionization, "MS:1000393", "laser desorption ionization", "The formation of gas-phase ions by the interaction of a pulsed laser with a solid or liquid material.", false}, {MS_liquid_secondary_ionization, "MS:1000395", "liquid secondary ionization", "The ionization of any species by the interaction of a focused beam of ions with a sample that is dissolved in a solvent matrix. See also fast atom bombardment and secondary ionization.", false}, {MS_membrane_inlet, "MS:1000396", "membrane inlet", "A semi-permeable membrane separator that permits the passage of gas sample directly to the mass spectrometer ion source.", false}, {MS_microelectrospray, "MS:1000397", "microelectrospray", "Electrospray ionization at a solvent flow rate of 300-800 nL/min where the flow is a result of a mechanical pump. See nanoelectrospray.", false}, {MS_nanoelectrospray, "MS:1000398", "nanoelectrospray", "Electrospray ionization at a flow rate less than ~25 nL/min. Nanoelectrospray is synonymous with nanospray. The flow is dependent on the potenial on the tip of the electrospray needle and/or a gas presure to push the sample through the needle. See also electrospray ionization and microelectrospray.", false}, {MS_penning_ionization, "MS:1000399", "penning ionization", "Ionization that occurs through the interaction of two or more neutral gaseous species, at least one of which is internally excited.", false}, {MS_plasma_desorption_ionization, "MS:1000400", "plasma desorption ionization", "The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization.", false}, {MS_pre_ionization_state_OBSOLETE, "MS:1000401", "pre-ionization state", "An electronic state capable of undergoing auto-Ionization.", true}, {MS_secondary_ionization, "MS:1000402", "secondary ionization", "The process in which ions are ejected from a sample surface as a result of bombardment by a primary beam of atoms or ions.", false}, {MS_soft_ionization, "MS:1000403", "soft ionization", "The formation of gas-phase ions without extensive fragmentation.", false}, {MS_spark_ionization, "MS:1000404", "spark ionization", "The formation of ions from a solid material by an intermittent electrical discharge.", false}, {MS_surface_assisted_laser_desorption_ionization, "MS:1000405", "surface-assisted laser desorption ionization", "The formation of gas-phase ions from molecules that are deposited on a particular surface substrate that is irradiated with a pulsed laser. See also matrix-assisted laser desorption ionization.", false}, {MS_surface_ionization, "MS:1000406", "surface ionization", "The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature.", false}, {MS_thermal_ionization, "MS:1000407", "thermal ionization", "The ionization of a neutral species through contact with a high temperature surface.", false}, {MS_vertical_ionization, "MS:1000408", "vertical ionization", "A process in which an electron is removed from or added to a molecule without a change in the positions of the atoms. The resulting ion is typically in an excited vibrational state.", false}, {MS_association_reaction_OBSOLETE, "MS:1000409", "association reaction", "The reaction of an ion with a neutral species in which the reactants combine to form a single ion.", true}, {MS_alpha_cleavage_OBSOLETE, "MS:1000410", "alpha-cleavage", "A homolytic cleavage where the bond fission occurs between at the atom adjacent to the atom at the apparent charge site and an atom removed from the aparent charge site by two bonds.", true}, {MS_beta_cleavage_OBSOLETE, "MS:1000411", "beta-cleavage", "A homolytic cleavage where the bond fission occurs between at an atom removed from the apparent charge site atom by two bonds and an atom adjacent to that atom and removed from the aparent charge site by three bonds.", true}, {MS_buffer_gas, "MS:1000412", "buffer gas", "An inert gas used for collisional deactivation of internally excited ions.", false}, {MS_charge_induced_fragmentation_OBSOLETE, "MS:1000413", "charge-induced fragmentation", "Fragmentation of an odd electron ion in which the cleaved bond is adjacent to the apparent charge site. Synonymous with charge mediated fragmentation.", true}, {MS_charge_inversion_reaction_OBSOLETE, "MS:1000414", "charge inversion reaction", "Reaction of an ion with a neutral species in which the charge on the product ion is reversed in sign with respect to the reactant ion.", true}, {MS_charge_permutation_reaction_OBSOLETE, "MS:1000415", "charge permutation reaction", "The reaction of an ion with a neutral species with a resulting change in the magnitude or sign of the charge on the reactant ion.", true}, {MS_charge_stripping_reaction_OBSOLETE, "MS:1000416", "charge stripping reaction", "Reaction of a positive ion with a neutral species in which the positive charge on the product ion is greater than that on the reactant ion.", true}, {MS_charge_transfer_reaction_OBSOLETE, "MS:1000417", "charge transfer reaction", "The reaction of an ion with a neutral species in which some or all of the charge of the reactant ion is transferred to the neutral species.", true}, {MS_collisional_excitation_OBSOLETE, "MS:1000418", "collisional excitation", "The reaction of an ion with a neutral species in which the translational energy of the collision is converted into internal energy of the ion.", true}, {MS_collision_gas, "MS:1000419", "collision gas", "An inert gas used for collisional excitation. The term target gas is not recommended.", false}, {MS_heterolytic_cleavage_OBSOLETE, "MS:1000420", "heterolytic cleavage", "Fragmentation of a molecule or ion in which both electrons forming the single bond that is broken remain on one of the atoms that were originally bonded. This term is synonymous with heterolysis.", true}, {MS_high_energy_collision_OBSOLETE, "MS:1000421", "high energy collision", "Collision-induced dissociation process wherein the projectile ion has laboratory-frame translational energy higher than 1 keV.", true}, {MS_beam_type_collision_induced_dissociation, "MS:1000422", "beam-type collision-induced dissociation", "A collision-induced dissociation process that occurs in a beam-type collision cell.", false}, {MS_homolytic_cleavage_OBSOLETE, "MS:1000423", "homolytic cleavage", "Fragmentation of an odd electron ion that results from one of a pair of electrons that form a bond between two atoms moving to form a pair with the odd electron on the atom at the apparent charge site. Fragmentation results in the formation of an even electron ion and a radical. This reaction involves the movement of a single electron and is symbolized by a single-barbed arrow. Synonymous with Homolysis.", true}, {MS_hydrogen_deuterium_exchange_OBSOLETE, "MS:1000424", "hydrogen/deuterium exchange", "Exchange of hydrogen atoms with deuterium atoms in a molecule or pre-formed ion in solution prior to introduction into a mass spectrometer, or by reaction of an ion with a deuterated collision gas inside a mass spectrometer.", true}, {MS_ion_energy_loss_spectrum_OBSOLETE, "MS:1000425", "ion energy loss spectrum", "A plot of the relative abundance of a beam or other collection of ions as a function their loss of translational energy in reactions with neutral species.", true}, {MS_ionizing_collision_OBSOLETE, "MS:1000426", "ionizing collision", "The reaction of an ion with a neutral species in which one or more electrons are removed from either the ion or neutral.", true}, {MS_ion_molecule_reaction_OBSOLETE, "MS:1000427", "ion/molecule reaction", "The reaction of an ion with a neutral molecule. The term ion-molecule reaction is not recommended because the hyphen suggests a single species that is that is both an ion and a molecule.", true}, {MS_ion_neutral_complex_OBSOLETE, "MS:1000428", "ion/neutral complex", "A particular type of transition state that lies between precursor and product ions on the reaction coordinate of some ion reactions.", true}, {MS_ion_neutral_species_reaction_OBSOLETE, "MS:1000429", "ion/neutral species reaction", "A process wherein a charged species interacts with a neutral reactant to produce either chemically different species or changes in the internal energy of one or both of the reactants.", true}, {MS_ion_neutral_species_exchange_reaction_OBSOLETE, "MS:1000430", "ion/neutral species exchange reaction", "In this reaction an association reaction is accompanied by the subsequent or simultaneous liberation of a different neutral species as a product.", true}, {MS_kinetic_method_OBSOLETE, "MS:1000431", "kinetic method", "An approach to determination of ion thermodynamic quantities by a bracketing procedure in which the relative probabilities of competing ion fragmentations are measured via the relative abundances of the reaction products. The extended kinetic method takes the associated entropy changes into account.", true}, {MS_low_energy_collisions_OBSOLETE, "MS:1000432", "low energy collisions", "A collision between an ion and neutral species with translational energy approximately 1000 eV or lower.", true}, {MS_low_energy_collision_induced_dissociation, "MS:1000433", "low-energy collision-induced dissociation", "A collision-induced dissociation process wherein the precursor ion has the translational energy lower than approximately 1000 eV. This process typically requires multiple collisions and the collisional excitation is cumulative.", false}, {MS_McLafferty_Rearrangement_OBSOLETE, "MS:1000434", "McLafferty Rearrangement", "A dissociation reaction triggered by transfer of a hydrogen atom via a 6-member transition state to the formal radical/charge site from a carbon atom four atoms removed from the charge/radical site (the gamma-carbon); subsequent rearrangement of electron density leads to expulsion of an olefin molecule. This term was originally applied to ketone ions where the charge/radical site is the carbonyl oxygen, but it is now more widely applied.", true}, {MS_photodissociation, "MS:1000435", "photodissociation", "A process wherein the reactant ion is dissociated as a result of absorption of one or more photons.", false}, {MS_partial_charge_transfer_reaction_OBSOLETE, "MS:1000436", "partial charge transfer reaction", "Reaction of an ion with a neutral species in which some but not all of the ion charge is transferred to the neutral.", true}, {MS_ion_reaction_OBSOLETE, "MS:1000437", "ion reaction", "Chemical transformation involving an ion.", true}, {MS_superelastic_collision_OBSOLETE, "MS:1000438", "superelastic collision", "Collision in which the translational energy of the fast-moving collision partner is increased at the expense of internal energy of one or both collision partners.", true}, {MS_surface_induced_reaction_OBSOLETE, "MS:1000439", "surface-induced reaction", "A process wherein a reactant ion interacts with a surface to produce either chemically different species or a change in the internal energy of the reactant ion.", true}, {MS_unimolecular_dissociation_OBSOLETE, "MS:1000440", "unimolecular dissociation", "Fragmentation reaction in which the molecularity is treated as one, irrespective of whether the dissociative state is that of a metastable ion produced in the ion source or results from collisional excitation of a stable ion.", true}, {MS_scan, "MS:1000441", "scan", "Function or process of the mass spectrometer where it records a spectrum.", false}, {MS_spectrum, "MS:1000442", "spectrum", "Representation of intensity values corresponding to a range of measurement space.", false}, {MS_mass_analyzer_type, "MS:1000443", "mass analyzer type", "Mass analyzer separates the ions according to their mass-to-charge ratio.", false}, {MS_m_z_Separation_Method_OBSOLETE, "MS:1000444", "m/z Separation Method", "Mass/charge separation Method.", true}, {MS_sequential_m_z_separation_method_OBSOLETE, "MS:1000445", "sequential m/z separation method", "Sequential m/z separation method.", true}, {MS_fast_ion_bombardment, "MS:1000446", "fast ion bombardment", "The ionization of any species by the interaction of a focused beam of ions having a translational energy of several thousand eV with a solid sample.", false}, {MS_LTQ, "MS:1000447", "LTQ", "Finnigan LTQ MS.", false}, {MS_LTQ_FT, "MS:1000448", "LTQ FT", "Finnigan LTQ FT MS.", false}, {MS_LTQ_Orbitrap, "MS:1000449", "LTQ Orbitrap", "Finnigan LTQ Orbitrap MS.", false}, {MS_LXQ, "MS:1000450", "LXQ", "Finnigan LXQ MS.", false}, {MS_mass_analyzer, "MS:1000451", "mass analyzer", "Terms used to describe the Analyzer.", false}, {MS_data_transformation, "MS:1000452", "data transformation", "Terms used to describe types of data processing.", false}, {MS_detector, "MS:1000453", "detector", "The device that detects ions.", false}, {MS_instrument_additional_description_OBSOLETE, "MS:1000454", "instrument additional description", "Additional terms to describe the instrument as outlined in the mass spec doc, Appendix 1, section 1.5.", true}, {MS_ion_selection_attribute, "MS:1000455", "ion selection attribute", "Ion selection properties that are associated with a value.", false}, {MS_precursor_activation, "MS:1000456", "precursor activation", "Terms to describe the precursor activation.", false}, {MS_sample, "MS:1000457", "sample", "Terms to describe the sample.", false}, {MS_source, "MS:1000458", "source", "Terms to describe the source.", false}, {MS_spectrum_instrument_description_OBSOLETE, "MS:1000459", "spectrum instrument description", "Terms used to describe the spectrum.", true}, {MS_unit_OBSOLETE, "MS:1000460", "unit", "Terms to describe units.", true}, {MS_additional_description_OBSOLETE, "MS:1000461", "additional description", "Terms to describe Additional.", true}, {MS_ion_optics, "MS:1000462", "ion optics", "Device used in the construction of a mass spectrometer to focus, contain or otherwise manipulate ions.", false}, {MS_instrument, "MS:1000463", "instrument", "Description of the instrument or the mass spectrometer.", false}, {MS_mass_unit_OBSOLETE, "MS:1000464", "mass unit", "A unit of measurement for mass.", true}, {MS_scan_polarity, "MS:1000465", "scan polarity", "Relative orientation of the electromagnetic field during the selection and detection of ions in the mass spectrometer.", false}, {MS_alternating_OBSOLETE, "MS:1000466", "alternating", "Alternating.", true}, {MS_1200_series_LC_MSD_SL, "MS:1000467", "1200 series LC/MSD SL", "The 1200 Series LC/MSD SL ion trap belongs to the Agilent LC/MSD ion trap family. It provides fast polarity switching and multisignal data acquisition capabilities in a single run while also providing 5 stages of automated data dependent MS2 and 11 stages of manual MS2.", false}, {MS_6110_Quadrupole_LC_MS, "MS:1000468", "6110 Quadrupole LC/MS", "The 6110 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with an entry level single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6110 Quadrupole mass spectrometer has m/z range of 10-1500 and 2500 u/s scan speed. It proves useful for wide range of SIM quantitative applications.", false}, {MS_6120A_Quadrupole_LC_MS, "MS:1000469", "6120A Quadrupole LC/MS", "The 6120A Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers. 6120 quadrupole mass spectrometer has m/z range of 10-1500, 2500 u/s scan speed and utilizes multiple signal acquisition.", false}, {MS_6130_Quadrupole_LC_MS, "MS:1000470", "6130 Quadrupole LC/MS", "The 6130 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 series of Agilent mass spectrometers. The 6130 quadrupole mass spectrometer has m/z range of 2-3000, 2500 u/s scan speed in standard mode and 5250 u/s speed in fast-scan mode. It also uses multiple signal acquisition.", false}, {MS_6140_Quadrupole_LC_MS, "MS:1000471", "6140 Quadrupole LC/MS", "The 6140 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6140 Quadrupole mass spectrometer has m/z range of 10-1350, 2500 u/s scan speed in standard mode and 10000 u/s speed in fast-scan mode. It also uses multiple signal acquisition.", false}, {MS_6210_Time_of_Flight_LC_MS, "MS:1000472", "6210 Time-of-Flight LC/MS", "The 6210 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources.", false}, {MS_6310_Ion_Trap_LC_MS, "MS:1000473", "6310 Ion Trap LC/MS", "The 6310 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.35 resolution and mass range of 200-4000 with resolution of 3-4. The scan speed varies from 1650-27000 for the respective mass ranges.", false}, {MS_6320_Ion_Trap_LC_MS, "MS:1000474", "6320 Ion Trap LC/MS", "The 6320 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges.", false}, {MS_6330_Ion_Trap_LC_MS, "MS:1000475", "6330 Ion Trap LC/MS", "The 6330 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges.", false}, {MS_6340_Ion_Trap_LC_MS, "MS:1000476", "6340 Ion Trap LC/MS", "The 6340 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges.", false}, {MS_6410_Triple_Quadrupole_LC_MS, "MS:1000477", "6410 Triple Quadrupole LC/MS", "The 6410 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. Mass range of the mass spectrometer is 15-1650 m/z, resolution is at three settings of 0.7 u (unit), 1.2 u (wide) and 2.5 u (widest). The mass accuracy for 6410 mass spectrometer is 0.1 across the mass range. The collision cell is a hexapole with linear acceleration.", false}, {MS_1200_series_LC_MSD_VL, "MS:1000478", "1200 series LC/MSD VL", "The LC/MSD VL ion trap is part of the family of Agilent ion trap mass spectrometers. It has ESI, APCI and APPI ion sources and is a useful ion trap when the amount of sample is not the limiting factor.", false}, {MS_purgatory_OBSOLETE, "MS:1000479", "purgatory", "Terms that will likely become obsolete unless there are wails of dissent.", true}, {MS_mass_analyzer_attribute, "MS:1000480", "mass analyzer attribute", "Analyzer properties that are associated with a value.", false}, {MS_detector_attribute, "MS:1000481", "detector attribute", "Detector attribute recognized as a value.", false}, {MS_source_attribute, "MS:1000482", "source attribute", "Property of a source device that need a value.", false}, {MS_Thermo_Fisher_Scientific_instrument_model, "MS:1000483", "Thermo Fisher Scientific instrument model", "Thermo Fisher Scientific instrument model. The company has gone through several names including Thermo Finnigan, Thermo Scientific.", false}, {MS_orbitrap, "MS:1000484", "orbitrap", "An ion trapping device that consists of an outer barrel-like electrode and a coaxial inner spindle-like electrode that form an electrostatic field with quadro-logarithmic potential distribution. The frequency of harmonic oscillations of the orbitally trapped ions along the axis of the electrostatic field is independent of the ion velocity and is inversely proportional to the square root of m/z so that the trap can be used as a mass analyzer.", false}, {MS_nanospray_inlet, "MS:1000485", "nanospray inlet", "Nanospray Inlet.", false}, {MS_source_potential, "MS:1000486", "source potential", "Potential difference at the MS source in volts.", false}, {MS_ion_optics_attribute, "MS:1000487", "ion optics attribute", "Ion optics involves components that help focus ion streams in mass spectrometry.", false}, {MS_Hitachi_instrument_model, "MS:1000488", "Hitachi instrument model", "Hitachi instrument model.", false}, {MS_Varian_instrument_model, "MS:1000489", "Varian instrument model", "Varian instrument model.", false}, {MS_Agilent_instrument_model, "MS:1000490", "Agilent instrument model", "Agilent instrument model.", false}, {MS_Dionex_instrument_model, "MS:1000491", "Dionex instrument model", "Dionex instrument model.", false}, {MS_Thermo_Electron_instrument_model, "MS:1000492", "Thermo Electron instrument model", "Thermo Electron Corporation instrument model.", false}, {MS_Finnigan_MAT_instrument_model, "MS:1000493", "Finnigan MAT instrument model", "Finnigan MAT instrument model.", false}, {MS_Thermo_Scientific_instrument_model, "MS:1000494", "Thermo Scientific instrument model", "Thermo Scientific instrument model.", false}, {MS_Applied_Biosystems_instrument_model, "MS:1000495", "Applied Biosystems instrument model", "Applied Biosystems instrument model.", false}, {MS_instrument_attribute, "MS:1000496", "instrument attribute", "Instrument properties that are associated with a value.", false}, {MS_zoom_scan, "MS:1000497", "zoom scan", "Special scan mode where data with improved resolution is acquired. This is typically achieved by scanning a more narrow m/z window or scanning with a lower scan rate.", false}, {MS_full_scan_OBSOLETE, "MS:1000498", "full scan", "Feature of the ion trap mass spectrometer where MS data is acquired over a mass range.", true}, {MS_spectrum_attribute, "MS:1000499", "spectrum attribute", "Nonphysical characteristic attributed to a spectrum.", false}, {MS_scan_window_upper_limit, "MS:1000500", "scan window upper limit", "The lower m/z bound of a mass spectrometer scan window.", false}, {MS_scan_window_lower_limit, "MS:1000501", "scan window lower limit", "The upper m/z bound of a mass spectrometer scan window.", false}, {MS_dwell_time, "MS:1000502", "dwell time", "The time spent gathering data across a peak.", false}, {MS_scan_attribute, "MS:1000503", "scan attribute", "Nonphysical characteristic attributed to a spectrum acquisition scan.", false}, {MS_base_peak_m_z, "MS:1000504", "base peak m/z", "M/z value of the signal of highest intensity in the mass spectrum.", false}, {MS_base_peak_intensity, "MS:1000505", "base peak intensity", "The intensity of the greatest peak in the mass spectrum.", false}, {MS_ion_role_OBSOLETE, "MS:1000506", "ion role", "Ion Role.", true}, {MS_ion_property, "MS:1000507", "ion property", "Nonphysical characteristic attributed to an ion.", false}, {MS_ion_chemical_type_OBSOLETE, "MS:1000508", "ion chemical type", "Ion Type.", true}, {MS_activation_energy, "MS:1000509", "activation energy", "Activation Energy.", false}, {MS_precursor_activation_attribute, "MS:1000510", "precursor activation attribute", "Precursor Activation Attribute.", false}, {MS_ms_level, "MS:1000511", "ms level", "Stage number achieved in a multi stage mass spectrometry acquisition.", false}, {MS_filter_string, "MS:1000512", "filter string", "A string unique to Thermo instrument describing instrument settings for the scan.", false}, {MS_binary_data_array, "MS:1000513", "binary data array", "A data array of values.", false}, {MS_m_z_array, "MS:1000514", "m/z array", "A data array of m/z values.", false}, {MS_intensity_array, "MS:1000515", "intensity array", "A data array of intensity values.", false}, {MS_charge_array, "MS:1000516", "charge array", "A data array of charge values.", false}, {MS_signal_to_noise_array, "MS:1000517", "signal to noise array", "A data array of signal-to-noise values.", false}, {MS_binary_data_type, "MS:1000518", "binary data type", "Encoding type of binary data specifying the binary representation and precision, e.g. 64-bit float.", false}, {MS_32_bit_integer, "MS:1000519", "32-bit integer", "Signed 32-bit little-endian integer.", false}, {MS_16_bit_float_OBSOLETE, "MS:1000520", "16-bit float", "Signed 16-bit float.", true}, {MS_32_bit_float, "MS:1000521", "32-bit float", "32-bit precision little-endian floating point conforming to IEEE-754.", false}, {MS_64_bit_integer, "MS:1000522", "64-bit integer", "Signed 64-bit little-endian integer.", false}, {MS_64_bit_float, "MS:1000523", "64-bit float", "64-bit precision little-endian floating point conforming to IEEE-754.", false}, {MS_data_file_content, "MS:1000524", "data file content", "Describes the data content on the file.", false}, {MS_spectrum_representation, "MS:1000525", "spectrum representation", "Way in which the spectrum is represented, either with regularly spaced data points or with a list of centroided peaks.", false}, {MS_Waters_raw_format, "MS:1000526", "Waters raw format", "Waters data file format found in a Waters RAW directory, generated from an MS acquisition.", false}, {MS_highest_observed_m_z, "MS:1000527", "highest observed m/z", "Highest m/z value observed in the m/z array.", false}, {MS_lowest_observed_m_z, "MS:1000528", "lowest observed m/z", "Lowest m/z value observed in the m/z array.", false}, {MS_instrument_serial_number, "MS:1000529", "instrument serial number", "Serial Number of the instrument.", false}, {MS_file_format_conversion, "MS:1000530", "file format conversion", "Conversion of one file format to another.", false}, {MS_software, "MS:1000531", "software", "Software related to the recording or transformation of spectra.", false}, {MS_Xcalibur, "MS:1000532", "Xcalibur", "Thermo Finnigan software for data acquisition and analysis.", false}, {MS_Bioworks, "MS:1000533", "Bioworks", "Thermo Finnigan software for data analysis of peptides and proteins.", false}, {MS_MassLynx, "MS:1000534", "MassLynx", "Micromass software for data acquisition and analysis.", false}, {MS_FlexAnalysis, "MS:1000535", "FlexAnalysis", "Bruker software for data analysis.", false}, {MS_Data_Explorer, "MS:1000536", "Data Explorer", "Applied Biosystems software for data acquisition and analysis.", false}, {MS_4700_Explorer, "MS:1000537", "4700 Explorer", "Applied Biosystems software for data acquisition and analysis.", false}, {MS_massWolf, "MS:1000538", "massWolf", "A software for converting Waters raw directory format to mzXML or mzML. MassWolf was originally developed at the Institute for Systems Biology.", false}, {MS_Voyager_Biospectrometry_Workstation_System, "MS:1000539", "Voyager Biospectrometry Workstation System", "Applied Biosystems MALDI-TOF data acquisition and analysis system.", false}, {MS_FlexControl, "MS:1000540", "FlexControl", "Bruker software for data acquisition.", false}, {MS_ReAdW, "MS:1000541", "ReAdW", "A software program for converting Thermo Finnigan RAW file format to mzXML or mzML. ReAdW was originally developed at the Institute for Systems Biology. Its whimsical interleaved spelling and capitalization is pronounced \\\"readraw\\\".", false}, {MS_MzStar, "MS:1000542", "MzStar", "A software program for converting Applied Biosystems wiff file format to mzXML format. MzStar was originally developed at the Institute for Systems Biology. It is now obsoleted by the MzWiff program.", false}, {MS_data_processing_action, "MS:1000543", "data processing action", "Data processing attribute used to describe the type of data processing performed on the data file.", false}, {MS_Conversion_to_mzML, "MS:1000544", "Conversion to mzML", "Conversion of a file format to Proteomics Standards Initiative mzML file format.", false}, {MS_Conversion_to_mzXML, "MS:1000545", "Conversion to mzXML", "Conversion of a file format to Institute of Systems Biology mzXML file format.", false}, {MS_Conversion_to_mzData, "MS:1000546", "Conversion to mzData", "Conversion of a file format to Proteomics Standards Initiative mzData file format.", false}, {MS_object_attribute, "MS:1000547", "object attribute", "Object Attribute.", false}, {MS_sample_attribute, "MS:1000548", "sample attribute", "Sample properties that are associated with a value.", false}, {MS_selection_window_attribute, "MS:1000549", "selection window attribute", "Selection window properties that are associated with a value.", false}, {MS_time_unit_OBSOLETE, "MS:1000550", "time unit", "Time Unit.", true}, {MS_Analyst, "MS:1000551", "Analyst", "SCIEX or Applied Biosystems|MDS SCIEX software for data acquisition.", false}, {MS_maldi_spot_identifier_OBSOLETE, "MS:1000552", "maldi spot identifier", "Maldi Spot Identifier.", true}, {MS_Trapper, "MS:1000553", "Trapper", "A software program for converting Agilent MassHunter format to mzXML or mzML. Trapper was originally developed at the Institute for Systems Biology.", false}, {MS_LCQ_Deca, "MS:1000554", "LCQ Deca", "ThermoFinnigan LCQ Deca.", false}, {MS_LTQ_Orbitrap_Discovery, "MS:1000555", "LTQ Orbitrap Discovery", "LTQ Orbitrap Discovery.", false}, {MS_LTQ_Orbitrap_XL, "MS:1000556", "LTQ Orbitrap XL", "LTQ Orbitrap XL.", false}, {MS_LTQ_FT_Ultra, "MS:1000557", "LTQ FT Ultra", "LTQ FT Ultra.", false}, {MS_GC_Quantum, "MS:1000558", "GC Quantum", "GC Quantum.", false}, {MS_spectrum_type, "MS:1000559", "spectrum type", "Spectrum type.", false}, {MS_mass_spectrometer_file_format, "MS:1000560", "mass spectrometer file format", "The format of the file being used. This could be a instrument or vendor specific proprietary file format or a converted open file format.", false}, {MS_data_file_checksum_type, "MS:1000561", "data file checksum type", "Checksum is a form of redundancy check, a simple way to protect the integrity of data by detecting errors in data.", false}, {MS_ABI_WIFF_format, "MS:1000562", "ABI WIFF format", "Applied Biosystems WIFF file format.", false}, {MS_Thermo_RAW_format, "MS:1000563", "Thermo RAW format", "Thermo Scientific RAW file format.", false}, {MS_PSI_mzData_format, "MS:1000564", "PSI mzData format", "Proteomics Standards Inititative mzData file format.", false}, {MS_Micromass_PKL_format, "MS:1000565", "Micromass PKL format", "Micromass PKL file format.", false}, {MS_ISB_mzXML_format, "MS:1000566", "ISB mzXML format", "Institute of Systems Biology mzXML file format.", false}, {MS_Bruker_Agilent_YEP_format, "MS:1000567", "Bruker/Agilent YEP format", "Bruker/Agilent YEP file format.", false}, {MS_MD5, "MS:1000568", "MD5", "MD5 (Message-Digest algorithm 5) is a (now deprecated) cryptographic hash function with a 128-bit hash value used to check the integrity of files.", false}, {MS_SHA_1, "MS:1000569", "SHA-1", "SHA-1 (Secure Hash Algorithm-1) is a cryptographic hash function designed by the National Security Agency (NSA). It is also used to verify file integrity. Since 2011 it has been deprecated by the NIST as a U. S. government standard.", false}, {MS_spectra_combination, "MS:1000570", "spectra combination", "Method used to combine the mass spectra.", false}, {MS_sum_of_spectra, "MS:1000571", "sum of spectra", "Spectra Sum.", false}, {MS_binary_data_compression_type, "MS:1000572", "binary data compression type", "Compression Type.", false}, {MS_median_of_spectra, "MS:1000573", "median of spectra", "Spectra is combined by calculating the median of the spectra.", false}, {MS_zlib_compression, "MS:1000574", "zlib compression", "Zlib.", false}, {MS_mean_of_spectra, "MS:1000575", "mean of spectra", "Spectra is combined by calculating the mean of the spectra.", false}, {MS_no_compression, "MS:1000576", "no compression", "No Compression.", false}, {MS_source_data_file, "MS:1000577", "source data file", "Data file from which an entity is sourced.", false}, {MS_LCQ_Fleet, "MS:1000578", "LCQ Fleet", "LCQ Fleet.", false}, {MS_MS1_spectrum, "MS:1000579", "MS1 spectrum", "Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment.", false}, {MS_MSn_spectrum, "MS:1000580", "MSn spectrum", "MSn refers to multi-stage MS2 experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n=2. Use the term ms level (MS:1000511) for specifying n.", false}, {MS_CRM_spectrum, "MS:1000581", "CRM spectrum", "Spectrum generated from MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored.", false}, {MS_SIM_spectrum, "MS:1000582", "SIM spectrum", "Spectrum obtained with the operation of a mass spectrometer in which the abundances of one ion or several ions of specific m/z values are recorded rather than the entire mass spectrum (Selected Ion Monitoring).", false}, {MS_SRM_spectrum, "MS:1000583", "SRM spectrum", "Spectrum obtained when data are acquired from specific product ions corresponding to m/z values of selected precursor ions a recorded via two or more stages of mass spectrometry. The precursor/product ion pair is called a transition pair. Data can be obtained for a single transition pair or multiple transition pairs. Multiple time segments of different transition pairs can exist in a single file. Single precursor ions can have multiple product ions consitituting multiple transition pairs. Selected reaction monitoring can be performed as tandem mass spectrometry in time or tandem mass spectrometry in space.", false}, {MS_mzML_format, "MS:1000584", "mzML format", "Proteomics Standards Inititative mzML file format.", false}, {MS_contact_attribute, "MS:1000585", "contact attribute", "Details about a person or organization to contact in case of concern or discussion about the file.", false}, {MS_contact_name, "MS:1000586", "contact name", "Name of the contact person or organization.", false}, {MS_contact_address, "MS:1000587", "contact address", "Postal address of the contact person or organization.", false}, {MS_contact_URL, "MS:1000588", "contact URL", "Uniform Resource Locator related to the contact person or organization.", false}, {MS_contact_email, "MS:1000589", "contact email", "Email address of the contact person or organization.", false}, {MS_contact_affiliation, "MS:1000590", "contact affiliation", "Home institution of the contact person.", false}, {MS_MzWiff, "MS:1000591", "MzWiff", "A software program for converting Applied Biosystems wiff file format to the mzXML or mzML format. MzWiff is currently maintained at the Institute for Systems Biology. It replaces the slower mzStar program.", false}, {MS_smoothing, "MS:1000592", "smoothing", "A process of reducing spikes of intensity in order to reduce noise while preserving real peak signal. Many algorithms can be applied for this process.", false}, {MS_baseline_reduction, "MS:1000593", "baseline reduction", "A process of removal of varying intensities generated due to variable energy absorption before further processing can take place. Baseline reduction facilitates meaningful comparision between intensities of m/z values.", false}, {MS_low_intensity_data_point_removal, "MS:1000594", "low intensity data point removal", "The removal of very low intensity data points that are likely to be spurious noise rather than real signal.", false}, {MS_time_array, "MS:1000595", "time array", "A data array of relative time offset values from a reference time.", false}, {MS_measurement_method, "MS:1000596", "measurement method", "An attribute of resolution when recording the detector response in absence of the analyte.", false}, {MS_ion_optics_type, "MS:1000597", "ion optics type", "The electrical potential used to impart kinetic energy to ions in a mass spectrometer.", false}, {MS_electron_transfer_dissociation, "MS:1000598", "electron transfer dissociation", "A process to fragment ions in a mass spectrometer by inducing fragmentation of cations (e.g. peptides or proteins) by transferring electrons to them.", false}, {MS_pulsed_q_dissociation, "MS:1000599", "pulsed q dissociation", "A process that involves precursor ion activation at high Q, a time delay to allow the precursor to fragment, then a rapid pulse to low Q where all fragment ions are trapped. The product ions can then be scanned out of the ion trap and detected.", false}, {MS_Proteios, "MS:1000600", "Proteios", "Database application and analysis platform for proteomics.", false}, {MS_ProteinLynx_Global_Server, "MS:1000601", "ProteinLynx Global Server", "Waters software for data analysis.", false}, {MS_Shimadzu_MALDI_TOF_instrument_model, "MS:1000602", "Shimadzu MALDI-TOF instrument model", "Shimadzu MALDI-TOF instrument model.", false}, {MS_Shimadzu_Scientific_Instruments_instrument_model, "MS:1000603", "Shimadzu Scientific Instruments instrument model", "Shimadzu Scientific Instruments instrument model.", false}, {MS_LCMS_IT_TOF, "MS:1000604", "LCMS-IT-TOF", "Shimadzu Scientific Instruments LCMS-IT-TOF MS.", false}, {MS_LCMS_2010EV, "MS:1000605", "LCMS-2010EV", "Shimadzu Scientific Instruments LCMS-2010EV MS.", false}, {MS_LCMS_2010A, "MS:1000606", "LCMS-2010A", "Shimadzu Scientific Instruments LCMS-2010A MS.", false}, {MS_AXIMA_CFR_MALDI_TOF, "MS:1000607", "AXIMA CFR MALDI-TOF", "Shimadzu Biotech AXIMA CFR MALDI-TOF MS.", false}, {MS_AXIMA_QIT, "MS:1000608", "AXIMA-QIT", "Shimadzu Biotech AXIMA-QIT MS.", false}, {MS_AXIMA_CFR_plus, "MS:1000609", "AXIMA-CFR plus", "Shimadzu Biotech AXIMA-CFR plus MS.", false}, {MS_AXIMA_Performance_MALDI_TOF_TOF, "MS:1000610", "AXIMA Performance MALDI-TOF/TOF", "Shimadzu Biotech AXIMA Performance MALDI-TOF/TOF MS.", false}, {MS_AXIMA_Confidence_MALDI_TOF, "MS:1000611", "AXIMA Confidence MALDI-TOF", "Shimadzu Biotech AXIMA Confidence MALDI-TOF (curved field reflectron) MS.", false}, {MS_AXIMA_Assurance_Linear_MALDI_TOF, "MS:1000612", "AXIMA Assurance Linear MALDI-TOF", "Shimadzu Biotech AXIMA Assurance Linear MALDI-TOF MS.", false}, {MS_DTA_format, "MS:1000613", "DTA format", "SEQUEST DTA file format.", false}, {MS_ProteinLynx_Global_Server_mass_spectrum_XML_format, "MS:1000614", "ProteinLynx Global Server mass spectrum XML format", "Peak list file format used by ProteinLynx Global Server.", false}, {MS_ProteoWizard_software, "MS:1000615", "ProteoWizard software", "ProteoWizard software for data processing and analysis. Primarily developed by the labs of P. Malick and D. Tabb.", false}, {MS_preset_scan_configuration, "MS:1000616", "preset scan configuration", "A user-defined scan configuration that specifies the instrumental settings in which a spectrum is acquired. An instrument may cycle through a list of preset scan configurations to acquire data. This is a more generic term for the Thermo \\\"scan event\\\", which is defined in the Thermo Xcalibur glossary as: a mass spectrometer scan that is defined by choosing the necessary scan parameter settings. Multiple scan events can be defined for each segment of time.", false}, {MS_wavelength_array, "MS:1000617", "wavelength array", "A data array of electromagnetic radiation wavelength values.", false}, {MS_highest_observed_wavelength, "MS:1000618", "highest observed wavelength", "Highest wavelength observed in an EMR spectrum.", false}, {MS_lowest_observed_wavelength, "MS:1000619", "lowest observed wavelength", "Lowest wavelength observed in an EMR spectrum.", false}, {MS_PDA_spectrum_OBSOLETE, "MS:1000620", "PDA spectrum", "Spectrum generated from a photodiode array detector (ultraviolet/visible spectrum).", true}, {MS_photodiode_array_detector, "MS:1000621", "photodiode array detector", "An array detector used to record spectra in the ultraviolet and visible region of light.", false}, {MS_Surveyor_PDA, "MS:1000622", "Surveyor PDA", "Surveyor PDA.", false}, {MS_Accela_PDA, "MS:1000623", "Accela PDA", "Accela PDA.", false}, {MS_inductive_detector, "MS:1000624", "inductive detector", "Inductive detector.", false}, {MS_chromatogram, "MS:1000625", "chromatogram", "Representation of a chromatographic separation attribute measurement versus time.", false}, {MS_chromatogram_type, "MS:1000626", "chromatogram type", "Type of chromatogram measurement being represented.", false}, {MS_selected_ion_current_chromatogram, "MS:1000627", "selected ion current chromatogram", "Representation of an array of the measurements of a specific single ion current versus time.", false}, {MS_basepeak_chromatogram, "MS:1000628", "basepeak chromatogram", "Representation of an array of the most intense peaks versus time.", false}, {MS_low_intensity_threshold, "MS:1000629", "low intensity threshold", "Threshold below which some action is taken.", false}, {MS_data_processing_parameter, "MS:1000630", "data processing parameter", "Data processing parameter used in the data processing performed on the data file.", false}, {MS_high_intensity_threshold, "MS:1000631", "high intensity threshold", "Threshold above which some action is taken.", false}, {MS_Q_Tof_Premier, "MS:1000632", "Q-Tof Premier", "Waters oa-ToF based Q-Tof Premier.", false}, {MS_possible_charge_state, "MS:1000633", "possible charge state", "A possible charge state of the ion in a situation where the charge of an ion is known to be one of several possible values rather than a completely unknown value or determined to be a specific charge with reasonable certainty.", false}, {MS_DSQ, "MS:1000634", "DSQ", "ThermoFinnigan DSQ GC-MS.", false}, {MS_ITQ_700, "MS:1000635", "ITQ 700", "Thermo Scientific ITQ 700 GC-MS.", false}, {MS_ITQ_900, "MS:1000636", "ITQ 900", "Thermo Scientific ITQ 900 GC-MS.", false}, {MS_ITQ_1100, "MS:1000637", "ITQ 1100", "Thermo Scientific ITQ 1100 GC-MS.", false}, {MS_LTQ_XL_ETD, "MS:1000638", "LTQ XL ETD", "Thermo Scientific LTQ XL MS with ETD.", false}, {MS_LTQ_Orbitrap_XL_ETD, "MS:1000639", "LTQ Orbitrap XL ETD", "Thermo Scientific LTQ Orbitrap XL MS with ETD.", false}, {MS_DFS, "MS:1000640", "DFS", "Thermo Scientific DFS HR GC-MS.", false}, {MS_DSQ_II, "MS:1000641", "DSQ II", "Thermo Scientific DSQ II GC-MS.", false}, {MS_MALDI_LTQ_XL, "MS:1000642", "MALDI LTQ XL", "Thermo Scientific MALDI LTQ XL MS.", false}, {MS_MALDI_LTQ_Orbitrap, "MS:1000643", "MALDI LTQ Orbitrap", "Thermo Scientific MALDI LTQ Orbitrap MS.", false}, {MS_TSQ_Quantum_Access, "MS:1000644", "TSQ Quantum Access", "Thermo Scientific TSQ Quantum Access MS.", false}, {MS_Element_XR, "MS:1000645", "Element XR", "Thermo Scientific Element XR HR-ICP-MS.", false}, {MS_Element_2, "MS:1000646", "Element 2", "Thermo Scientific Element 2 HR-ICP-MS.", false}, {MS_Element_GD, "MS:1000647", "Element GD", "Thermo Scientific Element GD Glow Discharge MS.", false}, {MS_GC_IsoLink, "MS:1000648", "GC IsoLink", "Thermo Scientific GC IsoLink Isotope Ratio MS.", false}, {MS_Exactive, "MS:1000649", "Exactive", "Thermo Scientific Exactive MS.", false}, {MS_Proteome_Discoverer, "MS:1000650", "Proteome Discoverer", "Thermo Scientific software for data analysis of peptides and proteins.", false}, {MS_3200_QTRAP, "MS:1000651", "3200 QTRAP", "SCIEX or Applied Biosystems|MDS SCIEX QTRAP 3200.", false}, {MS_4800_Plus_MALDI_TOF_TOF, "MS:1000652", "4800 Plus MALDI TOF/TOF", "SCIEX or Applied Biosystems|MDS SCIEX 4800 Plus MALDI TOF-TOF Analyzer.", false}, {MS_API_3200, "MS:1000653", "API 3200", "SCIEX or Applied Biosystems|MDS SCIEX API 3200 MS.", false}, {MS_API_5000, "MS:1000654", "API 5000", "SCIEX or Applied Biosystems|MDS SCIEX API 5000 MS.", false}, {MS_QSTAR_Elite, "MS:1000655", "QSTAR Elite", "SCIEX or Applied Biosystems|MDS SCIEX QSTAR Elite.", false}, {MS_QSTAR_Pulsar, "MS:1000656", "QSTAR Pulsar", "Applied Biosystems|MDS SCIEX QSTAR Pulsar.", false}, {MS_QSTAR_XL, "MS:1000657", "QSTAR XL", "Applied Biosystems|MDS SCIEX QSTAR XL.", false}, {MS_4800_Proteomics_Analyzer, "MS:1000658", "4800 Proteomics Analyzer", "Applied Biosystems|MDS SCIEX 4800 Proteomics Analyzer.", false}, {MS_4000_Series_Explorer_Software, "MS:1000659", "4000 Series Explorer Software", "SCIEX or Applied Biosystems software for data acquisition and analysis.", false}, {MS_GPS_Explorer, "MS:1000661", "GPS Explorer", "SCIEX or Applied Biosystems software for data acquisition and analysis.", false}, {MS_LightSight_Software, "MS:1000662", "LightSight Software", "SCIEX or Applied Biosystems|MDS SCIEX software metabolite identification.", false}, {MS_ProteinPilot_Software, "MS:1000663", "ProteinPilot Software", "SCIEX or Applied Biosystems|MDS SCIEX software for protein ID and quant.", false}, {MS_TissueView_Software, "MS:1000664", "TissueView Software", "Applied Biosystems|MDS SCIEX software for tissue imaging.", false}, {MS_MarkerView_Software, "MS:1000665", "MarkerView Software", "Applied Biosystems|MDS SCIEX software for metabolomics and biomarker profiling.", false}, {MS_MRMPilot_Software, "MS:1000666", "MRMPilot Software", "Applied Biosystems|MDS SCIEX software for MRM assay development.", false}, {MS_BioAnalyst, "MS:1000667", "BioAnalyst", "Applied Biosystems|MDS SCIEX software for bio-related data exploration.", false}, {MS_Pro_ID, "MS:1000668", "Pro ID", "Applied Biosystems|MDS SCIEX software for protein identification.", false}, {MS_Pro_ICAT, "MS:1000669", "Pro ICAT", "Applied Biosystems|MDS SCIEX software for protein ID and quant by ICAT.", false}, {MS_Pro_Quant, "MS:1000670", "Pro Quant", "Applied Biosystems|MDS SCIEX software for protein ID and quant by iTRAQ.", false}, {MS_Pro_BLAST, "MS:1000671", "Pro BLAST", "Applied Biosystems|MDS SCIEX software for MS-BLAST identification.", false}, {MS_Cliquid, "MS:1000672", "Cliquid", "SCIEX Cliquid software for data analysis and quantitation.", false}, {MS_MIDAS_Workflow_Designer, "MS:1000673", "MIDAS Workflow Designer", "Applied Biosystems|MDS SCIEX software for MRM assay development.", false}, {MS_MultiQuant, "MS:1000674", "MultiQuant", "Applied Biosystems|MDS SCIEX software for MRM-based quantitation.", false}, {MS_6220_Time_of_Flight_LC_MS, "MS:1000675", "6220 Time-of-Flight LC/MS", "The 6220 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources.", false}, {MS_6510_Quadrupole_Time_of_Flight_LC_MS, "MS:1000676", "6510 Quadrupole Time-of-Flight LC/MS", "The 6510 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources.", false}, {MS_6520A_Quadrupole_Time_of_Flight_LC_MS, "MS:1000677", "6520A Quadrupole Time-of-Flight LC/MS", "The 6520A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 26,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources.", false}, {MS_MassHunter_Data_Acquisition, "MS:1000678", "MassHunter Data Acquisition", "Software for data acquisition of 6000 series instruments.", false}, {MS_MassHunter_Easy_Access, "MS:1000679", "MassHunter Easy Access", "Software for open access data acquisition.", false}, {MS_MassHunter_Qualitative_Analysis, "MS:1000680", "MassHunter Qualitative Analysis", "Software for data analysis of data from 6000 series instruments.", false}, {MS_MassHunter_Quantitative_Analysis, "MS:1000681", "MassHunter Quantitative Analysis", "Software for quantitation of Triple Quadrupole and Quadrupole Time-of-Flight data.", false}, {MS_MassHunter_Metabolite_ID, "MS:1000682", "MassHunter Metabolite ID", "Software for identification of metabolites.", false}, {MS_MassHunter_BioConfirm, "MS:1000683", "MassHunter BioConfirm", "Software for protein characterization.", false}, {MS_Genespring_MS, "MS:1000684", "Genespring MS", "Software for quantitation and statistical analysis of TOF and Q-TOF LC/MS data.", false}, {MS_MassHunter_Mass_Profiler, "MS:1000685", "MassHunter Mass Profiler", "Software for quantitation and statistical analysis of TOF and Q-TOF LC/MS data.", false}, {MS_METLIN, "MS:1000686", "METLIN", "Personal Metabolite Database for MassHunter Workstation. Software for identification of human metabolites.", false}, {MS_Spectrum_Mill_for_MassHunter_Workstation, "MS:1000687", "Spectrum Mill for MassHunter Workstation", "Software for protein identification and characterization of complex protein digest mixtures.", false}, {MS_6300_Series_Ion_Trap_Data_Analysis_Software, "MS:1000688", "6300 Series Ion Trap Data Analysis Software", "Software for data analysis of 6300 series ion trap mass spectrometers.", false}, {MS_Agilent_software, "MS:1000689", "Agilent software", "Agilent software for data acquisition and analysis.", false}, {MS_SCIEX_software, "MS:1000690", "SCIEX software", "SCIEX or Applied Biosystems software for data acquisition and analysis.", false}, {MS_Applied_Biosystems_software, "MS:1000691", "Applied Biosystems software", "Applied Biosystems|MDS SCIEX software for data acquisition and analysis.", false}, {MS_Bruker_software, "MS:1000692", "Bruker software", "Bruker software for data acquisition and analysis.", false}, {MS_Thermo_Finnigan_software, "MS:1000693", "Thermo Finnigan software", "Thermo Finnigan software for data acquisition and analysis.", false}, {MS_Waters_software, "MS:1000694", "Waters software", "Waters software for data acquisition and analysis.", false}, {MS_apex_ultra, "MS:1000695", "apex ultra", "Bruker Daltonics' apex ultra: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR.", false}, {MS_autoflex_III_smartbeam, "MS:1000696", "autoflex III smartbeam", "Bruker Daltonics' autoflex III smartbeam: MALDI TOF.", false}, {MS_Bruker_Daltonics_HCT_Series, "MS:1000697", "Bruker Daltonics HCT Series", "Bruker Daltonics' HCT Series.", false}, {MS_HCTultra, "MS:1000698", "HCTultra", "Bruker Daltonics' HCTultra: ESI TOF, Nanospray, APCI, APPI.", false}, {MS_HCTultra_PTM, "MS:1000699", "HCTultra PTM", "Bruker Daltonics' HCTultra PTM: ESI TOF, Nanospray, APCI, APPI, PTR.", false}, {MS_HCTultra_ETD_II, "MS:1000700", "HCTultra ETD II", "Bruker Daltonics' HCTultra ETD II: ESI Q-TOF, Nanospray, APCI, APPI, ETD.", false}, {MS_microflex_LT, "MS:1000701", "microflex LT", "Bruker Daltonics' microflex LT: MALDI TOF.", false}, {MS_micrOTOF, "MS:1000702", "micrOTOF", "Bruker Daltonics' micrOTOF: ESI TOF, APCI, APPI.", false}, {MS_micrOTOF_Q, "MS:1000703", "micrOTOF-Q", "Bruker Daltonics' micrOTOF-Q: ESI Q-TOF, Nanospray, APCI, APPI.", false}, {MS_micrOTOF_Q_II, "MS:1000704", "micrOTOF-Q II", "Bruker Daltonics' micrOTOF-Q II: ESI Q-TOF, Nanospray, APCI, APPI.", false}, {MS_ultraflex_III_TOF_TOF, "MS:1000705", "ultraflex III TOF/TOF", "Bruker Daltonics' ultraflex III TOF/TOF: MALDI TOF.", false}, {MS_apexControl, "MS:1000706", "apexControl", "Bruker software for data acquisition.", false}, {MS_BioTools, "MS:1000707", "BioTools", "Bruker software for data analysis.", false}, {MS_CLINPROT, "MS:1000708", "CLINPROT", "Bruker CLINPROT software.", false}, {MS_CLINPROT_micro, "MS:1000709", "CLINPROT micro", "Bruker CLINPROT micro software.", false}, {MS_CLINPROT_robot, "MS:1000710", "CLINPROT robot", "Bruker CLINPROT robot software.", false}, {MS_ClinProTools, "MS:1000711", "ClinProTools", "Bruker ClinProTools software.", false}, {MS_Compass, "MS:1000712", "Compass", "Bruker Compass software.", false}, {MS_Compass_for_HCT_esquire, "MS:1000713", "Compass for HCT/esquire", "Bruker Compass for HCT/esquire software.", false}, {MS_Compass_for_micrOTOF, "MS:1000714", "Compass for micrOTOF", "Bruker Compass for micrOTOF software.", false}, {MS_Compass_OpenAccess, "MS:1000715", "Compass OpenAccess", "Bruker compass OpenAccess software.", false}, {MS_Compass_Security_Pack, "MS:1000716", "Compass Security Pack", "Bruker compass Security Pack software.", false}, {MS_CompassXport, "MS:1000717", "CompassXport", "Bruker stand-alone software for data conversion.", false}, {MS_CompassXtract, "MS:1000718", "CompassXtract", "Bruker software library for data access.", false}, {MS_DataAnalysis, "MS:1000719", "DataAnalysis", "Bruker software for data analysis.", false}, {MS_dpControl, "MS:1000720", "dpControl", "Bruker software for data acquisition.", false}, {MS_esquireControl, "MS:1000721", "esquireControl", "Bruker software for data acquisition.", false}, {MS_flexImaging, "MS:1000722", "flexImaging", "Bruker software for data analysis.", false}, {MS_GENOLINK, "MS:1000723", "GENOLINK", "Bruker GENOLINK software.", false}, {MS_GenoTools, "MS:1000724", "GenoTools", "Bruker GenoTools software.", false}, {MS_HCTcontrol, "MS:1000725", "HCTcontrol", "Bruker software for data acquisition.", false}, {MS_micrOTOFcontrol, "MS:1000726", "micrOTOFcontrol", "Bruker software for data acquisition.", false}, {MS_PolyTools, "MS:1000727", "PolyTools", "Bruker PolyTools software.", false}, {MS_ProfileAnalysis, "MS:1000728", "ProfileAnalysis", "Bruker software for data analysis.", false}, {MS_PROTEINEER, "MS:1000729", "PROTEINEER", "Bruker PROTEINEER software.", false}, {MS_PROTEINEER_dp, "MS:1000730", "PROTEINEER dp", "Bruker PROTEINEER dp software.", false}, {MS_PROTEINEER_fc, "MS:1000731", "PROTEINEER fc", "Bruker PROTEINEER fc software.", false}, {MS_PROTEINEER_spII, "MS:1000732", "PROTEINEER spII", "Bruker PROTEINEER spII software.", false}, {MS_PROTEINEER_LC, "MS:1000733", "PROTEINEER-LC", "Bruker PROTEINEER-LC software.", false}, {MS_ProteinScape, "MS:1000734", "ProteinScape", "Bruker ProteinScape software.", false}, {MS_PureDisk, "MS:1000735", "PureDisk", "BrukerPureDisk software.", false}, {MS_QuantAnalysis, "MS:1000736", "QuantAnalysis", "Bruker software for data analysis.", false}, {MS_spControl, "MS:1000737", "spControl", "Bruker software for data acquisition.", false}, {MS_TargetAnalysis, "MS:1000738", "TargetAnalysis", "Bruker TargetAnalysis software.", false}, {MS_WARP_LC, "MS:1000739", "WARP-LC", "Bruker WARP-LC software.", false}, {MS_parameter_file, "MS:1000740", "parameter file", "Parameter file used to configure the acquisition of raw data on the instrument.", false}, {MS_Conversion_to_dta, "MS:1000741", "Conversion to dta", "Conversion to dta format.", false}, {MS_Bioworks_SRF_format, "MS:1000742", "Bioworks SRF format", "Thermo Finnigan SRF file format.", false}, {MS_TSQ_Quantum_Ultra_AM, "MS:1000743", "TSQ Quantum Ultra AM", "Thermo Scientific TSQ Quantum Ultra AM.", false}, {MS_selected_ion_m_z, "MS:1000744", "selected ion m/z", "Mass-to-charge ratio of an selected ion.", false}, {MS_retention_time_alignment, "MS:1000745", "retention time alignment", "The correction of the spectrum scan times, as used e.g. in label-free proteomics.", false}, {MS_high_intensity_data_point_removal, "MS:1000746", "high intensity data point removal", "The removal of very high intensity data points.", false}, {MS_completion_time, "MS:1000747", "completion time", "The time that a data processing action was finished.", false}, {MS_SSQ_7000, "MS:1000748", "SSQ 7000", "ThermoFinnigan SSQ 7000 MS.", false}, {MS_TSQ_7000, "MS:1000749", "TSQ 7000", "ThermoFinnigan TSQ 7000 MS.", false}, {MS_TSQ, "MS:1000750", "TSQ", "ThermoFinnigan TSQ MS.", false}, {MS_TSQ_Quantum_Ultra, "MS:1000751", "TSQ Quantum Ultra", "Thermo Scientific TSQ Quantum Ultra.", false}, {MS_TOPP_software, "MS:1000752", "TOPP software", "TOPP (The OpenMS proteomics pipeline) software.", false}, {MS_BaselineFilter, "MS:1000753", "BaselineFilter", "Removes the baseline from profile spectra using a top-hat filter.", false}, {MS_DBExporter, "MS:1000754", "DBExporter", "Exports data from an OpenMS database to a file.", false}, {MS_DBImporter, "MS:1000755", "DBImporter", "Imports data to an OpenMS database.", false}, {MS_FileConverter, "MS:1000756", "FileConverter", "Converts between different MS file formats.", false}, {MS_FileFilter, "MS:1000757", "FileFilter", "Extracts or manipulates portions of data from peak, feature or consensus feature files.", false}, {MS_FileMerger, "MS:1000758", "FileMerger", "Merges several MS files into one file.", false}, {MS_InternalCalibration, "MS:1000759", "InternalCalibration", "Applies an internal calibration.", false}, {MS_MapAligner_OBSOLETE, "MS:1000760", "MapAligner", "Corrects retention time distortions between maps.", true}, {MS_MapNormalizer, "MS:1000761", "MapNormalizer", "Normalizes peak intensities in an MS run.", false}, {MS_NoiseFilter_OBSOLETE, "MS:1000762", "NoiseFilter", "Removes noise from profile spectra by using different smoothing techniques.", true}, {MS_PeakPicker_OBSOLETE, "MS:1000763", "PeakPicker", "Finds mass spectrometric peaks in profile mass spectra.", true}, {MS_Resampler, "MS:1000764", "Resampler", "Transforms an LC/MS map into a resampled map or a png image.", false}, {MS_SpectraFilter_OBSOLETE, "MS:1000765", "SpectraFilter", "Applies a filter to peak spectra.", true}, {MS_TOFCalibration, "MS:1000766", "TOFCalibration", "Applies time of flight calibration.", false}, {MS_native_spectrum_identifier_format, "MS:1000767", "native spectrum identifier format", "Describes how the native spectrum identifiers are formated.", false}, {MS_Thermo_nativeID_format, "MS:1000768", "Thermo nativeID format", "Native format defined by controllerType=xsd:nonNegativeInteger controllerNumber=xsd:positiveInteger scan=xsd:positiveInteger.", false}, {MS_Waters_nativeID_format, "MS:1000769", "Waters nativeID format", "Native format defined by function=xsd:positiveInteger process=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger.", false}, {MS_WIFF_nativeID_format, "MS:1000770", "WIFF nativeID format", "Native format defined by sample=xsd:nonNegativeInteger period=xsd:nonNegativeInteger cycle=xsd:nonNegativeInteger experiment=xsd:nonNegativeInteger.", false}, {MS_Bruker_Agilent_YEP_nativeID_format, "MS:1000771", "Bruker/Agilent YEP nativeID format", "Native format defined by scan=xsd:nonNegativeInteger.", false}, {MS_Bruker_BAF_nativeID_format, "MS:1000772", "Bruker BAF nativeID format", "Native format defined by scan=xsd:nonNegativeInteger.", false}, {MS_Bruker_FID_nativeID_format, "MS:1000773", "Bruker FID nativeID format", "Native format defined by file=xsd:IDREF.", false}, {MS_multiple_peak_list_nativeID_format, "MS:1000774", "multiple peak list nativeID format", "Native format defined by index=xsd:nonNegativeInteger.", false}, {MS_single_peak_list_nativeID_format, "MS:1000775", "single peak list nativeID format", "Native format defined by file=xsd:IDREF.", false}, {MS_scan_number_only_nativeID_format, "MS:1000776", "scan number only nativeID format", "Native format defined by scan=xsd:nonNegativeInteger.", false}, {MS_spectrum_identifier_nativeID_format, "MS:1000777", "spectrum identifier nativeID format", "Native format defined by spectrum=xsd:nonNegativeInteger.", false}, {MS_charge_state_calculation, "MS:1000778", "charge state calculation", "A process that infers the charge state of an MSn spectrum's precursor(s) by the application of some algorithm.", false}, {MS_below_precursor_intensity_dominance_charge_state_calculation, "MS:1000779", "below precursor intensity dominance charge state calculation", "Infers charge state as single or ambiguously multiple by determining the fraction of intensity below the precursor m/z.", false}, {MS_precursor_recalculation, "MS:1000780", "precursor recalculation", "A process that recalculates existing precursor selected ions with one or more algorithmically determined precursor selected ions.", false}, {MS_msPrefix_precursor_recalculation, "MS:1000781", "msPrefix precursor recalculation", "Recalculates one or more precursor selected ions by peak detection in the isolation windows of high accuracy MS precursor scans.", false}, {MS_Savitzky_Golay_smoothing, "MS:1000782", "Savitzky-Golay smoothing", "Reduces intensity spikes by applying local polynomial regression (of degree k) on a distribution (of at least k+1 equally spaced points) to determine the smoothed value for each point. It tends to preserve features of the distribution such as relative maxima, minima and width, which are usually 'flattened' by other adjacent averaging techniques.", false}, {MS_LOWESS_smoothing, "MS:1000783", "LOWESS smoothing", "Reduces intensity spikes by applying a modelling method known as locally weighted polynomial regression. At each point in the data set a low-degree polynomial is fit to a subset of the data, with explanatory variable values near the point whose response is being estimated. The polynomial is fit using weighted least squares, giving more weight to points near the point whose response is being estimated and less weight to points further away. The value of the regression function for the point is then obtained by evaluating the local polynomial using the explanatory variable values for that data point. The LOESS fit is complete after regression function values have been computed for each of the n data points. Many of the details of this method, such as the degree of the polynomial model and the weights, are flexible.", false}, {MS_Gaussian_smoothing, "MS:1000784", "Gaussian smoothing", "Reduces intensity spikes by convolving the data with a one-dimensional Gaussian function.", false}, {MS_moving_average_smoothing, "MS:1000785", "moving average smoothing", "Reduces intensity spikes by averaging each point with two or more adjacent points. The more adjacent points that used, the stronger the smoothing effect.", false}, {MS_non_standard_data_array, "MS:1000786", "non-standard data array", "A data array that contains data not covered by any other term in this group. Please do not use this term, if the binary data array type might be commonly used - contact the PSI-MS working group in order to have another CV term added.", false}, {MS_inclusive_low_intensity_threshold, "MS:1000787", "inclusive low intensity threshold", "Threshold at or below which some action is taken.", false}, {MS_inclusive_high_intensity_threshold, "MS:1000788", "inclusive high intensity threshold", "Threshold at or above which some action is taken.", false}, {MS_enhanced_multiply_charged_spectrum, "MS:1000789", "enhanced multiply charged spectrum", "MS1 spectrum that is enriched in multiply-charged ions compared to singly-charged ions.", false}, {MS_time_delayed_fragmentation_spectrum, "MS:1000790", "time-delayed fragmentation spectrum", "MSn spectrum in which the product ions are collected after a time delay, which allows the observation of lower energy fragmentation processes after precursor ion activation.", false}, {MS_enhanced_resolution_scan_OBSOLETE, "MS:1000791", "enhanced resolution scan", "Scan with enhanced resolution.", true}, {MS_isolation_window_attribute, "MS:1000792", "isolation window attribute", "Isolation window parameter.", false}, {MS_isolation_window_upper_limit_OBSOLETE, "MS:1000793", "isolation window upper limit", "The highest m/z being isolated in an isolation window.", true}, {MS_isolation_window_lower_limit_OBSOLETE, "MS:1000794", "isolation window lower limit", "The lowest m/z being isolated in an isolation window.", true}, {MS_no_combination, "MS:1000795", "no combination", "Use this term if only one scan was recorded or there is no information about scans available.", false}, {MS_spectrum_title, "MS:1000796", "spectrum title", "Free-form text title describing a spectrum, usually a series of key value pairs as used in an MGF file.", false}, {MS_peak_list_scans, "MS:1000797", "peak list scans", "A list of scan numbers and or scan ranges associated with a peak list. If possible the list of scans should be converted to native spectrum identifiers instead of using this term.", false}, {MS_peak_list_raw_scans, "MS:1000798", "peak list raw scans", "A list of raw scans and or scan ranges used to generate a peak list. If possible the list of scans should be converted to native spectrum identifiers instead of using this term.", false}, {MS_custom_unreleased_software_tool, "MS:1000799", "custom unreleased software tool", "A software tool that has not yet been released. The value should describe the software. Please do not use this term for publicly available software - contact the PSI-MS working group in order to have another CV term added.", false}, {MS_mass_resolving_power, "MS:1000800", "mass resolving power", "The observed mass divided by the difference between two masses that can be separated: m/dm. The procedure by which dm was obtained and the mass at which the measurement was made should be reported.", false}, {MS_area_peak_picking, "MS:1000801", "area peak picking", "Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The area defined by all raw data points that belong to the peak is reported.", false}, {MS_height_peak_picking, "MS:1000802", "height peak picking", "Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The maximum intensity of all raw data points that belong to the peak is reported.", false}, {MS_analyzer_scan_offset, "MS:1000803", "analyzer scan offset", "Offset between two analyzers in a constant neutral loss or neutral gain scan. The value corresponds to the neutral loss or neutral gain value.", false}, {MS_electromagnetic_radiation_spectrum, "MS:1000804", "electromagnetic radiation spectrum", "A plot of the relative intensity of electromagnetic radiation as a function of the wavelength.", false}, {MS_emission_spectrum, "MS:1000805", "emission spectrum", "A plot of the relative intensity of electromagnetic radiation emitted by atoms or molecules when excited.", false}, {MS_absorption_spectrum, "MS:1000806", "absorption spectrum", "A plot of the relative intensity of electromagnetic radiation absorbed by atoms or molecules when excited.", false}, {MS_Th_s, "MS:1000807", "Th/s", "Unit describing the scan rate of a spectrum in Thomson per second.", false}, {MS_chromatogram_attribute, "MS:1000808", "chromatogram attribute", "Chromatogram properties that are associated with a value.", false}, {MS_chromatogram_title, "MS:1000809", "chromatogram title", "A free-form text title describing a chromatogram.", false}, {MS_ion_current_chromatogram, "MS:1000810", "ion current chromatogram", "Representation of the current of ions versus time.", false}, {MS_electromagnetic_radiation_chromatogram, "MS:1000811", "electromagnetic radiation chromatogram", "Representation of electromagnetic properties versus time.", false}, {MS_absorption_chromatogram, "MS:1000812", "absorption chromatogram", "Representation of light absorbed by the sample versus time.", false}, {MS_emission_chromatogram, "MS:1000813", "emission chromatogram", "Representation of light emitted by the sample versus time.", false}, {MS_counts_per_second, "MS:1000814", "counts per second", "The number of counted events observed per second in one or a group of elements of a detector.", false}, {MS_Bruker_BAF_format, "MS:1000815", "Bruker BAF format", "Bruker BAF raw file format.", false}, {MS_Bruker_U2_format, "MS:1000816", "Bruker U2 format", "Bruker HyStar U2 file format.", false}, {MS_HyStar, "MS:1000817", "HyStar", "Bruker software for hyphenated experiments.", false}, {MS_Acquity_UPLC_PDA, "MS:1000818", "Acquity UPLC PDA", "Acquity UPLC Photodiode Array Detector.", false}, {MS_Acquity_UPLC_FLR, "MS:1000819", "Acquity UPLC FLR", "Acquity UPLC Fluorescence Detector.", false}, {MS_flow_rate_array, "MS:1000820", "flow rate array", "A data array of flow rate measurements.", false}, {MS_pressure_array, "MS:1000821", "pressure array", "A data array of pressure measurements.", false}, {MS_temperature_array, "MS:1000822", "temperature array", "A data array of temperature measurements.", false}, {MS_Bruker_U2_nativeID_format, "MS:1000823", "Bruker U2 nativeID format", "Native format defined by declaration=xsd:nonNegativeInteger collection=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger.", false}, {MS_no_nativeID_format, "MS:1000824", "no nativeID format", "No nativeID format indicates that the file tagged with this term does not contain spectra that can have a nativeID format.", false}, {MS_Bruker_FID_format, "MS:1000825", "Bruker FID format", "Bruker FID file format.", false}, {MS_elution_time, "MS:1000826", "elution time", "The time of elution from all used chromatographic columns (one or more) in the chromatographic separation step, relative to the start of the chromatography.", false}, {MS_isolation_window_target_m_z, "MS:1000827", "isolation window target m/z", "The primary or reference m/z about which the isolation window is defined.", false}, {MS_isolation_window_lower_offset, "MS:1000828", "isolation window lower offset", "The extent of the isolation window in m/z below the isolation window target m/z. The lower and upper offsets may be asymmetric about the target m/z.", false}, {MS_isolation_window_upper_offset, "MS:1000829", "isolation window upper offset", "The extent of the isolation window in m/z above the isolation window target m/z. The lower and upper offsets may be asymmetric about the target m/z.", false}, {MS_sample_preparation, "MS:1000831", "sample preparation", "Properties of the preparation steps which took place before the measurement was performed.", false}, {MS_MALDI_matrix_application, "MS:1000832", "MALDI matrix application", "Attributes to describe the technique how the sample is prepared with the matrix solution.", false}, {MS_matrix_application_type, "MS:1000833", "matrix application type", "Describes the technique how the matrix is put on the sample target.", false}, {MS_matrix_solution, "MS:1000834", "matrix solution", "Describes the chemical solution used as matrix.", false}, {MS_matrix_solution_concentration, "MS:1000835", "matrix solution concentration", "Concentration of the chemical solution used as matrix.", false}, {MS_dried_droplet_MALDI_matrix_preparation, "MS:1000836", "dried droplet MALDI matrix preparation", "Dried droplet in MALDI matrix preparation.", false}, {MS_printed_MALDI_matrix_preparation, "MS:1000837", "printed MALDI matrix preparation", "Printed MALDI matrix preparation.", false}, {MS_sprayed_MALDI_matrix_preparation, "MS:1000838", "sprayed MALDI matrix preparation", "Sprayed MALDI matrix preparation.", false}, {MS_precoated_MALDI_sample_plate, "MS:1000839", "precoated MALDI sample plate", "Precoated MALDI sample plate.", false}, {MS_laser, "MS:1000840", "laser", "Device that emits light (electromagnetic radiation) through a process called stimulated emission. The term is an acronym for Light Amplification by Stimulated Emission of Radiation.", false}, {MS_laser_attribute, "MS:1000841", "laser attribute", "Laser properties that are associated with a value.", false}, {MS_laser_type, "MS:1000842", "laser type", "Type of laser used for desorption purpose.", false}, {MS_wavelength_OBSOLETE, "MS:1000843", "wavelength", "The distance between two peaks of the emitted laser beam.", true}, {MS_focus_diameter_x, "MS:1000844", "focus diameter x", "Describes the diameter of the laser beam in x direction.", false}, {MS_focus_diameter_y, "MS:1000845", "focus diameter y", "Describes the diameter of the laser beam in y direction.", false}, {MS_pulse_energy, "MS:1000846", "pulse energy", "Describes output energy of the laser system. May be attenuated by filters or other means.", false}, {MS_pulse_duration, "MS:1000847", "pulse duration", "Describes how long the laser beam was emitted from the laser device.", false}, {MS_attenuation, "MS:1000848", "attenuation", "Describes the reduction of the intensity of the laser beam energy.", false}, {MS_impact_angle, "MS:1000849", "impact angle", "Describes the angle between the laser beam and the sample target.", false}, {MS_gas_laser, "MS:1000850", "gas laser", "Laser which is powered by a gaseous medium.", false}, {MS_solid_state_laser, "MS:1000851", "solid-state laser", "Solid state laser materials are commonly made by doping a crystalline solid host with ions that provide the required energy states.", false}, {MS_dye_laser, "MS:1000852", "dye-laser", "Dye lasers use an organic dye as the gain medium.", false}, {MS_free_electron_laser, "MS:1000853", "free electron laser", "Free electron laser uses a relativistic electron beam as the lasing medium which move freely through a magnetic structure, hence the term.", false}, {MS_LTQ_XL, "MS:1000854", "LTQ XL", "Thermo Scientific LTQ XL MS.", false}, {MS_LTQ_Velos, "MS:1000855", "LTQ Velos", "Thermo Scientific LTQ Velos MS.", false}, {MS_LTQ_Velos_ETD, "MS:1000856", "LTQ Velos ETD", "Thermo Scientific LTQ Velos MS with ETD.", false}, {MS_run_attribute, "MS:1000857", "run attribute", "Properties of the described run.", false}, {MS_fraction_identifier, "MS:1000858", "fraction identifier", "Identier string that describes the sample fraction. This identifier should contain the fraction number(s) or similar information.", false}, {MS_molecule, "MS:1000859", "molecule", "Group of two or more atoms held together by chemical bonds.", false}, {MS_peptide, "MS:1000860", "peptide", "A molecule of low molecular weight that is composed of two or more amino acid residues.", false}, {MS_molecular_entity_property, "MS:1000861", "molecular entity property", "A physical characteristic of a molecular entity.", false}, {MS_isoelectric_point, "MS:1000862", "isoelectric point", "The pH of a solution at which a charged molecule does not migrate in an electric field.", false}, {MS_predicted_isoelectric_point, "MS:1000863", "predicted isoelectric point", "The pH of a solution at which a charged molecule would not migrate in an electric field, as predicted by a software algorithm.", false}, {MS_chemical_formula, "MS:1000864", "chemical formula", "A combination of symbols used to express the chemical composition of a molecule.", false}, {MS_empirical_formula, "MS:1000865", "empirical formula", "A chemical formula which expresses the proportions of the elements present in a substance.", false}, {MS_molecular_formula, "MS:1000866", "molecular formula", "A chemical compound formula expressing the number of atoms of each element present in a compound, without indicating how they are linked.", false}, {MS_structural_formula, "MS:1000867", "structural formula", "A chemical formula showing the number of atoms of each element in a molecule, their spatial arrangement, and their linkage to each other.", false}, {MS_SMILES_formula, "MS:1000868", "SMILES formula", "The simplified molecular input line entry specification or SMILES is a specification for unambiguously describing the structure of a chemical compound using a short ASCII string.", false}, {MS_collision_gas_pressure, "MS:1000869", "collision gas pressure", "The gas pressure of the collision gas used for collisional excitation.", false}, {MS_4000_QTRAP_OBSOLETE, "MS:1000870", "4000 QTRAP", "SCIEX or Applied Biosystems|MDS SCIEX QTRAP 4000.", true}, {MS_SRM_software, "MS:1000871", "SRM software", "Software used to predict, select, or optimize transitions or analyze the results of selected reaction monitoring runs.", false}, {MS_MaRiMba, "MS:1000872", "MaRiMba", "Software used to predict transitions for selected reaction monitoring experiments based on observed spectrum libraries developed and distributed by the Institute for Systems Biology.", false}, {MS_peptide_attribute_calculation_software, "MS:1000873", "peptide attribute calculation software", "Software used to predict or calculate numerical attributes of peptides.", false}, {MS_SSRCalc, "MS:1000874", "SSRCalc", "Sequence Specific Retention Calculator estimates the retention time of peptides based on their sequence.", false}, {MS_declustering_potential, "MS:1000875", "declustering potential", "Potential difference between the orifice and the skimmer in volts.", false}, {MS_cone_voltage, "MS:1000876", "cone voltage", "Potential difference between the sampling cone/orifice in volts.", false}, {MS_tube_lens_voltage, "MS:1000877", "tube lens voltage", "Potential difference setting of the tube lens in volts.", false}, {MS_external_reference_identifier, "MS:1000878", "external reference identifier", "An identifier/accession number to an external reference database.", false}, {MS_PubMed_identifier, "MS:1000879", "PubMed identifier", "A unique identifier for a publication in the PubMed database (MIR:00000015).", false}, {MS_interchannel_delay, "MS:1000880", "interchannel delay", "The duration of intervals between scanning, during which the instrument configuration is switched.", false}, {MS_molecular_entity, "MS:1000881", "molecular entity", "Constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer, etc., identifiable as a separately distinguishable entity.", false}, {MS_protein, "MS:1000882", "protein", "A compound composed of one or more chains of amino acids in a specific order determined by the base sequence of nucleotides in the DNA of a gene.", false}, {MS_protein_short_name, "MS:1000883", "protein short name", "A short name or symbol of a protein (e.g., HSF 1 or HSF1_HUMAN).", false}, {MS_protein_attribute, "MS:1000884", "protein attribute", "An nonphysical characterstic attributed to a specific protein.", false}, {MS_protein_accession, "MS:1000885", "protein accession", "Identifier for a specific protein in a database.", false}, {MS_protein_name, "MS:1000886", "protein name", "A long name describing the function of the protein.", false}, {MS_peptide_attribute, "MS:1000887", "peptide attribute", "Nonphysical characteristic attributed to a peptide.", false}, {MS_stripped_peptide_sequence, "MS:1000888", "stripped peptide sequence", "Sequence of letter symbols denoting the order of amino acids that compose the peptide, with any amino acid mass modifications that might be present having been stripped away.", false}, {MS_peptidoform_sequence, "MS:1000889", "peptidoform sequence", "Sequence of letter symbols denoting the order of amino acid residues that compose the peptidoform including the encoding of any residue modifications that are present.", false}, {MS_peptidoform_labeling_state, "MS:1000890", "peptidoform labeling state", "A state description of how a peptide might be isotopically or isobarically labelled.", false}, {MS_heavy_labeled_peptidoform, "MS:1000891", "heavy labeled peptidoform", "A peptide that has been created or labelled with some heavier-than-usual isotopes.", false}, {MS_unlabeled_peptidoform, "MS:1000892", "unlabeled peptidoform", "A peptide that has not been labelled with heavier-than-usual isotopes. This is often referred to as \\\"light\\\" to distinguish from \\\"heavy\\\".", false}, {MS_peptidoform_group_label, "MS:1000893", "peptidoform group label", "An arbitrary string label used to mark a set of peptides that belong together in a set, whereby the members are differentiated by different isotopic labels. For example, the heavy and light forms of the same peptide will both be assigned the same peptide group label.", false}, {MS_retention_time, "MS:1000894", "retention time", "A time interval from the start of chromatography when an analyte exits a chromatographic column.", false}, {MS_local_retention_time, "MS:1000895", "local retention time", "A time interval from the start of chromatography when an analyte exits an unspecified local chromatographic column and instrumental setup.", false}, {MS_normalized_retention_time, "MS:1000896", "normalized retention time", "A time interval from the start of chromatography when an analyte exits a standardized reference chromatographic column and instrumental setup.", false}, {MS_predicted_retention_time, "MS:1000897", "predicted retention time", "A time interval from the start of chromatography when an analyte exits a chromatographic column as predicted by a referenced software application.", false}, {MS_standard, "MS:1000898", "standard", "Something, such as a practice or a product, that is widely recognized or employed, especially because of its excellence.", false}, {MS_de_facto_standard, "MS:1000899", "de facto standard", "A practice or product that has become a standard not because it has been approved by a standards organization but because it is widely used and recognized by the industry as being standard.", false}, {MS_minimum_information_standard, "MS:1000900", "minimum information standard", "A specification of a minimum amount of information needed to reproduce or fully interpret a scientific result.", false}, {MS_retention_time_normalization_standard, "MS:1000901", "retention time normalization standard", "A standard providing the retention times at which a set of reference compounds exit the reference chromatographic column.", false}, {MS_H_PINS_retention_time_normalization_standard, "MS:1000902", "H-PINS retention time normalization standard", "The de facto standard providing the retention times at which a set of halogenated reference peptides exit the reference chromatographic column.", false}, {MS_product_ion_series_ordinal, "MS:1000903", "product ion series ordinal", "The ordinal of the fragment within a specified ion series. (e.g. 8 for a y8 ion).", false}, {MS_product_ion_m_z_delta, "MS:1000904", "product ion m/z delta", "The difference in m/z of the predicted m/z based on the assigned product ion minus the actual observed peak m/z.", false}, {MS_percent_of_base_peak_times_100, "MS:1000905", "percent of base peak times 100", "The magnitude of a peak expressed in terms of the percentage of the magnitude of the base peak intensity multiplied by 100. The base peak is therefore 10000. This unit is common in normalized spectrum libraries.", false}, {MS_peak_intensity_rank, "MS:1000906", "peak intensity rank", "Ordinal specifying the rank in intensity of a peak in a spectrum. Base peak is 1. The next most intense peak is 2, etc.", false}, {MS_peak_targeting_suitability_rank, "MS:1000907", "peak targeting suitability rank", "Ordinal specifying the rank of a peak in a spectrum in terms of suitability for targeting. The most suitable peak is 1. The next most suitability peak is 2, etc. Suitability is algorithm and context dependant.", false}, {MS_transition, "MS:1000908", "transition", "A set of two m/z values corresponding to the precursor m/z and a fragment m/z that in combination can be used to identify or quantify a specific ion, although not necessarily uniquely.", false}, {MS_transition_validation_method, "MS:1000909", "transition validation method", "The strategy used to validate that a transition is effective.", false}, {MS_transition_optimized_on_specified_instrument, "MS:1000910", "transition optimized on specified instrument", "The transition has been optimized by direct injection of the peptide into an instrument specified in a separate term, and the optimum voltages and fragmentation energies have been determined.", false}, {MS_transition_validated_with_an_MS_MS_spectrum_on_specified_instrument, "MS:1000911", "transition validated with an MS/MS spectrum on specified instrument", "The transition has been validated by obtaining an MS2 spectrum and demonstrating that the peak is detectable on the instrument specified with a separate term.", false}, {MS_transition_purported_from_an_MS_MS_spectrum_on_a_different__specified_instrument, "MS:1000912", "transition purported from an MS/MS spectrum on a different, specified instrument", "The transition has been purported by obtaining an MS2 spectrum and demonstrating that the peak is detectable on the instrument specified with a separate term. However, the detecting instrument is of a different type (e.g. ion trap) than the instrument that the transition will eventually be used on (e.g. triple quad).", false}, {MS_transition_predicted_by_informatic_analysis, "MS:1000913", "transition predicted by informatic analysis", "The transition has been predicted by informatics software without any direct spectral evidence.", false}, {MS_tab_delimited_text_format, "MS:1000914", "tab delimited text format", "A file format that has two or more columns of tabular data where each column is separated by a TAB character.", false}, {MS_retention_time_window_attribute, "MS:1000915", "retention time window attribute", "An attribute of a window in time about which a peptide might elute from the column.", false}, {MS_retention_time_window_lower_offset, "MS:1000916", "retention time window lower offset", "The extent of the retention time window in time units below the target retention time. The lower and upper offsets may be asymmetric about the target time.", false}, {MS_retention_time_window_upper_offset, "MS:1000917", "retention time window upper offset", "The extent of the retention time window in time units above the target retention time. The lower and upper offsets may be asymmetric about the target time.", false}, {MS_target_list, "MS:1000918", "target list", "A list of peptides or compounds and their expected m/z coordinates that can be used to cause a mass spectrometry to obtain spectra of those molecules specifically.", false}, {MS_target_inclusion_exclusion_priority, "MS:1000919", "target inclusion exclusion priority", "A priority setting specifying whether included or excluded targets have priority over the other.", false}, {MS_includes_supersede_excludes, "MS:1000920", "includes supersede excludes", "A priority setting specifying that included targets have priority over the excluded targets if there is a conflict.", false}, {MS_excludes_supersede_includes, "MS:1000921", "excludes supersede includes", "A priority setting specifying that excluded targets have priority over the included targets if there is a conflict.", false}, {MS_Skyline, "MS:1000922", "Skyline", "Software used to predict, select, and optimize transitions as well as analyze the results of selected reaction monitoring runs developed and distributed by the MacCoss lab at the University of Washington.", false}, {MS_TIQAM, "MS:1000923", "TIQAM", "Software used to predict, select, and optimize transitions for selected reaction monitoring experiments developed and distributed by the Institute for Systems Biology.", false}, {MS_MaRiMba_OBSOLETE, "MS:1000924", "MaRiMba", "Software used to predict transitions for selected reaction monitoring experiments based on observed spectrum libraries developed and distributed by the Institute for Systems Biology.", true}, {MS_ATAQS, "MS:1000925", "ATAQS", "Software suite used to predict, select, and optimize transitions as well as analyze the results of selected reaction monitoring runs developed and distributed by the Institute for Systems Biology.", false}, {MS_product_interpretation_rank, "MS:1000926", "product interpretation rank", "The integer rank given an interpretation of an observed product ion. For example, if y8 is selected as the most likely interpretation of a peak, then it is assigned a rank of 1.", false}, {MS_ion_injection_time, "MS:1000927", "ion injection time", "The length of time spent filling an ion trapping device.", false}, {MS_calibration_spectrum, "MS:1000928", "calibration spectrum", "A spectrum derived from a special calibration source, rather than from the primary injected sample. A calibration spectrum is typically derived from a substance that can be used to correct systematic shift in m/z for spectra of the primary inject sample.", false}, {MS_Shimadzu_Biotech_nativeID_format, "MS:1000929", "Shimadzu Biotech nativeID format", "Native format defined by source=xsd:string start=xsd:nonNegativeInteger end=xsd:nonNegativeInteger.", false}, {MS_Shimadzu_Biotech_database_entity, "MS:1000930", "Shimadzu Biotech database entity", "Shimadzu Biotech format.", false}, {MS_QTRAP_5500, "MS:1000931", "QTRAP 5500", "Applied Biosystems|MDS SCIEX QTRAP 5500.", false}, {MS_TripleTOF_5600, "MS:1000932", "TripleTOF 5600", "SCIEX TripleTOF 5600, a quadrupole - quadrupole - time-of-flight mass spectrometer.", false}, {MS_protein_modifications, "MS:1000933", "protein modifications", "Encoding of modifications of the protein sequence from the specified accession, written in PEFF notation.", false}, {MS_gene_name, "MS:1000934", "gene name", "Name of the gene from which the protein is translated.", false}, {MS_spectrum_interpretation, "MS:1001000", "spectrum interpretation", "Collection of terms from the PSI Proteome Informatics standards describing the interpretation of spectra.", false}, {MS_SEQUEST_CleavesAt, "MS:1001005", "SEQUEST:CleavesAt", "", false}, {MS_SEQUEST_ViewCV, "MS:1001006", "SEQUEST:ViewCV", "SEQUEST View Input Parameters.", false}, {MS_SEQUEST_OutputLines, "MS:1001007", "SEQUEST:OutputLines", "Number of peptide results to show.", false}, {MS_SEQUEST_DescriptionLines, "MS:1001009", "SEQUEST:DescriptionLines", "Number of full protein descriptions to show for top N peptides.", false}, {MS_de_novo_search, "MS:1001010", "de novo search", "A de novo sequencing search (without database).", false}, {MS_search_database_details, "MS:1001011", "search database details", "Details about the database searched.", false}, {MS_database_source, "MS:1001012", "database source", "The organisation, project or laboratory from where the database is obtained (UniProt, NCBI, EBI, other).", false}, {MS_database_name, "MS:1001013", "database name", "The name of the search database (nr, SwissProt or est_human).", false}, {MS_database_local_file_path_OBSOLETE, "MS:1001014", "database local file path", "OBSOLETE: Use attribute in mzIdentML instead. Local file path of the search database from the search engine's point of view.", true}, {MS_database_original_uri, "MS:1001015", "database original uri", "URI, from where the search database was originally downloaded.", false}, {MS_database_version, "MS:1001016", "database version", "Version of the search database. In mzIdentML use the attribute instead.", false}, {MS_database_release_date_OBSOLETE, "MS:1001017", "database release date", "OBSOLETE: Use attribute in mzIdentML instead. Release date of the search database.", true}, {MS_database_type, "MS:1001018", "database type", "Database containing amino acid or nucleic acid sequences.", false}, {MS_database_filtering, "MS:1001019", "database filtering", "Was there filtering used on the database.", false}, {MS_DB_filter_taxonomy, "MS:1001020", "DB filter taxonomy", "A taxonomy filter was to the database search.", false}, {MS_DB_filter_on_accession_numbers, "MS:1001021", "DB filter on accession numbers", "Filtering applied specifically by accession number pattern.", false}, {MS_DB_MW_filter, "MS:1001022", "DB MW filter", "Filtering applied specifically by protein molecular weight, specified as either a range or above/below a threshold value.", false}, {MS_DB_PI_filter, "MS:1001023", "DB PI filter", "Filtering applied specifically by predicted protein isoelectric focussing point (pI), specified as either a range or above/below a threshold value.", false}, {MS_translation_frame, "MS:1001024", "translation frame", "The translated open reading frames from a nucleotide database considered in the search (range: 1-6).", false}, {MS_translation_table, "MS:1001025", "translation table", "The translation table used to translate the nucleotides to amino acids.", false}, {MS_SEQUEST_NormalizeXCorrValues, "MS:1001026", "SEQUEST:NormalizeXCorrValues", "", false}, {MS_DB_filter_on_sequence_pattern, "MS:1001027", "DB filter on sequence pattern", "Filtering applied specifically by amino acid sequence pattern.", false}, {MS_SEQUEST_SequenceHeaderFilter, "MS:1001028", "SEQUEST:SequenceHeaderFilter", "String in the header of a sequence entry for that entry to be searched.", false}, {MS_number_of_sequences_searched, "MS:1001029", "number of sequences searched", "The number of sequences (proteins / nucleotides) from the database search after filtering.", false}, {MS_number_of_peptide_seqs_compared_to_each_spectrum, "MS:1001030", "number of peptide seqs compared to each spectrum", "Number of peptide seqs compared to each spectrum.", false}, {MS_spectral_library_search, "MS:1001031", "spectral library search", "A search using a library of spectra.", false}, {MS_SEQUEST_SequencePartialFilter, "MS:1001032", "SEQUEST:SequencePartialFilter", "", false}, {MS_date___time_search_performed_OBSOLETE, "MS:1001035", "date / time search performed", "OBSOLETE: use attribute in mzIdentML instead. Date and time of the actual search run.", true}, {MS_search_time_taken, "MS:1001036", "search time taken", "The time taken to complete the search in seconds.", false}, {MS_SEQUEST_ShowFragmentIons, "MS:1001037", "SEQUEST:ShowFragmentIons", "Flag indicating that fragment ions should be shown.", false}, {MS_SEQUEST_Consensus, "MS:1001038", "SEQUEST:Consensus", "Specify depth as value of the CVParam.", false}, {MS_intermediate_analysis_format, "MS:1001040", "intermediate analysis format", "Type of the source file, the mzIdentML was created from.", false}, {MS_SEQUEST_sortCV, "MS:1001041", "SEQUEST:sortCV", "SEQUEST View / Sort Input Parameters.", false}, {MS_SEQUEST_LimitTo, "MS:1001042", "SEQUEST:LimitTo", "Specify \\\"number of dtas shown\\\" as value of the CVParam.", false}, {MS_cleavage_agent_details, "MS:1001044", "cleavage agent details", "Details of cleavage agent (enzyme).", false}, {MS_cleavage_agent_name, "MS:1001045", "cleavage agent name", "The name of the cleavage agent.", false}, {MS_SEQUEST_sort_by_dCn, "MS:1001046", "SEQUEST:sort by dCn", "Sort order of SEQUEST search results by the delta of the normalized correlation score.", false}, {MS_SEQUEST_sort_by_dM, "MS:1001047", "SEQUEST:sort by dM", "Sort order of SEQUEST search results by the difference between a theoretically calculated and the corresponding experimentally measured molecular mass M.", false}, {MS_SEQUEST_sort_by_Ions, "MS:1001048", "SEQUEST:sort by Ions", "Sort order of SEQUEST search results given by the ions.", false}, {MS_SEQUEST_sort_by_MH_, "MS:1001049", "SEQUEST:sort by MH+", "Sort order of SEQUEST search results given by the mass of the protonated ion.", false}, {MS_SEQUEST_sort_by_P, "MS:1001050", "SEQUEST:sort by P", "Sort order of SEQUEST search results given by the probability.", false}, {MS_multiple_enzyme_combination_rules_OBSOLETE, "MS:1001051", "multiple enzyme combination rules", "OBSOLETE: use attribute independent in mzIdentML instead. Description of multiple enzyme digestion protocol, if any.", true}, {MS_SEQUEST_sort_by_PreviousAminoAcid, "MS:1001052", "SEQUEST:sort by PreviousAminoAcid", "Sort order of SEQUEST search results given by the previous amino acid.", false}, {MS_SEQUEST_sort_by_Ref, "MS:1001053", "SEQUEST:sort by Ref", "Sort order of SEQUEST search results given by the reference.", false}, {MS_modification_parameters, "MS:1001055", "modification parameters", "Modification parameters for the search engine run.", false}, {MS_modification_specificity_rule, "MS:1001056", "modification specificity rule", "The specificity rules for the modifications applied by the search engine.", false}, {MS_tolerance_on_types_OBSOLETE, "MS:1001057", "tolerance on types", "OBSOLETE: Tolerance on types.", true}, {MS_quality_estimation_by_manual_validation, "MS:1001058", "quality estimation by manual validation", "The quality estimation was done manually.", false}, {MS_SEQUEST_sort_by_RSp, "MS:1001059", "SEQUEST:sort by RSp", "Sort order of SEQUEST search results given by the result 'Sp' of 'Rank/Sp' in the out file (peptide).", false}, {MS_quality_estimation_method_details, "MS:1001060", "quality estimation method details", "Method for quality estimation (manually or with decoy database).", false}, {MS_neutral_loss_OBSOLETE, "MS:1001061", "neutral loss", "OBSOLETE: replaced by MS:1000336 (neutral loss): Leave this to PSI-MOD.", true}, {MS_Mascot_MGF_format, "MS:1001062", "Mascot MGF format", "Mascot MGF file format.", false}, {MS_TODOscoring_model_OBSOLETE, "MS:1001065", "TODOscoring model", "OBSOLETE: There is Phenyx:ScoringModel for Phenyx! Scoring model (more detailed granularity). TODO: add some child terms.", true}, {MS_ions_series_considered_in_search, "MS:1001066", "ions series considered in search", "The description of the DEPRECATED ion fragment series (including charges and neutral losses) that are considered by the search engine.", false}, {MS_SEQUEST_sort_by_Sp, "MS:1001068", "SEQUEST:sort by Sp", "Sort order of SEQUEST search results by the Sp score.", false}, {MS_SEQUEST_sort_by_TIC, "MS:1001069", "SEQUEST:sort by TIC", "Sort order of SEQUEST search results given by the total ion current.", false}, {MS_SEQUEST_sort_by_Scan, "MS:1001070", "SEQUEST:sort by Scan", "Sort order of SEQUEST search results given by the scan number.", false}, {MS_SEQUEST_sort_by_Sequence, "MS:1001071", "SEQUEST:sort by Sequence", "Sort order of SEQUEST search results given by the sequence.", false}, {MS_SEQUEST_sort_by_Sf, "MS:1001072", "SEQUEST:sort by Sf", "Sort order of SEQUEST search results given by the SEQUEST result 'Sf'.", false}, {MS_database_type_amino_acid, "MS:1001073", "database type amino acid", "Database contains amino acid sequences.", false}, {MS_database_type_nucleotide, "MS:1001079", "database type nucleotide", "Database contains nucleic acid sequences.", false}, {MS_search_type, "MS:1001080", "search type", "Enumeration of type of search value (i.e. from PMF, sequence tag, MS2).", false}, {MS_pmf_search, "MS:1001081", "pmf search", "A peptide mass fingerprint search.", false}, {MS_tag_search, "MS:1001082", "tag search", "A sequence tag search.", false}, {MS_ms_ms_search, "MS:1001083", "ms-ms search", "An MS2 search (with fragment ions).", false}, {MS_database_nr, "MS:1001084", "database nr", "Non-redundant GenBank sequence database.", false}, {MS_protein_level_identification_attribute, "MS:1001085", "protein-level identification attribute", "Protein level information.", false}, {MS_SEQUEST_sort_by_XCorr, "MS:1001086", "SEQUEST:sort by XCorr", "Sort order of SEQUEST search results by the correlation score.", false}, {MS_SEQUEST_ProcessCV, "MS:1001087", "SEQUEST:ProcessCV", "SEQUEST View / Process Input Parameters.", false}, {MS_protein_description, "MS:1001088", "protein description", "The protein description line from the sequence entry in the source database FASTA file.", false}, {MS_molecule_taxonomy, "MS:1001089", "molecule taxonomy", "The taxonomy of the resultant molecule from the search.", false}, {MS_taxonomy_nomenclature_OBSOLETE, "MS:1001090", "taxonomy nomenclature", "OBSOLETE: The system used to indicate taxonomy. There should be an enumerated list of options: latin name, NCBI TaxID, common name, Swiss-Prot species ID (ex. RABIT from the full protein ID ALBU_RABIT).", true}, {MS_NoEnzyme_OBSOLETE, "MS:1001091", "NoEnzyme", "", true}, {MS_peptide_sequence_level_identification_statistic, "MS:1001092", "peptide sequence-level identification statistic", "Identification confidence metric for a peptide.", false}, {MS_sequence_coverage, "MS:1001093", "sequence coverage", "The percent coverage for the protein based upon the matched peptide sequences (can be calculated).", false}, {MS_SEQUEST_sort_by_z, "MS:1001094", "SEQUEST:sort by z", "Sort order of SEQUEST search results given by the charge.", false}, {MS_SEQUEST_ProcessAll, "MS:1001095", "SEQUEST:ProcessAll", "", false}, {MS_SEQUEST_TopPercentMostIntense, "MS:1001096", "SEQUEST:TopPercentMostIntense", "Specify \\\"percentage\\\" as value of the CVParam.", false}, {MS_distinct_peptide_sequences, "MS:1001097", "distinct peptide sequences", "This counts distinct sequences hitting the protein without regard to a minimal confidence threshold.", false}, {MS_confident_distinct_peptide_sequences, "MS:1001098", "confident distinct peptide sequences", "This counts the number of distinct peptide sequences. Multiple charge states and multiple modification states do NOT count as multiple sequences. The definition of 'confident' must be qualified elsewhere.", false}, {MS_confident_peptide_qualification, "MS:1001099", "confident peptide qualification", "The point of this entry is to define what is meant by confident for the term Confident distinct peptide sequence and/or Confident peptides. Example 1 - metric=Paragon:Confidence value=95 sense=greater than Example 2 - metric=Mascot:Eval value=0.05 sense=less than.", false}, {MS_confident_peptide_sequence_number, "MS:1001100", "confident peptide sequence number", "This counts the number of peptide sequences without regard to whether they are distinct. Multiple charges states and multiple modification states DO count as multiple peptides. The definition of 'confident' must be qualified elsewhere.", false}, {MS_protein_group_or_subset_relationship, "MS:1001101", "protein group or subset relationship", "Protein group or subset relationships.", false}, {MS_SEQUEST_Chromatogram, "MS:1001102", "SEQUEST:Chromatogram", "", false}, {MS_SEQUEST_InfoAndLog, "MS:1001103", "SEQUEST:InfoAndLog", "", false}, {MS_database_UniProtKB_Swiss_Prot, "MS:1001104", "database UniProtKB/Swiss-Prot", "The name of the UniProtKB/Swiss-Prot knowledgebase.", false}, {MS_peptide_sequence_level_identification_attribute, "MS:1001105", "peptide sequence-level identification attribute", "Peptide level information.", false}, {MS_SEQUEST_TopNumber, "MS:1001106", "SEQUEST:TopNumber", "Specify \\\"number\\\" as value of the CVParam.", false}, {MS_data_stored_in_database, "MS:1001107", "data stored in database", "Source file for this mzIdentML was a data set in a database.", false}, {MS_param__a_ion, "MS:1001108", "param: a ion", "Parameter information, type of product: a ion with charge on the N-terminal side.", false}, {MS_SEQUEST_CullTo, "MS:1001109", "SEQUEST:CullTo", "Specify cull string as value of the CVParam.", false}, {MS_SEQUEST_modeCV, "MS:1001110", "SEQUEST:modeCV", "SEQUEST Mode Input Parameters.", false}, {MS_SEQUEST_Full, "MS:1001111", "SEQUEST:Full", "", false}, {MS_n_terminal_flanking_residue, "MS:1001112", "n-terminal flanking residue", "Residue preceding the first amino acid in the peptide sequence as it occurs in the protein. Use 'N-term' to denote if the peptide starts at the N terminus of the protein.", false}, {MS_c_terminal_flanking_residue, "MS:1001113", "c-terminal flanking residue", "Residue following the last amino acid in the peptide sequence as it occurs in the protein. Use 'C-term' to denote if the peptide ends at the C terminus of the protein.", false}, {MS_retention_time_s__OBSOLETE, "MS:1001114", "retention time(s)", "Retention time of the spectrum from the source file.", true}, {MS_scan_number_s__OBSOLETE, "MS:1001115", "scan number(s)", "OBSOLETE: use spectrumID attribute of SpectrumIdentificationResult. Take from mzData.", true}, {MS_single_protein_identification_statistic, "MS:1001116", "single protein identification statistic", "Results specific for one protein as part of a protein ambiguity group (a result not valid for all the other proteins in the protein ambiguity group).", false}, {MS_theoretical_mass, "MS:1001117", "theoretical mass", "The theoretical mass of the molecule (e.g. the peptide sequence and its modifications).", false}, {MS_param__b_ion, "MS:1001118", "param: b ion", "Parameter information, type of product: b ion with charge on the N-terminal side.", false}, {MS_param__c_ion, "MS:1001119", "param: c ion", "Parameter information, type of product: c ion with charge on the N-terminal side.", false}, {MS_SEQUEST_FormatAndLinks, "MS:1001120", "SEQUEST:FormatAndLinks", "", false}, {MS_number_of_matched_peaks, "MS:1001121", "number of matched peaks", "The number of peaks that were matched as qualified by the ion series considered field. If a peak matches multiple ions then only 1 would be added the count.", false}, {MS_ions_series_considered, "MS:1001122", "ions series considered", "The ion series that were used during the calculation of the count (e.g. a, b, c, d, v, w, x, y, z, a-H2O, a-NH3, b-H2O, b-NH3, y-H2O, y-NH3, b-H20, b+, z-, z+1, z+2, b-H3PO4, y-H3PO4, immonium, internal ya, internal yb).", false}, {MS_number_of_peaks_used, "MS:1001123", "number of peaks used", "The number of peaks from the original peak list that are used to calculate the scores for a particular search engine. All ions that have the opportunity to match or be counted even if they don't.", false}, {MS_number_of_peaks_submitted, "MS:1001124", "number of peaks submitted", "The number of peaks from the original peaks listed that were submitted to the search engine.", false}, {MS_manual_validation, "MS:1001125", "manual validation", "Result of quality estimation: decision of a manual validation.", false}, {MS_SEQUEST_Fast, "MS:1001126", "SEQUEST:Fast", "", false}, {MS_peptide_sharing_details, "MS:1001127", "peptide sharing details", "Accessions Containing Sequence - Accessions for each protein containing this peptide.", false}, {MS_SEQUEST_selectCV, "MS:1001128", "SEQUEST:selectCV", "SEQUEST Select Input Parameters.", false}, {MS_quantification_information, "MS:1001129", "quantification information", "Quantification information.", false}, {MS_peptide_raw_area_OBSOLETE, "MS:1001130", "peptide raw area", "Peptide raw area.", true}, {MS_error_on_peptide_area, "MS:1001131", "error on peptide area", "Error on peptide area.", false}, {MS_peptide_ratio, "MS:1001132", "peptide ratio", "Peptide ratio.", false}, {MS_error_on_peptide_ratio, "MS:1001133", "error on peptide ratio", "Error on peptide ratio.", false}, {MS_protein_ratio, "MS:1001134", "protein ratio", "Protein ratio.", false}, {MS_error_on_protein_ratio, "MS:1001135", "error on protein ratio", "Error on protein ratio.", false}, {MS_p_value__protein_diff_from_1_randomly__OBSOLETE, "MS:1001136", "p-value (protein diff from 1 randomly)", "P-value (protein diff from 1 randomly).", true}, {MS_absolute_quantity, "MS:1001137", "absolute quantity", "Absolute quantity in terms of real concentration or molecule copy number in sample.", false}, {MS_error_on_absolute_quantity, "MS:1001138", "error on absolute quantity", "Error on absolute quantity.", false}, {MS_quantitation_software_name, "MS:1001139", "quantitation software name", "Quantitation software name.", false}, {MS_quantitation_software_version_OBSOLETE, "MS:1001140", "quantitation software version", "Quantitation software version.", true}, {MS_intensity_of_precursor_ion, "MS:1001141", "intensity of precursor ion", "The intensity of the precursor ion.", false}, {MS_database_IPI_human, "MS:1001142", "database IPI_human", "International Protein Index database for Homo sapiens sequences.", false}, {MS_PSM_level_search_engine_specific_statistic, "MS:1001143", "PSM-level search engine specific statistic", "Search engine specific peptide spectrum match scores.", false}, {MS_SEQUEST_SelectDefault, "MS:1001144", "SEQUEST:SelectDefault", "", false}, {MS_SEQUEST_SelectAdvancedCV, "MS:1001145", "SEQUEST:SelectAdvancedCV", "SEQUEST Select Advanced Input Parameters.", false}, {MS_param__a_ion_NH3_DEPRECATED, "MS:1001146", "param: a ion-NH3 DEPRECATED", "Ion a-NH3 parameter information, type of product: a ion with lost ammonia.", false}, {MS_protein_ambiguity_group_result_details, "MS:1001147", "protein ambiguity group result details", "", false}, {MS_param__a_ion_H2O_DEPRECATED, "MS:1001148", "param: a ion-H2O DEPRECATED", "Ion a-H2O if a significant and fragment includes STED.", false}, {MS_param__b_ion_NH3_DEPRECATED, "MS:1001149", "param: b ion-NH3 DEPRECATED", "Ion b-NH3 parameter information, type of product: b ion with lost ammonia.", false}, {MS_param__b_ion_H2O_DEPRECATED, "MS:1001150", "param: b ion-H2O DEPRECATED", "Ion b-H2O if b significant and fragment includes STED.", false}, {MS_param__y_ion_NH3_DEPRECATED, "MS:1001151", "param: y ion-NH3 DEPRECATED", "Ion y-NH3 parameter information, type of product: y ion with lost ammonia.", false}, {MS_param__y_ion_H2O_DEPRECATED, "MS:1001152", "param: y ion-H2O DEPRECATED", "", false}, {MS_search_engine_specific_score, "MS:1001153", "search engine specific score", "Search engine specific scores.", false}, {MS_SEQUEST_probability, "MS:1001154", "SEQUEST:probability", "The SEQUEST result 'Probability'.", false}, {MS_SEQUEST_xcorr, "MS:1001155", "SEQUEST:xcorr", "The SEQUEST result 'XCorr'.", false}, {MS_SEQUEST_deltacn, "MS:1001156", "SEQUEST:deltacn", "The SEQUEST result 'DeltaCn'.", false}, {MS_SEQUEST_sp, "MS:1001157", "SEQUEST:sp", "The SEQUEST result 'Sp' (protein).", false}, {MS_SEQUEST_Uniq, "MS:1001158", "SEQUEST:Uniq", "", false}, {MS_SEQUEST_expectation_value, "MS:1001159", "SEQUEST:expectation value", "The SEQUEST result 'Expectation value'.", false}, {MS_SEQUEST_sf, "MS:1001160", "SEQUEST:sf", "The SEQUEST result 'Sf'.", false}, {MS_SEQUEST_matched_ions, "MS:1001161", "SEQUEST:matched ions", "The SEQUEST result 'Matched Ions'.", false}, {MS_SEQUEST_total_ions, "MS:1001162", "SEQUEST:total ions", "The SEQUEST result 'Total Ions'.", false}, {MS_SEQUEST_consensus_score, "MS:1001163", "SEQUEST:consensus score", "The SEQUEST result 'Consensus Score'.", false}, {MS_Paragon_unused_protscore, "MS:1001164", "Paragon:unused protscore", "The Paragon result 'Unused ProtScore'.", false}, {MS_Paragon_total_protscore, "MS:1001165", "Paragon:total protscore", "The Paragon result 'Total ProtScore'.", false}, {MS_Paragon_score, "MS:1001166", "Paragon:score", "The Paragon result 'Score'.", false}, {MS_Paragon_confidence, "MS:1001167", "Paragon:confidence", "The Paragon result 'Confidence'.", false}, {MS_Paragon_expression_error_factor, "MS:1001168", "Paragon:expression error factor", "The Paragon result 'Expression Error Factor'.", false}, {MS_Paragon_expression_change_p_value, "MS:1001169", "Paragon:expression change p-value", "The Paragon result 'Expression change P-value'.", false}, {MS_Paragon_contrib, "MS:1001170", "Paragon:contrib", "The Paragon result 'Contrib'.", false}, {MS_Mascot_score, "MS:1001171", "Mascot:score", "The Mascot result 'Score'.", false}, {MS_Mascot_expectation_value, "MS:1001172", "Mascot:expectation value", "The Mascot result 'expectation value'.", false}, {MS_Mascot_matched_ions, "MS:1001173", "Mascot:matched ions", "The Mascot result 'Matched ions'.", false}, {MS_Mascot_total_ions, "MS:1001174", "Mascot:total ions", "The Mascot result 'Total ions'.", false}, {MS_peptide_shared_in_multiple_proteins, "MS:1001175", "peptide shared in multiple proteins", "A peptide matching multiple proteins.", false}, {MS______KR_____P_, "MS:1001176", "(?<=[KR])(?!P)", "Regular expression for Trypsin.", false}, {MS_number_of_molecular_hypothesis_considered, "MS:1001177", "number of molecular hypothesis considered", "Number of Molecular Hypothesis Considered - This is the number of molecules (e.g. peptides for proteomics) considered for a particular search.", false}, {MS_database_EST, "MS:1001178", "database EST", "Expressed sequence tag nucleotide sequence database.", false}, {MS_Cleavage_agent_regular_expression, "MS:1001180", "Cleavage agent regular expression", "Regular expressions for cleavage enzymes.", false}, {MS_search_statistics, "MS:1001184", "search statistics", "The details of the actual run of the search.", false}, {MS_modification_specificity_peptide_N_term, "MS:1001189", "modification specificity peptide N-term", "As parameter for search engine: apply the modification only at the N-terminus of a peptide.", false}, {MS_modification_specificity_peptide_C_term, "MS:1001190", "modification specificity peptide C-term", "As parameter for search engine: apply the modification only at the C-terminus of a peptide.", false}, {MS_p_value_OBSOLETE, "MS:1001191", "p-value", "Quality estimation by p-value.", true}, {MS_Expect_value, "MS:1001192", "Expect value", "Result of quality estimation: Expect value.", false}, {MS_confidence_score, "MS:1001193", "confidence score", "Result of quality estimation: confidence score.", false}, {MS_quality_estimation_with_decoy_database, "MS:1001194", "quality estimation with decoy database", "Quality estimation by decoy database.", false}, {MS_decoy_DB_type_reverse, "MS:1001195", "decoy DB type reverse", "Decoy type: Amino acids of protein sequences are used in reverse order.", false}, {MS_decoy_DB_type_randomized, "MS:1001196", "decoy DB type randomized", "Decoy type: Amino acids of protein sequences are randomized (keeping the original protein mass).", false}, {MS_DB_composition_target_decoy, "MS:1001197", "DB composition target+decoy", "Decoy database composition: database contains original (target) and decoy entries.", false}, {MS_protein_identification_confidence_metric, "MS:1001198", "protein identification confidence metric", "Identification confidence metric for a protein.", false}, {MS_Mascot_DAT_format, "MS:1001199", "Mascot DAT format", "Source file for this mzIdentML was in Mascot DAT file format.", false}, {MS_SEQUEST_out_file_format, "MS:1001200", "SEQUEST out file format", "Source file for this mzIdentML was in SEQUEST out file format.", false}, {MS_DB_MW_filter_maximum, "MS:1001201", "DB MW filter maximum", "Maximum value of molecular weight filter.", false}, {MS_DB_MW_filter_minimum, "MS:1001202", "DB MW filter minimum", "Minimum value of molecular weight filter.", false}, {MS_DB_PI_filter_maximum, "MS:1001203", "DB PI filter maximum", "Maximum value of isoelectric point filter.", false}, {MS_DB_PI_filter_minimum, "MS:1001204", "DB PI filter minimum", "Minimum value of isoelectric point filter.", false}, {MS_Mascot, "MS:1001207", "Mascot", "The name of the Mascot search engine.", false}, {MS_SEQUEST, "MS:1001208", "SEQUEST", "The name of the SEQUEST search engine.", false}, {MS_Phenyx, "MS:1001209", "Phenyx", "The name of the Phenyx search engine.", false}, {MS_mass_type_settings, "MS:1001210", "mass type settings", "The type of mass difference value to be considered by the search engine (monoisotopic or average).", false}, {MS_parent_mass_type_mono, "MS:1001211", "parent mass type mono", "Mass type setting for parent mass was monoisotopic.", false}, {MS_parent_mass_type_average, "MS:1001212", "parent mass type average", "Mass type setting for parent mass was average isotopic.", false}, {MS_search_result_details_OBSOLETE, "MS:1001213", "search result details", "OBSOLETE: Scores and global result characteristics.", true}, {MS_protein_level_global_FDR, "MS:1001214", "protein-level global FDR", "Estimation of the global false discovery rate of proteins.", false}, {MS_SEQUEST_PeptideSp, "MS:1001215", "SEQUEST:PeptideSp", "The SEQUEST result 'Sp' in out file (peptide).", false}, {MS_SEQUEST_PeptideRankSp, "MS:1001217", "SEQUEST:PeptideRankSp", "The SEQUEST result 'Sp' of 'Rank/Sp' in out file (peptide). Also called 'rsp'.", false}, {MS_SEQUEST_PeptideNumber, "MS:1001218", "SEQUEST:PeptideNumber", "The SEQUEST result '#' in out file (peptide).", false}, {MS_SEQUEST_PeptideIdnumber, "MS:1001219", "SEQUEST:PeptideIdnumber", "The SEQUEST result 'Id#' in out file (peptide).", false}, {MS_frag__y_ion, "MS:1001220", "frag: y ion", "Fragmentation information, type of product: y ion.", false}, {MS_product_ion_attribute, "MS:1001221", "product ion attribute", "Fragmentation information like ion types.", false}, {MS_frag__b_ion___H2O, "MS:1001222", "frag: b ion - H2O", "Fragmentation information, type of product: b ion without water.", false}, {MS_frag__y_ion___H2O, "MS:1001223", "frag: y ion - H2O", "Fragmentation information, type of product: y ion without water.", false}, {MS_frag__b_ion, "MS:1001224", "frag: b ion", "Fragmentation information, type of product: b ion.", false}, {MS_product_ion_m_z, "MS:1001225", "product ion m/z", "The m/z of the product ion.", false}, {MS_product_ion_intensity, "MS:1001226", "product ion intensity", "The intensity of a single product ion.", false}, {MS_product_ion_m_z_error, "MS:1001227", "product ion m/z error", "The product ion m/z error.", false}, {MS_frag__x_ion, "MS:1001228", "frag: x ion", "Fragmentation information, type of product: x ion.", false}, {MS_frag__a_ion, "MS:1001229", "frag: a ion", "Fragmentation information, type of product: a ion.", false}, {MS_frag__z_ion, "MS:1001230", "frag: z ion", "Fragmentation information, type of product: z ion.", false}, {MS_frag__c_ion, "MS:1001231", "frag: c ion", "Fragmentation information, type of product: c ion.", false}, {MS_frag__b_ion___NH3, "MS:1001232", "frag: b ion - NH3", "Ion b-NH3 fragmentation information, type of product: b ion without ammonia.", false}, {MS_frag__y_ion___NH3, "MS:1001233", "frag: y ion - NH3", "Ion y-NH3 fragmentation information, type of product: y ion without ammonia.", false}, {MS_frag__a_ion___H2O, "MS:1001234", "frag: a ion - H2O", "Fragmentation information, type of product: a ion without water.", false}, {MS_frag__a_ion___NH3, "MS:1001235", "frag: a ion - NH3", "Ion a-NH3 fragmentation information, type of product: a ion without ammonia.", false}, {MS_frag__d_ion, "MS:1001236", "frag: d ion", "Fragmentation information, type of product: d ion.", false}, {MS_frag__v_ion, "MS:1001237", "frag: v ion", "Fragmentation information, type of product: v ion.", false}, {MS_frag__w_ion, "MS:1001238", "frag: w ion", "Fragmentation information, type of product: w ion.", false}, {MS_frag__immonium_ion, "MS:1001239", "frag: immonium ion", "Fragmentation information, type of product: immonium ion.", false}, {MS_non_identified_ion, "MS:1001240", "non-identified ion", "Non-identified ion.", false}, {MS_co_eluting_ion, "MS:1001241", "co-eluting ion", "Co-eluting ion.", false}, {MS_SEQUEST_out_folder, "MS:1001242", "SEQUEST out folder", "Source file for this mzIdentML was a SEQUEST folder with its out files.", false}, {MS_SEQUEST_summary, "MS:1001243", "SEQUEST summary", "Source file for this mzIdentML was a SEQUEST summary page (proteins).", false}, {MS_PerSeptive_PKS_format, "MS:1001245", "PerSeptive PKS format", "PerSeptive peak list file format.", false}, {MS_SCIEX_API_III_format, "MS:1001246", "SCIEX API III format", "PE SCIEX peak list file format.", false}, {MS_Bruker_XML_format, "MS:1001247", "Bruker XML format", "Bruker data exchange XML format.", false}, {MS_search_input_details, "MS:1001249", "search input details", "Details describing the search input.", false}, {MS_local_FDR, "MS:1001250", "local FDR", "Result of quality estimation: the local FDR at the current position of a sorted list.", false}, {MS_Trypsin, "MS:1001251", "Trypsin", "Enzyme trypsin.", false}, {MS_DB_source_EBI, "MS:1001252", "DB source EBI", "Database source EBI.", false}, {MS_DB_source_NCBI, "MS:1001253", "DB source NCBI", "Database source NCBI.", false}, {MS_DB_source_UniProt, "MS:1001254", "DB source UniProt", "Database source UniProt.", false}, {MS_fragment_mass_type_average, "MS:1001255", "fragment mass type average", "Mass type setting for fragment mass was average isotopic.", false}, {MS_fragment_mass_type_mono, "MS:1001256", "fragment mass type mono", "Mass type setting for fragment mass was monoisotopic.", false}, {MS_param__v_ion, "MS:1001257", "param: v ion", "Parameter information, type of product: side chain loss v ion.", false}, {MS_param__d_ion, "MS:1001258", "param: d ion", "Parameter information, type of product: side chain loss d ion.", false}, {MS_param__immonium_ion, "MS:1001259", "param: immonium ion", "Parameter information, type of product: immonium ion.", false}, {MS_param__w_ion, "MS:1001260", "param: w ion", "Parameter information, type of product: side chain loss w ion.", false}, {MS_param__x_ion, "MS:1001261", "param: x ion", "Parameter information, type of product: x ion with charge on the C-terminal side.", false}, {MS_param__y_ion, "MS:1001262", "param: y ion", "Parameter information, type of product: y ion with charge on the C-terminal side.", false}, {MS_param__z_ion, "MS:1001263", "param: z ion", "Parameter information, type of product: z ion with charge on the C-terminal side.", false}, {MS_role_type, "MS:1001266", "role type", "Role of a Person or Organization.", false}, {MS_software_vendor, "MS:1001267", "software vendor", "Software vendor role.", false}, {MS_programmer, "MS:1001268", "programmer", "Programmer role.", false}, {MS_instrument_vendor, "MS:1001269", "instrument vendor", "Instrument vendor role.", false}, {MS_lab_personnel, "MS:1001270", "lab personnel", "Lab personnel role.", false}, {MS_researcher, "MS:1001271", "researcher", "Researcher role.", false}, {MS_____R____P_, "MS:1001272", "(?<=R)(?!P)", "Regular expression for Arg-C.", false}, {MS_____BD__, "MS:1001273", "(?=[BD])", "Regular expression for Asp-N.", false}, {MS_____DE__, "MS:1001274", "(?=[DE])", "Regular expression for Asp-N-ambic.", false}, {MS_ProteinScape_SearchEvent, "MS:1001275", "ProteinScape SearchEvent", "Source data for this mzIdentML was a ProteinScape SearchEvent.", false}, {MS_ProteinScape_Gel, "MS:1001276", "ProteinScape Gel", "Source data for this mzIdentML was a ProteinScape Gel.", false}, {MS_decoy_DB_accession_regexp, "MS:1001283", "decoy DB accession regexp", "Specify the regular expression for decoy accession numbers.", false}, {MS_decoy_DB_derived_from_OBSOLETE, "MS:1001284", "decoy DB derived from", "The name of the database, the search database was derived from.", true}, {MS_database_IPI_mouse, "MS:1001285", "database IPI_mouse", "International Protein Index database for Mus musculus sequences.", false}, {MS_database_IPI_rat, "MS:1001286", "database IPI_rat", "International Protein Index database for Rattus norvegicus sequences.", false}, {MS_database_IPI_zebrafish, "MS:1001287", "database IPI_zebrafish", "International Protein Index database for Danio rerio sequences.", false}, {MS_database_IPI_chicken, "MS:1001288", "database IPI_chicken", "International Protein Index database for Gallus gallus sequences.", false}, {MS_database_IPI_cow, "MS:1001289", "database IPI_cow", "International Protein Index database for Bos taurus sequences.", false}, {MS_database_IPI_arabidopsis, "MS:1001290", "database IPI_arabidopsis", "International Protein Index database for Arabidopsis thaliana sequences.", false}, {MS_decoy_DB_from_nr_OBSOLETE, "MS:1001291", "decoy DB from nr", "Decoy database from a non-redundant GenBank sequence database.", true}, {MS_decoy_DB_from_IPI_rat_OBSOLETE, "MS:1001292", "decoy DB from IPI_rat", "Decoy database from a International Protein Index database for Rattus norvegicus.", true}, {MS_decoy_DB_from_IPI_mouse_OBSOLETE, "MS:1001293", "decoy DB from IPI_mouse", "Decoy database from a International Protein Index database for Mus musculus.", true}, {MS_decoy_DB_from_IPI_arabidopsis_OBSOLETE, "MS:1001294", "decoy DB from IPI_arabidopsis", "Decoy database from a International Protein Index database for Arabidopsis thaliana.", true}, {MS_decoy_DB_from_EST_OBSOLETE, "MS:1001295", "decoy DB from EST", "Decoy database from an expressed sequence tag nucleotide sequence database.", true}, {MS_decoy_DB_from_IPI_zebrafish_OBSOLETE, "MS:1001296", "decoy DB from IPI_zebrafish", "Decoy database from a International Protein Index database for Danio rerio.", true}, {MS_decoy_DB_from_UniProtKB_Swiss_Prot_OBSOLETE, "MS:1001297", "decoy DB from UniProtKB/Swiss-Prot", "Decoy database from a Swiss-Prot protein sequence database.", true}, {MS_decoy_DB_from_IPI_chicken_OBSOLETE, "MS:1001298", "decoy DB from IPI_chicken", "Decoy database from a International Protein Index database for Gallus gallus.", true}, {MS_decoy_DB_from_IPI_cow_OBSOLETE, "MS:1001299", "decoy DB from IPI_cow", "Decoy database from a International Protein Index database for Bos taurus.", true}, {MS_decoy_DB_from_IPI_human_OBSOLETE, "MS:1001300", "decoy DB from IPI_human", "Decoy database from a International Protein Index database for Homo sapiens.", true}, {MS_protein_rank, "MS:1001301", "protein rank", "The rank of the protein in a list sorted by the search engine.", false}, {MS_search_engine_specific_input_parameter, "MS:1001302", "search engine specific input parameter", "Search engine specific input parameters.", false}, {MS_Arg_C, "MS:1001303", "Arg-C", "Endoproteinase Arg-C.", false}, {MS_Asp_N, "MS:1001304", "Asp-N", "Endoproteinase Asp-N.", false}, {MS_Asp_N_ambic, "MS:1001305", "Asp-N_ambic", "Enzyme Asp-N, Ammonium Bicarbonate (AmBic).", false}, {MS_Chymotrypsin, "MS:1001306", "Chymotrypsin", "Enzyme chymotrypsin.", false}, {MS_CNBr, "MS:1001307", "CNBr", "Cyanogen bromide.", false}, {MS_Formic_acid, "MS:1001308", "Formic_acid", "Formic acid.", false}, {MS_Lys_C, "MS:1001309", "Lys-C", "Endoproteinase Lys-C.", false}, {MS_Lys_C_P, "MS:1001310", "Lys-C/P", "Proteinase Lys-C/P.", false}, {MS_PepsinA, "MS:1001311", "PepsinA", "PepsinA proteinase.", false}, {MS_TrypChymo, "MS:1001312", "TrypChymo", "Cleavage agent TrypChymo.", false}, {MS_Trypsin_P, "MS:1001313", "Trypsin/P", "Cleavage agent Trypsin/P.", false}, {MS_V8_DE, "MS:1001314", "V8-DE", "Cleavage agent V8-DE.", false}, {MS_V8_E, "MS:1001315", "V8-E", "Cleavage agent V8-E.", false}, {MS_Mascot_SigThreshold, "MS:1001316", "Mascot:SigThreshold", "Significance threshold below which the p-value of a peptide match must lie to be considered statistically significant (default 0.05).", false}, {MS_Mascot_MaxProteinHits, "MS:1001317", "Mascot:MaxProteinHits", "The number of protein hits to display in the report. If 'Auto', all protein hits that have a protein score exceeding the average peptide identity threshold are reported. Otherwise an integer at least 1.", false}, {MS_Mascot_ProteinScoringMethod, "MS:1001318", "Mascot:ProteinScoringMethod", "Mascot protein scoring method; either 'Standard' or 'MudPIT'.", false}, {MS_Mascot_MinMSMSThreshold, "MS:1001319", "Mascot:MinMSMSThreshold", "Mascot peptide match ion score threshold. If between 0 and 1, then peptide matches whose expect value exceeds the thresholds are suppressed; if at least 1, then peptide matches whose ion score is below the threshold are suppressed.", false}, {MS_Mascot_ShowHomologousProteinsWithSamePeptides, "MS:1001320", "Mascot:ShowHomologousProteinsWithSamePeptides", "If true, show (sequence or spectrum) same-set proteins. Otherwise they are suppressed.", false}, {MS_Mascot_ShowHomologousProteinsWithSubsetOfPeptides, "MS:1001321", "Mascot:ShowHomologousProteinsWithSubsetOfPeptides", "If true, show (sequence or spectrum) sub-set and subsumable proteins. Otherwise they are suppressed.", false}, {MS_Mascot_RequireBoldRed, "MS:1001322", "Mascot:RequireBoldRed", "Only used in Peptide Summary and Select Summary reports. If true, a peptide match must be 'bold red' to be included in the report; bold red means the peptide is a top ranking match in a query and appears for the first time (in linear order) in the list of protein hits.", false}, {MS_Mascot_UseUnigeneClustering, "MS:1001323", "Mascot:UseUnigeneClustering", "If true, then the search results are against a nucleic acid database and Unigene clustering is enabled. Otherwise UniGene clustering is not in use.", false}, {MS_Mascot_IncludeErrorTolerantMatches, "MS:1001324", "Mascot:IncludeErrorTolerantMatches", "If true, then the search results are error tolerant and peptide matches from the second pass are included in search results. Otherwise no error tolerant peptide matches are included.", false}, {MS_Mascot_ShowDecoyMatches, "MS:1001325", "Mascot:ShowDecoyMatches", "If true, then the search results are against an automatically generated decoy database and the reported peptide matches and protein hits come from the decoy database. Otherwise peptide matches and protein hits come from the original database.", false}, {MS_add_others_OBSOLETE, "MS:1001326", "add_others", "OBSOLETE.", true}, {MS_OMSSA_evalue, "MS:1001328", "OMSSA:evalue", "OMSSA E-value.", false}, {MS_OMSSA_pvalue, "MS:1001329", "OMSSA:pvalue", "OMSSA p-value.", false}, {MS_X_Tandem_expect, "MS:1001330", "X!Tandem:expect", "The X!Tandem expectation value.", false}, {MS_X_Tandem_hyperscore, "MS:1001331", "X!Tandem:hyperscore", "The X!Tandem hyperscore.", false}, {MS______FYWL_____P_, "MS:1001332", "(?<=[FYWL])(?!P)", "Regular expression for Chymotrypsin.", false}, {MS_____M_, "MS:1001333", "(?<=M)", "Regular expression for CNBr.", false}, {MS______D_______D__, "MS:1001334", "((?<=D))|((?=D))", "Regular expression for formic acid.", false}, {MS_____K____P_, "MS:1001335", "(?<=K)(?!P)", "Regular expression for Lys-C.", false}, {MS_____K_, "MS:1001336", "(?<=K)", "Regular expression for Lys-C/P.", false}, {MS______FL__, "MS:1001337", "(?<=[FL])", "Regular expression for PepsinA.", false}, {MS______FYWLKR_____P_, "MS:1001338", "(?<=[FYWLKR])(?!P)", "Regular expression for TrypChymo.", false}, {MS______KR__, "MS:1001339", "(?<=[KR])", "Regular expression for Trypsin/P.", false}, {MS______BDEZ_____P_, "MS:1001340", "(?<=[BDEZ])(?!P)", "Regular expression for V8-DE.", false}, {MS______EZ_____P_, "MS:1001341", "(?<=[EZ])(?!P)", "Regular expression for V8-E.", false}, {MS_database_sequence_details, "MS:1001342", "database sequence details", "Details about a single database sequence.", false}, {MS_NA_sequence, "MS:1001343", "NA sequence", "The sequence is a nucleic acid sequence.", false}, {MS_AA_sequence, "MS:1001344", "AA sequence", "The sequence is a amino acid sequence.", false}, {MS_mass_table_source, "MS:1001345", "mass table source", "Children of this term specify the source of the mass table used.", false}, {MS_AAIndex_mass_table, "MS:1001346", "AAIndex mass table", "The masses used in the mass table are taken from AAIndex.", false}, {MS_database_file_formats, "MS:1001347", "database file formats", "The children of this term define file formats of the sequence database used.", false}, {MS_FASTA_format, "MS:1001348", "FASTA format", "The sequence database was stored in the FASTA format.", false}, {MS_ASN_1, "MS:1001349", "ASN.1", "The sequence database was stored in the Abstract Syntax Notation 1 format.", false}, {MS_NCBI___p_, "MS:1001350", "NCBI *.p*", "The sequence database was stored in the NCBI formatdb (*.p*) format.", false}, {MS_clustal_aln, "MS:1001351", "clustal aln", "ClustalW ALN (multiple alignment) format.", false}, {MS_embl_em, "MS:1001352", "embl em", "EMBL entry format.", false}, {MS_NBRF_PIR, "MS:1001353", "NBRF PIR", "The NBRF PIR was used as format.", false}, {MS_mass_table_options, "MS:1001354", "mass table options", "Root node for options for the mass table used.", false}, {MS_peptide_descriptions, "MS:1001355", "peptide descriptions", "Descriptions of peptides.", false}, {MS_spectrum_descriptions, "MS:1001356", "spectrum descriptions", "Descriptions of the input spectra.", false}, {MS_spectrum_quality_descriptions, "MS:1001357", "spectrum quality descriptions", "Description of the quality of the input spectrum.", false}, {MS_msmsEval_quality, "MS:1001358", "msmsEval quality", "This term reports the quality of the spectrum assigned by msmsEval.", false}, {MS_ambiguous_residues, "MS:1001359", "ambiguous residues", "Children of this term describe ambiguous residues.", false}, {MS_alternate_single_letter_codes, "MS:1001360", "alternate single letter codes", "List of standard residue one letter codes which are used to replace a non-standard.", false}, {MS_alternate_mass, "MS:1001361", "alternate mass", "List of masses a non-standard letter code is replaced with.", false}, {MS_number_of_unmatched_peaks, "MS:1001362", "number of unmatched peaks", "The number of unmatched peaks.", false}, {MS_peptide_unique_to_one_protein, "MS:1001363", "peptide unique to one protein", "A peptide matching only one.", false}, {MS_peptide_sequence_level_global_FDR, "MS:1001364", "peptide sequence-level global FDR", "Estimation of the global false discovery rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_frag__internal_yb_ion, "MS:1001365", "frag: internal yb ion", "Fragmentation information, type of product: internal yb ion.", false}, {MS_frag__internal_ya_ion, "MS:1001366", "frag: internal ya ion", "Fragmentation information, type of product: internal ya ion.", false}, {MS_frag__z_1_ion, "MS:1001367", "frag: z+1 ion", "Fragmentation information, type of product: z+1 ion.", false}, {MS_frag__z_2_ion, "MS:1001368", "frag: z+2 ion", "Fragmentation information, type of product: z+2 ion.", false}, {MS_text_format, "MS:1001369", "text format", "Simple text file format of \\\"m/z [intensity]\\\" values for a PMF (or single MS2) search.", false}, {MS_Mascot_homology_threshold, "MS:1001370", "Mascot:homology threshold", "The Mascot result 'homology threshold'.", false}, {MS_Mascot_identity_threshold, "MS:1001371", "Mascot:identity threshold", "The Mascot result 'identity threshold'.", false}, {MS_SEQUEST_Sequences, "MS:1001372", "SEQUEST:Sequences", "", false}, {MS_SEQUEST_TIC, "MS:1001373", "SEQUEST:TIC", "SEQUEST total ion current.", false}, {MS_SEQUEST_Sum, "MS:1001374", "SEQUEST:Sum", "", false}, {MS_Phenyx_Instrument_Type, "MS:1001375", "Phenyx:Instrument Type", "The instrument type parameter value in Phenyx.", false}, {MS_Phenyx_Scoring_Model, "MS:1001376", "Phenyx:Scoring Model", "The selected scoring model in Phenyx.", false}, {MS_Phenyx_Default_Parent_Charge, "MS:1001377", "Phenyx:Default Parent Charge", "The default parent charge value in Phenyx.", false}, {MS_Phenyx_Trust_Parent_Charge, "MS:1001378", "Phenyx:Trust Parent Charge", "The parameter in Phenyx that specifies if the experimental charge state is to be considered as correct.", false}, {MS_Phenyx_Turbo, "MS:1001379", "Phenyx:Turbo", "The turbo mode parameter in Phenyx.", false}, {MS_Phenyx_Turbo_ErrorTol, "MS:1001380", "Phenyx:Turbo:ErrorTol", "The maximal allowed fragment m/z error filter considered in the turbo mode of Phenyx.", false}, {MS_Phenyx_Turbo_Coverage, "MS:1001381", "Phenyx:Turbo:Coverage", "The minimal peptide sequence coverage value, expressed in percent, considered in the turbo mode of Phenyx.", false}, {MS_Phenyx_Turbo_Series, "MS:1001382", "Phenyx:Turbo:Series", "The list of ion series considered in the turbo mode of Phenyx.", false}, {MS_Phenyx_MinPepLength, "MS:1001383", "Phenyx:MinPepLength", "The minimal number of residues for a peptide to be considered for a valid identification in Phenyx.", false}, {MS_Phenyx_MinPepzscore, "MS:1001384", "Phenyx:MinPepzscore", "The minimal peptide z-score for a peptide to be considered for a valid identification in Phenyx.", false}, {MS_Phenyx_MaxPepPvalue, "MS:1001385", "Phenyx:MaxPepPvalue", "The maximal peptide p-value for a peptide to be considered for a valid identification in Phenyx.", false}, {MS_Phenyx_AC_Score, "MS:1001386", "Phenyx:AC Score", "The minimal protein score required for a protein database entry to be displayed in the list of identified proteins in Phenyx.", false}, {MS_Phenyx_Conflict_Resolution, "MS:1001387", "Phenyx:Conflict Resolution", "The parameter in Phenyx that specifies if the conflict resolution algorithm is to be used.", false}, {MS_Phenyx_AC, "MS:1001388", "Phenyx:AC", "The primary sequence database identifier of a protein in Phenyx.", false}, {MS_Phenyx_ID, "MS:1001389", "Phenyx:ID", "A secondary sequence database identifier of a protein in Phenyx.", false}, {MS_Phenyx_Score, "MS:1001390", "Phenyx:Score", "The protein score of a protein match in Phenyx.", false}, {MS_Phenyx_Peptides1, "MS:1001391", "Phenyx:Peptides1", "First number of phenyx result \\\"#Peptides\\\".", false}, {MS_Phenyx_Peptides2, "MS:1001392", "Phenyx:Peptides2", "Second number of phenyx result \\\"#Peptides\\\".", false}, {MS_Phenyx_Auto, "MS:1001393", "Phenyx:Auto", "The value of the automatic peptide acceptance filter in Phenyx.", false}, {MS_Phenyx_User, "MS:1001394", "Phenyx:User", "The value of the user-defined peptide acceptance filter in Phenyx.", false}, {MS_Phenyx_Pepzscore, "MS:1001395", "Phenyx:Pepzscore", "The z-score value of a peptide sequence match in Phenyx.", false}, {MS_Phenyx_PepPvalue, "MS:1001396", "Phenyx:PepPvalue", "The p-value of a peptide sequence match in Phenyx.", false}, {MS_Phenyx_NumberOfMC, "MS:1001397", "Phenyx:NumberOfMC", "The number of missed cleavages of a peptide sequence in Phenyx.", false}, {MS_Phenyx_Modif, "MS:1001398", "Phenyx:Modif", "The expression of the nature and position(s) of modified residue(s) on a matched peptide sequence in Phenyx.", false}, {MS_OMSSA_csv_format, "MS:1001399", "OMSSA csv format", "Source file for this mzIdentML was in OMSSA csv file format.", false}, {MS_OMSSA_xml_format, "MS:1001400", "OMSSA xml format", "Source file for this mzIdentML was in OMSSA xml file format.", false}, {MS_X_Tandem_xml_format, "MS:1001401", "X!Tandem xml format", "Source file for this mzIdentML was in X!Tandem xml file format.", false}, {MS_spectrum_identification_result_details, "MS:1001405", "spectrum identification result details", "This subsection describes terms which can describe details of spectrum identification results.", false}, {MS_param__internal_yb_ion, "MS:1001406", "param: internal yb ion", "Parameter information, type of product: internal yb ion.", false}, {MS_param__internal_ya_ion, "MS:1001407", "param: internal ya ion", "Parameter information, type of product: internal ya ion.", false}, {MS_param__z_1_ion, "MS:1001408", "param: z+1 ion", "Parameter information, type of product: z+1 ion.", false}, {MS_param__z_2_ion, "MS:1001409", "param: z+2 ion", "Parameter information, type of product: z+2 ion.", false}, {MS_translation_start_codons, "MS:1001410", "translation start codons", "The translation start codons used to translate the nucleotides to amino acids.", false}, {MS_search_tolerance_specification, "MS:1001411", "search tolerance specification", "Specification of the search tolerance.", false}, {MS_search_tolerance_plus_value, "MS:1001412", "search tolerance plus value", "", false}, {MS_search_tolerance_minus_value, "MS:1001413", "search tolerance minus value", "", false}, {MS_MGF_scans_OBSOLETE, "MS:1001414", "MGF scans", "OBSOLETE: replaced by MS:1000797 (peak list scans): This term can hold the scans attribute from an MGF input file.", true}, {MS_MGF_raw_scans_OBSOLETE, "MS:1001415", "MGF raw scans", "OBSOLETE: replaced by MS:1000798 (peak list raw scans): This term can hold the raw scans attribute from an MGF input file.", true}, {MS_spectrum_title_OBSOLETE, "MS:1001416", "spectrum title", "OBSOLETE: replaced by MS:1000796 (spectrum title): Holds the spectrum title from different input file formats, e.g. MGF TITLE.", true}, {MS_SpectraST_dot, "MS:1001417", "SpectraST:dot", "SpectraST dot product of two spectra, measuring spectral similarity.", false}, {MS_SpectraST_dot_bias, "MS:1001418", "SpectraST:dot_bias", "SpectraST measure of how much of the dot product is dominated by a few peaks.", false}, {MS_SpectraST_discriminant_score_F, "MS:1001419", "SpectraST:discriminant score F", "SpectraST spectrum score.", false}, {MS_SpectraST_delta, "MS:1001420", "SpectraST:delta", "SpectraST normalised difference between dot product of top hit and runner-up.", false}, {MS_pepXML_format, "MS:1001421", "pepXML format", "The XML-based pepXML file format for encoding PSM information, created and maintained by the Trans-Proteomic Pipeline developers.", false}, {MS_protXML_format, "MS:1001422", "protXML format", "The XML-based protXML file format for encoding protein identifications, created and maintained by the Trans-Proteomic Pipeline developers.", false}, {MS_translation_table_description, "MS:1001423", "translation table description", "A URL that describes the translation table used to translate the nucleotides to amino acids.", false}, {MS_ProteinExtractor_Methodname, "MS:1001424", "ProteinExtractor:Methodname", "Name of the used method in the ProteinExtractor algorithm.", false}, {MS_ProteinExtractor_GenerateNonRedundant, "MS:1001425", "ProteinExtractor:GenerateNonRedundant", "Flag indicating if a non redundant scoring should be generated.", false}, {MS_ProteinExtractor_IncludeIdentified, "MS:1001426", "ProteinExtractor:IncludeIdentified", "Flag indicating if identified proteins should be included.", false}, {MS_ProteinExtractor_MaxNumberOfProteins, "MS:1001427", "ProteinExtractor:MaxNumberOfProteins", "The maximum number of proteins to consider.", false}, {MS_ProteinExtractor_MaxProteinMass, "MS:1001428", "ProteinExtractor:MaxProteinMass", "The maximum considered mass for a protein.", false}, {MS_ProteinExtractor_MinNumberOfPeptides, "MS:1001429", "ProteinExtractor:MinNumberOfPeptides", "The minimum number of proteins to consider.", false}, {MS_ProteinExtractor_UseMascot, "MS:1001430", "ProteinExtractor:UseMascot", "Flag indicating to include Mascot scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_MascotPeptideScoreThreshold, "MS:1001431", "ProteinExtractor:MascotPeptideScoreThreshold", "Only peptides with scores higher than that threshold are taken into account in Mascot scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_MascotUniqueScore, "MS:1001432", "ProteinExtractor:MascotUniqueScore", "In the final result each protein must have at least one peptide above this Mascot score threshold in ProteinExtractor meta score calculation.", false}, {MS_ProteinExtractor_MascotUseIdentityScore, "MS:1001433", "ProteinExtractor:MascotUseIdentityScore", "", false}, {MS_ProteinExtractor_MascotWeighting, "MS:1001434", "ProteinExtractor:MascotWeighting", "Influence of Mascot search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor.", false}, {MS_ProteinExtractor_UseSequest, "MS:1001435", "ProteinExtractor:UseSequest", "Flag indicating to include SEQUEST scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_SequestPeptideScoreThreshold, "MS:1001436", "ProteinExtractor:SequestPeptideScoreThreshold", "Only peptides with scores higher than that threshold are taken into account in SEQUEST scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_SequestUniqueScore, "MS:1001437", "ProteinExtractor:SequestUniqueScore", "In the final result each protein must have at least one peptide above this SEQUEST score threshold in ProteinExtractor meta score calculation.", false}, {MS_ProteinExtractor_SequestWeighting, "MS:1001438", "ProteinExtractor:SequestWeighting", "Influence of SEQUEST search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor.", false}, {MS_ProteinExtractor_UseProteinSolver, "MS:1001439", "ProteinExtractor:UseProteinSolver", "Flag indicating to include ProteinSolver scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_ProteinSolverPeptideScoreThreshold, "MS:1001440", "ProteinExtractor:ProteinSolverPeptideScoreThreshold", "Only peptides with scores higher than that threshold are taken into account in ProteinSolver scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_ProteinSolverUniqueScore, "MS:1001441", "ProteinExtractor:ProteinSolverUniqueScore", "In the final result each protein must have at least one peptide above this ProteinSolver score threshold in ProteinExtractor meta score calculation.", false}, {MS_ProteinExtractor_ProteinSolverWeighting, "MS:1001442", "ProteinExtractor:ProteinSolverWeighting", "Influence of ProteinSolver search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor.", false}, {MS_ProteinExtractor_UsePhenyx, "MS:1001443", "ProteinExtractor:UsePhenyx", "Flag indicating to include Phenyx scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_PhenyxPeptideScoreThreshold, "MS:1001444", "ProteinExtractor:PhenyxPeptideScoreThreshold", "Only peptides with scores higher than that threshold are taken into account in Phenyx scoring for calculation of the ProteinExtractor meta score.", false}, {MS_ProteinExtractor_PhenyxUniqueScore, "MS:1001445", "ProteinExtractor:PhenyxUniqueScore", "In the final result each protein must have at least one peptide above this Phenyx score threshold in ProteinExtractor meta score calculation.", false}, {MS_ProteinExtractor_PhenyxWeighting, "MS:1001446", "ProteinExtractor:PhenyxWeighting", "Influence of Phenyx search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor.", false}, {MS_prot_FDR_threshold, "MS:1001447", "prot:FDR threshold", "False-discovery rate threshold for proteins.", false}, {MS_pep_FDR_threshold, "MS:1001448", "pep:FDR threshold", "False-discovery rate threshold for peptides.", false}, {MS_OMSSA_e_value_threshold, "MS:1001449", "OMSSA e-value threshold", "Threshold for OMSSA e-value for quality estimation.", false}, {MS_decoy_DB_details, "MS:1001450", "decoy DB details", "Details of decoy generation and database structure.", false}, {MS_decoy_DB_generation_algorithm, "MS:1001451", "decoy DB generation algorithm", "Name of algorithm used for decoy generation.", false}, {MS_decoy_DB_type_shuffle, "MS:1001452", "decoy DB type shuffle", "Decoy type: Amino acids of protein sequences are used in a random order.", false}, {MS_DB_composition_only_decoy, "MS:1001453", "DB composition only decoy", "Decoy database composition: database contains only decoy entries.", false}, {MS_quality_estimation_with_implicite_decoy_sequences, "MS:1001454", "quality estimation with implicite decoy sequences", "Decoy entries are generated during the search, not explicitly stored in a database (like Mascot Decoy).", false}, {MS_acquisition_software, "MS:1001455", "acquisition software", "Acquisition software.", false}, {MS_analysis_software, "MS:1001456", "analysis software", "Analysis software.", false}, {MS_data_processing_software, "MS:1001457", "data processing software", "Data processing software.", false}, {MS_spectrum_generation_information, "MS:1001458", "spectrum generation information", "Vocabularies describing the spectrum generation information.", false}, {MS_file_format, "MS:1001459", "file format", "Format of data files.", false}, {MS_unknown_modification, "MS:1001460", "unknown modification", "This term should be given if the modification was unknown.", false}, {MS_greylag, "MS:1001461", "greylag", "Greylag identification software.", false}, {MS_PEFF_format, "MS:1001462", "PEFF format", "The sequence database was stored in the PEFF (PSI enhanced FastA file) format.", false}, {MS_Phenyx_XML_format, "MS:1001463", "Phenyx XML format", "Phenyx open XML file format.", false}, {MS_DTASelect_format, "MS:1001464", "DTASelect format", "DTASelect file format.", false}, {MS_MS2_format, "MS:1001466", "MS2 format", "MS2 file format for MS2 spectral data.", false}, {MS_taxonomy__NCBI_TaxID, "MS:1001467", "taxonomy: NCBI TaxID", "This term is used if a NCBI TaxID is specified, e.g. 9606 for Homo sapiens.", false}, {MS_taxonomy__common_name, "MS:1001468", "taxonomy: common name", "This term is used if a common name is specified, e.g. human. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible.", false}, {MS_taxonomy__scientific_name, "MS:1001469", "taxonomy: scientific name", "This term is used if a scientific name is specified, e.g. Homo sapiens. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible.", false}, {MS_taxonomy__Swiss_Prot_ID, "MS:1001470", "taxonomy: Swiss-Prot ID", "This term is used if a swiss prot taxonomy id is specified, e.g. Human. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible.", false}, {MS_peptide_modification_details, "MS:1001471", "peptide modification details", "The children of this term can be used to describe modifications.", false}, {MS_selected_ion_monitoring_chromatogram, "MS:1001472", "selected ion monitoring chromatogram", "Representation of an array of the measurements of a selectively monitored ion versus time.", false}, {MS_selected_reaction_monitoring_chromatogram, "MS:1001473", "selected reaction monitoring chromatogram", "Representation of an array of the measurements of a selectively monitored reaction versus time.", false}, {MS_consecutive_reaction_monitoring_chromatogram_OBSOLETE, "MS:1001474", "consecutive reaction monitoring chromatogram", "Representation of an array of the measurements of a series of monitored reactions versus time.", true}, {MS_OMSSA, "MS:1001475", "OMSSA", "Open Mass Spectrometry Search Algorithm was used to analyze the spectra.", false}, {MS_X_Tandem, "MS:1001476", "X!Tandem", "X!Tandem was used to analyze the spectra.", false}, {MS_SpectraST, "MS:1001477", "SpectraST", "SpectraST was used to analyze the spectra.", false}, {MS_Mascot_Parser, "MS:1001478", "Mascot Parser", "Mascot Parser was used to analyze the spectra.", false}, {MS_null_terminated_ASCII_string, "MS:1001479", "null-terminated ASCII string", "Sequence of zero or more non-zero ASCII characters terminated by a single null (0) byte.", false}, {MS_SCIEX_TOF_TOF_nativeID_format, "MS:1001480", "SCIEX TOF/TOF nativeID format", "Native format defined by jobRun=xsd:nonNegativeInteger spotLabel=xsd:string spectrum=xsd:nonNegativeInteger.", false}, {MS_SCIEX_TOF_TOF_database, "MS:1001481", "SCIEX TOF/TOF database", "Applied Biosystems/MDS Analytical Technologies TOF/TOF instrument database.", false}, {MS_5800_TOF_TOF, "MS:1001482", "5800 TOF/TOF", "SCIEX 5800 TOF-TOF Analyzer.", false}, {MS_SCIEX_TOF_TOF_Series_Explorer_Software, "MS:1001483", "SCIEX TOF/TOF Series Explorer Software", "SCIEX or Applied Biosystems software for TOF/TOF data acquisition and analysis.", false}, {MS_intensity_normalization, "MS:1001484", "intensity normalization", "Normalization of data point intensities.", false}, {MS_m_z_calibration, "MS:1001485", "m/z calibration", "Calibration of data point m/z positions.", false}, {MS_data_filtering, "MS:1001486", "data filtering", "Filtering out part of the data.", false}, {MS_ProteinExtractor, "MS:1001487", "ProteinExtractor", "An algorithm for protein determination/assembly integrated into Bruker's ProteinScape.", false}, {MS_Mascot_Distiller, "MS:1001488", "Mascot Distiller", "Mascot Distiller.", false}, {MS_Mascot_Integra, "MS:1001489", "Mascot Integra", "Mascot Integra.", false}, {MS_Percolator, "MS:1001490", "Percolator", "Percolator.", false}, {MS_percolator_Q_value, "MS:1001491", "percolator:Q value", "Percolator:Q value.", false}, {MS_percolator_score, "MS:1001492", "percolator:score", "Percolator:score.", false}, {MS_percolator_PEP, "MS:1001493", "percolator:PEP", "Posterior error probability.", false}, {MS_no_threshold, "MS:1001494", "no threshold", "In case no threshold was used.", false}, {MS_ProteinScape_SearchResultId, "MS:1001495", "ProteinScape:SearchResultId", "The SearchResultId of this peptide as SearchResult in the ProteinScape database.", false}, {MS_ProteinScape_SearchEventId, "MS:1001496", "ProteinScape:SearchEventId", "The SearchEventId of the SearchEvent in the ProteinScape database.", false}, {MS_ProteinScape_ProfoundProbability, "MS:1001497", "ProteinScape:ProfoundProbability", "The Profound probability score stored by ProteinScape.", false}, {MS_Profound_z_value, "MS:1001498", "Profound:z value", "The Profound z value.", false}, {MS_Profound_Cluster, "MS:1001499", "Profound:Cluster", "The Profound cluster score.", false}, {MS_Profound_ClusterRank, "MS:1001500", "Profound:ClusterRank", "The Profound cluster rank.", false}, {MS_MSFit_Mowse_score, "MS:1001501", "MSFit:Mowse score", "The MSFit Mowse score.", false}, {MS_Sonar_Score, "MS:1001502", "Sonar:Score", "The Sonar score.", false}, {MS_ProteinScape_PFFSolverExp, "MS:1001503", "ProteinScape:PFFSolverExp", "The ProteinSolver exp value stored by ProteinScape.", false}, {MS_ProteinScape_PFFSolverScore, "MS:1001504", "ProteinScape:PFFSolverScore", "The ProteinSolver score stored by ProteinScape.", false}, {MS_ProteinScape_IntensityCoverage, "MS:1001505", "ProteinScape:IntensityCoverage", "The intensity coverage of the identified peaks in the spectrum calculated by ProteinScape.", false}, {MS_ProteinScape_SequestMetaScore, "MS:1001506", "ProteinScape:SequestMetaScore", "The SEQUEST meta score calculated by ProteinScape from the original SEQUEST scores.", false}, {MS_ProteinExtractor_Score, "MS:1001507", "ProteinExtractor:Score", "The score calculated by ProteinExtractor.", false}, {MS_Agilent_MassHunter_nativeID_format, "MS:1001508", "Agilent MassHunter nativeID format", "Native format defined by scanId=xsd:nonNegativeInteger.", false}, {MS_Agilent_MassHunter_format, "MS:1001509", "Agilent MassHunter format", "A data file format found in an Agilent MassHunter directory which contains raw data acquired by an Agilent mass spectrometer.", false}, {MS_TSQ_Vantage, "MS:1001510", "TSQ Vantage", "TSQ Vantage.", false}, {MS_Sequence_database_filter_types, "MS:1001511", "Sequence database filter types", "Filter types which are used to filter a sequence database.", false}, {MS_Sequence_database_filters, "MS:1001512", "Sequence database filters", "Sequence database filters which actually can contains values, e.g. to limit PI value of the sequences used to search.", false}, {MS_DB_sequence_filter_pattern, "MS:1001513", "DB sequence filter pattern", "DB sequence filter pattern.", false}, {MS_DB_accession_filter_string, "MS:1001514", "DB accession filter string", "DB accession filter string.", false}, {MS_frag__c_ion___H2O, "MS:1001515", "frag: c ion - H2O", "Fragmentation information, type of product: c ion without water.", false}, {MS_frag__c_ion___NH3, "MS:1001516", "frag: c ion - NH3", "Fragmentation information, type of product: c ion without ammonia.", false}, {MS_frag__z_ion___H2O, "MS:1001517", "frag: z ion - H2O", "Fragmentation information, type of product: z ion without water.", false}, {MS_frag__z_ion___NH3, "MS:1001518", "frag: z ion - NH3", "Fragmentation information, type of product: z ion without ammonia.", false}, {MS_frag__x_ion___H2O, "MS:1001519", "frag: x ion - H2O", "Fragmentation information, type of product: x ion without water.", false}, {MS_frag__x_ion___NH3, "MS:1001520", "frag: x ion - NH3", "Fragmentation information, type of product: x ion without ammonia.", false}, {MS_frag__precursor_ion___H2O, "MS:1001521", "frag: precursor ion - H2O", "Fragmentation information, type of product: precursor ion without water.", false}, {MS_frag__precursor_ion___NH3, "MS:1001522", "frag: precursor ion - NH3", "Fragmentation information, type of product: precursor ion without ammonia.", false}, {MS_frag__precursor_ion, "MS:1001523", "frag: precursor ion", "Fragmentation information, type of product: precursor ion.", false}, {MS_fragment_neutral_loss, "MS:1001524", "fragment neutral loss", "This term can describe a neutral loss m/z value that is lost from an ion.", false}, {MS_precursor_neutral_loss, "MS:1001525", "precursor neutral loss", "This term can describe a neutral loss m/z value that is lost from an ion.", false}, {MS_spectrum_from_database_integer_nativeID_format, "MS:1001526", "spectrum from database integer nativeID format", "Native format defined by databasekey=xsd:long.", false}, {MS_Proteinscape_spectra, "MS:1001527", "Proteinscape spectra", "Spectra from Bruker/Protagen Proteinscape database.", false}, {MS_Mascot_query_number, "MS:1001528", "Mascot query number", "Native format defined by query=xsd:nonNegativeInteger.", false}, {MS_spectra_data_details, "MS:1001529", "spectra data details", "Child-terms contain information to map the results back to spectra.", false}, {MS_mzML_unique_identifier, "MS:1001530", "mzML unique identifier", "Native format defined by mzMLid=xsd:IDREF.", false}, {MS_spectrum_from_ProteinScape_database_nativeID_format, "MS:1001531", "spectrum from ProteinScape database nativeID format", "Native format defined by databasekey=xsd:long.", false}, {MS_spectrum_from_database_string_nativeID_format, "MS:1001532", "spectrum from database string nativeID format", "Native format defined by databasekey=xsd:string.", false}, {MS_Bruker_Daltonics_esquire_series, "MS:1001533", "Bruker Daltonics esquire series", "Bruker Daltonics' esquire series.", false}, {MS_Bruker_Daltonics_flex_series, "MS:1001534", "Bruker Daltonics flex series", "Bruker Daltonics' flex series.", false}, {MS_Bruker_Daltonics_BioTOF_series, "MS:1001535", "Bruker Daltonics BioTOF series", "Bruker Daltonics' BioTOF series.", false}, {MS_Bruker_Daltonics_micrOTOF_series, "MS:1001536", "Bruker Daltonics micrOTOF series", "Bruker Daltonics' micrOTOF series.", false}, {MS_BioTOF, "MS:1001537", "BioTOF", "Bruker Daltonics' BioTOF: ESI TOF.", false}, {MS_BioTOF_III, "MS:1001538", "BioTOF III", "Bruker Daltonics' BioTOF III: ESI TOF.", false}, {MS_UltroTOF_Q, "MS:1001539", "UltroTOF-Q", "Bruker Daltonics' UltroTOF-Q: ESI Q-TOF (MALDI optional).", false}, {MS_micrOTOF_II, "MS:1001540", "micrOTOF II", "Bruker Daltonics' micrOTOF II: ESI TOF, Nanospray, APCI, APPI.", false}, {MS_maXis, "MS:1001541", "maXis", "Bruker Daltonics' maXis: ESI Q-TOF, Nanospray, APCI, APPI.", false}, {MS_amaZon_ETD, "MS:1001542", "amaZon ETD", "Bruker Daltonics' amaZon ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, ETD, PTR.", false}, {MS_microflex_LRF, "MS:1001543", "microflex LRF", "Bruker Daltonics' microflex LRF: MALDI TOF.", false}, {MS_ultrafleXtreme, "MS:1001544", "ultrafleXtreme", "Bruker Daltonics' ultrafleXtreme: MALDI TOF.", false}, {MS_Bruker_Daltonics_amaZon_series, "MS:1001545", "Bruker Daltonics amaZon series", "Bruker Daltonics' amaZon series.", false}, {MS_amaZon_X, "MS:1001546", "amaZon X", "Bruker Daltonics' amaZon X: ESI quadrupole ion trap, APCI, APPI, ETD, PTR.", false}, {MS_Bruker_Daltonics_maXis_series, "MS:1001547", "Bruker Daltonics maXis series", "Bruker Daltonics' maXis series.", false}, {MS_Bruker_Daltonics_solarix_series, "MS:1001548", "Bruker Daltonics solarix series", "Bruker Daltonics' solarix: ESI quadrupole ion trap, APCI, APPI, ETD, PTR.", false}, {MS_solariX, "MS:1001549", "solariX", "Bruker Daltonics' solariX: ESI, MALDI, Qh-FT_ICR.", false}, {MS_microflex_II, "MS:1001550", "microflex II", "Bruker Daltonics' microflex II: MALDI TOF.", false}, {MS_autoflex_II_TOF_TOF, "MS:1001553", "autoflex II TOF/TOF", "Bruker Daltonics' autoflex II TOF/TOF: MALDI TOF.", false}, {MS_autoflex_III_TOF_TOF_smartbeam, "MS:1001554", "autoflex III TOF/TOF smartbeam", "Bruker Daltonics' autoflex III TOF/TOF smartbeam: MALDI TOF.", false}, {MS_autoflex, "MS:1001555", "autoflex", "Bruker Daltonics' autoflex: MALDI TOF.", false}, {MS_Bruker_Daltonics_apex_series, "MS:1001556", "Bruker Daltonics apex series", "Bruker Daltonics' apex series.", false}, {MS_Shimadzu_Corporation_software, "MS:1001557", "Shimadzu Corporation software", "Shimadzu Corporation software.", false}, {MS_MALDI_Solutions, "MS:1001558", "MALDI Solutions", "Shimadzu Biotech software for data acquisition, processing, and analysis.", false}, {MS_SCIEX_TOF_TOF_T2D_nativeID_format, "MS:1001559", "SCIEX TOF/TOF T2D nativeID format", "Native format defined by file=xsd:IDREF.", false}, {MS_SCIEX_TOF_TOF_T2D_format, "MS:1001560", "SCIEX TOF/TOF T2D format", "Applied Biosystems/MDS Analytical Technologies TOF/TOF instrument export format.", false}, {MS_Scaffold, "MS:1001561", "Scaffold", "Scaffold analysis software.", false}, {MS_Scaffold_nativeID_format, "MS:1001562", "Scaffold nativeID format", "Scaffold native ID format.", false}, {MS_SEQUEST_SQT_format, "MS:1001563", "SEQUEST SQT format", "Source file for this mzIdentML was in SEQUEST SQT format.", false}, {MS_Discoverer_MSF_format, "MS:1001564", "Discoverer MSF format", "Source file for this mzIdentML was in Thermo Scientific Discoverer MSF format.", false}, {MS_IdentityE_XML_format, "MS:1001565", "IdentityE XML format", "Source file for this mzIdentML was in Waters IdentityE XML format.", false}, {MS_ProteinLynx_XML_format, "MS:1001566", "ProteinLynx XML format", "Source file for this mzIdentML was in Waters ProteinLynx XML format.", false}, {MS_SpectrumMill_directories, "MS:1001567", "SpectrumMill directories", "Source file for this mzIdentML was in Agilent SpectrumMill directory format.", false}, {MS_Scaffold_Peptide_Probability, "MS:1001568", "Scaffold:Peptide Probability", "Scaffold peptide probability score.", false}, {MS_IdentityE_Score, "MS:1001569", "IdentityE Score", "Waters IdentityE peptide score.", false}, {MS_ProteinLynx_Log_Likelihood, "MS:1001570", "ProteinLynx:Log Likelihood", "ProteinLynx log likelihood score.", false}, {MS_ProteinLynx_Ladder_Score, "MS:1001571", "ProteinLynx:Ladder Score", "Waters ProteinLynx Ladder score.", false}, {MS_SpectrumMill_Score, "MS:1001572", "SpectrumMill:Score", "Spectrum mill peptide score.", false}, {MS_SpectrumMill_SPI, "MS:1001573", "SpectrumMill:SPI", "SpectrumMill SPI score (%).", false}, {MS_report_only_spectra_assigned_to_identified_proteins, "MS:1001574", "report only spectra assigned to identified proteins", "Flag indicating to report only the spectra assigned to identified proteins.", false}, {MS_Scaffold__Minimum_Peptide_Count, "MS:1001575", "Scaffold: Minimum Peptide Count", "Minimum number of peptides a protein must have to be accepted.", false}, {MS_Scaffold__Minimum_Protein_Probability, "MS:1001576", "Scaffold: Minimum Protein Probability", "Minimum protein probability a protein must have to be accepted.", false}, {MS_Scaffold__Minimum_Peptide_Probability, "MS:1001577", "Scaffold: Minimum Peptide Probability", "Minimum probability a peptide must have to be accepted for protein scoring.", false}, {MS_minimum_number_of_enzymatic_termini, "MS:1001578", "minimum number of enzymatic termini", "Minimum number of enzymatic termini a peptide must have to be accepted.", false}, {MS_Scaffold_Protein_Probability, "MS:1001579", "Scaffold:Protein Probability", "Scaffold protein probability score.", false}, {MS_SpectrumMill_Discriminant_Score, "MS:1001580", "SpectrumMill:Discriminant Score", "Discriminant score from Agilent SpectrumMill software.", false}, {MS_FAIMS_compensation_voltage, "MS:1001581", "FAIMS compensation voltage", "The DC potential applied to the asymmetric waveform in FAIMS that compensates for the difference between high and low field mobility of an ion.", false}, {MS_XCMS, "MS:1001582", "XCMS", "Bioconductor package XCMS for preprocessing high-throughput, untargeted analyte profiling data.", false}, {MS_MaxQuant, "MS:1001583", "MaxQuant", "MaxQuant is a quantitative proteomics software package designed for analyzing large mass spectrometric data sets. It is specifically aimed at high resolution MS data.", false}, {MS_combined_pmf___ms_ms_search, "MS:1001584", "combined pmf + ms-ms search", "Search that includes data from Peptide Mass Fingerprint (PMF) and MS2 (aka Peptide Fragment Fingerprint - PFF).", false}, {MS_MyriMatch, "MS:1001585", "MyriMatch", "Tabb Lab software for directly comparing peptides in a database to tandem mass spectra.", false}, {MS_DirecTag, "MS:1001586", "DirecTag", "Tabb Lab software for generating sequence tags from tandem mass spectra.", false}, {MS_TagRecon, "MS:1001587", "TagRecon", "Tabb Lab software for reconciling sequence tags to a protein database.", false}, {MS_Pepitome, "MS:1001588", "Pepitome", "Tabb Lab software for spectral library searches on tandem mass spectra.", false}, {MS_MyriMatch_MVH, "MS:1001589", "MyriMatch:MVH", "Using the multivariate hypergeometric distribution and a peak list divided into several intensity classes, this score is the negative natural log probability that the predicted peaks matched to experimental peaks by random chance.", false}, {MS_MyriMatch_mzFidelity, "MS:1001590", "MyriMatch:mzFidelity", "The negative natural log probability that predicted peaks match to experimental peaks by random chance by scoring the m/z delta of the matches in a multinomial distribution.", false}, {MS_anchor_protein, "MS:1001591", "anchor protein", "A representative protein selected from a set of sequence same-set or spectrum same-set proteins.", false}, {MS_family_member_protein, "MS:1001592", "family member protein", "A protein with significant homology to another protein, but some distinguishing peptide matches.", false}, {MS_group_member_with_undefined_relationship_OR_ortholog_protein, "MS:1001593", "group member with undefined relationship OR ortholog protein", "TO ENDETAIL: a really generic relationship OR ortholog protein.", false}, {MS_sequence_same_set_protein, "MS:1001594", "sequence same-set protein", "A protein which is indistinguishable or equivalent to another protein, having matches to an identical set of peptide sequences.", false}, {MS_spectrum_same_set_protein, "MS:1001595", "spectrum same-set protein", "A protein which is indistinguishable or equivalent to another protein, having matches to a set of peptide sequences that cannot be distinguished using the evidence in the mass spectra.", false}, {MS_sequence_sub_set_protein, "MS:1001596", "sequence sub-set protein", "A protein with a sub-set of the peptide sequence matches for another protein, and no distinguishing peptide matches.", false}, {MS_spectrum_sub_set_protein, "MS:1001597", "spectrum sub-set protein", "A protein with a sub-set of the matched spectra for another protein, where the matches cannot be distinguished using the evidence in the mass spectra, and no distinguishing peptide matches.", false}, {MS_sequence_subsumable_protein, "MS:1001598", "sequence subsumable protein", "A sequence same-set or sequence sub-set protein where the matches are distributed across two or more proteins.", false}, {MS_spectrum_subsumable_protein, "MS:1001599", "spectrum subsumable protein", "A spectrum same-set or spectrum sub-set protein where the matches are distributed across two or more proteins.", false}, {MS_protein_inference_confidence_category, "MS:1001600", "protein inference confidence category", "Confidence category of inferred protein (conclusive, non conclusive, ambiguous group or indistinguishable).", false}, {MS_ProteomeDiscoverer_Spectrum_Files_Raw_File_names_OBSOLETE, "MS:1001601", "ProteomeDiscoverer:Spectrum Files:Raw File names", "Name and location of the .raw file or files.", true}, {MS_ProteomeDiscoverer_SRF_File_Selector_SRF_File_Path_OBSOLETE, "MS:1001602", "ProteomeDiscoverer:SRF File Selector:SRF File Path", "Path and name of the .srf (SEQUEST Result Format) file.", true}, {MS_ProteomeDiscoverer_Spectrum_Selector_Ionization_Source_OBSOLETE, "MS:1001603", "ProteomeDiscoverer:Spectrum Selector:Ionization Source", "Ionization source (electro-, nano-, thermospray, electron impact, APCI, MALDI, FAB etc).", true}, {MS_ProteomeDiscoverer_Activation_Type_OBSOLETE, "MS:1001604", "ProteomeDiscoverer:Activation Type", "Fragmentation method used (CID, MPD, ECD, PQD, ETD, HCD, Any).", true}, {MS_ProteomeDiscoverer_Spectrum_Selector_Lower_RT_Limit, "MS:1001605", "ProteomeDiscoverer:Spectrum Selector:Lower RT Limit", "Lower retention-time limit.", false}, {MS_ProteomeDiscoverer_Mass_Analyzer_OBSOLETE, "MS:1001606", "ProteomeDiscoverer:Mass Analyzer", "Type of mass spectrometer used (ITMS, FTMS, TOFMS, SQMS, TQMS, SectorMS).", true}, {MS_ProteomeDiscoverer_Max_Precursor_Mass, "MS:1001607", "ProteomeDiscoverer:Max Precursor Mass", "Maximum mass limit of a singly charged precursor ion.", false}, {MS_ProteomeDiscoverer_Min_Precursor_Mass, "MS:1001608", "ProteomeDiscoverer:Min Precursor Mass", "Minimum mass limit of a singly charged precursor ion.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Minimum_Peak_Count, "MS:1001609", "ProteomeDiscoverer:Spectrum Selector:Minimum Peak Count", "Minimum number of peaks in a tandem mass spectrum that is allowed to pass the filter and to be subjected to further processing in the workflow.", false}, {MS_ProteomeDiscoverer_MS_Order_OBSOLETE, "MS:1001610", "ProteomeDiscoverer:MS Order", "Level of the mass spectrum (MS2 ... MS10).", true}, {MS_ProteomeDiscoverer_Polarity_Mode_OBSOLETE, "MS:1001611", "ProteomeDiscoverer:Polarity Mode", "Polarity mode (positive or negative).", true}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Selection, "MS:1001612", "ProteomeDiscoverer:Spectrum Selector:Precursor Selection", "Determines which precursor mass to use for a given MSn scan. This option applies only to higher-order MSn scans (n >= 3).", false}, {MS_ProteomeDiscoverer_SN_Threshold, "MS:1001613", "ProteomeDiscoverer:SN Threshold", "Signal-to-Noise ratio below which peaks are removed.", false}, {MS_ProteomeDiscoverer_Scan_Type_OBSOLETE, "MS:1001614", "ProteomeDiscoverer:Scan Type", "Scan type for the precursor ion (full, Single Ion Monitoring (SIM), Single Reaction Monitoring (SRM)).", true}, {MS_ProteomeDiscoverer_Spectrum_Selector_Total_Intensity_Threshold, "MS:1001615", "ProteomeDiscoverer:Spectrum Selector:Total Intensity Threshold", "Used to filter out tandem mass spectra that have a total intensity current(sum of the intensities of all peaks in a spectrum) below the specified value.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Activation_Type_Replacements, "MS:1001616", "ProteomeDiscoverer:Spectrum Selector:Unrecognized Activation Type Replacements", "Specifies the fragmentation method to use in the search algorithm if it is not included in the scan header.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Charge_Replacements, "MS:1001617", "ProteomeDiscoverer:Spectrum Selector:Unrecognized Charge Replacements", "Specifies the charge state of the precursor ions, if it is not defined in the scan header.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Mass_Analyzer_Replacements, "MS:1001618", "ProteomeDiscoverer:Spectrum Selector:Unrecognized Mass Analyzer Replacements", "Specifies the mass spectrometer to use to produce the spectra, if it is not included in the scan header.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_MS_Order_Replacements, "MS:1001619", "ProteomeDiscoverer:Spectrum Selector:Unrecognized MS Order Replacements", "Specifies the MS scan order used to produce the product spectra, if it is not included in the scan header.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Polarity_Replacements, "MS:1001620", "ProteomeDiscoverer:Spectrum Selector:Unrecognized Polarity Replacements", "Specifies the polarity of the ions monitored if it is not included in the scan header.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Upper_RT_Limit, "MS:1001621", "ProteomeDiscoverer:Spectrum Selector:Upper RT Limit", "Upper retention-time limit.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Mass_Window_Offset, "MS:1001622", "ProteomeDiscoverer:Non-Fragment Filter:Mass Window Offset", "Specifies the size of the mass-to-charge ratio (m/z) window in daltons used to remove precursors.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Maximum_Neutral_Loss_Mass, "MS:1001623", "ProteomeDiscoverer:Non-Fragment Filter:Maximum Neutral Loss Mass", "Maximum allowed mass of a neutral loss.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Charge_Reduced_Precursor, "MS:1001624", "ProteomeDiscoverer:Non-Fragment Filter:Remove Charge Reduced Precursor", "Determines whether the charge-reduced precursor peaks found in an ETD or ECD spectrum are removed.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Neutral_Loss_Peaks, "MS:1001625", "ProteomeDiscoverer:Non-Fragment Filter:Remove Neutral Loss Peaks", "Determines whether neutral loss peaks are removed from ETD and ECD spectra.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Only_Known_Masses, "MS:1001626", "ProteomeDiscoverer:Non-Fragment Filter:Remove Only Known Masses", "Determines whether overtone peaks are removed from LTQ FT or LTQ FT Ultra ECD spectra.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Overtones, "MS:1001627", "ProteomeDiscoverer:Non-Fragment Filter:Remove Precursor Overtones", "Determines whether precursor overtone peaks in the spectrum are removed from the input spectrum.", false}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Peak, "MS:1001628", "ProteomeDiscoverer:Non-Fragment Filter:Remove Precursor Peak", "Determines whether precursor artifact peaks from the MS2 input spectra are removed.", false}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_Mass_Analyzer_Mismatch, "MS:1001629", "ProteomeDiscoverer:Spectrum Grouper:Allow Mass Analyzer Mismatch", "Determines whether the fragment spectrum for scans with the same precursor mass is grouped, regardless of mass analyzer and activation type.", false}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_MS_Order_Mismatch, "MS:1001630", "ProteomeDiscoverer:Spectrum Grouper:Allow MS Order Mismatch", "Determines whether spectra from different MS order scans can be grouped together.", false}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Max_RT_Difference_OBSOLETE, "MS:1001631", "ProteomeDiscoverer:Spectrum Grouper:Max RT Difference", "Chromatographic window where precursors to be grouped must reside to be considered the same species.", true}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Precursor_Mass_Criterion, "MS:1001632", "ProteomeDiscoverer:Spectrum Grouper:Precursor Mass Criterion", "Groups spectra measured within the given mass and retention-time tolerances into a single spectrum for analysis.", false}, {MS_ProteomeDiscoverer_Xtract_Highest_Charge, "MS:1001633", "ProteomeDiscoverer:Xtract:Highest Charge", "Highest charge state that is allowed for the deconvolution of multiply charged data.", false}, {MS_ProteomeDiscoverer_Xtract_Highest_MZ_OBSOLETE, "MS:1001634", "ProteomeDiscoverer:Xtract:Highest MZ", "Highest mass-to-charge (mz) value for spectral peaks in the measured spectrum that are considered for Xtract.", true}, {MS_ProteomeDiscoverer_Xtract_Lowest_Charge, "MS:1001635", "ProteomeDiscoverer:Xtract:Lowest Charge", "Lowest charge state that is allowed for the deconvolution of multiply charged data.", false}, {MS_ProteomeDiscoverer_Xtract_Lowest_MZ_OBSOLETE, "MS:1001636", "ProteomeDiscoverer:Xtract:Lowest MZ", "Lowest mass-to-charge (mz) value for spectral peaks in the measured spectrum that are considered for Xtract.", true}, {MS_ProteomeDiscoverer_Xtract_Monoisotopic_Mass_Only, "MS:1001637", "ProteomeDiscoverer:Xtract:Monoisotopic Mass Only", "Determines whether the isotopic pattern, i.e. all isotopes of a mass are removed from the spectrum.", false}, {MS_ProteomeDiscoverer_Xtract_Overlapping_Remainder, "MS:1001638", "ProteomeDiscoverer:Xtract:Overlapping Remainder", "Fraction of the more abundant peak that an overlapping multiplet must exceed in order to be processed (deconvoluted).", false}, {MS_ProteomeDiscoverer_Xtract_Required_Fitting_Accuracy, "MS:1001639", "ProteomeDiscoverer:Xtract:Required Fitting Accuracy", "Accuracy required for a pattern fit to be considered valid.", false}, {MS_ProteomeDiscoverer_Xtract_Resolution_At_400, "MS:1001640", "ProteomeDiscoverer:Xtract:Resolution At 400", "Resolution at mass 400.", false}, {MS_ProteomeDiscoverer_Lowest_Charge_State, "MS:1001641", "ProteomeDiscoverer:Lowest Charge State", "Minimum charge state below which peptides are filtered out.", false}, {MS_ProteomeDiscoverer_Highest_Charge_State, "MS:1001642", "ProteomeDiscoverer:Highest Charge State", "Maximum charge above which peptides are filtered out.", false}, {MS_ProteomeDiscoverer_Spectrum_Score_Filter_Let_Pass_Above_Scores, "MS:1001643", "ProteomeDiscoverer:Spectrum Score Filter:Let Pass Above Scores", "Determines whether spectra with scores above the threshold score are retained rather than filtered out.", false}, {MS_ProteomeDiscoverer_Dynamic_Modification, "MS:1001644", "ProteomeDiscoverer:Dynamic Modification", "Determine dynamic post-translational modifications (PTMs).", false}, {MS_ProteomeDiscoverer_Static_Modification, "MS:1001645", "ProteomeDiscoverer:Static Modification", "Static Modification to all occurrences of a named amino acid.", false}, {MS_ProteomeDiscoverer_Mascot_Decoy_Search_OBSOLETE, "MS:1001646", "ProteomeDiscoverer:Mascot:Decoy Search", "Determines whether the Proteome Discoverer application searches an additional decoy database.", true}, {MS_ProteomeDiscoverer_Mascot_Error_tolerant_Search, "MS:1001647", "ProteomeDiscoverer:Mascot:Error tolerant Search", "Determines whether to search error-tolerant.", false}, {MS_ProteomeDiscoverer_Mascot_Max_MGF_File_Size, "MS:1001648", "ProteomeDiscoverer:Mascot:Max MGF File Size", "Maximum size of the .mgf (Mascot Generic Format) file in MByte.", false}, {MS_ProteomeDiscoverer_Mascot_Mascot_Server_URL, "MS:1001649", "ProteomeDiscoverer:Mascot:Mascot Server URL", "URL (Uniform resource Locator) of the Mascot server.", false}, {MS_ProteomeDiscoverer_Mascot_Number_of_attempts_to_submit_the_search, "MS:1001650", "ProteomeDiscoverer:Mascot:Number of attempts to submit the search", "Number of attempts to submit the Mascot search.", false}, {MS_ProteomeDiscoverer_Mascot_X_Static_Modification, "MS:1001651", "ProteomeDiscoverer:Mascot:X Static Modification", "Number of attempts to submit the Mascot search.", false}, {MS_ProteomeDiscoverer_Mascot_User_Name_OBSOLETE, "MS:1001652", "ProteomeDiscoverer:Mascot:User Name", "Name of the user submitting the Mascot search.", true}, {MS_ProteomeDiscoverer_Mascot_Time_interval_between_attempts_to_submit_a_search, "MS:1001653", "ProteomeDiscoverer:Mascot:Time interval between attempts to submit a search", "Time interval between attempts to submit a search in seconds.", false}, {MS_ProteomeDiscoverer_Enzyme_Name_OBSOLETE, "MS:1001654", "ProteomeDiscoverer:Enzyme Name", "Specifies the enzyme reagent used for protein digestion.", true}, {MS_ProteomeDiscoverer_Fragment_Mass_Tolerance_OBSOLETE, "MS:1001655", "ProteomeDiscoverer:Fragment Mass Tolerance", "Mass tolerance used for matching fragment peaks in Da or mmu.", true}, {MS_Mascot_Instrument, "MS:1001656", "Mascot:Instrument", "Type of instrument used to acquire the data in the raw file.", false}, {MS_ProteomeDiscoverer_Maximum_Missed_Cleavage_Sites, "MS:1001657", "ProteomeDiscoverer:Maximum Missed Cleavage Sites", "Maximum number of missed cleavage sites to consider during the digest.", false}, {MS_ProteomeDiscoverer_Mascot_Peptide_CutOff_Score, "MS:1001658", "ProteomeDiscoverer:Mascot:Peptide CutOff Score", "Minimum score in the IonScore column that each peptide must exceed in order to be reported.", false}, {MS_ProteomeDiscoverer_Precursor_Mass_Tolerance_OBSOLETE, "MS:1001659", "ProteomeDiscoverer:Precursor Mass Tolerance", "Mass window for which precursor ions are considered to be the same species.", true}, {MS_ProteomeDiscoverer_Mascot_Protein_CutOff_Score, "MS:1001660", "ProteomeDiscoverer:Mascot:Protein CutOff Score", "Minimum protein score in the IonScore column that each protein must exceed in order to be reported.", false}, {MS_ProteomeDiscoverer_Protein_Database_OBSOLETE, "MS:1001661", "ProteomeDiscoverer:Protein Database", "Database to use in the search (configured on the Mascot server).", true}, {MS_ProteomeDiscoverer_Mascot_Protein_Relevance_Factor, "MS:1001662", "ProteomeDiscoverer:Mascot:Protein Relevance Factor", "Specifies a factor that is used in calculating a threshold that determines whether a protein appears in the results report.", false}, {MS_ProteomeDiscoverer_Target_FDR_Relaxed, "MS:1001663", "ProteomeDiscoverer:Target FDR Relaxed", "Specifies the relaxed target false discovery rate (FDR, 0.0 - 1.0) for peptide hits with moderate confidence.", false}, {MS_ProteomeDiscoverer_Target_FDR_Strict, "MS:1001664", "ProteomeDiscoverer:Target FDR Strict", "Specifies the strict target false discovery rate (FDR, 0.0 - 1.0) for peptide hits with high confidence.", false}, {MS_ProteomeDiscoverer_Mascot_Taxonomy_OBSOLETE, "MS:1001665", "ProteomeDiscoverer:Mascot:Taxonomy", "Limits searches to entries from a particular species or group of species.", true}, {MS_ProteomeDiscoverer_Use_Average_Precursor_Mass_OBSOLETE, "MS:1001666", "ProteomeDiscoverer:Use Average Precursor Mass", "Use average mass for the precursor.", true}, {MS_Mascot_use_MudPIT_scoring_OBSOLETE, "MS:1001667", "Mascot:use MudPIT scoring", "Determines whether to use MudPIT or normal scoring.", true}, {MS_ProteomeDiscoverer_Absolute_XCorr_Threshold, "MS:1001668", "ProteomeDiscoverer:Absolute XCorr Threshold", "Minimum cross-correlation threshold that determines whether peptides in an .srf file are imported.", false}, {MS_ProteomeDiscoverer_SEQUEST_Calculate_Probability_Score, "MS:1001669", "ProteomeDiscoverer:SEQUEST:Calculate Probability Score", "Determines whether to calculate a probability score for every peptide match.", false}, {MS_ProteomeDiscoverer_SEQUEST_CTerminal_Modification, "MS:1001670", "ProteomeDiscoverer:SEQUEST:CTerminal Modification", "Dynamic C-terminal modification that is used during the search.", false}, {MS_ProteomeDiscoverer_SEQUEST_Fragment_Ion_Cutoff_Percentage, "MS:1001671", "ProteomeDiscoverer:SEQUEST:Fragment Ion Cutoff Percentage", "Percentage of the theoretical ions that must be found in order for a peptide to be scored and retained.", false}, {MS_ProteomeDiscoverer_SEQUEST_Max_Identical_Modifications_Per_Peptide, "MS:1001672", "ProteomeDiscoverer:SEQUEST:Max Identical Modifications Per Peptide", "Maximum number of identical modifications that a single peptide can have.", false}, {MS_ProteomeDiscoverer_Max_Modifications_Per_Peptide, "MS:1001673", "ProteomeDiscoverer:Max Modifications Per Peptide", "Maximum number of different modifications that a peptide can have, e.g. because of steric hindrance.", false}, {MS_ProteomeDiscoverer_SEQUEST_Maximum_Peptides_Considered, "MS:1001674", "ProteomeDiscoverer:SEQUEST:Maximum Peptides Considered", "Maximum number of peptides that are searched and scored per spectrum.", false}, {MS_ProteomeDiscoverer_Maximum_Peptides_Output, "MS:1001675", "ProteomeDiscoverer:Maximum Peptides Output", "Maximum number of peptide matches reported per spectrum.", false}, {MS_ProteomeDiscoverer_Maximum_Protein_References_Per_Peptide, "MS:1001676", "ProteomeDiscoverer:Maximum Protein References Per Peptide", "Maximum number of proteins that a single identified peptide can be associated with during protein assembly.", false}, {MS_ProteomeDiscoverer_SEQUEST_NTerminal_Modification, "MS:1001677", "ProteomeDiscoverer:SEQUEST:NTerminal Modification", "Dynamic N-terminal modification that is used during the search.", false}, {MS_ProteomeDiscoverer_Peptide_CTerminus, "MS:1001678", "ProteomeDiscoverer:Peptide CTerminus", "Static modification for the C terminal of the peptide used during the search.", false}, {MS_ProteomeDiscoverer_Peptide_NTerminus, "MS:1001679", "ProteomeDiscoverer:Peptide NTerminus", "Static modification for the N terminal of the peptide used during the search.", false}, {MS_ProteomeDiscoverer_SEQUEST_Peptide_Relevance_Factor, "MS:1001680", "ProteomeDiscoverer:SEQUEST:Peptide Relevance Factor", "Specifies a factor to apply to the protein score.", false}, {MS_ProteomeDiscoverer_Protein_Relevance_Threshold, "MS:1001681", "ProteomeDiscoverer:Protein Relevance Threshold", "Specifies a peptide threshold that determines whether the protein that it is a part of is scored and retained in the report.", false}, {MS_ProteomeDiscoverer_Search_Against_Decoy_Database_OBSOLETE, "MS:1001682", "ProteomeDiscoverer:Search Against Decoy Database", "Determines whether the Proteome Discoverer application searches against a decoy database.", true}, {MS_ProteomeDiscoverer_SEQUEST_Use_Average_Fragment_Masses, "MS:1001683", "ProteomeDiscoverer:SEQUEST:Use Average Fragment Masses", "Use average masses for the fragments.", false}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_a_Ions, "MS:1001684", "ProteomeDiscoverer:Use Neutral Loss a Ions", "Determines whether a ions with neutral loss are used for spectrum matching.", false}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_b_Ions, "MS:1001685", "ProteomeDiscoverer:Use Neutral Loss b Ions", "Determines whether b ions with neutral loss are used for spectrum matching.", false}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_y_Ions, "MS:1001686", "ProteomeDiscoverer:Use Neutral Loss y Ions", "Determines whether y ions with neutral loss are used for spectrum matching.", false}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_z_Ions, "MS:1001687", "ProteomeDiscoverer:Use Neutral Loss z Ions", "Determines whether z ions with neutral loss are used for spectrum matching.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_a_Ions, "MS:1001688", "ProteomeDiscoverer:SEQUEST:Weight of a Ions", "Uses a ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_b_Ions, "MS:1001689", "ProteomeDiscoverer:SEQUEST:Weight of b Ions", "Uses b ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_c_Ions, "MS:1001690", "ProteomeDiscoverer:SEQUEST:Weight of c Ions", "Uses c ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_d_Ions, "MS:1001691", "ProteomeDiscoverer:SEQUEST:Weight of d Ions", "Uses c ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_v_Ions, "MS:1001692", "ProteomeDiscoverer:SEQUEST:Weight of v Ions", "Uses c ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_w_Ions, "MS:1001693", "ProteomeDiscoverer:SEQUEST:Weight of w Ions", "Uses c ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_x_Ions, "MS:1001694", "ProteomeDiscoverer:SEQUEST:Weight of x Ions", "Uses x ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_y_Ions, "MS:1001695", "ProteomeDiscoverer:SEQUEST:Weight of y Ions", "Uses y ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_z_Ions, "MS:1001696", "ProteomeDiscoverer:SEQUEST:Weight of z Ions", "Uses z ions for spectrum matching with this relative factor.", false}, {MS_ProteomeDiscoverer_ZCore_Protein_Score_Cutoff, "MS:1001697", "ProteomeDiscoverer:ZCore:Protein Score Cutoff", "Sets a minimum protein score that each protein must exceed in order to be reported.", false}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Method, "MS:1001698", "ProteomeDiscoverer:Reporter Ions Quantizer:Integration Method", "Specifies which peak to select if more than one peak is found inside the integration window.", false}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Window_Tolerance, "MS:1001699", "ProteomeDiscoverer:Reporter Ions Quantizer:Integration Window Tolerance", "Specifies the mass-to-charge window that enables one to look for the reporter peaks.", false}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Quantitation_Method, "MS:1001700", "ProteomeDiscoverer:Reporter Ions Quantizer:Quantitation Method", "Quantitation method for isobarically labeled quantitation.", false}, {MS_ProteomeDiscoverer_Spectrum_Exporter_Export_Format_OBSOLETE, "MS:1001701", "ProteomeDiscoverer:Spectrum Exporter:Export Format", "Format of the exported spectra (dta, mgf or mzData).", true}, {MS_ProteomeDiscoverer_Spectrum_Exporter_File_name, "MS:1001702", "ProteomeDiscoverer:Spectrum Exporter:File name", "Name of the output file that contains the exported data.", false}, {MS_ProteomeDiscoverer_Search_Modifications_Only_For_Identified_Proteins, "MS:1001703", "ProteomeDiscoverer:Search Modifications Only For Identified Proteins", "Influences the modifications search.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge1, "MS:1001704", "ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge1", "Standard high confidence XCorr parameter for charge = 1.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge2, "MS:1001705", "ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge2", "Standard high confidence XCorr parameter for charge = 2.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge3, "MS:1001706", "ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge3", "Standard high confidence XCorr parameter for charge = 3.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge4, "MS:1001707", "ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge4", "Standard high confidence XCorr parameter for charge >= 4.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge1, "MS:1001708", "ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge1", "Standard medium confidence XCorr parameter for charge = 1.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge2, "MS:1001709", "ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge2", "Standard medium confidence XCorr parameter for charge = 2.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge3, "MS:1001710", "ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge3", "Standard medium confidence XCorr parameter for charge = 3.", false}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge4, "MS:1001711", "ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge4", "Standard medium confidence XCorr parameter for charge >= 4.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge1, "MS:1001712", "ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge1", "FT high confidence XCorr parameter for charge = 1.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge2, "MS:1001713", "ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge2", "FT high confidence XCorr parameter for charge = 2.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge3, "MS:1001714", "ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge3", "FT high confidence XCorr parameter for charge = 3.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge4, "MS:1001715", "ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge4", "FT high confidence XCorr parameter for charge >= 4.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge1, "MS:1001716", "ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge1", "FT medium confidence XCorr parameter for charge = 1.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge2, "MS:1001717", "ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge2", "FT medium confidence XCorr parameter for charge = 2.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge3, "MS:1001718", "ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge3", "FT medium confidence XCorr parameter for charge = 3.", false}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge4, "MS:1001719", "ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge4", "FT medium confidence XCorr parameter for charge >= 4.", false}, {MS_ProteomeDiscoverer_1__Dynamic_Modification_OBSOLETE, "MS:1001720", "ProteomeDiscoverer:1. Dynamic Modification", "ProteomeDiscoverer's 1st dynamic post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_2__Dynamic_Modification_OBSOLETE, "MS:1001721", "ProteomeDiscoverer:2. Dynamic Modification", "ProteomeDiscoverer's 2nd dynamic post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_3__Dynamic_Modification_OBSOLETE, "MS:1001722", "ProteomeDiscoverer:3. Dynamic Modification", "ProteomeDiscoverer's 3rd dynamic post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_4__Dynamic_Modification_OBSOLETE, "MS:1001723", "ProteomeDiscoverer:4. Dynamic Modification", "ProteomeDiscoverer's 4th dynamic post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_Static_Modification_for_X, "MS:1001724", "ProteomeDiscoverer:Static Modification for X", "Static Modification for X.", false}, {MS_ProteomeDiscoverer_Initial_minimal_peptide_probability, "MS:1001725", "ProteomeDiscoverer:Initial minimal peptide probability", "Minimal initial peptide probability to contribute to analysis.", false}, {MS_ProteomeDiscoverer_Minimal_peptide_probability, "MS:1001726", "ProteomeDiscoverer:Minimal peptide probability", "Minimum adjusted peptide probability contributing to protein probability.", false}, {MS_ProteomeDiscoverer_Minimal_peptide_weight, "MS:1001727", "ProteomeDiscoverer:Minimal peptide weight", "Minimum peptide weight contributing to protein probability.", false}, {MS_ProteomeDiscoverer_Number_of_input1_spectra, "MS:1001728", "ProteomeDiscoverer:Number of input1 spectra", "Number of spectra from 1+ precursor ions.", false}, {MS_ProteomeDiscoverer_Number_of_input2_spectra, "MS:1001729", "ProteomeDiscoverer:Number of input2 spectra", "Number of spectra from 2+ precursor ions.", false}, {MS_ProteomeDiscoverer_Number_of_input3_spectra, "MS:1001730", "ProteomeDiscoverer:Number of input3 spectra", "Number of spectra from 3+ precursor ions.", false}, {MS_ProteomeDiscoverer_Number_of_input4_spectra, "MS:1001731", "ProteomeDiscoverer:Number of input4 spectra", "Number of spectra from 4+ precursor ions.", false}, {MS_ProteomeDiscoverer_Number_of_input5_spectra, "MS:1001732", "ProteomeDiscoverer:Number of input5 spectra", "Number of spectra from 5+ precursor ions.", false}, {MS_ProteomeDiscoverer_Number_of_predicted_correct_proteins, "MS:1001733", "ProteomeDiscoverer:Number of predicted correct proteins", "Total number of predicted correct protein ids (sum of probabilities).", false}, {MS_ProteomeDiscoverer_Organism_OBSOLETE, "MS:1001734", "ProteomeDiscoverer:Organism", "Sample organism (used for annotation purposes).", true}, {MS_ProteomeDiscoverer_Reference_Database_OBSOLETE, "MS:1001735", "ProteomeDiscoverer:Reference Database", "Full path database name.", true}, {MS_ProteomeDiscoverer_Residue_substitution_list, "MS:1001736", "ProteomeDiscoverer:Residue substitution list", "Residues considered equivalent when comparing peptides.", false}, {MS_ProteomeDiscoverer_Source_file_extension_OBSOLETE, "MS:1001737", "ProteomeDiscoverer:Source file extension", "File type (if not pepXML).", true}, {MS_ProteomeDiscoverer_Source_Files_OBSOLETE, "MS:1001738", "ProteomeDiscoverer:Source Files", "Input pepXML files.", true}, {MS_ProteomeDiscoverer_Source_Files_old_OBSOLETE, "MS:1001739", "ProteomeDiscoverer:Source Files old", "Input pepXML files (old).", true}, {MS_ProteomeDiscoverer_WinCyg_reference_database, "MS:1001740", "ProteomeDiscoverer:WinCyg reference database", "Windows full path for database.", false}, {MS_ProteomeDiscoverer_WinCyg_source_files, "MS:1001741", "ProteomeDiscoverer:WinCyg source files", "Windows pepXML file names.", false}, {MS_LTQ_Orbitrap_Velos, "MS:1001742", "LTQ Orbitrap Velos", "Finnigan LTQ Orbitrap Velos MS.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_A_Ions, "MS:1001743", "ProteomeDiscoverer:Mascot:Weight of A Ions", "Determines if to use A ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_B_Ions, "MS:1001744", "ProteomeDiscoverer:Mascot:Weight of B Ions", "Determines if to use B ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_C_Ions, "MS:1001745", "ProteomeDiscoverer:Mascot:Weight of C Ions", "Determines if to use C ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_D_Ions, "MS:1001746", "ProteomeDiscoverer:Mascot:Weight of D Ions", "Determines if to use D ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_V_Ions, "MS:1001747", "ProteomeDiscoverer:Mascot:Weight of V Ions", "Determines if to use V ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_W_Ions, "MS:1001748", "ProteomeDiscoverer:Mascot:Weight of W Ions", "Determines if to use W ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_X_Ions, "MS:1001749", "ProteomeDiscoverer:Mascot:Weight of X Ions", "Determines if to use X ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_Y_Ions, "MS:1001750", "ProteomeDiscoverer:Mascot:Weight of Y Ions", "Determines if to use Y ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Mascot_Weight_of_Z_Ions, "MS:1001751", "ProteomeDiscoverer:Mascot:Weight of Z Ions", "Determines if to use z ions for spectrum matching.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Use_New_Precursor_Reevaluation, "MS:1001752", "ProteomeDiscoverer:Spectrum Selector:Use New Precursor Reevaluation", "Determines if to use precursor reevaluation.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_SN_Threshold_FTonly, "MS:1001753", "ProteomeDiscoverer:Spectrum Selector:SN Threshold FTonly", "Signal-to-Noise ratio below which peaks are removed (in FT mode only).", false}, {MS_ProteomeDiscoverer_Mascot_Please_Do_not_Touch_this, "MS:1001754", "ProteomeDiscoverer:Mascot:Please Do not Touch this", "Unknown Mascot parameter which ProteomeDiscoverer uses for mascot searches.", false}, {MS_contact_phone_number, "MS:1001755", "contact phone number", "Phone number of the contact person or organization.", false}, {MS_contact_fax_number, "MS:1001756", "contact fax number", "Fax number for the contact person or organization.", false}, {MS_contact_toll_free_phone_number, "MS:1001757", "contact toll-free phone number", "Toll-free phone number of the contact person or organization.", false}, {MS_Mascot_SigThresholdType, "MS:1001758", "Mascot:SigThresholdType", "Significance threshold type used in Mascot reporting (either 'identity' or 'homology').", false}, {MS_Mascot_ProteinGrouping, "MS:1001759", "Mascot:ProteinGrouping", "Strategy used by Mascot to group proteins with same peptide matches (one of 'none', 'Occam's razor' or 'family clustering').", false}, {MS_Percolator_features, "MS:1001760", "Percolator:features", "List of Percolator features that were used in processing the peptide matches. Typical Percolator features are 'retentionTime', 'dM', 'mScore', 'lgDScore', 'mrCalc', 'charge' and 'dMppm'.", false}, {MS_ACQUITY_UPLC, "MS:1001761", "ACQUITY UPLC", "Waters LC-system ACQUITY UPLC.", false}, {MS_ACQUITY_UPLC_H_Class, "MS:1001762", "ACQUITY UPLC H-Class", "Waters LC-system ACQUITY UPLC H-Class.", false}, {MS_ACQUITY_UPLC_H_Class_Bio, "MS:1001763", "ACQUITY UPLC H-Class Bio", "Waters LC-system ACQUITY UPLC H-Class Bio.", false}, {MS_ACQUITY_UPLC_I_Class, "MS:1001764", "ACQUITY UPLC I-Class", "Waters LC-system ACQUITY UPLC I-Class.", false}, {MS_ACQUITY_UPLC_Systems_with_2D_Technology, "MS:1001765", "ACQUITY UPLC Systems with 2D Technology", "Waters LC-system ACQUITY UPLC Systems with 2D Technology.", false}, {MS_nanoACQUITY_UPLC, "MS:1001766", "nanoACQUITY UPLC", "Waters LC-system nanoACQUITY UPLC.", false}, {MS_nanoACQUITY_UPLC_System_with_1D_Technology, "MS:1001767", "nanoACQUITY UPLC System with 1D Technology", "Waters LC-system nanoACQUITY UPLC System with 1D Technology.", false}, {MS_nanoACQUITY_UPLC_with_HDX_Technology, "MS:1001768", "nanoACQUITY UPLC with HDX Technology", "Waters LC-system nanoACQUITY UPLC with HDX Technology.", false}, {MS_TRIZAIC_UPLC_nanoTile, "MS:1001769", "TRIZAIC UPLC nanoTile", "Waters LC-system TRIZAIC UPLC nanoTile.", false}, {MS_GCT_Premier, "MS:1001770", "GCT Premier", "Waters oa-ToF based GCT Premier.", false}, {MS_MALDI_Synapt_G2_HDMS, "MS:1001771", "MALDI Synapt G2 HDMS", "Waters oa-ToF based MALDI Synapt G2 HDMS.", false}, {MS_MALDI_Synapt_G2_MS, "MS:1001772", "MALDI Synapt G2 MS", "Waters oa-ToF based MALDI Synapt G2 MS.", false}, {MS_MALDI_Synapt_G2_S_HDMS, "MS:1001773", "MALDI Synapt G2-S HDMS", "Waters oa-ToF based MALDI Synapt G2 MS.", false}, {MS_MALDI_Synapt_G2_S_MS, "MS:1001774", "MALDI Synapt G2-S MS", "Waters oa-ToF based MALDI Synapt G2-S MS.", false}, {MS_MALDI_Synapt_HDMS, "MS:1001775", "MALDI Synapt HDMS", "Waters oa-ToF based MALDI Synapt HDMS.", false}, {MS_MALDI_Synapt_MS, "MS:1001776", "MALDI Synapt MS", "Waters oa-ToF based MALDI Synapt MS.", false}, {MS_Synapt_G2_HDMS, "MS:1001777", "Synapt G2 HDMS", "Waters oa-ToF based Synapt G2 HDMS.", false}, {MS_Synapt_G2_MS, "MS:1001778", "Synapt G2 MS", "Waters oa-ToF based Synapt G2 MS.", false}, {MS_Synapt_G2_S_HDMS, "MS:1001779", "Synapt G2-S HDMS", "Waters oa-ToF based Synapt G2-S HDMS.", false}, {MS_Synapt_G2_S_MS, "MS:1001780", "Synapt G2-S MS", "Waters oa-ToF based Synapt G2-S MS.", false}, {MS_Synapt_HDMS, "MS:1001781", "Synapt HDMS", "Waters oa-ToF based Synapt HDMS.", false}, {MS_Synapt_MS, "MS:1001782", "Synapt MS", "Waters oa-ToF based Synapt MS.", false}, {MS_Xevo_G2_Q_Tof, "MS:1001783", "Xevo G2 Q-Tof", "Waters oa-ToF based Xevo G2 Q-Tof.", false}, {MS_Xevo_G2_Tof, "MS:1001784", "Xevo G2 Tof", "Waters oa-ToF based Xevo G2 Tof.", false}, {MS_Xevo_Q_Tof, "MS:1001785", "Xevo Q-Tof", "Waters oa-ToF based Xevo Q-Tof.", false}, {MS_3100, "MS:1001786", "3100", "Waters quadrupole based 3100.", false}, {MS_Acquity_SQD, "MS:1001787", "Acquity SQD", "Waters quadrupole based Acquity SQD.", false}, {MS_Acquity_TQD, "MS:1001788", "Acquity TQD", "Waters quadrupole based Acquity TQD.", false}, {MS_Quattro_micro_GC, "MS:1001789", "Quattro micro GC", "Waters (triple) quadrupole based Quattro micro GC.", false}, {MS_Xevo_TQ_MS, "MS:1001790", "Xevo TQ MS", "Waters quadrupole based Xevo TQ MS.", false}, {MS_Xevo_TQD, "MS:1001791", "Xevo TQD", "Waters quadrupole based Xevo TQD.", false}, {MS_Xevo_TQ_S, "MS:1001792", "Xevo TQ-S", "Waters quadrupole based Xevo TQ-S.", false}, {MS_Mascot_PreferredTaxonomy, "MS:1001793", "Mascot:PreferredTaxonomy", "NCBI TaxID taxonomy ID to prefer when two or more proteins match the same set of peptides or when protein entry in database represents multiple sequences.", false}, {MS_Empower, "MS:1001795", "Empower", "Waters Empower software for liquid chromatography and mass spectrometry acquisition.", false}, {MS_UNIFY, "MS:1001796", "UNIFY", "Waters UNIFY software for liquid chromatography and mass spectrometry acquisition.", false}, {MS_travelling_wave_ion_mobility_mass_spectrometer_OBSOLETE, "MS:1001797", "travelling wave ion mobility mass spectrometer", "An ion mobility mass spectrometry technique based on the superimposition of travelling voltage waves on a radially-confining RF voltage in a gas-filled, stacked-ring ion guide.", true}, {MS_LECO_software, "MS:1001798", "LECO software", "LECO software for data acquisition and analysis.", false}, {MS_ChromaTOF_software, "MS:1001799", "ChromaTOF software", "Software for acquisition, processing and analysis of data for LECO instruments.", false}, {MS_LECO_instrument_model, "MS:1001800", "LECO instrument model", "LECO instrument model.", false}, {MS_Pegasus_HRT, "MS:1001801", "Pegasus HRT", "LECO high resolution time-of-flight GC mass spectrometer.", false}, {MS_Citius_HRT, "MS:1001802", "Citius HRT", "LECO high resolution time-of-flight LC mass spectrometer.", false}, {MS_Pegasus, "MS:1001803", "Pegasus", "LECO GC time-of-flight mass spectrometer.", false}, {MS_TruTOF, "MS:1001804", "TruTOF", "LECO bench-top GC time-of-flight mass spectrometer.", false}, {MS_quantification_datatype, "MS:1001805", "quantification datatype", "The data type of the value reported in a QuantLayer.", false}, {MS_quantification_object_attribute, "MS:1001806", "quantification object attribute", "Attributes describing the details of an object relevant for reporting quantification workflows or values.", false}, {MS_study_variable_attribute, "MS:1001807", "study variable attribute", "Attribute describing a study variable.", false}, {MS_technical_replicate, "MS:1001808", "technical replicate", "The study variable is 'technical replicate'. The string value denotes the category of technical replicate, e.g. 'run generated from same sample'.", false}, {MS_biological_replicate, "MS:1001809", "biological replicate", "The study variable is 'biological replicate'. This means, the run was generated from another individual or sample.", false}, {MS_experimental_condition__case_, "MS:1001810", "experimental condition 'case'", "The experimental condition is 'case' in contrast to 'control'.", false}, {MS_experimental_condition__control_, "MS:1001811", "experimental condition 'control'", "The experimental condition is 'control' in contrast to 'case'.", false}, {MS_experimental_condition__disease_, "MS:1001812", "experimental condition 'disease'", "The experimental condition is 'disease' in contrast to 'healthy'.", false}, {MS_experimental_condition__healthy_, "MS:1001813", "experimental condition 'healthy'", "The experimental condition is 'healthy' in contrast to 'disease'.", false}, {MS_generic_experimental_condition, "MS:1001814", "generic experimental condition", "The experimental condition is given in the value of this term.", false}, {MS_time_series__time_point_X, "MS:1001815", "time series, time point X", "The experimental design followed a time series design. The time point of this run is given in the value of this term.", false}, {MS_dilution_series__concentration_X, "MS:1001816", "dilution series, concentration X", "The experimental design followed a dilution series design. The concentration of this run is given in the value of this term.", false}, {MS_raw_file_attribute, "MS:1001817", "raw file attribute", "Attribute describing a raw file.", false}, {MS_one_sample_run, "MS:1001818", "one sample run", "The raw file contains the run of one sample (e.g. spectral counting, LC-MS label-free).", false}, {MS_two_sample_run, "MS:1001819", "two sample run", "The raw file contains the run of two samples (e.g. SILAC, metabolic labelling).", false}, {MS_three_sample_run, "MS:1001820", "three sample run", "The raw file contains the run of three samples (e.g. 3-plex SILAC).", false}, {MS_four_sample_run, "MS:1001821", "four sample run", "The raw file contains the run of four samples (e.g. 4-plex iTraq).", false}, {MS_eight_sample_run, "MS:1001822", "eight sample run", "The raw file contains the run of eight samples (e.g. 8-plex iTraq).", false}, {MS_raw_files_group_attribute, "MS:1001823", "raw files group attribute", "Attribute describing, how raw files build a raw file group.", false}, {MS_merge_of_runs_of_1D_gel_bands, "MS:1001824", "merge of runs of 1D gel bands", "Attribute describing, how raw files build a raw file group.", false}, {MS_feature_list_attribute, "MS:1001825", "feature list attribute", "Attribute describing a feature list.", false}, {MS_mass_trace_reporting__rectangles, "MS:1001826", "mass trace reporting: rectangles", "The mass trace of the features of this feature list specifies rectangles. Each mass trace has the syntax (RT_start,MZ_start,RT_end,MZ_end), i.e. opposite corners are given.", false}, {MS_mass_trace_reporting__polygons, "MS:1001827", "mass trace reporting: polygons", "The mass trace of the features of this feature list specifies polygons. Each mass trace has the syntax (RT_1, MZ_1, RT_2, MZ_2, ... , RT_i, MZ_i, ... , RT_n, MZ_n), where the line (RT_n, MZ_n)->(RT_1, MZ_1) is implicit.", false}, {MS_feature_attribute, "MS:1001828", "feature attribute", "Attribute describing a feature.", false}, {MS_SRM_transition_ID, "MS:1001829", "SRM transition ID", "Identifier for an SRM transition in an external document describing additional information about the transition.", false}, {MS_Progenesis_LC_MS, "MS:1001830", "Progenesis LC-MS", "Software from Nonlinear Dynamics for LC-MS label-free workflow.", false}, {MS_SILACAnalyzer, "MS:1001831", "SILACAnalyzer", "Software for SILAC workflow.", false}, {MS_quantitation_software_comment_or_customizations, "MS:1001832", "quantitation software comment or customizations", "Quantitation software comment or any customizations to the default setup of the software.", false}, {MS_quantitation_analysis_summary, "MS:1001833", "quantitation analysis summary", "The overall workflow of this quantitation report.", false}, {MS_LC_MS_label_free_quantitation_analysis, "MS:1001834", "LC-MS label-free quantitation analysis", "LC-MS label-free workflow (RT m/z map).", false}, {MS_SILAC_quantitation_analysis, "MS:1001835", "SILAC quantitation analysis", "SILAC workflow (heavy, light, and sometimes medium peak).", false}, {MS_spectral_counting_quantitation_analysis, "MS:1001836", "spectral counting quantitation analysis", "Spectral counting workflow (number of identified MS2 spectra as approximation of peptide / protein quant).", false}, {MS_iTRAQ_quantitation_analysis, "MS:1001837", "iTRAQ quantitation analysis", "Quantification analysis using the SCIEX amine-reactive isobaric tags for relative and absolute quantification (iTRAQ) labelling workflow, wherein 2-8 reporter ions are measured in MS2 spectra near in the 114-121 m/z range.", false}, {MS_SRM_quantitation_analysis, "MS:1001838", "SRM quantitation analysis", "Selected Reaction Monitoring workflow (XIC quantitation of precursor / fragment mass pair).", false}, {MS_metabolic_labeling_14N___15N_quantitation_analysis, "MS:1001839", "metabolic labeling 14N / 15N quantitation analysis", "Metabolic labeling workflow (heavy and light versions of peptides, depending on number of nitrogens).", false}, {MS_LC_MS_feature_intensity, "MS:1001840", "LC-MS feature intensity", "Maximum peak intensity of the LC-MS feature.", false}, {MS_LC_MS_feature_volume, "MS:1001841", "LC-MS feature volume", "Real (intensity times area) volume of the LC-MS feature.", false}, {MS_sequence_level_spectral_count, "MS:1001842", "sequence-level spectral count", "The number of MS2 spectra identified for a raw peptide sequence without PTMs and charge state in spectral counting.", false}, {MS_MS1_feature_maximum_intensity, "MS:1001843", "MS1 feature maximum intensity", "Maximum intensity of MS1 feature.", false}, {MS_MS1_feature_area, "MS:1001844", "MS1 feature area", "Area of MS1 feature.", false}, {MS_peak_area_OBSOLETE, "MS:1001845", "peak area", "Area of MS1 peak (e.g. SILAC, 15N).", true}, {MS_isotopic_pattern_area, "MS:1001846", "isotopic pattern area", "Area of all peaks belonging to the isotopic pattern of light or heavy peak (e.g. 15N).", false}, {MS_reporter_ion_intensity, "MS:1001847", "reporter ion intensity", "Intensity of MS2 reporter ion (e.g. iTraq).", false}, {MS_simple_ratio_of_two_values, "MS:1001848", "simple ratio of two values", "Simple ratio of two values (enumerator and denominator).", false}, {MS_sum_of_MatchedFeature_values_OBSOLETE, "MS:1001849", "sum of MatchedFeature values", "Peptide quantification value calculated as sum of MatchedFeature quantification values.", true}, {MS_normalized_peptide_value, "MS:1001850", "normalized peptide value", "Normalized peptide value.", false}, {MS_protein_value__sum_of_peptide_values, "MS:1001851", "protein value: sum of peptide values", "Protein quantification value calculated as sum of peptide values.", false}, {MS_normalized_protein_value, "MS:1001852", "normalized protein value", "Normalized protein value.", false}, {MS_max_fold_change, "MS:1001853", "max fold change", "Global datatype: Maximum of all pair-wise fold changes of group means (e.g. Progenesis).", false}, {MS_ANOVA_p_value, "MS:1001854", "ANOVA p-value", "Global datatype: p-value of ANOVA of group means (e.g. Progenesis).", false}, {MS_t_test_p_value, "MS:1001855", "t-test p-value", "P-value of t-Test of two groups.", false}, {MS_reporter_ion_raw_value, "MS:1001856", "reporter ion raw value", "Intensity (or area) of MS2 reporter ion (e.g. iTraq).", false}, {MS_reporter_ion_normalized_value, "MS:1001857", "reporter ion normalized value", "Normalized value of MS2 reporter ion (e.g. iTraq).", false}, {MS_XIC_area, "MS:1001858", "XIC area", "Area of the extracted ion chromatogram (e.g. of a transition in SRM).", false}, {MS_normalized_XIC_area, "MS:1001859", "normalized XIC area", "Normalized area of the extracted ion chromatogram (e.g. of a transition in SRM).", false}, {MS_protein_value__mean_of_peptide_ratios, "MS:1001860", "protein value: mean of peptide ratios", "Protein quantification value calculated as mean of peptide ratios.", false}, {MS_quantification_data_processing, "MS:1001861", "quantification data processing", "Terms used to describe types of quantification data processing.", false}, {MS_normalization_to_mean_of_sum_of_all_proteins, "MS:1001862", "normalization to mean of sum of all proteins", "Normalization of protein values to the mean of the sum of all protein PSM counts (e.g. spectral counting).", false}, {MS_quantile_normalization__proteins, "MS:1001863", "quantile normalization, proteins", "Normalization of protein values to approach the same distribution.", false}, {MS_quantile_normalization__peptides, "MS:1001864", "quantile normalization, peptides", "Normalization of peptide values to approach the same distribution.", false}, {MS_Progenesis_automatic_alignment, "MS:1001865", "Progenesis automatic alignment", "Automatic RT alignment of Progenesis software.", false}, {MS_Progenesis_manual_alignment, "MS:1001866", "Progenesis manual alignment", "RT alignment of Progenesis software using automatic and manual vectors.", false}, {MS_Progenesis_normalization, "MS:1001867", "Progenesis normalization", "Normalization as performed by Progenesis LC-MS.", false}, {MS_distinct_peptide_level_q_value, "MS:1001868", "distinct peptide-level q-value", "Estimation of the q-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs, possibly with different mass modifications, mapping to the same sequence have been collapsed to one entry).", false}, {MS_protein_level_q_value, "MS:1001869", "protein-level q-value", "Estimation of the q-value for proteins.", false}, {MS_peptide_sequence_level_p_value, "MS:1001870", "peptide sequence-level p-value", "Estimation of the p-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_protein_level_p_value, "MS:1001871", "protein-level p-value", "Estimation of the p-value for proteins.", false}, {MS_peptide_sequence_level_e_value, "MS:1001872", "peptide sequence-level e-value", "Estimation of the e-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_protein_level_e_value, "MS:1001873", "protein-level e-value", "Estimation of the e-value for proteins.", false}, {MS_FDRScore_OBSOLETE, "MS:1001874", "FDRScore", "A smoothing of the distribution of q-values calculated for PSMs from individual search engines, such that ordering of result quality is maintained and all FDRScore values are guaranteed to have a value > 0.", true}, {MS_modification_motif, "MS:1001875", "modification motif", "The regular expression describing the sequence motif for a modification.", false}, {MS_modification_probability, "MS:1001876", "modification probability", "The a priori probability of a modification.", false}, {MS_ChromaTOF_HRT_software, "MS:1001877", "ChromaTOF HRT software", "Software for acquisition, processing and analysis of data for LECO instruments.", false}, {MS_MALDI_Solutions_Microbial_Identification, "MS:1001878", "MALDI Solutions Microbial Identification", "Shimadzu Biotech software for data acquisition, processing, and analysis.", false}, {MS_offset_voltage, "MS:1001879", "offset voltage", "The potential difference between two adjacent interface voltages affecting in-source collision induced dissociation.", false}, {MS_in_source_collision_induced_dissociation, "MS:1001880", "in-source collision-induced dissociation", "The dissociation of an ion as a result of collisional excitation during ion transfer from an atmospheric pressure ion source and the mass spectrometer vacuum.", false}, {MS_mz5_format, "MS:1001881", "mz5 format", "mz5 file format, modelled after mzML.", false}, {MS_transition_validation_attribute, "MS:1001882", "transition validation attribute", "Attributes of the quality of a transition that affect its selection as appropriate.", false}, {MS_coefficient_of_variation, "MS:1001883", "coefficient of variation", "Variation of a set of signal measurements calculated as the standard deviation relative to the mean.", false}, {MS_signal_to_noise_ratio, "MS:1001884", "signal-to-noise ratio", "Unitless number providing the ratio of the total measured intensity of a signal relative to the estimated noise level for that signal.", false}, {MS_command_line_parameters, "MS:1001885", "command-line parameters", "Parameters string passed to a command-line interface software application, omitting the executable name.", false}, {MS_SQID, "MS:1001886", "SQID", "Software for data analysis of peptides and proteins.", false}, {MS_SQID_score, "MS:1001887", "SQID:score", "The SQID result 'Score'.", false}, {MS_SQID_deltaScore, "MS:1001888", "SQID:deltaScore", "The SQID result 'deltaScore'.", false}, {MS_SQID_protein_score, "MS:1001889", "SQID:protein score", "The SQID result 'protein score'.", false}, {MS_Progenesis_protein_normalised_abundance, "MS:1001890", "Progenesis:protein normalised abundance", "The data type normalised abundance for proteins produced by Progenesis LC-MS.", false}, {MS_Progenesis_peptide_normalised_abundance, "MS:1001891", "Progenesis:peptide normalised abundance", "The data type normalised abundance for peptides produced by Progenesis LC-MS.", false}, {MS_Progenesis_protein_raw_abundance, "MS:1001892", "Progenesis:protein raw abundance", "The data type raw abundance for proteins produced by Progenesis LC-MS.", false}, {MS_Progenesis_peptide_raw_abundance, "MS:1001893", "Progenesis:peptide raw abundance", "The data type raw abundance for peptide produced by Progenesis LC-MS.", false}, {MS_Progenesis_confidence_score, "MS:1001894", "Progenesis:confidence score", "The data type confidence score produced by Progenesis LC-MS.", false}, {MS_Progenesis_peptide_count, "MS:1001895", "Progenesis:peptide count", "The data type peptide count produced by Progenesis LC-MS.", false}, {MS_Progenesis_feature_intensity, "MS:1001896", "Progenesis:feature intensity", "The data type feature intensity produced by Progenesis LC-MS.", false}, {MS_MaxQuant_peptide_counts__unique_, "MS:1001897", "MaxQuant:peptide counts (unique)", "The data type peptide counts (unique) produced by MaxQuant.", false}, {MS_MaxQuant_peptide_counts__all_, "MS:1001898", "MaxQuant:peptide counts (all)", "The data type peptide counts (all) produced by MaxQuant.", false}, {MS_MaxQuant_peptide_counts__razor_unique_, "MS:1001899", "MaxQuant:peptide counts (razor+unique)", "The data type peptide counts (razor+unique) produced by MaxQuant.", false}, {MS_MaxQuant_sequence_length, "MS:1001900", "MaxQuant:sequence length", "The data type sequence length produced by MaxQuant.", false}, {MS_MaxQuant_PEP, "MS:1001901", "MaxQuant:PEP", "The data type PEP (posterior error probability) produced by MaxQuant.", false}, {MS_MaxQuant_LFQ_intensity, "MS:1001902", "MaxQuant:LFQ intensity", "The data type LFQ intensity produced by MaxQuant.", false}, {MS_MaxQuant_feature_intensity, "MS:1001903", "MaxQuant:feature intensity", "The data type feature intensity produced by MaxQuant.", false}, {MS_MaxQuant_MS_MS_count, "MS:1001904", "MaxQuant:MS/MS count", "The data type MS2 count produced by MaxQuant.", false}, {MS_emPAI_value, "MS:1001905", "emPAI value", "The emPAI value of protein abundance, produced from the emPAI algorithm.", false}, {MS_APEX_value, "MS:1001906", "APEX value", "The APEX value of protein abundance, produced from the APEX software.", false}, {MS_retention_time_window_width, "MS:1001907", "retention time window width", "The full width of a retention time window for a chromatographic peak.", false}, {MS_ISQ, "MS:1001908", "ISQ", "Thermo Scientific ISQ single quadrupole MS with the ExtractraBrite source.", false}, {MS_Velos_Plus, "MS:1001909", "Velos Plus", "Thermo Scientific second generation Velos.", false}, {MS_LTQ_Orbitrap_Elite, "MS:1001910", "LTQ Orbitrap Elite", "Thermo Scientific LTQ Orbitrap Elite, often just referred to as the Orbitrap Elite.", false}, {MS_Q_Exactive, "MS:1001911", "Q Exactive", "Thermo Scientific Q Exactive.", false}, {MS_PinPoint, "MS:1001912", "PinPoint", "Thermo Scientific PinPoint SRM analysis software.", false}, {MS_S_lens_voltage, "MS:1001913", "S-lens voltage", "Potential difference setting of the Thermo Scientific S-lens stacked-ring ion guide in volts.", false}, {MS_pymzML, "MS:1001914", "pymzML", "Python module to interface mzML Data.", false}, {MS_leukocyte_elastase, "MS:1001915", "leukocyte elastase", "Enzyme leukocyte elastase (EC 3.4.21.37).", false}, {MS_proline_endopeptidase, "MS:1001916", "proline endopeptidase", "Enzyme proline endopeptidase (EC 3.4.21.26).", false}, {MS_glutamyl_endopeptidase, "MS:1001917", "glutamyl endopeptidase", "Enzyme glutamyl endopeptidase (EC 3.4.21.19).", false}, {MS_2_iodobenzoate, "MS:1001918", "2-iodobenzoate", "Chemical iodobenzoate. Cleaves after W.", false}, {MS_ProteomeXchange_accession_number, "MS:1001919", "ProteomeXchange accession number", "Main identifier of a ProteomeXchange dataset.", false}, {MS_ProteomeXchange_accession_number_version_number, "MS:1001921", "ProteomeXchange accession number version number", "Version number of a ProteomeXchange accession number.", false}, {MS_Digital_Object_Identifier__DOI_, "MS:1001922", "Digital Object Identifier (DOI)", "DOI unique identifier of a publication.", false}, {MS_external_reference_keyword, "MS:1001923", "external reference keyword", "Free text attribute that can enrich the information about an entity.", false}, {MS_journal_article_keyword, "MS:1001924", "journal article keyword", "Keyword present in a scientific publication.", false}, {MS_submitter_keyword, "MS:1001925", "submitter keyword", "Keyword assigned by the data submitter.", false}, {MS_curator_keyword, "MS:1001926", "curator keyword", "Keyword assigned by a data curator.", false}, {MS_Tranche_file_hash, "MS:1001927", "Tranche file hash", "Hash assigned by the Tranche resource to an individual file.", false}, {MS_Tranche_project_hash, "MS:1001928", "Tranche project hash", "Hash assigned by the Tranche resource to a whole project.", false}, {MS_PRIDE_experiment_URI, "MS:1001929", "PRIDE experiment URI", "URI that allows the access to one experiment in the PRIDE database.", false}, {MS_PRIDE_project_URI, "MS:1001930", "PRIDE project URI", "URI that allows the access to one project in the PRIDE database.", false}, {MS_source_interface, "MS:1001931", "source interface", "The source interface.", false}, {MS_source_interface_model, "MS:1001932", "source interface model", "The source interface model.", false}, {MS_source_sprayer, "MS:1001933", "source sprayer", "The source sprayer.", false}, {MS_source_sprayer_type, "MS:1001934", "source sprayer type", "The source sprayer type.", false}, {MS_source_sprayer_manufacturer, "MS:1001935", "source sprayer manufacturer", "The source sprayer manufacturer.", false}, {MS_source_sprayer_model, "MS:1001936", "source sprayer model", "The source sprayer model.", false}, {MS_sample_plate, "MS:1001937", "sample plate", "Plate where the sample solution is spotted in a MALDI or similar instrument.", false}, {MS_sample_plate_type, "MS:1001938", "sample plate type", "The sample plate type.", false}, {MS_stainless_steel_plate, "MS:1001939", "stainless steel plate", "Stainless steel plate.", false}, {MS_coated_glass_plate, "MS:1001940", "coated glass plate", "Coated glass plate.", false}, {MS_electrospray_supply_type, "MS:1001941", "electrospray supply type", "Whether the sprayer is fed or is loaded with sample once.", false}, {MS_static_supply_electrospray, "MS:1001942", "static supply electrospray", "The sprayer is loaded with sample once.", false}, {MS_fed_supply_electrospray, "MS:1001943", "fed supply electrospray", "The sprayer is continuously fed with sample.", false}, {MS_Collision_cell_exit_potential, "MS:1001944", "Collision cell exit potential", "Potential difference between Q2 and Q3 in a triple quadrupole instrument in volts.", false}, {MS_Pegasus_4D, "MS:1001945", "Pegasus 4D", "LECO nominal mass resolution time-of-flight GCxGC mass spectrometer.", false}, {MS_PEAKS_Studio, "MS:1001946", "PEAKS Studio", "PEAKS Studio software for data analysis.", false}, {MS_PEAKS_Online, "MS:1001947", "PEAKS Online", "PEAKS Online software for high throughput data analysis.", false}, {MS_PEAKS_Node, "MS:1001948", "PEAKS Node", "PEAKS Node software for high throughput data analysis.", false}, {MS_BSI_software, "MS:1001949", "BSI software", "Bioinformatics Solutions Inc. Software for data processing and analysis.", false}, {MS_PEAKS_peptideScore, "MS:1001950", "PEAKS:peptideScore", "The PEAKS peptide '-10lgP Score'.", false}, {MS_PEAKS_proteinScore, "MS:1001951", "PEAKS:proteinScore", "The PEAKS protein '-10lgP Score'.", false}, {MS_ZCore_probScore, "MS:1001952", "ZCore:probScore", "The ZCore probability score.", false}, {MS_source_interface_manufacturer, "MS:1001953", "source interface manufacturer", "The source interface manufacturer.", false}, {MS_acquisition_parameter, "MS:1001954", "acquisition parameter", "Parameters used in the mass spectrometry acquisition.", false}, {MS_no_cleavage, "MS:1001955", "no cleavage", "No cleavage.", false}, {MS_unspecific_cleavage, "MS:1001956", "unspecific cleavage", "Unspecific cleavage.", false}, {MS______ALIV_____P_, "MS:1001957", "(?<=[ALIV])(?!P)", "Regular expression for leukocyte elastase.", false}, {MS______HKR_P____P_, "MS:1001958", "(?<=[HKR]P)(?!P)", "Regular expression for proline endopeptidase.", false}, {MS_______E_E_, "MS:1001959", "(?<=[^E]E)", "Regular expression for glutamyl endopeptidase.", false}, {MS_____W_, "MS:1001960", "(?<=W)", "Regular expression for 2-iodobenzoate.", false}, {MS_peptide_spectrum_match_scoring_algorithm, "MS:1001961", "peptide spectrum match scoring algorithm", "Algorithm used to score the match between a spectrum and a peptide ion.", false}, {MS_Mascot_C13_counts, "MS:1001962", "Mascot:C13 counts", "C13 peaks to use in peak detection.", false}, {MS_ProteinExtractor_Weighting, "MS:1001963", "ProteinExtractor:Weighting", "Weighting factor for protein list compilation by ProteinExtractor.", false}, {MS_ProteinScape_second_round_Mascot, "MS:1001964", "ProteinScape:second round Mascot", "Flag indicating a second round search with Mascot.", false}, {MS_ProteinScape_second_round_Phenyx, "MS:1001965", "ProteinScape:second round Phenyx", "Flag indicating a second round search with Phenyx.", false}, {MS_product_ion_mobility, "MS:1001966", "product ion mobility", "The mobility of an MS2 product ion, as measured by ion mobility mass spectrometry.", false}, {MS_product_ion_drift_time_OBSOLETE, "MS:1001967", "product ion drift time", "The ion drift time of an MS2 product ion.", true}, {MS_PTM_localization_PSM_level_statistic, "MS:1001968", "PTM localization PSM-level statistic", "Statistic to convey the confidence of the localization of an amino acid modification on a peptide sequence at the PSM-level.", false}, {MS_phosphoRS_score, "MS:1001969", "phosphoRS score", "phosphoRS score for PTM site location at the PSM-level.", false}, {MS_phosphoRS_sequence_probability, "MS:1001970", "phosphoRS sequence probability", "Probability that the respective isoform is correct.", false}, {MS_phosphoRS_site_probability, "MS:1001971", "phosphoRS site probability", "Estimate of the probability that the respective site is truly phosphorylated.", false}, {MS_PTM_scoring_algorithm_version, "MS:1001972", "PTM scoring algorithm version", "Version of the post-translational modification scoring algorithm.", false}, {MS_DeBunker, "MS:1001973", "DeBunker", "DeBunker software.", false}, {MS_DeBunker_score, "MS:1001974", "DeBunker:score", "Score specific to DeBunker.", false}, {MS_delta_m_z, "MS:1001975", "delta m/z", "The difference between a theoretically calculated m/z and the corresponding experimentally measured m/z. It can be expressed as absolute or relative value.", false}, {MS_delta_M, "MS:1001976", "delta M", "The difference between a theoretically calculated molecular mass M and the corresponding experimentally measured M. It can be expressed as absolute or relative value.", false}, {MS_MSQuant, "MS:1001977", "MSQuant", "MSQuant software.", false}, {MS_MSQuant_PTM_score, "MS:1001978", "MSQuant:PTM-score", "The PTM score from MSQuant software.", false}, {MS_MaxQuant_PTM_Score, "MS:1001979", "MaxQuant:PTM Score", "The PTM score from MaxQuant software.", false}, {MS_MaxQuant_Phospho__STY__Probabilities, "MS:1001980", "MaxQuant:Phospho (STY) Probabilities", "The Phospho (STY) Probabilities from MaxQuant software.", false}, {MS_MaxQuant_Phospho__STY__Score_Diffs, "MS:1001981", "MaxQuant:Phospho (STY) Score Diffs", "The Phospho (STY) Score Diffs from MaxQuant software.", false}, {MS_MaxQuant_P_site_localization_probability, "MS:1001982", "MaxQuant:P-site localization probability", "The P-site localization probability value from MaxQuant software.", false}, {MS_MaxQuant_PTM_Delta_Score, "MS:1001983", "MaxQuant:PTM Delta Score", "The PTM Delta Score value from MaxQuant software (Difference between highest scoring site and second highest).", false}, {MS_Ascore_software, "MS:1001984", "Ascore software", "Ascore software.", false}, {MS_Ascore, "MS:1001985", "Ascore", "A-score for PTM site location at the PSM-level.", false}, {MS_H_Score, "MS:1001986", "H-Score", "H-Score for peptide phosphorylation site location.", false}, {MS_vacuum_drying_MALDI_sample_preparation, "MS:1001987", "vacuum drying MALDI sample preparation", "Vacuum-drying MALDI sample preparation crystallization method.", false}, {MS_crushed_crystal_MALDI_sample_preparation, "MS:1001988", "crushed crystal MALDI sample preparation", "Crushed-crystal MALDI sample preparation method.", false}, {MS_fast_evaporation_MALDI_sample_preparation, "MS:1001989", "fast evaporation MALDI sample preparation", "Fast-evaporation MALDI sample preparation method.", false}, {MS_overlayer_MALDI_sample_preparation, "MS:1001990", "overlayer MALDI sample preparation", "Overlayer method combining features of the crushed-crystal method and the fast-evaporation method.", false}, {MS_sandwich_MALDI_sample_preparation, "MS:1001991", "sandwich MALDI sample preparation", "Sandwich MALDI sample preparation method.", false}, {MS_spin_coating_MALDI_sample_preparation, "MS:1001992", "spin coating MALDI sample preparation", "Spin coating MALDI sample preparation method.", false}, {MS_quick_and_dirty_MALDI_sample_preparation, "MS:1001993", "quick and dirty MALDI sample preparation", "Quick & dirty (Q&D) sample preparation separating matrix handling from sample handling.", false}, {MS_top_hat_baseline_reduction, "MS:1001994", "top hat baseline reduction", "Top-hat morphological filter based on the basic morphological operations 'erosion' and 'dilatation'.", false}, {MS_convex_hull_baseline_reduction, "MS:1001995", "convex hull baseline reduction", "Constructs the baseline by fitting multiple parabolas to the spectrum starting with the large scale structures.", false}, {MS_median_baseline_reduction, "MS:1001996", "median baseline reduction", "The spectrum that will be baseline subtracted is divided into a number of segments.", false}, {MS_wavelet_transformation_smoothing, "MS:1001997", "wavelet transformation smoothing", "The random noise is removed by using the undecimated wavelet transform.", false}, {MS_sophisticated_numerical_annotation_procedure, "MS:1001998", "sophisticated numerical annotation procedure", "It searches for known patterns in the measured spectrum.", false}, {MS_area_normalization, "MS:1001999", "area normalization", "Normalization of areas below the curves.", false}, {MS_LIFT, "MS:1002000", "LIFT", "A Bruker's proprietary technique where molecular ions are initially accelerated at lower energy, then collide with inert gas in a collision cell that is then 'lifted' to high potential. The use of inert gas is optional, as it could lift also fragments provided by LID.", false}, {MS_MS1_label_based_raw_feature_quantitation, "MS:1002001", "MS1 label-based raw feature quantitation", "MS1 label-based raw feature quantitation.", false}, {MS_MS1_label_based_peptide_level_quantitation, "MS:1002002", "MS1 label-based peptide level quantitation", "MS1 label-based peptide level quantitation.", false}, {MS_MS1_label_based_protein_level_quantitation, "MS:1002003", "MS1 label-based protein level quantitation", "MS1 label-based protein level quantitation.", false}, {MS_MS1_label_based_proteingroup_level_quantitation, "MS:1002004", "MS1 label-based proteingroup level quantitation", "MS1 label-based proteingroup level quantitation.", false}, {MS_iRT_retention_time_normalization_standard, "MS:1002005", "iRT retention time normalization standard", "A de facto standard providing the retention times at which a specific set of 10 reference peptides exit the reference chromatographic column. The kit may be obtain from Biognosys.", false}, {MS_SRM_transition_type, "MS:1002006", "SRM transition type", "The type of the transitions, e.g. target or decoy.", false}, {MS_target_SRM_transition, "MS:1002007", "target SRM transition", "A transition used to target a specific compound that may be in the sample.", false}, {MS_decoy_SRM_transition, "MS:1002008", "decoy SRM transition", "A transition not expected to be present in the sample and used to calculate statistical confidence of target transition detections in some workflows.", false}, {MS_isobaric_label_quantitation_analysis, "MS:1002009", "isobaric label quantitation analysis", "Quantitation analysis using an isobaric labelling workflow.", false}, {MS_TMT_quantitation_analysis, "MS:1002010", "TMT quantitation analysis", "Quantitation analysis using the Thermo Fisher amine-reactive tandem mass tag (TMT) labelling workflow, wherein 2-10 reporter ions are measured in MS2 spectra in the 126-131 m/z.", false}, {MS_desorption_electrospray_ionization, "MS:1002011", "desorption electrospray ionization", "Combination of electrospray and desorption ionization method that ionizes gases, liquids and solids in open air under atmospheric pressure.", false}, {MS_Mascot_PTM_site_assignment_confidence, "MS:1002012", "Mascot:PTM site assignment confidence", "Relative probability that PTM site assignment is correct, derived from the Mascot score difference between matches to the same spectrum (Mascot Delta Score).", false}, {MS_collision_energy_ramp_start, "MS:1002013", "collision energy ramp start", "Collision energy at the start of the collision energy ramp.", false}, {MS_collision_energy_ramp_end, "MS:1002014", "collision energy ramp end", "Collision energy at the end of the collision energy ramp.", false}, {MS_spectral_count_peptide_level_quantitation, "MS:1002015", "spectral count peptide level quantitation", "Spectral count peptide level quantitation.", false}, {MS_spectral_count_protein_level_quantitation, "MS:1002016", "spectral count protein level quantitation", "Spectral count protein level quantitation.", false}, {MS_spectral_count_proteingroup_level_quantitation, "MS:1002017", "spectral count proteingroup level quantitation", "Spectral count proteingroup level quantitation.", false}, {MS_MS1_label_based_analysis, "MS:1002018", "MS1 label-based analysis", "MS1 label-based analysis.", false}, {MS_label_free_raw_feature_quantitation, "MS:1002019", "label-free raw feature quantitation", "Label-free raw feature quantitation.", false}, {MS_label_free_peptide_level_quantitation, "MS:1002020", "label-free peptide level quantitation", "Label-free peptide level quantitation.", false}, {MS_label_free_protein_level_quantitation, "MS:1002021", "label-free protein level quantitation", "Label-free protein level quantitation.", false}, {MS_label_free_proteingroup_level_quantitation, "MS:1002022", "label-free proteingroup level quantitation", "Label-free proteingroup level quantitation.", false}, {MS_MS2_tag_based_analysis, "MS:1002023", "MS2 tag-based analysis", "MS2 tag-based analysis.", false}, {MS_MS2_tag_based_feature_level_quantitation, "MS:1002024", "MS2 tag-based feature level quantitation", "MS2 tag-based feature level quantitation.", false}, {MS_MS2_tag_based_peptide_level_quantitation, "MS:1002025", "MS2 tag-based peptide level quantitation", "MS2 tag-based peptide level quantitation.", false}, {MS_MS2_tag_based_protein_level_quantitation, "MS:1002026", "MS2 tag-based protein level quantitation", "MS2 tag-based protein level quantitation.", false}, {MS_MS2_tag_based_proteingroup_level_quantitation, "MS:1002027", "MS2 tag-based proteingroup level quantitation", "MS2 tag-based proteingroup level quantitation.", false}, {MS_nucleic_acid_base_modification, "MS:1002028", "nucleic acid base modification", "Nucleic acid base modification (substitution, insertion or deletion).", false}, {MS_original_nucleic_acid_sequence, "MS:1002029", "original nucleic acid sequence", "Specification of the original nucleic acid sequence, prior to a modification. The value slot should hold the DNA or RNA sequence.", false}, {MS_modified_nucleic_acid_sequence, "MS:1002030", "modified nucleic acid sequence", "Specification of the modified nucleic acid sequence. The value slot should hold the DNA or RNA sequence.", false}, {MS_PASSEL_transition_group_browser_URI, "MS:1002031", "PASSEL transition group browser URI", "URI to retrieve transition group data for a PASSEL (PeptideAtlas SRM Experiment Library) experiment.", false}, {MS_PeptideAtlas_dataset_URI, "MS:1002032", "PeptideAtlas dataset URI", "URI that allows access to a PeptideAtlas dataset.", false}, {MS_contact_role, "MS:1002033", "contact role", "Role of the contact person.", false}, {MS_first_author, "MS:1002034", "first author", "The first of a set of authors associated with a publication or release. There may be more than one first author in cases where several authors share primary attribution.", false}, {MS_senior_author, "MS:1002035", "senior author", "The last of a set of authors associated with a publication or release. There may be more than one senior author in cases where several authors share senior attribution.", false}, {MS_co_author, "MS:1002036", "co-author", "One of a set of authors associated with a publication or release.", false}, {MS_dataset_submitter, "MS:1002037", "dataset submitter", "A person who submits a dataset to a repository.", false}, {MS_label_free_sample, "MS:1002038", "label free sample", "A sample that has not been labelled or modified. This is often referred to as \\\"light\\\" to distinguish from \\\"heavy\\\".", false}, {MS_inlet_attribute, "MS:1002039", "inlet attribute", "Inlet properties that are associated with a value.", false}, {MS_inlet_temperature, "MS:1002040", "inlet temperature", "The temperature of the inlet of a mass spectrometer.", false}, {MS_source_temperature, "MS:1002041", "source temperature", "The temperature of the source of a mass spectrometer.", false}, {MS_modulation_time, "MS:1002042", "modulation time", "The duration of a complete cycle of modulation in a comprehensive two-dimensional separation system, equals the length of a second dimension chromatogram, i.e., the time between two successive injections into the second column.", false}, {MS_ProteinProspector, "MS:1002043", "ProteinProspector", "ProteinProspector software for data acquisition and analysis.", false}, {MS_ProteinProspector_score, "MS:1002044", "ProteinProspector:score", "The ProteinProspector result 'Score'.", false}, {MS_ProteinProspector_expectation_value, "MS:1002045", "ProteinProspector:expectation value", "The ProteinProspector result 'Expectation value'.", false}, {MS_native_source_path, "MS:1002046", "native source path", "The original source path used for directory-based sources.", false}, {MS_MS_GF, "MS:1002047", "MS-GF", "MS-GF software used to re-score the peptide-spectrum matches.", false}, {MS_MS_GF_, "MS:1002048", "MS-GF+", "MS-GF+ software used to analyze the spectra.", false}, {MS_MS_GF_RawScore, "MS:1002049", "MS-GF:RawScore", "MS-GF raw score.", false}, {MS_MS_GF_DeNovoScore, "MS:1002050", "MS-GF:DeNovoScore", "MS-GF de novo score.", false}, {MS_MS_GF_Energy, "MS:1002051", "MS-GF:Energy", "MS-GF energy score.", false}, {MS_MS_GF_SpecEValue, "MS:1002052", "MS-GF:SpecEValue", "MS-GF spectral E-value.", false}, {MS_MS_GF_EValue, "MS:1002053", "MS-GF:EValue", "MS-GF E-value.", false}, {MS_MS_GF_QValue, "MS:1002054", "MS-GF:QValue", "MS-GF Q-value.", false}, {MS_MS_GF_PepQValue, "MS:1002055", "MS-GF:PepQValue", "MS-GF peptide-level Q-value.", false}, {MS_MS_GF_PEP, "MS:1002056", "MS-GF:PEP", "MS-GF posterior error probability.", false}, {MS_modification_specificity_protein_N_term, "MS:1002057", "modification specificity protein N-term", "As parameter for search engine: apply the modification only at the N-terminus of a protein.", false}, {MS_modification_specificity_protein_C_term, "MS:1002058", "modification specificity protein C-term", "As parameter for search engine: apply the modification only at the C-terminus of a protein.", false}, {MS_Microsoft_Excel, "MS:1002059", "Microsoft Excel", "Microsoft Excel (can be used for spectral counting).", false}, {MS_database_UniProtKB_TrEMBL, "MS:1002060", "database UniProtKB/TrEMBL", "The name of the UniProtKB/TrEMBL database.", false}, {MS_decoy_DB_from_UniProtKB_TrEMBL_OBSOLETE, "MS:1002061", "decoy DB from UniProtKB/TrEMBL", "Decoy database from a TrEMBL protein sequence database.", true}, {MS_metabolic_labelling__natural_N__mainly_14N_, "MS:1002062", "metabolic labelling: natural N (mainly 14N)", "Metabolic labelling: natural N (mainly 14N).", false}, {MS_FindPairs, "MS:1002063", "FindPairs", "Software e.g. for SILAC and 14N/15N workflow, part of the PeakQuant suite.", false}, {MS_peptide_consensus_RT, "MS:1002064", "peptide consensus RT", "Peptide consensus retention time.", false}, {MS_peptide_consensus_m_z, "MS:1002065", "peptide consensus m/z", "Peptide consensus mass/charge ratio.", false}, {MS_ratio_calculation_method, "MS:1002066", "ratio calculation method", "Method used to calculate the ratio.", false}, {MS_protein_value__median_of_peptide_ratios, "MS:1002067", "protein value: median of peptide ratios", "Protein quantification value calculated as median of peptide ratios.", false}, {MS_metabolic_labelling__heavy_N__mainly_15N_, "MS:1002068", "metabolic labelling: heavy N (mainly 15N)", "Metabolic labelling: heavy N (mainly 15N).", false}, {MS_metabolic_labelling_purity, "MS:1002069", "metabolic labelling purity", "Metabolic labelling: Description of labelling purity. Usually the purity of feeding material (e.g. 95%), or the inclusion rate derived from isotopic peak pattern shape.", false}, {MS_t_test, "MS:1002070", "t-test", "Perform a t-test (two groups). Specify in string value, whether paired / unpaired, variance equal / different, one- / two-sided version is performed.", false}, {MS_ANOVA_test, "MS:1002071", "ANOVA-test", "Perform an ANOVA-test (more than two groups). Specify in string value, which version is performed.", false}, {MS_p_value, "MS:1002072", "p-value", "P-value as result of one of the processing steps described. Specify in the description, which processing step it was.", false}, {MS_mzIdentML_format, "MS:1002073", "mzIdentML format", "The mzIdentML format for peptide and protein identification data from the PSI. File extension '.mzid'.", false}, {MS_quantification_file_format, "MS:1002074", "quantification file format", "File format containing quantification results.", false}, {MS_mzQuantML_format, "MS:1002075", "mzQuantML format", "The mzQuantML format for quantification data from the PSI. File extension '.mzq'.", false}, {MS_PAnalyzer, "MS:1002076", "PAnalyzer", "PAnalyzer software for getting protein evidence categories.", false}, {MS_impact, "MS:1002077", "impact", "Bruker Daltonics' impact: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray.", false}, {MS_ProteomeDiscoverer_1__Static_Modification_OBSOLETE, "MS:1002078", "ProteomeDiscoverer:1. Static Modification", "ProteomeDiscoverer's 1st static post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_2__Static_Modification_OBSOLETE, "MS:1002079", "ProteomeDiscoverer:2. Static Modification", "ProteomeDiscoverer's 2nd static post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_Before, "MS:1002080", "ProteomeDiscoverer:Spectrum Selector:Precursor Clipping Range Before", "Precursor clipping range before.", false}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_After, "MS:1002081", "ProteomeDiscoverer:Spectrum Selector:Precursor Clipping Range After", "Precursor clipping range after.", false}, {MS_first_column_elution_time, "MS:1002082", "first column elution time", "The time of elution from the first chromatographic column in the chromatographic separation step, relative to the start of chromatography on the first column.", false}, {MS_second_column_elution_time, "MS:1002083", "second column elution time", "The time of elution from the second chromatographic column in the chromatographic separation step, relative to the start of the chromatography on the second column.", false}, {MS_multidimensional_chromatography_modulation_description, "MS:1002084", "multidimensional chromatography modulation description", "Multidimensional chromatography modulation description.", false}, {MS_two_dimensional_gas_chromatography_with_fixed_modulation_time, "MS:1002085", "two-dimensional gas chromatography with fixed modulation time", "Two-dimensional gas chromatography where a single modulation time is used throughout the acquisition.", false}, {MS_two_dimensional_gas_chromatography_with_discrete_modulation_time_steps, "MS:1002086", "two-dimensional gas chromatography with discrete modulation time steps", "Two-dimensional gas chromatography where the acquisition is divided into steps, each with a different modulation time.", false}, {MS_two_dimensional_liquid_chromatography_with_fixed_modulation_time, "MS:1002087", "two-dimensional liquid chromatography with fixed modulation time", "Two-dimensional liquid chromatography where a single modulation time is used throughout the acquisition.", false}, {MS_two_dimensional_liquid_chromatography_with_discrete_modulation_time_steps, "MS:1002088", "two-dimensional liquid chromatography with discrete modulation time steps", "Two-dimensional liquid chromatography where the acquisition is divided into steps, each with a different modulation time.", false}, {MS_ProteomeDiscoverer_Peptide_Without_Protein_XCorr_Threshold, "MS:1002089", "ProteomeDiscoverer:Peptide Without Protein XCorr Threshold", "XCorr threshold for storing peptides that do not belong to a protein.", false}, {MS_Calculate_Probability_Scores, "MS:1002090", "Calculate Probability Scores", "Flag indicating that a probability score for the assessment that a reported peptide match is a random occurrence is calculated.", false}, {MS_ProteomeDiscoverer_Maximum_Delta_Cn, "MS:1002091", "ProteomeDiscoverer:Maximum Delta Cn", "Delta Cn threshold for filtering out PSM's.", false}, {MS_Percolator_Validation_based_on, "MS:1002092", "Percolator:Validation based on", "Algorithm (e.g. q-value or PEP) used for calculation of the validation score using Percolator.", false}, {MS_search_engine_input_parameter, "MS:1002093", "search engine input parameter", "Search engine input parameter.", false}, {MS_common_search_engine_input_parameter, "MS:1002094", "common search engine input parameter", "Search engine input parameter that is shared by more than one search engine.", false}, {MS_Mascot_input_parameter, "MS:1002095", "Mascot input parameter", "Search engine input parameters specific to Mascot.", false}, {MS_SEQUEST_input_parameter, "MS:1002096", "SEQUEST input parameter", "Search engine input parameters specific to SEQUEST.", false}, {MS_Phenyx_input_parameter, "MS:1002097", "Phenyx input parameter", "Search engine input parameters specific to Phenyx.", false}, {MS_ProteinExtractor_input_parameter, "MS:1002098", "ProteinExtractor input parameter", "Search engine input parameters specific to ProteinExtractor.", false}, {MS_OMSSA_input_parameter, "MS:1002099", "OMSSA input parameter", "Search engine input parameters specific to OMSSA.", false}, {MS_ProteinScape_input_parameter, "MS:1002100", "ProteinScape input parameter", "Search engine input parameters specific to ProteinScape.", false}, {MS_ProteomeDiscoverer_input_parameter, "MS:1002101", "ProteomeDiscoverer input parameter", "Search engine input parameters specific to ProteomeDiscoverer.", false}, {MS_software_input_parameter, "MS:1002103", "software input parameter", "Software input parameters.", false}, {MS_common_software_input_parameter, "MS:1002104", "common software input parameter", "Software input parameter that is shared by more than one software.", false}, {MS_software_specific_input_parameter, "MS:1002105", "software specific input parameter", "Software specific input parameter.", false}, {MS_Scaffold_input_parameter, "MS:1002106", "Scaffold input parameter", "Search engine input parameters specific to Scaffold.", false}, {MS_Percolator_input_parameter, "MS:1002107", "Percolator input parameter", "Search engine input parameters specific to Percolator.", false}, {MS_higher_score_better, "MS:1002108", "higher score better", "Indicates that a higher score is better.", false}, {MS_lower_score_better, "MS:1002109", "lower score better", "Indicates that a lower score is better.", false}, {MS_assay_attribute, "MS:1002110", "assay attribute", "Attribute describing an assay.", false}, {MS_assay_label_attribute, "MS:1002111", "assay label attribute", "Attribute describing an assay label.", false}, {MS_protein_group_list_attribute, "MS:1002112", "protein group list attribute", "Attribute describing a protein group list.", false}, {MS_protein_group_attribute, "MS:1002113", "protein group attribute", "Attribute describing a protein group.", false}, {MS_protein_list_attribute, "MS:1002114", "protein list attribute", "Attribute describing a protein list.", false}, {MS_peptide_consensus_list_attribute, "MS:1002115", "peptide consensus list attribute", "Attribute describing a peptide consensus list.", false}, {MS_peptide_consensus_attribute, "MS:1002116", "peptide consensus attribute", "Attribute describing a peptide consensus.", false}, {MS_small_molecule_list_attribute, "MS:1002117", "small molecule list attribute", "Attribute describing a small molecule list.", false}, {MS_small_molecule_attribute, "MS:1002118", "small molecule attribute", "Attribute describing a small molecule.", false}, {MS_small_molecule_modification_attribute, "MS:1002119", "small molecule modification attribute", "Attribute describing a small molecule modification.", false}, {MS_experiment_name, "MS:1002120", "experiment name", "The name for identifying an experiment.", false}, {MS_spectral_count_feature, "MS:1002121", "spectral count feature", "Dummy decribing a spectral count feature.", false}, {MS_counts_reporting, "MS:1002122", "counts reporting", "FeatureList of spectral counts.", false}, {MS_x_Tracker, "MS:1002123", "x-Tracker", "X-Tracker generic tool for quantitative proteomics.", false}, {MS_ProteoSuite, "MS:1002124", "ProteoSuite", "ProteoSuite software for the analysis of quantitative proteomics data.", false}, {MS_combined_FDRScore_OBSOLETE, "MS:1002125", "combined FDRScore", "FDRScore values specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools.", true}, {MS_database_UniProtKB, "MS:1002126", "database UniProtKB", "The name of the UniProtKB knowledgebase.", false}, {MS_identification_file_attribute, "MS:1002127", "identification file attribute", "Attribute describing an identification file.", false}, {MS_method_file_format, "MS:1002128", "method file format", "Attribute describing a method file format.", false}, {MS_ITRAQAnalyzer, "MS:1002129", "ITRAQAnalyzer", "Software for iTRAQ workflow. Extracts and normalizes iTRAQ information from an MS experiment.", false}, {MS_identification_file_format, "MS:1002130", "identification file format", "Attribute describing an identification file format.", false}, {MS_TOPP_noise_filter, "MS:1002131", "TOPP noise filter", "Noise filter component of the TOPP software.", false}, {MS_TOPP_NoiseFilterGaussian, "MS:1002132", "TOPP NoiseFilterGaussian", "Removes noise from profile spectra by using a gaussian smoothing.", false}, {MS_TOPP_NoiseFilterSGolay, "MS:1002133", "TOPP NoiseFilterSGolay", "Removes noise from profile spectra by using a Savitzky-Golay smoothing.", false}, {MS_TOPP_peak_picker, "MS:1002134", "TOPP peak picker", "Peak picker component of the TOPP software.", false}, {MS_TOPP_PeakPickerHiRes, "MS:1002135", "TOPP PeakPickerHiRes", "Finds mass spectrometric peaks in high-resoluted profile mass spectra.", false}, {MS_TOPP_PeakPickerWavelet, "MS:1002136", "TOPP PeakPickerWavelet", "Finds mass spectrometric peaks with a wavelet algorithm in low-resoluted profile mass spectra.", false}, {MS_TOPP_spectra_filter, "MS:1002137", "TOPP spectra filter", "Spectra filter component of the TOPP software.", false}, {MS_TOPP_SpectraFilterBernNorm, "MS:1002138", "TOPP SpectraFilterBernNorm", "Applies a Bern et al normalization to peak spectra.", false}, {MS_TOPP_SpectraFilterMarkerMower, "MS:1002139", "TOPP SpectraFilterMarkerMower", "Applies a filter to peak spectra for marked peaks.", false}, {MS_TOPP_SpectraFilterNLargest, "MS:1002140", "TOPP SpectraFilterNLargest", "Retains the n largest peaks of a peak spectra.", false}, {MS_TOPP_SpectraFilterNormalizer, "MS:1002141", "TOPP SpectraFilterNormalizer", "Applies a TIC/maximal intensity normalization to peak spectra.", false}, {MS_TOPP_SpectraFilterParentPeakMower, "MS:1002142", "TOPP SpectraFilterParentPeakMower", "Filters putative unfragmented precursor ions from tandem spectra.", false}, {MS_TOPP_SpectraFilterScaler, "MS:1002143", "TOPP SpectraFilterScaler", "Applies a filter to peak spectra after intensity scaling according to rank.", false}, {MS_TOPP_SpectraFilterSqrtMower, "MS:1002144", "TOPP SpectraFilterSqrtMower", "Applies a filter to peak spectra after intensity scaling to the square root.", false}, {MS_TOPP_SpectraFilterThresholdMower, "MS:1002145", "TOPP SpectraFilterThresholdMower", "Applies a filter of peaks below a given threshold to peak spectra.", false}, {MS_TOPP_SpectraFilterWindowMower, "MS:1002146", "TOPP SpectraFilterWindowMower", "Applies a filter of the largest peaks in a sliding window over a peak spectrum.", false}, {MS_TOPP_map_aligner, "MS:1002147", "TOPP map aligner", "Map aligner component of the TOPP software.", false}, {MS_TOPP_MapAlignerIdentification, "MS:1002148", "TOPP MapAlignerIdentification", "Corrects retention time distortions between maps based on common peptide identifications.", false}, {MS_TOPP_MapAlignerPoseClustering, "MS:1002149", "TOPP MapAlignerPoseClustering", "Corrects retention time distortions between maps using a pose clustering approach.", false}, {MS_TOPP_MapAlignerSpectrum, "MS:1002150", "TOPP MapAlignerSpectrum", "Corrects retention time distortions between maps by spectrum alignment.", false}, {MS_numerator_data_type_attribute, "MS:1002151", "numerator data type attribute", "Attribute describing the data type of the numerator of a ratio.", false}, {MS_denominator_data_type_attribute, "MS:1002152", "denominator data type attribute", "Attribute describing the data type of the denominator of a ratio.", false}, {MS_protein_level_PSM_counts, "MS:1002153", "protein level PSM counts", "The number of spectra identified for this protein in spectral counting.", false}, {MS_TOPP_DTAExtractor, "MS:1002154", "TOPP DTAExtractor", "Extracts spectra of an MS run file to several files in DTA format.", false}, {MS_TOPP_IDMerger, "MS:1002155", "TOPP IDMerger", "Merges several protein/peptide identification files into one file.", false}, {MS_TOPP_IDFileConverter, "MS:1002156", "TOPP IDFileConverter", "Converts identification engine file formats.", false}, {MS_TOPP_SpectraMerger, "MS:1002157", "TOPP SpectraMerger", "Merges spectra from an LC/MS map, either by precursor or by RT blocks.", false}, {MS_TOPP_MzTabExporter, "MS:1002158", "TOPP MzTabExporter", "Exports various XML formats to an mzTab file.", false}, {MS_TOPP_MassTraceExtractor, "MS:1002159", "TOPP MassTraceExtractor", "Annotates mass traces in centroided LC/MS maps.", false}, {MS_TOPP_PrecursorMassCorrector, "MS:1002160", "TOPP PrecursorMassCorrector", "Correct the precursor entries of tandem MS scans.", false}, {MS_TOPP_HighResPrecursorMassCorrector, "MS:1002161", "TOPP HighResPrecursorMassCorrector", "Performs precursor mz correction on centroided high resolution data.", false}, {MS_TOPP_AdditiveSeries, "MS:1002162", "TOPP AdditiveSeries", "Computes an additive series to quantify a peptide in a set of samples.", false}, {MS_TOPP_Decharger, "MS:1002163", "TOPP Decharger", "Decharges and merges different feature charge variants of the same chemical entity.", false}, {MS_TOPP_EICExtractor, "MS:1002164", "TOPP EICExtractor", "Quantifies signals at given positions in (raw or picked) LC/MS maps.", false}, {MS_TOPP_feature_finder, "MS:1002165", "TOPP feature finder", "Feature finder component of the TOPP software.", false}, {MS_TOPP_FeatureFinderCentroided, "MS:1002166", "TOPP FeatureFinderCentroided", "Detects two-dimensional features in centroided LC-MS data.", false}, {MS_TOPP_FeatureFinderRaw, "MS:1002167", "TOPP FeatureFinderRaw", "Detects two-dimensional features in uncentroided LC-MS data.", false}, {MS_TOPP_FeatureFinderIsotopeWavelet, "MS:1002168", "TOPP FeatureFinderIsotopeWavelet", "Detects two-dimensional features in uncentroided LC-MS data with a wavelet algorithm.", false}, {MS_TOPP_FeatureFinderMetabo, "MS:1002169", "TOPP FeatureFinderMetabo", "Detects two-dimensional features in centroided LC-MS data of metabolites.", false}, {MS_TOPP_FeatureFinderMRM, "MS:1002170", "TOPP FeatureFinderMRM", "Quantifies features LC-MS/MS MRM data.", false}, {MS_TOPP_ProteinQuantifier, "MS:1002171", "TOPP ProteinQuantifier", "Computes protein abundances from annotated feature/consensus maps.", false}, {MS_TOPP_ConsensusMapNormalizer, "MS:1002172", "TOPP ConsensusMapNormalizer", "Normalizes maps of one consensus XML file (after linking).", false}, {MS_TOPP_MapRTTransformer, "MS:1002173", "TOPP MapRTTransformer", "Applies retention time transformations to maps.", false}, {MS_TOPP_feature_linker, "MS:1002174", "TOPP feature linker", "Feature linker component of the TOPP software.", false}, {MS_TOPP_FeatureLinkerLabeled, "MS:1002175", "TOPP FeatureLinkerLabeled", "Groups corresponding isotope-labeled features in a feature map.", false}, {MS_TOPP_FeatureLinkerUnlabeled, "MS:1002176", "TOPP FeatureLinkerUnlabeled", "Groups corresponding features from multiple maps.", false}, {MS_TOPP_FeatureLinkerUnlabeledQT, "MS:1002177", "TOPP FeatureLinkerUnlabeledQT", "Groups corresponding features from multiple maps using a quality threshold clustering approach.", false}, {MS_TOPP_CompNovo, "MS:1002178", "TOPP CompNovo", "Performs a peptide/protein identification with the CompNovo engine.", false}, {MS_TOPP_CompNovoCID, "MS:1002179", "TOPP CompNovoCID", "Performs a peptide/protein identification with the CompNovo engine in collision-induced dissociation (CID) mode.", false}, {MS_TOPP_software_adaptor, "MS:1002180", "TOPP software adaptor", "Software adaptor to an external program in the TOPP software.", false}, {MS_TOPP_InspectAdapter, "MS:1002181", "TOPP InspectAdapter", "Identifies MS2 spectra using the external program Inspect.", false}, {MS_TOPP_MascotAdapter, "MS:1002182", "TOPP MascotAdapter", "Identifies MS2 spectra using the external program Mascot.", false}, {MS_TOPP_MascotAdapterOnline, "MS:1002183", "TOPP MascotAdapterOnline", "Identifies MS2 spectra using the online version of the external program Mascot.", false}, {MS_TOPP_OMSSAAdapter, "MS:1002184", "TOPP OMSSAAdapter", "Identifies MS2 spectra using the external program OMSSA.", false}, {MS_TOPP_PepNovoAdapter, "MS:1002185", "TOPP PepNovoAdapter", "Identifies MS2 spectra using the external program PepNovo.", false}, {MS_TOPP_XTandemAdapter, "MS:1002186", "TOPP XTandemAdapter", "Identifies MS2 spectra using the external program XTandem.", false}, {MS_TOPP_SpecLibSearcher, "MS:1002187", "TOPP SpecLibSearcher", "Identifies peptide MS2 spectra by spectral matching with a searchable spectral library.", false}, {MS_TOPP_ConsensusID, "MS:1002188", "TOPP ConsensusID", "Computes a consensus identification from peptide identifications of several identification engines.", false}, {MS_TOPP_IDConflictResolver, "MS:1002189", "TOPP IDConflictResolver", "Resolves ambiguous annotations of features with peptide identifications.", false}, {MS_TOPP_IDFilter, "MS:1002190", "TOPP IDFilter", "Filters results from protein or peptide identification engines based on different criteria.", false}, {MS_TOPP_IDMapper, "MS:1002191", "TOPP IDMapper", "Assigns protein/peptide identifications to feature or consensus features.", false}, {MS_TOPP_IDPosteriorErrorProbability, "MS:1002192", "TOPP IDPosteriorErrorProbability", "Estimates posterior error probabilities using a mixture model.", false}, {MS_TOPP_IDRTCalibration, "MS:1002193", "TOPP IDRTCalibration", "Calibrate Retention times of peptide hits to standards.", false}, {MS_TOPP_PeptideIndexer, "MS:1002194", "TOPP PeptideIndexer", "Refreshes the protein references for all peptide hits.", false}, {MS_TOPP_PrecursorIonSelector, "MS:1002195", "TOPP PrecursorIonSelector", "A tool for precursor ion selection based on identification results.", false}, {MS_TOPP_MRMMapper, "MS:1002196", "TOPP MRMMapper", "MRMMapper maps measured chromatograms (mzML) and the transitions used (TraML).", false}, {MS_TOPP_OpenSwath_component, "MS:1002197", "TOPP OpenSwath component", "OpenSwath component of the TOPP software.", false}, {MS_TOPP_OpenSwathAnalyzer, "MS:1002198", "TOPP OpenSwathAnalyzer", "Picks peaks and finds features in an SRM experiment.", false}, {MS_TOPP_OpenSwathChromatogramExtractor, "MS:1002199", "TOPP OpenSwathChromatogramExtractor", "Extract chromatograms (XIC) from a MS2 map file.", false}, {MS_TOPP_OpenSwathDecoyGenerator, "MS:1002200", "TOPP OpenSwathDecoyGenerator", "Generates decoys according to different models for a specific TraML.", false}, {MS_TOPP_OpenSwathFeatureXMLToTSV, "MS:1002201", "TOPP OpenSwathFeatureXMLToTSV", "Converts a featureXML to a mProphet tsv (tab separated values).", false}, {MS_TOPP_OpenSwathRTNormalizer, "MS:1002202", "TOPP OpenSwathRTNormalizer", "Generates a transformation file for retention time space into normalized space.", false}, {MS_TOPP_ProteinInference, "MS:1002203", "TOPP ProteinInference", "Infer proteins from a list of (high-confidence) peptides.", false}, {MS_TOPP_FalseDiscoveryRate, "MS:1002204", "TOPP FalseDiscoveryRate", "Estimates the false discovery rate on peptide and protein level using decoy searches.", false}, {MS_ProteoWizard_msconvert, "MS:1002205", "ProteoWizard msconvert", "Converts, filters, and processes mass spectrometry data in variety of formats.", false}, {MS_ProteoWizard_idconvert, "MS:1002206", "ProteoWizard idconvert", "Converts, filters, and processes identifications from shotgun proteomics experiments.", false}, {MS_ProteoWizard_chainsaw, "MS:1002207", "ProteoWizard chainsaw", "Filters and processes protein sequence databases.", false}, {MS_ProteoWizard_msaccess, "MS:1002208", "ProteoWizard msaccess", "Filters, processes, and displays mass spectrometry data in a variety of ways.", false}, {MS_ProteoWizard_SeeMS, "MS:1002209", "ProteoWizard SeeMS", "An interactive GUI application to view and filter mass spectrometry data in a variety of formats.", false}, {MS_IsobariQ, "MS:1002210", "IsobariQ", "A quantitative software package designed for analysis of IPTL, TMT and iTRAQ data.", false}, {MS_Variance_stabilizing_normalization, "MS:1002211", "Variance stabilizing normalization", "The model incorporates data calibration (normalization), a model for the dependence of the variance on the mean intensity, and a variance stabilizing data transformation.", false}, {MS_IPTL_quantitation_analysis, "MS:1002212", "IPTL quantitation analysis", "Quantification analysis using a labelling strategy where both peptide termini are labelled so that the peptides from different labelling schema are isobaric.", false}, {MS_PAnalyzer_conclusive_protein, "MS:1002213", "PAnalyzer:conclusive protein", "A protein identified by at least one unique (distinct, discrete) peptide (peptides are considered different only if they can be distinguished by evidence in mass spectrum).", false}, {MS_PAnalyzer_indistinguishable_protein, "MS:1002214", "PAnalyzer:indistinguishable protein", "A member of a group of proteins sharing all peptides that are exclusive to the group (peptides are considered different only if they can be distinguished by evidence in mass spectrum).", false}, {MS_PAnalyzer_non_conclusive_protein, "MS:1002215", "PAnalyzer:non-conclusive protein", "A protein sharing all its matched peptides with either conclusive or indistinguishable proteins (peptides are considered different only if they can be distinguished by evidence in mass spectrum).", false}, {MS_PAnalyzer_ambiguous_group_member, "MS:1002216", "PAnalyzer:ambiguous group member", "A protein sharing at least one peptide not matched to either conclusive or indistinguishable proteins (peptides are considered different only if they can be distinguished by evidence in mass spectrum).", false}, {MS_decoy_peptide, "MS:1002217", "decoy peptide", "A putative identified peptide issued from a decoy sequence database.", false}, {MS_percent_collision_energy_ramp_start, "MS:1002218", "percent collision energy ramp start", "Collision energy at the start of the collision energy ramp in percent, normalized to the mass of the ion.", false}, {MS_percent_collision_energy_ramp_end, "MS:1002219", "percent collision energy ramp end", "Collision energy at the end of the collision energy ramp in percent, normalized to the mass of the ion.", false}, {MS_MRMaid, "MS:1002220", "MRMaid", "A web-based SRM assay design tool whose transitions are generated by mining the millions of identified peptide spectra held in the EBI's PRIDE database.", false}, {MS_MRMaid_peptide_score, "MS:1002221", "MRMaid:peptide score", "Score in MRMaid to indicate the expected performance of the peptide in SRM.", false}, {MS_SRM_transition_attribute, "MS:1002222", "SRM transition attribute", "Attribute associated with a SRM transition.", false}, {MS_precursor_ion_detection_probability, "MS:1002223", "precursor ion detection probability", "Probability of detecting precursor when parent protein is present.", false}, {MS_product_ion_detection_probability, "MS:1002224", "product ion detection probability", "Probability of detecting product ion when precursor ion is present.", false}, {MS_average_product_ion_intensity, "MS:1002225", "average product ion intensity", "Average value of product ion intensity in a collection of identified spectra.", false}, {MS_product_ion_intensity_standard_deviation, "MS:1002226", "product ion intensity standard deviation", "Standard deviation of product ion intensity in a collection of identified spectra.", false}, {MS_number_of_product_ion_observations, "MS:1002227", "number of product ion observations", "The number of times the specific product ion has been observed in a series of SRM experiments.", false}, {MS_number_of_precursor_ion_observations, "MS:1002228", "number of precursor ion observations", "The number of times the specific precursor ion has been observed in a series of SRM experiments.", false}, {MS_ProteomeDiscoverer_Mascot_Significance_Middle, "MS:1002229", "ProteomeDiscoverer:Mascot:Significance Middle", "Calculated relaxed significance when performing a decoy search for high-confidence peptides.", false}, {MS_ProteomeDiscoverer_Mascot_Significance_High, "MS:1002230", "ProteomeDiscoverer:Mascot:Significance High", "Calculated relaxed significance when performing a decoy search for medium-confidence peptides.", false}, {MS_regular_expressions_for_a_GUID, "MS:1002231", "regular expressions for a GUID", "([A-Fa-f0-9]\\{8\\}-([A-Fa-f0-9]\\{4\\}-)\\{3\\}[A-Fa-f0-9]\\{12\\}).", false}, {MS_ProteomeDiscoverer_Default_FDR_calculator, "MS:1002232", "ProteomeDiscoverer:Default FDR calculator", "The default FDR calculator as globally unique identifier (GUID).", false}, {MS_ProteomeDiscoverer_SEQUEST_Low_resolution_spectra_contained, "MS:1002233", "ProteomeDiscoverer:SEQUEST:Low resolution spectra contained", "Flag indicating if low-resolution spectra are taken into consideration.", false}, {MS_selected_precursor_m_z, "MS:1002234", "selected precursor m/z", "Mass-to-charge ratio of a precursor ion selected for fragmentation.", false}, {MS_ProteoGrouper_PDH_score, "MS:1002235", "ProteoGrouper:PDH score", "A score assigned to a single protein accession (modelled as ProteinDetectionHypothesis in mzIdentML), based on summed peptide level scores.", false}, {MS_ProteoGrouper_PAG_score, "MS:1002236", "ProteoGrouper:PAG score", "A score assigned to a protein group (modelled as ProteinAmbiguityGroup in mzIdentML), based on all summed peptide level scores that have been assigned to the group as unique or razor peptides.", false}, {MS_mzidLib, "MS:1002237", "mzidLib", "A library of Java routines for manipulating mzIdentML files.", false}, {MS_mzidLib_Omssa2Mzid, "MS:1002238", "mzidLib:Omssa2Mzid", "A converter for OMSSA OMX to mzIdentML.", false}, {MS_mzidLib_Tandem2Mzid, "MS:1002239", "mzidLib:Tandem2Mzid", "A converter for Tandem XML to mzIdentML.", false}, {MS_mzidLib_Csv2Mzid, "MS:1002240", "mzidLib:Csv2Mzid", "A converter for CSV files (following OMSSA CSV style) to mzIdentML.", false}, {MS_mzidLib_ProteoGrouper, "MS:1002241", "mzidLib:ProteoGrouper", "A generic and parameterizable protein inference algorithm for mzIdentML files.", false}, {MS_mzidLib_Thresholder, "MS:1002242", "mzidLib:Thresholder", "A routine for keeping only identifications passing a given threshold or setting passThreshold to true or false for SpectrumIdentificationItem or ProteinDetectionHypothesis in mzIdentML files.", false}, {MS_mzidLib_Perform_emPAI_on_mzid, "MS:1002243", "mzidLib:Perform emPAI on mzid", "A routine for adding emPAI quantitative values to an mzIdentML file.", false}, {MS_mzidLib_FalseDiscoveryRate, "MS:1002244", "mzidLib:FalseDiscoveryRate", "A routine for calculating local FDR, q-value and FDRScore for mzIdentML files, based on a decoy search.", false}, {MS_mzidLib_Mzidentml2Csv, "MS:1002245", "mzidLib:Mzidentml2Csv", "A tool for converting mzIdentML files to CSV format.", false}, {MS_mzidLib_CombineSearchEngines, "MS:1002246", "mzidLib:CombineSearchEngines", "A tool for combining results analysed in parallel in two or three search engines into a single mzIdentML file.", false}, {MS_mzidLib_InsertMetaDataFromFasta, "MS:1002247", "mzidLib:InsertMetaDataFromFasta", "A tool for adding additional meta data from a FASTA file to DBSequence entries (sequence and description) in mzIdentML files.", false}, {MS_SEQUEST_spscore, "MS:1002248", "SEQUEST:spscore", "The SEQUEST result 'SpScore'.", false}, {MS_SEQUEST_sprank, "MS:1002249", "SEQUEST:sprank", "The SEQUEST result 'SpRank'.", false}, {MS_SEQUEST_deltacnstar, "MS:1002250", "SEQUEST:deltacnstar", "The SEQUEST result 'DeltaCnStar'.", false}, {MS_Comet, "MS:1002251", "Comet", "Comet open-source sequence search engine developed at the University of Washington.", false}, {MS_Comet_xcorr, "MS:1002252", "Comet:xcorr", "The Comet result 'XCorr'.", false}, {MS_Comet_deltacn, "MS:1002253", "Comet:deltacn", "The Comet result 'DeltaCn'.", false}, {MS_Comet_deltacnstar, "MS:1002254", "Comet:deltacnstar", "The Comet result 'DeltaCnStar'.", false}, {MS_Comet_spscore, "MS:1002255", "Comet:spscore", "The Comet result 'SpScore'.", false}, {MS_Comet_sprank, "MS:1002256", "Comet:sprank", "The Comet result 'SpRank'.", false}, {MS_Comet_expectation_value, "MS:1002257", "Comet:expectation value", "The Comet result 'Expectation value'.", false}, {MS_Comet_matched_ions, "MS:1002258", "Comet:matched ions", "The Comet result 'Matched Ions'.", false}, {MS_Comet_total_ions, "MS:1002259", "Comet:total ions", "The Comet result 'Total Ions'.", false}, {MS_PSM_FDR_threshold, "MS:1002260", "PSM:FDR threshold", "False-discovery rate threshold for peptide-spectrum matches.", false}, {MS_Byonic, "MS:1002261", "Byonic", "Byonic search engine from Protein Metrics.", false}, {MS_Byonic_Score, "MS:1002262", "Byonic:Score", "The Byonic score is the primary indicator of PSM correctness. The Byonic score reflects the absolute quality of the peptide-spectrum match, not the relative quality compared to other candidate peptides. Byonic scores range from 0 to about 1000, with 300 a good score, 400 a very good score, and PSMs with scores over 500 almost sure to be correct.", false}, {MS_Byonic_Delta_Score, "MS:1002263", "Byonic:Delta Score", "The drop in Byonic score from the top-scoring peptide to the next peptide with distinct sequence. In this computation, the same peptide with different modifications is not considered distinct.", false}, {MS_Byonic_DeltaMod_Score, "MS:1002264", "Byonic:DeltaMod Score", "The drop in Byonic score from the top-scoring peptide to the next peptide different in any way, including placement of modifications. DeltaMod gives an indication of whether modifications are confidently localized; DeltaMod over 10.0 means that there is high likelihood that all modification placements are correct.", false}, {MS_Byonic_PEP, "MS:1002265", "Byonic:PEP", "Byonic posterior error probability.", false}, {MS_Byonic_Peptide_LogProb, "MS:1002266", "Byonic:Peptide LogProb", "The log p-value of the PSM. This is the log of the probability that the PSM with such a score and delta would arise by chance in a search of this size (the size of the protein database, as expanded by the modification rules). A log p-value of -3.0 should happen by chance on only one of a thousand spectra. Caveat: it is very hard to compute a p-value that works for all searches and all spectra, so read Byonic p-values with a certain amount of skepticism.", false}, {MS_Byonic_Protein_LogProb, "MS:1002267", "Byonic:Protein LogProb", "The log p-value of the protein.", false}, {MS_Byonic_Best_LogProb, "MS:1002268", "Byonic:Best LogProb", "Best (most negative) log p-value of an individual PSM.", false}, {MS_Byonic_Best_Score, "MS:1002269", "Byonic:Best Score", "Best (largest) Byonic score of a PSM.", false}, {MS_chromatography_separation, "MS:1002270", "chromatography separation", "A technique by which molecules are separated by chemical and physical properties such as hydrophobicity or vapour pressure.", false}, {MS_liquid_chromatography_separation, "MS:1002271", "liquid chromatography separation", "Liquid chromatography (LC) is a separation technique in which the mobile phase is a liquid.", false}, {MS_gas_chromatography_separation, "MS:1002272", "gas chromatography separation", "Gas chromatography (GC) is a separation technique in which the mobile phase is a gas.", false}, {MS_detector_potential, "MS:1002273", "detector potential", "Detector potential difference in volts.", false}, {MS_SQ_Detector_2, "MS:1002274", "SQ Detector 2", "Waters quadrupole based SQ Detector 2.", false}, {MS_Xevo_G2_S_Tof, "MS:1002275", "Xevo G2-S Tof", "Waters oa-ToF based Xevo G2-S Tof.", false}, {MS_Xevo_G2_S_QTof, "MS:1002276", "Xevo G2-S QTof", "Waters oa-ToF based Xevo G2-S QTof.", false}, {MS_AutoSpec_Premier, "MS:1002277", "AutoSpec Premier", "Waters AutoSpec Premier magnetic sector instrument.", false}, {MS_Pegasus_III, "MS:1002278", "Pegasus III", "LECO nominal mass resolution time-of-flight GC mass spectrometer.", false}, {MS_maXis_4G, "MS:1002279", "maXis 4G", "Bruker Daltonics' maXis 4G: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray.", false}, {MS_compact, "MS:1002280", "compact", "Bruker Daltonics' compact: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray.", false}, {MS_SRM_feature_level_quantitation, "MS:1002281", "SRM feature level quantitation", "Selected Reaction Monitoring feature level quantitation.", false}, {MS_SRM_peptide_level_quantitation, "MS:1002282", "SRM peptide level quantitation", "Selected Reaction Monitoring peptide level quantitation.", false}, {MS_SRM_protein_level_quantitation, "MS:1002283", "SRM protein level quantitation", "Selected Reaction Monitoring protein level quantitation.", false}, {MS_SRM_proteingroup_level_quantitation, "MS:1002284", "SRM proteingroup level quantitation", "Selected Reaction Monitoring proteingroup level quantitation.", false}, {MS_Trans_Proteomic_Pipeline, "MS:1002285", "Trans-Proteomic Pipeline", "A suite of open source tools for the processing of MS2 proteomics data developed by the Seattle Proteome Center at the Institute for Systems Biology.", false}, {MS_Trans_Proteomic_Pipeline_software, "MS:1002286", "Trans-Proteomic Pipeline software", "A software program that is a component of the Trans-Proteomic Pipeline.", false}, {MS_PeptideProphet, "MS:1002287", "PeptideProphet", "A program in the TPP that calculates PSM probabilities for MS2 proteomics data searched with any of the supported sequence or spectral library search engines via the pepXML format.", false}, {MS_iProphet, "MS:1002288", "iProphet", "A program in the TPP that calculates distinct peptide probabilities based on several lines of corroborating evidence including search results from multiple search engines via the pepXML format.", false}, {MS_ProteinProphet, "MS:1002289", "ProteinProphet", "A program in the TPP that calculates protein-level probabilities based on input PSM or peptide-level probabilities from PeptideProphet or iProphet. The output is written in the protXML format.", false}, {MS_XPRESS, "MS:1002290", "XPRESS", "A program in the TPP that calculates PSM-level abundances based on 2-channel isotope-labelled data such as ICAT, SILAC, etc.", false}, {MS_Libra, "MS:1002291", "Libra", "A program in the TPP that calculates PSM, peptide, and protein-level abundances based on N-channel isobaric label peptide data such as iTRAQ, TMT, etc.", false}, {MS_PTMProphet, "MS:1002292", "PTMProphet", "A program in the TPP that calculates PTM localization probabilities by re-analyzing the peaks that are available to distinguish between possible modification sites.", false}, {MS_Bruker_Daltonics_SCION_series, "MS:1002293", "Bruker Daltonics SCION series", "Bruker Daltonics' SCION series.", false}, {MS_Bruker_Daltonics_EVOQ_series, "MS:1002294", "Bruker Daltonics EVOQ series", "Bruker Daltonics' EVOQ series.", false}, {MS_SCION_SQ, "MS:1002295", "SCION SQ", "Bruker Daltonics' SCION SQ: GC-single quadrupole.", false}, {MS_SCION_TQ, "MS:1002296", "SCION TQ", "Bruker Daltonics' SCION TQ: GC-triple quadrupole.", false}, {MS_EVOQ_Elite, "MS:1002297", "EVOQ Elite", "Bruker Daltonics' EVOQ Elite: LC-triple quadrupole.", false}, {MS_EVOQ_Qube, "MS:1002298", "EVOQ Qube", "Bruker Daltonics' EVOQ Qube: LC-triple quadrupole.", false}, {MS_micrOTOF_Q_III, "MS:1002299", "micrOTOF-Q III", "Bruker Daltonics' micrOTOF-Q III: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray.", false}, {MS_amaZon_Speed_ETD, "MS:1002300", "amaZon Speed ETD", "Bruker Daltonics' amaZon Speed ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, ETD, PTR, GC-APCI, CaptiveSpray.", false}, {MS_amaZon_Speed, "MS:1002301", "amaZon Speed", "Bruker Daltonics' amaZon ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray.", false}, {MS_Bruker_Container_format, "MS:1002302", "Bruker Container format", "Bruker Container raw file format.", false}, {MS_Bruker_Container_nativeID_format, "MS:1002303", "Bruker Container nativeID format", "Native identifier (UUID).", false}, {MS_domain_range, "MS:1002304", "domain range", "Domain range of a numerical value.", false}, {MS_value_between_0_and_1_inclusive, "MS:1002305", "value between 0 and 1 inclusive", "Value range for probabilities.", false}, {MS_value_greater_than_zero, "MS:1002306", "value greater than zero", "Positive value range.", false}, {MS_fragmentation_ion_type, "MS:1002307", "fragmentation ion type", "Type of fragment ion based on where the backbone breaks, such as a y ion or a c ion.", false}, {MS_fluorescence_detector, "MS:1002308", "fluorescence detector", "A detector using a fluorescent signal after excitation with light.", false}, {MS_Byonic__Peptide_AbsLogProb, "MS:1002309", "Byonic: Peptide AbsLogProb", "The absolute value of the log-base10 of the Byonic posterior error probability (PEP) of the PSM.", false}, {MS_Byonic__Protein_AbsLogProb, "MS:1002310", "Byonic: Protein AbsLogProb", "The absolute value of the log-base10 of the Byonic posterior error probability (PEP) of the protein.", false}, {MS_Byonic__Peptide_AbsLogProb2D, "MS:1002311", "Byonic: Peptide AbsLogProb2D", "The absolute value of the log-base10 Byonic two-dimensional posterior error probability (PEP) of the PSM. The two-dimensional PEP takes into account protein ranking information as well as PSM information.", false}, {MS_MS_Numpress_linear_prediction_compression, "MS:1002312", "MS-Numpress linear prediction compression", "Compression using MS-Numpress linear prediction compression.", false}, {MS_MS_Numpress_positive_integer_compression, "MS:1002313", "MS-Numpress positive integer compression", "Compression using MS-Numpress positive integer compression.", false}, {MS_MS_Numpress_short_logged_float_compression, "MS:1002314", "MS-Numpress short logged float compression", "Compression using MS-Numpress short logged float compression.", false}, {MS_consensus_result, "MS:1002315", "consensus result", "Indicates a consensus result from several search engine runs.", false}, {MS_ProteomeDiscoverer_Amanda_high_confidence_threshold, "MS:1002316", "ProteomeDiscoverer:Amanda:high confidence threshold", "Strict confidence probability score.", false}, {MS_ProteomeDiscoverer_Amanda_middle_confidence_threshold, "MS:1002317", "ProteomeDiscoverer:Amanda:middle confidence threshold", "Relaxed confidence probability score.", false}, {MS_ProteomeDiscoverer_automatic_workload, "MS:1002318", "ProteomeDiscoverer:automatic workload", "Flag indicating automatic estimation of the workload level.", false}, {MS_Amanda_AmandaScore, "MS:1002319", "Amanda:AmandaScore", "The Amanda score of the scoring function for a PSM.", false}, {MS_ProteomeDiscoverer_max_differential_modifications, "MS:1002320", "ProteomeDiscoverer:max differential modifications", "Maximum dynamic modifications per PSM.", false}, {MS_ProteomeDiscoverer_max_equal_modifications, "MS:1002321", "ProteomeDiscoverer:max equal modifications", "Maximum equal modifications per PSM.", false}, {MS_ProteomeDiscoverer_min_peptide_length, "MS:1002322", "ProteomeDiscoverer:min peptide length", "Minimum peptide length.", false}, {MS_ProteomeDiscoverer_max_peptide_length, "MS:1002323", "ProteomeDiscoverer:max peptide length", "Maximum peptide length.", false}, {MS_ProteomeDiscoverer_max_number_neutral_loss, "MS:1002324", "ProteomeDiscoverer:max number neutral loss", "Maximum number of same neutral losses.", false}, {MS_ProteomeDiscoverer_max_number_neutral_loss_modifications, "MS:1002325", "ProteomeDiscoverer:max number neutral loss modifications", "Max number of same neutral losses of modifications.", false}, {MS_ProteomeDiscoverer_use_flanking_ions, "MS:1002326", "ProteomeDiscoverer:use flanking ions", "Flag for usage of flanking ions.", false}, {MS_ProteomeDiscoverer_max_number_of_same_modifs, "MS:1002327", "ProteomeDiscoverer:max number of same modifs", "The maximum number of possible equal modifications per PSM.", false}, {MS_ProteomeDiscoverer_perform_deisotoping, "MS:1002328", "ProteomeDiscoverer:perform deisotoping", "Defines whether a simple deisotoping shall be performed.", false}, {MS_ProteomeDiscoverer_ion_settings, "MS:1002329", "ProteomeDiscoverer:ion settings", "Specifies the fragment ions and neutral losses that are calculated.", false}, {MS_ProteomeDiscoverer_3__Static_Modification_OBSOLETE, "MS:1002330", "ProteomeDiscoverer:3. Static Modification", "ProteomeDiscoverer's 3rd static post-translational modification (PTM) input parameter.", true}, {MS_ProteomeDiscoverer_5__Dynamic_Modification_OBSOLETE, "MS:1002331", "ProteomeDiscoverer:5. Dynamic Modification", "ProteomeDiscoverer's 5th dynamic post-translational modification (PTM) input parameter.", true}, {MS_lab_head, "MS:1002332", "lab head", "The scientist responsible for personnel, grants, and instrumentation in a functional laboratory group.", false}, {MS_conversion_software, "MS:1002333", "conversion software", "Computer software primarily designed to convert data represented in one format to another format, sometimes with minor data alterations in the process.", false}, {MS_ProCon, "MS:1002334", "ProCon", "Java software designed to convert one of several proteomics identification results formats into mzIdentML or PRIDE XML.", false}, {MS_PRIDE_Converter2, "MS:1002335", "PRIDE Converter2", "Java software designed to convert one of several proteomics identification results formats into PRIDE XML.", false}, {MS_Amanda, "MS:1002336", "Amanda", "Amanda scoring system for PSM identification.", false}, {MS_Andromeda, "MS:1002337", "Andromeda", "Andromeda is a peptide search engine.", false}, {MS_Andromeda_score, "MS:1002338", "Andromeda:score", "The probability based score of the Andromeda search engine.", false}, {MS_site_global_FDR, "MS:1002339", "site:global FDR", "Estimation of global false discovery rate of peptides with a post-translational modification.", false}, {MS_ProteomeXchange_project_tag, "MS:1002340", "ProteomeXchange project tag", "Tag that can be added to a ProteomeXchange dataset, to enable the grouping of datasets. One tag can be used for indicating that a given dataset is part of a bigger project, like e.g. the Human Proteome Project.", false}, {MS_second_pass_peptide_identification, "MS:1002341", "second-pass peptide identification", "A putative identified peptide found in a second-pass search of protein sequences selected from a first-pass search.", false}, {MS_MZmine, "MS:1002342", "MZmine", "A framework for differential analysis of mass spectrometry data.", false}, {MS_ion_stability_type_OBSOLETE, "MS:1002343", "ion stability type", "Stability type of the ion.", true}, {MS_Maltcms, "MS:1002344", "Maltcms", "Modular Application Toolkit for Chromatography Mass-Spectrometry is an application framework mainly for developers.", false}, {MS_PSM_level_attribute, "MS:1002345", "PSM-level attribute", "Attribute of a single peptide-spectrum match.", false}, {MS_protein_group_level_identification_attribute, "MS:1002346", "protein group-level identification attribute", "Protein group level information.", false}, {MS_PSM_level_identification_statistic, "MS:1002347", "PSM-level identification statistic", "Identification confidence metric for a peptide spectrum match.", false}, {MS_protein_group_level_identification_statistic, "MS:1002348", "protein group-level identification statistic", "Identification confidence metric for a protein group.", false}, {MS_value_greater_than_zero_but_less_than_or_equal_to_one, "MS:1002349", "value greater than zero but less than or equal to one", "Positive value range less than or equal to 1.", false}, {MS_PSM_level_global_FDR, "MS:1002350", "PSM-level global FDR", "Estimation of the global false discovery rate of peptide spectrum matches.", false}, {MS_PSM_level_local_FDR, "MS:1002351", "PSM-level local FDR", "Estimation of the local false discovery rate of peptide spectrum matches.", false}, {MS_PSM_level_p_value, "MS:1002352", "PSM-level p-value", "Estimation of the p-value for peptide spectrum matches.", false}, {MS_PSM_level_e_value, "MS:1002353", "PSM-level e-value", "Estimation of the e-value for peptide spectrum matches.", false}, {MS_PSM_level_q_value, "MS:1002354", "PSM-level q-value", "Estimation of the q-value for peptide spectrum matches.", false}, {MS_PSM_level_FDRScore, "MS:1002355", "PSM-level FDRScore", "mzidLibrary FDRScore for peptide spectrum matches.", false}, {MS_PSM_level_combined_FDRScore, "MS:1002356", "PSM-level combined FDRScore", "mzidLibrary Combined FDRScore for peptide spectrum matches specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools.", false}, {MS_PSM_level_probability, "MS:1002357", "PSM-level probability", "Probability that the reported peptide ion is truly responsible for some or all of the components of the specified mass spectrum.", false}, {MS_search_engine_specific_peptide_sequence_level_identification_statistic, "MS:1002358", "search engine specific peptide sequence-level identification statistic", "Search engine specific distinct peptide score.", false}, {MS_peptide_sequence_level_local_FDR, "MS:1002359", "peptide sequence-level local FDR", "Estimation of the local false discovery rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_distinct_peptide_level_FDRScore, "MS:1002360", "distinct peptide-level FDRScore", "MzidLibrary FDRScore for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_distinct_peptide_level_combined_FDRScore, "MS:1002361", "distinct peptide-level combined FDRScore", "Combined FDRScore for peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry) specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given peptide, used for integrating results from these distinct pools.", false}, {MS_peptide_sequence_level_probability, "MS:1002362", "peptide sequence-level probability", "Probability that the reported distinct peptide sequence (irrespective of mass modifications) has been correctly identified via the referenced PSMs.", false}, {MS_search_engine_specific_score_for_proteins, "MS:1002363", "search engine specific score for proteins", "Search engine specific protein scores.", false}, {MS_protein_level_local_FDR, "MS:1002364", "protein-level local FDR", "Estimation of the local false discovery rate of proteins.", false}, {MS_FDRScore_for_proteins, "MS:1002365", "FDRScore for proteins", "MzidLibrary FDRScore for proteins specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools.", false}, {MS_combined_FDRScore_for_proteins, "MS:1002366", "combined FDRScore for proteins", "MzidLibrary Combined FDRScore for proteins.", false}, {MS_probability_for_proteins, "MS:1002367", "probability for proteins", "Probability that a specific protein sequence has been correctly identified from the PSM and distinct peptide evidence, and based on the available protein sequences presented to the analysis software.", false}, {MS_search_engine_specific_score_for_protein_groups, "MS:1002368", "search engine specific score for protein groups", "Search engine specific protein group scores.", false}, {MS_protein_group_level_global_FDR, "MS:1002369", "protein group-level global FDR", "Estimation of the global false discovery rate of protein groups.", false}, {MS_protein_group_level_local_FDR, "MS:1002370", "protein group-level local FDR", "Estimation of the local false discovery rate of protein groups.", false}, {MS_protein_group_level_p_value, "MS:1002371", "protein group-level p-value", "Estimation of the p-value for protein groups.", false}, {MS_protein_group_level_e_value, "MS:1002372", "protein group-level e-value", "Estimation of the e-value for protein groups.", false}, {MS_protein_group_level_q_value, "MS:1002373", "protein group-level q-value", "Estimation of the q-value for protein groups.", false}, {MS_protein_group_level_FDRScore, "MS:1002374", "protein group-level FDRScore", "mzidLibrary FDRScore for protein groups.", false}, {MS_protein_group_level_combined_FDRScore, "MS:1002375", "protein group-level combined FDRScore", "mzidLibrary Combined FDRScore for proteins specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools.", false}, {MS_protein_group_level_probability, "MS:1002376", "protein group-level probability", "Probability that at least one of the members of a group of protein sequences has been correctly identified from the PSM and distinct peptide evidence, and based on the available protein sequences presented to the analysis software.", false}, {MS_ProteomeDiscoverer_Relaxed_Score_Threshold, "MS:1002377", "ProteomeDiscoverer:Relaxed Score Threshold", "Specifies the threshold value for relaxed scoring.", false}, {MS_ProteomeDiscoverer_Strict_Score_Threshold, "MS:1002378", "ProteomeDiscoverer:Strict Score Threshold", "Specifies the threshold value for strict scoring.", false}, {MS_ProteomeDiscoverer_Peptide_Without_Protein_Cut_Off_Score, "MS:1002379", "ProteomeDiscoverer:Peptide Without Protein Cut Off Score", "Cut off score for storing peptides that do not belong to a protein.", false}, {MS_false_localization_rate, "MS:1002380", "false localization rate", "Estimation of the false localization rate for modification site assignment.", false}, {MS_MALDI_Solutions_LC_MALDI, "MS:1002381", "MALDI Solutions LC-MALDI", "Software for automated LC-MALDI analysis and reporting.", false}, {MS_Shimadzu_MALDI_7090, "MS:1002382", "Shimadzu MALDI-7090", "Shimadzu MALDI-7090: MALDI-TOF-TOF.", false}, {MS_SCiLS_software, "MS:1002383", "SCiLS software", "SCiLS software for data acquisition and analysis.", false}, {MS_SCiLS_Lab, "MS:1002384", "SCiLS Lab", "SCiLS Lab software.", false}, {MS_SCiLS_Lab_format, "MS:1002385", "SCiLS Lab format", "SCiLS Lab file format.", false}, {MS_preprocessing_software, "MS:1002386", "preprocessing software", "Preprocessing software.", false}, {MS_PIA, "MS:1002387", "PIA", "PIA - Protein Inference Algorithms, a toolbox for protein inference and identification analysis.", false}, {MS_PIA_XML_format, "MS:1002388", "PIA XML format", "A compilation of search engine results in the PIA XML format.", false}, {MS_PIA_workflow_parameter, "MS:1002389", "PIA workflow parameter", "A parameter set for a single PIA analysis.", false}, {MS_PIA_FDRScore_calculated, "MS:1002390", "PIA:FDRScore calculated", "Indicates whether the FDR score was calculated for the input file.", false}, {MS_PIA_Combined_FDRScore_calculated, "MS:1002391", "PIA:Combined FDRScore calculated", "Indicates whether the combined FDR score was calculated for the PIA compilation.", false}, {MS_PIA_PSM_sets_created, "MS:1002392", "PIA:PSM sets created", "Indicates whether PSM sets were created.", false}, {MS_PIA_used_top_identifications_for_FDR, "MS:1002393", "PIA:used top identifications for FDR", "The number of top identifications per spectrum used for the FDR calculation, 0 means all.", false}, {MS_PIA_protein_score, "MS:1002394", "PIA:protein score", "The score given to a protein by any protein inference.", false}, {MS_PIA_protein_inference, "MS:1002395", "PIA:protein inference", "The used algorithm for the protein inference using PIA.", false}, {MS_PIA_protein_inference_filter, "MS:1002396", "PIA:protein inference filter", "A filter used by PIA for the protein inference.", false}, {MS_PIA_protein_inference_scoring, "MS:1002397", "PIA:protein inference scoring", "The used scoring method for the protein inference using PIA.", false}, {MS_PIA_protein_inference_used_score, "MS:1002398", "PIA:protein inference used score", "The used base score for the protein inference using PIA.", false}, {MS_PIA_protein_inference_used_PSMs, "MS:1002399", "PIA:protein inference used PSMs", "The method to determine the PSMs used for scoring by the protein inference.", false}, {MS_PIA_filter, "MS:1002400", "PIA:filter", "A filter used for the report generation.", false}, {MS_leading_protein, "MS:1002401", "leading protein", "At least one protein within each group should be annotated as a leading protein to indicate it has the strongest evidence, or approximately equal evidence as other group members.", false}, {MS_non_leading_protein, "MS:1002402", "non-leading protein", "Zero to many proteins within each group should be annotated as non-leading to indicate that other proteins have stronger evidence.", false}, {MS_group_representative, "MS:1002403", "group representative", "An arbitrary and optional flag applied to exactly one protein per group to indicate it can serve as the representative of the group, amongst leading proteins, in effect serving as a tiebreaker for approaches that require exactly one group representative.", false}, {MS_count_of_identified_proteins, "MS:1002404", "count of identified proteins", "The number of proteins that have been identified, which must match the number of groups that pass the threshold in the file.", false}, {MS_protein_group_level_result_list_attribute, "MS:1002405", "protein group-level result list attribute", "Details describing a protein cluster.", false}, {MS_count_of_identified_clusters, "MS:1002406", "count of identified clusters", "The number of protein clusters that have been identified, which must match the number of clusters that pass the threshold in the file.", false}, {MS_cluster_identifier, "MS:1002407", "cluster identifier", "An identifier applied to protein groups to indicate that they are linked by shared peptides.", false}, {MS_number_of_distinct_protein_sequences, "MS:1002408", "number of distinct protein sequences", "The number of protein clusters that have been identified, which must match the number of clusters that pass the threshold in the file.", false}, {MS_marginally_distinguished_protein, "MS:1002409", "marginally distinguished protein", "Assigned to a non-leading protein that has some independent evidence to support its presence relative to the leading protein(s), e.g. the protein may have a unique peptide but not sufficient to be promoted as a leading protein of another group.", false}, {MS_Anubis, "MS:1002410", "Anubis", "Anubis software for selected reaction monitoring data.", false}, {MS_TraML_format, "MS:1002411", "TraML format", "The TraML format for transitions in SRM from the PSI. File extension '.TraML'.", false}, {MS_total_XIC_area, "MS:1002412", "total XIC area", "Summed area of all the extracted ion chromatogram for the peptide (e.g. of all the transitions in SRM).", false}, {MS_product_background, "MS:1002413", "product background", "The background area for the quantified transition.", false}, {MS_postprocessing_software, "MS:1002414", "postprocessing software", "Postprocessing software.", false}, {MS_protein_group_passes_threshold, "MS:1002415", "protein group passes threshold", "A Boolean attribute to determine whether the protein group has passed the threshold indicated in the file.", false}, {MS_Orbitrap_Fusion, "MS:1002416", "Orbitrap Fusion", "Thermo Scientific Orbitrap Fusion.", false}, {MS_Orbitrap_Fusion_ETD, "MS:1002417", "Orbitrap Fusion ETD", "Thermo Scientific Orbitrap Fusion with ETD.", false}, {MS_TSQ_Quantiva, "MS:1002418", "TSQ Quantiva", "Thermo Scientific TSQ Quantiva MS.", false}, {MS_TSQ_Endura, "MS:1002419", "TSQ Endura", "Thermo Scientific TSQ Endura MS.", false}, {MS_PASSEL_experiment_URI, "MS:1002420", "PASSEL experiment URI", "URI that allows access to a PASSEL experiment.", false}, {MS_Paragon_input_parameter, "MS:1002421", "Paragon input parameter", "Search engine input parameters specific to Paragon.", false}, {MS_Paragon__sample_type, "MS:1002422", "Paragon: sample type", "The Paragon method setting indicating the type of sample at the high level, generally meaning the type of quantitation labelling or lack thereof. 'Identification' is indicated for samples without any labels for quantitation.", false}, {MS_Paragon__cysteine_alkylation, "MS:1002423", "Paragon: cysteine alkylation", "The Paragon method setting indicating the actual cysteine alkylation agent; 'None' is indicated if there was no cysteine alkylation.", false}, {MS_Paragon__instrument_setting, "MS:1002424", "Paragon: instrument setting", "The Paragon method setting (translating to a large number of lower level settings) indicating the instrument used or a category of instrument.", false}, {MS_Paragon__search_effort, "MS:1002425", "Paragon: search effort", "The Paragon method setting that controls the two major modes of search effort of the Paragon algorithm: the Rapid mode uses a conventional database search, while the Thorough mode uses a hybrid search, starting with the same approach as the Rapid mode but then follows it with a separate tag-based approach enabling a more extensive search.", false}, {MS_Paragon__ID_focus, "MS:1002426", "Paragon: ID focus", "A Paragon method setting that allows the inclusion of large sets of features such as biological modification or substitutions.", false}, {MS_Paragon__FDR_analysis, "MS:1002427", "Paragon: FDR analysis", "The Paragon method setting that controls whether FDR analysis is conducted.", false}, {MS_Paragon__quantitation, "MS:1002428", "Paragon: quantitation", "The Paragon method setting that controls whether quantitation analysis is conducted.", false}, {MS_Paragon__background_correction, "MS:1002429", "Paragon: background correction", "The Paragon method setting that controls whether the 'Background Correction' analysis is conducted; this processing estimates a correction to the attenuation in extremity ratios that can occur in isobaric quantatitation workflows on complex samples.", false}, {MS_Paragon__bias_correction, "MS:1002430", "Paragon: bias correction", "The Paragon method setting that controls whether 'Bias Correction' is invoked in quantitation analysis; this correction is a normalization to set the central tendency of protein ratios to unity.", false}, {MS_Paragon__channel_to_use_as_denominator_in_ratios, "MS:1002431", "Paragon: channel to use as denominator in ratios", "The Paragon method setting that controls which label channel is used as the denominator in calculating relative expression ratios.", false}, {MS_search_engine_specific_input_metadata, "MS:1002432", "search engine specific input metadata", "Search engine specific metadata that are not user-controlled settings.", false}, {MS_Paragon__modified_data_dictionary_or_parameter_translation, "MS:1002433", "Paragon: modified data dictionary or parameter translation", "This metric detects if any changes have been made to the originally installed key control files for the software; if no changes have been made, then the software version and settings are sufficient to enable exact reproduction; if changes have been made, then the modified ParameterTranslation- and ProteinPilot DataDictionary-XML files much also be provided in order to exactly reproduce a result.", false}, {MS_number_of_spectra_searched, "MS:1002434", "number of spectra searched", "Number of spectra in a search.", false}, {MS_data_processing_start_time, "MS:1002435", "data processing start time", "The time that a data processing action was started.", false}, {MS_Paragon__digestion, "MS:1002436", "Paragon: digestion", "The Paragon method setting indicating the actual digestion agent - unlike other search tools, this setting does not include options that control partial specificity like 'semitrypsin'; if trypsin is used, trypsin is set, and partially conforming peptides are found in the Thorough mode of search; 'None' should be indicated only if there was really no digestion done.", false}, {MS_number_of_decoy_sequences, "MS:1002437", "number of decoy sequences", "The number of decoy sequences, if the concatenated target-decoy approach is used.", false}, {MS_spectrum_identification_list_result_details, "MS:1002438", "spectrum identification list result details", "Information about the list of PSMs (SpectrumIdentificationList).", false}, {MS_final_PSM_list, "MS:1002439", "final PSM list", "A flag on a list of PSMs (SpectrumIdentificationList) to indicate that this is the final set of identifications to be interpreted by consuming software. Amongst the set of SpectrumIdentificationList(s) that are flagged with the term, each spectrum must not be referenced from more than one SpectrumIdentificationResult.", false}, {MS_intermediate_PSM_list, "MS:1002440", "intermediate PSM list", "A flag on a list of PSMs (SpectrumIdentificationList) to indicate that this is not the final set of identifications to be interpreted by consuming software. This term should be used when results are provided from multiple search engines for the results from each search engine before they are combined to give consensus identifications. Amongst the set of SpectrumIdentificationList(s) that are flagged with the term, each spectrum may be referenced from more than one SpectrumIdentificationResult.", false}, {MS_Andi_MS_format, "MS:1002441", "Andi-MS format", "AIA Analytical Data Interchange file format for mass spectrometry data.", false}, {MS_chromatograph_file_format, "MS:1002442", "chromatograph file format", "The format of the chromatography file being used. This could be a instrument or vendor specific proprietary file format or a converted open file format.", false}, {MS_Andi_CHROM_format, "MS:1002443", "Andi-CHROM format", "AIA Analytical Data Interchange file format for chromatography data.", false}, {MS_6420_Triple_Quadrupole_LC_MS, "MS:1002444", "6420 Triple Quadrupole LC/MS", "The 6420 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_6460_Triple_Quadrupole_LC_MS, "MS:1002445", "6460 Triple Quadrupole LC/MS", "The 6460 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. It is similar to the 6420 but adds Agilent Jet Stream (AJS) technology to increase sensitivity.", false}, {MS_6490_Triple_Quadrupole_LC_MS, "MS:1002446", "6490 Triple Quadrupole LC/MS", "The 6490 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. It is similar to the 6420 but adds the Agilent iFunnel technology to increase sensitivity.", false}, {MS_Paragon_special_factor, "MS:1002447", "Paragon:special factor", "The Paragon method setting indicating a list of one or more 'special factors', which generally capture secondary effects (relative to other settings) as a set of probabilities of modification features that override the assumed levels. For example the 'gel-based ID' special factor causes an increase probability of oxidation on several resides because of the air exposure impact on a gel, in addition to other effects.", false}, {MS_PEAKS_inChorusPeptideScore, "MS:1002448", "PEAKS:inChorusPeptideScore", "The PEAKS inChorus peptide score.", false}, {MS_PEAKS_inChorusProteinScore, "MS:1002449", "PEAKS:inChorusProteinScore", "The PEAKS inChorus protein score.", false}, {MS_param__b_ion_H3PO4_DEPRECATED, "MS:1002450", "param: b ion-H3PO4 DEPRECATED", "Ion b-H3PO4: b ion with lost phosphoric acid.", false}, {MS_param__y_ion_H3PO4_DEPRECATED, "MS:1002451", "param: y ion-H3PO4 DEPRECATED", "Ion y-H3PO4: y ion with lost phosphoric acid.", false}, {MS_Maui, "MS:1002452", "Maui", "The Maltcms Graphical User Interface.", false}, {MS_No_fixed_modifications_searched, "MS:1002453", "No fixed modifications searched", "No fixed modifications are included as a parameter for the search, and therefore they are not reported.", false}, {MS_No_variable_modifications_searched, "MS:1002454", "No variable modifications searched", "No variable modifications are included as a parameter for the search, and therefore they are not reported.", false}, {MS_H2O_neutral_loss_OBSOLETE, "MS:1002455", "H2O neutral loss", "Neutral loss of water.", true}, {MS_NH3_neutral_loss_OBSOLETE, "MS:1002456", "NH3 neutral loss", "Neutral loss of ammonia.", true}, {MS_H3PO4_neutral_loss_OBSOLETE, "MS:1002457", "H3PO4 neutral loss", "Neutral loss of phosphoric acid.", true}, {MS_PeptideShaker, "MS:1002458", "PeptideShaker", "PeptideShaker is a software for the interpretation of proteomics identification results.", false}, {MS_MS_Amanda_csv_format, "MS:1002459", "MS Amanda csv format", "MS Amanda csv output format.", false}, {MS_protein_group_level_global_FNR, "MS:1002460", "protein group-level global FNR", "Estimation of the global false negative rate of protein groups.", false}, {MS_protein_group_level_confidence, "MS:1002461", "protein group-level confidence", "Estimation of the global confidence of protein groups.", false}, {MS_peptide_sequence_level_global_FNR, "MS:1002462", "peptide sequence-level global FNR", "Estimation of the global false negative rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_peptide_sequence_level_global_confidence, "MS:1002463", "peptide sequence-level global confidence", "Estimation of the global confidence for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry).", false}, {MS_PSM_level_global_FNR, "MS:1002464", "PSM-level global FNR", "Estimation of the global false negative rate of peptide spectrum matches.", false}, {MS_PSM_level_global_confidence, "MS:1002465", "PSM-level global confidence", "Estimation of the global confidence of peptide spectrum matches.", false}, {MS_PeptideShaker_PSM_score, "MS:1002466", "PeptideShaker PSM score", "The probability based PeptideShaker PSM score.", false}, {MS_PeptideShaker_PSM_confidence, "MS:1002467", "PeptideShaker PSM confidence", "The probability based PeptideShaker PSM confidence.", false}, {MS_PeptideShaker_peptide_score, "MS:1002468", "PeptideShaker peptide score", "The probability based PeptideShaker peptide score.", false}, {MS_PeptideShaker_peptide_confidence, "MS:1002469", "PeptideShaker peptide confidence", "The probability based PeptideShaker peptide confidence.", false}, {MS_PeptideShaker_protein_group_score, "MS:1002470", "PeptideShaker protein group score", "The probability based PeptideShaker protein group score.", false}, {MS_PeptideShaker_protein_group_confidence, "MS:1002471", "PeptideShaker protein group confidence", "The probability based PeptideShaker protein group confidence.", false}, {MS_trap_type_collision_induced_dissociation, "MS:1002472", "trap-type collision-induced dissociation", "A collision-induced dissociation process that occurs in a trap-type collision cell.", false}, {MS_ion_series_considered_in_search, "MS:1002473", "ion series considered in search", "The description of the ion fragment series (including charges and neutral losses) that are considered by the search engine.", false}, {MS_ProteoAnnotator_non_canonical_gene_model_score, "MS:1002474", "ProteoAnnotator:non-canonical gene model score", "The sum of peptide-level scores for peptides mapped only to non-canonical gene models within the group.", false}, {MS_ProteoAnnotator_count_alternative_peptides, "MS:1002475", "ProteoAnnotator:count alternative peptides", "The count of the number of peptide sequences mapped to non-canonical gene models only within the group.", false}, {MS_ion_mobility_drift_time, "MS:1002476", "ion mobility drift time", "Drift time of an ion or spectrum of ions as measured in an ion mobility mass spectrometer. This time might refer to the central value of a bin into which all ions within a narrow range of drift time have been aggregated.", false}, {MS_mean_ion_mobility_drift_time_array, "MS:1002477", "mean ion mobility drift time array", "Array of population mean ion mobility values from a drift time device, reported in seconds (or milliseconds), corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_mean_charge_array, "MS:1002478", "mean charge array", "Array of mean charge values where the mean charge is calculated as a weighted mean of the charges of individual peaks that are aggregated into a processed spectrum.", false}, {MS_regular_expression, "MS:1002479", "regular expression", "Regular expression.", false}, {MS_regular_expression_for_a_digital_object_identifier__DOI_, "MS:1002480", "regular expression for a digital object identifier (DOI)", "(10[.][0-9]\\{4,\\}(?:[.][0-9]+)*/(?:(?![\\\"&\\'<>])[^ \\t\\\\r\\n\\\\v\\\\f])+).", false}, {MS_higher_energy_beam_type_collision_induced_dissociation, "MS:1002481", "higher energy beam-type collision-induced dissociation", "A collision-induced dissociation process wherein the projectile ion has the translational energy higher than approximately 1000 eV.", false}, {MS_statistical_threshold, "MS:1002482", "statistical threshold", "Estimated statistical threshold.", false}, {MS_PSM_level_statistical_threshold, "MS:1002483", "PSM-level statistical threshold", "Estimated statistical threshold at PSM-level.", false}, {MS_peptide_level_statistical_threshold, "MS:1002484", "peptide-level statistical threshold", "Estimated statistical threshold at peptide-level.", false}, {MS_protein_level_statistical_threshold, "MS:1002485", "protein-level statistical threshold", "Estimated statistical threshold at protein-level.", false}, {MS_protein_group_level_statistical_threshold, "MS:1002486", "protein group-level statistical threshold", "Estimated statistical threshold at protein group-level.", false}, {MS_MassIVE_dataset_identifier, "MS:1002487", "MassIVE dataset identifier", "Dataset identifier issued by the MassIVE repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_MassIVE_dataset_URI, "MS:1002488", "MassIVE dataset URI", "URI that allows the access to one dataset in the MassIVE repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_special_processing, "MS:1002489", "special processing", "Details describing a special processing.", false}, {MS_peptide_level_scoring, "MS:1002490", "peptide-level scoring", "Peptide-level scoring performed.", false}, {MS_modification_localization_scoring, "MS:1002491", "modification localization scoring", "Modification localization scoring performed.", false}, {MS_consensus_scoring, "MS:1002492", "consensus scoring", "Consensus multiple search engine approach performed.", false}, {MS_sample_pre_fractionation, "MS:1002493", "sample pre-fractionation", "Sample pre-fractionation performed.", false}, {MS_cross_linking_search, "MS:1002494", "cross-linking search", "Cross-linking search performed.", false}, {MS_no_special_processing, "MS:1002495", "no special processing", "No special processing performed.", false}, {MS_group_PSMs_by_sequence, "MS:1002496", "group PSMs by sequence", "Group PSMs by distinct peptide sequence ignoring modifications.", false}, {MS_group_PSMs_by_sequence_with_modifications, "MS:1002497", "group PSMs by sequence with modifications", "Group PSMs by distinct peptide sequence with taking modifications into account.", false}, {MS_group_PSMs_by_sequence_with_modifications_and_charge, "MS:1002498", "group PSMs by sequence with modifications and charge", "Group PSMs by distinct peptide sequence with taking modifications and charge into account.", false}, {MS_peptide_level_score_OBSOLETE, "MS:1002499", "peptide level score", "Peptide level score.", true}, {MS_peptide_passes_threshold, "MS:1002500", "peptide passes threshold", "A Boolean attribute to determine whether the peptide has passed the threshold indicated in the file.", false}, {MS_no_PSM_threshold, "MS:1002501", "no PSM threshold", "Indicating that no PSM threshold was used.", false}, {MS_no_peptide_level_threshold, "MS:1002502", "no peptide-level threshold", "Indicating that no peptide-level threshold was used.", false}, {MS_PSM_is_used_for_peptide_level_scoring, "MS:1002503", "PSM is used for peptide-level scoring", "Flags a PSM that it is used for peptide-level scoring.", false}, {MS_modification_index, "MS:1002504", "modification index", "The order of modifications to be referenced elsewhere in the document.", false}, {MS_regular_expression_for_modification_localization_scoring, "MS:1002505", "regular expression for modification localization scoring", "([:digit:]+:[0|1]\\{1\\}.[:digit:]+[Ee]{0,1}[+-]{0,1}[:digit:]*:[:digit:]+[|]\\{1\\}[:digit:]+:(true|false)\\{1\\}).", false}, {MS_modification_position_score, "MS:1002506", "modification position score", "Modification position score.", false}, {MS_modification_rescoring_false_localization_rate, "MS:1002507", "modification rescoring:false localization rate", "Mod position score: false localization rate.", false}, {MS_cross_linking_attribute, "MS:1002508", "cross-linking attribute", "Cross-linking attribute.", false}, {MS_cross_link_donor, "MS:1002509", "cross-link donor", "The Cross-linking donor, assigned according to the following rules: the export software SHOULD use the following rules to choose the cross-link donor as the: longer peptide, then higher peptide neutral mass, then alphabetical order.", false}, {MS_cross_link_acceptor, "MS:1002510", "cross-link acceptor", "Cross-linking acceptor, assigned according to the following rules: the export software SHOULD use the following rules to choose the cross-link donor as the: longer peptide, then higher peptide neutral mass, then alphabetical order.", false}, {MS_cross_link_spectrum_identification_item, "MS:1002511", "cross-link spectrum identification item", "Cross-linked spectrum identification item.", false}, {MS_cross_linking_score, "MS:1002512", "cross-linking score", "Cross-linking scoring value.", false}, {MS_molecules_per_cell, "MS:1002513", "molecules per cell", "The absolute abundance of protein in a cell.", false}, {MS_absolute_quantitation_analysis, "MS:1002514", "absolute quantitation analysis", "Absolute quantitation analysis.", false}, {MS_internal_peptide_reference_used, "MS:1002515", "internal peptide reference used", "States whether an internal peptide reference is used or not in absolute quantitation analysis.", false}, {MS_internal_protein_reference_used, "MS:1002516", "internal protein reference used", "States whether an internal protein reference is used or not in absolute quantitation analysis.", false}, {MS_internal_reference_abundance, "MS:1002517", "internal reference abundance", "The absolute abundance of the spiked in reference peptide or protein used for absolute quantitation analysis.", false}, {MS_Progenesis_protein_group_normalised_abundance, "MS:1002518", "Progenesis:protein group normalised abundance", "The data type normalised abundance for protein groups produced by Progenesis LC-MS.", false}, {MS_Progenesis_protein_group_raw_abundance, "MS:1002519", "Progenesis:protein group raw abundance", "The data type raw abundance for protein groups produced by Progenesis LC-MS.", false}, {MS_peptide_group_ID, "MS:1002520", "peptide group ID", "Peptide group identifier for peptide-level stats.", false}, {MS_mass_spectrometry_imaging, "MS:1002521", "mass spectrometry imaging", "A technique in which mass spectra are acquired in a spatially resolved manner. This is typically achieved by scanning a laser or primary ion beam over a sample and acquiring a mass spectrum at each position.", false}, {MS_ProteomeDiscoverer_1__Static_Terminal_Modification, "MS:1002522", "ProteomeDiscoverer:1. Static Terminal Modification", "Determine 1st static terminal post-translational modifications (PTMs).", false}, {MS_Q_Exactive_HF, "MS:1002523", "Q Exactive HF", "Thermo Scientific Q Exactive.", false}, {MS_PepFinder, "MS:1002524", "PepFinder", "Thermo Scientific PepFinder BioPharma analysis software.", false}, {MS_TSQ_8000_Evo, "MS:1002525", "TSQ 8000 Evo", "Thermo Scientific TSQ 8000 Evo MS.", false}, {MS_Exactive_Plus, "MS:1002526", "Exactive Plus", "Thermo Scientific Exactive Plus MS.", false}, {MS_instrument_specific_scan_attribute, "MS:1002527", "instrument specific scan attribute", "Instrument specific scan properties that are associated with a value.", false}, {MS_synchronous_prefilter_selection, "MS:1002528", "synchronous prefilter selection", "Synchronous prefilter selection.", false}, {MS_resolution_array, "MS:1002529", "resolution array", "A data array of resolution values.", false}, {MS_baseline_array, "MS:1002530", "baseline array", "A data array of signal baseline values (the signal in the absence of analytes).", false}, {MS_UIMF_format, "MS:1002531", "UIMF format", "SQLite-based file format created at Pacific Northwest National Lab. It stores an intermediate analysis of ion-mobility mass spectrometry data.", false}, {MS_UIMF_nativeID_format, "MS:1002532", "UIMF nativeID format", "Native format defined by frame=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger frameType=xsd:nonNegativeInteger.", false}, {MS_TripleTOF_6600, "MS:1002533", "TripleTOF 6600", "SCIEX TripleTOF 6600, a quadrupole - quadrupole - time-of-flight mass spectrometer.", false}, {MS_ProLuCID_xcorr, "MS:1002534", "ProLuCID:xcorr", "The ProLuCID result 'XCorr'.", false}, {MS_ProLuCID_deltacn, "MS:1002535", "ProLuCID:deltacn", "The ProLuCID result 'DeltaCn'.", false}, {MS_D_Score, "MS:1002536", "D-Score", "D-Score for PTM site location at the PSM-level.", false}, {MS_MD_Score, "MS:1002537", "MD-Score", "MD-Score for PTM site location at the PSM-level.", false}, {MS_PTM_localization_confidence_metric, "MS:1002538", "PTM localization confidence metric", "Localization confidence metric for a post translational modification (PTM).", false}, {MS_PeptideShaker_PTM_confidence_type, "MS:1002539", "PeptideShaker PTM confidence type", "PeptideShaker quality criteria for the confidence of PTM localizations.", false}, {MS_PeptideShaker_PSM_confidence_type, "MS:1002540", "PeptideShaker PSM confidence type", "PeptideShaker quality criteria for the confidence of PSM's.", false}, {MS_PeptideShaker_peptide_confidence_type, "MS:1002541", "PeptideShaker peptide confidence type", "PeptideShaker quality criteria for the confidence of peptide identifications.", false}, {MS_PeptideShaker_protein_confidence_type, "MS:1002542", "PeptideShaker protein confidence type", "PeptideShaker quality criteria for the confidence of protein identifications.", false}, {MS_xiFDR, "MS:1002543", "xiFDR", "Target/Decoy based FDR estimation for cross-linking peptide-identifications.", false}, {MS_xi, "MS:1002544", "xi", "Search engine for cross-linked peptides.", false}, {MS_xi_score, "MS:1002545", "xi:score", "The xi result 'Score'.", false}, {MS_Skyline_mzQuantML_converter, "MS:1002546", "Skyline mzQuantML converter", "A software package to convert Skyline report to mzQuantML.", false}, {MS_normalized_spectral_abundance_factor, "MS:1002547", "normalized spectral abundance factor", "A normalized spectral abundance factor (NSAF).", false}, {MS_distributed_normalized_spectral_abundance_factor, "MS:1002548", "distributed normalized spectral abundance factor", "A distributed normalized spectral abundance factor (dNSAF).", false}, {MS_PTM_localization_distinct_peptide_level_statistic, "MS:1002549", "PTM localization distinct peptide-level statistic", "Statistic to convey the confidence of the localization of an amino acid modification on a peptide sequence.", false}, {MS_peptide_phosphoRS_score, "MS:1002550", "peptide:phosphoRS score", "phosphoRS score for PTM site location at the peptide-level.", false}, {MS_peptide_Ascore, "MS:1002551", "peptide:Ascore", "A-score for PTM site location at the peptide-level.", false}, {MS_peptide_H_Score, "MS:1002552", "peptide:H-Score", "H-Score for peptide phosphorylation site location at the peptide-level.", false}, {MS_peptide_D_Score, "MS:1002553", "peptide:D-Score", "D-Score for PTM site location at the peptide-level.", false}, {MS_peptide_MD_Score, "MS:1002554", "peptide:MD-Score", "MD-Score for PTM site location at the peptide-level.", false}, {MS_PTM_localization_score_threshold, "MS:1002555", "PTM localization score threshold", "Threshold for PTM site location score.", false}, {MS_Ascore_threshold, "MS:1002556", "Ascore threshold", "Threshold for Ascore PTM site location score.", false}, {MS_D_Score_threshold, "MS:1002557", "D-Score threshold", "Threshold for D-score PTM site location score.", false}, {MS_MD_Score_threshold, "MS:1002558", "MD-Score threshold", "Threshold for MD-score PTM site location score.", false}, {MS_H_Score_threshold, "MS:1002559", "H-Score threshold", "Threshold for H-score PTM site location score.", false}, {MS_DeBunker_score_threshold, "MS:1002560", "DeBunker:score threshold", "Threshold for DeBunker PTM site location score.", false}, {MS_Mascot_PTM_site_assignment_confidence_threshold, "MS:1002561", "Mascot:PTM site assignment confidence threshold", "Threshold for Mascot PTM site assignment confidence.", false}, {MS_MSQuant_PTM_score_threshold, "MS:1002562", "MSQuant:PTM-score threshold", "Threshold for MSQuant:PTM-score.", false}, {MS_MaxQuant_PTM_Score_threshold, "MS:1002563", "MaxQuant:PTM Score threshold", "Threshold for MaxQuant:PTM Score.", false}, {MS_MaxQuant_P_site_localization_probability_threshold, "MS:1002564", "MaxQuant:P-site localization probability threshold", "Threshold for MaxQuant:P-site localization probability.", false}, {MS_MaxQuant_PTM_Delta_Score_threshold, "MS:1002565", "MaxQuant:PTM Delta Score threshold", "Threshold for MaxQuant:PTM Delta Score.", false}, {MS_MaxQuant_Phospho__STY__Probabilities_threshold, "MS:1002566", "MaxQuant:Phospho (STY) Probabilities threshold", "Threshold for MaxQuant:Phospho (STY) Probabilities.", false}, {MS_phosphoRS_score_threshold, "MS:1002567", "phosphoRS score threshold", "Threshold for phosphoRS score.", false}, {MS_phosphoRS_site_probability_threshold, "MS:1002568", "phosphoRS site probability threshold", "Threshold for phosphoRS site probability.", false}, {MS_ProteomeDiscoverer_Number_of_Spectra_Processed_At_Once, "MS:1002569", "ProteomeDiscoverer:Number of Spectra Processed At Once", "Number of spectra processed at once in a ProteomeDiscoverer search.", false}, {MS_sequence_multiply_subsumable_protein, "MS:1002570", "sequence multiply subsumable protein", "A protein for which the matched peptide sequences are the same, or a subset of, the matched peptide sequences for two or more other proteins combined. These other proteins need not all be in the same group.", false}, {MS_spectrum_multiply_subsumable_protein, "MS:1002571", "spectrum multiply subsumable protein", "A protein for which the matched spectra are the same, or a subset of, the matched spectra for two or more other proteins combined. These other proteins need not all be in the same group.", false}, {MS_protein_detection_statistical_threshold, "MS:1002572", "protein detection statistical threshold", "Estimated statistical threshold used for protein detection.", false}, {MS_spectrum_identification_statistical_threshold, "MS:1002573", "spectrum identification statistical threshold", "Estimated statistical threshold used for spectrum identification.", false}, {MS_ASAPRatio, "MS:1002574", "ASAPRatio", "A program in the TPP that calculates PSM, peptide, and protein-level abundances based on 2-channel isotope-labelled data such as ICAT, SILAC, etc.", false}, {MS_Tide, "MS:1002575", "Tide", "Tide open-source sequence search program developed at the University of Washington.", false}, {MS_Andromeda_result_format, "MS:1002576", "Andromeda result format", "Andromeda result file output format.", false}, {MS_2000_QTRAP, "MS:1002577", "2000 QTRAP", "SCIEX 2000 QTRAP.", false}, {MS_2500_QTRAP, "MS:1002578", "2500 QTRAP", "SCIEX 2500 QTRAP.", false}, {MS_3500_QTRAP, "MS:1002579", "3500 QTRAP", "SCIEX 3500 QTRAP.", false}, {MS_QTRAP_4500, "MS:1002580", "QTRAP 4500", "SCIEX QTRAP 4500.", false}, {MS_QTRAP_6500, "MS:1002581", "QTRAP 6500", "SCIEX QTRAP 6500.", false}, {MS_QTRAP_6500_, "MS:1002582", "QTRAP 6500+", "SCIEX QTRAP 6500+.", false}, {MS_TripleTOF_4600, "MS:1002583", "TripleTOF 4600", "SCIEX TripleTOF 4600 time-of-flight mass spectrometer.", false}, {MS_TripleTOF_5600_, "MS:1002584", "TripleTOF 5600+", "SCIEX TripleTOF 5600+ time-of-flight mass spectrometer.", false}, {MS_API_100, "MS:1002585", "API 100", "Applied Biosystems/MDS SCIEX API 100 MS.", false}, {MS_API_100LC, "MS:1002586", "API 100LC", "Applied Biosystems/MDS SCIEX API 100LC MS.", false}, {MS_API_165, "MS:1002587", "API 165", "Applied Biosystems/MDS SCIEX API 165 MS.", false}, {MS_API_300, "MS:1002588", "API 300", "Applied Biosystems/MDS SCIEX API 300 MS.", false}, {MS_API_350, "MS:1002589", "API 350", "Applied Biosystems/MDS SCIEX API 350 MS.", false}, {MS_API_365, "MS:1002590", "API 365", "Applied Biosystems/MDS SCIEX API 365 MS.", false}, {MS_Triple_Quad_3500, "MS:1002591", "Triple Quad 3500", "SCIEX Triple Quad 3500.", false}, {MS_Triple_Quad_4500, "MS:1002592", "Triple Quad 4500", "SCIEX Triple Quad 4500.", false}, {MS_Triple_Quad_5500, "MS:1002593", "Triple Quad 5500", "SCIEX Triple Quad 5500.", false}, {MS_Triple_Quad_6500, "MS:1002594", "Triple Quad 6500", "SCIEX Triple Quad 6500.", false}, {MS_Triple_Quad_6500_, "MS:1002595", "Triple Quad 6500+", "SCIEX Triple Quad 6500+.", false}, {MS_ProLuCID, "MS:1002596", "ProLuCID", "The SEQUEST-like sequence search engine ProLuCID, developed in the Yates Lab at the Scripps Research Institute.", false}, {MS_MS1_format, "MS:1002597", "MS1 format", "MS1 file format for MS1 spectral data.", false}, {MS_DTASelect, "MS:1002598", "DTASelect", "Analysis software designed to reassemble the SEQUEST peptide identifications and to highlight the most significant matches.", false}, {MS_splash_key, "MS:1002599", "splash key", "Spectral Hash key, an unique identifier for spectra.", false}, {MS_PRIDE_XML, "MS:1002600", "PRIDE XML", "Internal data and submission format of the PRIDE database.", false}, {MS_mzTab, "MS:1002601", "mzTab", "Tabular result format for proteomics and metabolomics experiments.", false}, {MS_sample_label, "MS:1002602", "sample label", "Reagent used in labeled quantification methods.", false}, {MS_ICAT_reagent, "MS:1002603", "ICAT reagent", "Isotope coded affinity tag reagent.", false}, {MS_ICAT_heavy_reagent, "MS:1002604", "ICAT heavy reagent", "The name of the sample labelled with the heavy ICAT label.", false}, {MS_ICAT_light_reagent, "MS:1002605", "ICAT light reagent", "The name of the sample labelled with the light ICAT label.", false}, {MS_ICPL_reagent, "MS:1002606", "ICPL reagent", "Isotope coded protein labeling reagent.", false}, {MS_ICPL_reagent_0, "MS:1002607", "ICPL reagent 0", "The name of the sample labelled with the ICPL reagent 0.", false}, {MS_ICPL_reagent_4, "MS:1002608", "ICPL reagent 4", "The name of the sample labelled with the ICPL reagent 4.", false}, {MS_ICPL_reagent_6, "MS:1002609", "ICPL reagent 6", "The name of the sample labelled with the ICPL reagent 6.", false}, {MS_ICPL_reagent_10, "MS:1002610", "ICPL reagent 10", "The name of the sample labelled with the ICPL reagent 10.", false}, {MS_SILAC_reagent, "MS:1002611", "SILAC reagent", "Stable isotope labeling with amino acids in cell culture reagent.", false}, {MS_SILAC_heavy_reagent, "MS:1002612", "SILAC heavy reagent", "The name of the sample labelled with the heavy SILAC label.", false}, {MS_SILAC_medium_reagent, "MS:1002613", "SILAC medium reagent", "The name of the sample labelled with the medium SILAC label.", false}, {MS_SILAC_light_reagent, "MS:1002614", "SILAC light reagent", "The name of the sample labelled with the light SILAC label.", false}, {MS_TMT_reagent, "MS:1002615", "TMT reagent", "Tandem mass tag reagent used in TMT, glycoTMT, iodoTMT, aminoxyTMT or hydrazideTMT isobaric labeling.", false}, {MS_TMT_reagent_126, "MS:1002616", "TMT reagent 126", "The name of the sample labelled with the TMT reagent 126.", false}, {MS_TMT_reagent_127, "MS:1002617", "TMT reagent 127", "The name of the sample labelled with the TMT reagent 127.", false}, {MS_TMT_reagent_128, "MS:1002618", "TMT reagent 128", "The name of the sample labelled with the TMT reagent 128.", false}, {MS_TMT_reagent_129, "MS:1002619", "TMT reagent 129", "The name of the sample labelled with the TMT reagent 129.", false}, {MS_TMT_reagent_130, "MS:1002620", "TMT reagent 130", "The name of the sample labelled with the TMT reagent 130.", false}, {MS_TMT_reagent_131, "MS:1002621", "TMT reagent 131", "The name of the sample labelled with the TMT reagent 131.", false}, {MS_iTRAQ_reagent, "MS:1002622", "iTRAQ reagent", "Isobaric tag for relative and absolute quantitation (iTRAQ or iTRAQH) reagent.", false}, {MS_iTRAQ_reagent_113, "MS:1002623", "iTRAQ reagent 113", "The name of the sample labelled with the iTRAQ reagent 113.", false}, {MS_iTRAQ_reagent_114, "MS:1002624", "iTRAQ reagent 114", "The name of the sample labelled with the iTRAQ reagent 114.", false}, {MS_iTRAQ_reagent_115, "MS:1002625", "iTRAQ reagent 115", "The name of the sample labelled with the iTRAQ reagent 115.", false}, {MS_iTRAQ_reagent_116, "MS:1002626", "iTRAQ reagent 116", "The name of the sample labelled with the iTRAQ reagent 116.", false}, {MS_iTRAQ_reagent_117, "MS:1002627", "iTRAQ reagent 117", "The name of the sample labelled with the iTRAQ reagent 117.", false}, {MS_iTRAQ_reagent_118, "MS:1002628", "iTRAQ reagent 118", "The name of the sample labelled with the iTRAQ reagent 118.", false}, {MS_iTRAQ_reagent_119, "MS:1002629", "iTRAQ reagent 119", "The name of the sample labelled with the iTRAQ reagent 119.", false}, {MS_iTRAQ_reagent_121, "MS:1002630", "iTRAQ reagent 121", "The name of the sample labelled with the iTRAQ reagent 121.", false}, {MS_Electron_Transfer_Higher_Energy_Collision_Dissociation__EThcD_, "MS:1002631", "Electron-Transfer/Higher-Energy Collision Dissociation (EThcD)", "A dissociation process combining electron-transfer and higher-energy collision dissociation (EThcD). It combines ETD (reaction time) followed by HCD (activation energy).", false}, {MS_jPOST_dataset_identifier, "MS:1002632", "jPOST dataset identifier", "Dataset identifier issued by the jPOST repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_jPOST_dataset_URI, "MS:1002633", "jPOST dataset URI", "URI that allows the access to one dataset in the jPOST repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_Q_Exactive_Plus, "MS:1002634", "Q Exactive Plus", "Thermo Scientific Q Exactive Plus.", false}, {MS_proteogenomics_search, "MS:1002635", "proteogenomics search", "Proteogenomics search performed.", false}, {MS_proteogenomics_attribute, "MS:1002636", "proteogenomics attribute", "Proteogenomics attribute.", false}, {MS_chromosome_name, "MS:1002637", "chromosome name", "The name or number of the chromosome to which a given peptide has been mapped.", false}, {MS_chromosome_strand, "MS:1002638", "chromosome strand", "The strand (+ or -) to which the peptide has been mapped.", false}, {MS_peptide_start_on_chromosome_OBSOLETE, "MS:1002639", "peptide start on chromosome", "The overall start position on the chromosome to which a peptide has been mapped i.e. the position of the first base of the first codon, using a zero-based counting system.", true}, {MS_peptide_end_on_chromosome, "MS:1002640", "peptide end on chromosome", "The overall end position on the chromosome to which a peptide has been mapped i.e. the position of the third base of the last codon, using a zero-based counting system.", false}, {MS_peptide_exon_count, "MS:1002641", "peptide exon count", "The number of exons to which the peptide has been mapped.", false}, {MS_peptide_exon_nucleotide_sizes, "MS:1002642", "peptide exon nucleotide sizes", "A comma separated list of the number of DNA bases within each exon to which a peptide has been mapped. Assuming standard operation of a search engine, the peptide exon sizes should sum to exactly three times the peptide length.", false}, {MS_peptide_start_positions_on_chromosome, "MS:1002643", "peptide start positions on chromosome", "A comma separated list of start positions within exons to which the peptide has been mapped, relative to peptide-chromosome start, assuming a zero-based counting system. The first value MUST match the value in peptide start on chromosome.", false}, {MS_genome_reference_version, "MS:1002644", "genome reference version", "The reference genome and versioning string as used for mapping. All coordinates are within this frame of reference.", false}, {MS_MSDK, "MS:1002645", "MSDK", "Mass Spectrometry Development Kit (MSDK) is a Java library of algorithms for processing of mass spectrometry data.", false}, {MS_native_spectrum_identifier_format__combined_spectra, "MS:1002646", "native spectrum identifier format, combined spectra", "Describes how the native spectrum identifiers that have been combined prior to searching or interpretation are formated.", false}, {MS_Thermo_nativeID_format__combined_spectra, "MS:1002647", "Thermo nativeID format, combined spectra", "Thermo comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_Waters_nativeID_format__combined_spectra, "MS:1002648", "Waters nativeID format, combined spectra", "Waters comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_WIFF_nativeID_format__combined_spectra, "MS:1002649", "WIFF nativeID format, combined spectra", "WIFF comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_Bruker_Agilent_YEP_nativeID_format__combined_spectra, "MS:1002650", "Bruker/Agilent YEP nativeID format, combined spectra", "Bruker/Agilent comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_Bruker_BAF_nativeID_format__combined_spectra, "MS:1002651", "Bruker BAF nativeID format, combined spectra", "Bruker BAF comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_Bruker_FID_nativeID_format__combined_spectra, "MS:1002652", "Bruker FID nativeID format, combined spectra", "Bruker FID comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_multiple_peak_list_nativeID_format__combined_spectra, "MS:1002653", "multiple peak list nativeID format, combined spectra", "Comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_single_peak_list_nativeID_format__combined_spectra, "MS:1002654", "single peak list nativeID format, combined spectra", "Comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_scan_number_only_nativeID_format__combined_spectra, "MS:1002655", "scan number only nativeID format, combined spectra", "Comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_spectrum_identifier_nativeID_format__combined_spectra, "MS:1002656", "spectrum identifier nativeID format, combined spectra", "Comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_mzML_unique_identifier__combined_spectra, "MS:1002657", "mzML unique identifier, combined spectra", "Comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_identification_parameter, "MS:1002658", "identification parameter", "Identification parameter for the search engine run.", false}, {MS_UniProtKB_text_sequence_format, "MS:1002659", "UniProtKB text sequence format", "Text-based format used by UniProtKB for sequence entries.", false}, {MS_UniProtKB_XML_sequence_format, "MS:1002660", "UniProtKB XML sequence format", "XML-based format used by UniProtKB for sequence entries.", false}, {MS_Morpheus, "MS:1002661", "Morpheus", "Morpheus search engine.", false}, {MS_Morpheus_Morpheus_score, "MS:1002662", "Morpheus:Morpheus score", "Morpheus score for PSMs.", false}, {MS_Morpheus_summed_Morpheus_score, "MS:1002663", "Morpheus:summed Morpheus score", "Summed Morpheus score for protein groups.", false}, {MS_interaction_score_derived_from_cross_linking, "MS:1002664", "interaction score derived from cross-linking", "Parent term for interaction scores derived from cross-linking.", false}, {MS_regular_expression_for_interaction_scores_derived_from_cross_linking, "MS:1002665", "regular expression for interaction scores derived from cross-linking", "([:digit:]+[.][a|b]:([:digit:]+|null):[:digit:]+[.][:digit:]+([Ee][+-][0-9]+)*:(true|false]\\{1\\})).", false}, {MS_impact_II, "MS:1002666", "impact II", "Bruker Daltonics' impact II.", false}, {MS_impact_HD, "MS:1002667", "impact HD", "Bruker Daltonics' impact HD.", false}, {MS_frag__iTRAQ_4plex_reporter_ion, "MS:1002668", "frag: iTRAQ 4plex reporter ion", "Standard reporter ion for iTRAQ 4Plex. The value slot holds the integer mass of the iTRAQ 4Plex reporter ion, e.g. 114.", false}, {MS_frag__iTRAQ_8plex_reporter_ion, "MS:1002669", "frag: iTRAQ 8plex reporter ion", "Standard reporter ion for iTRAQ 8Plex. The value slot holds the integer mass of the iTRAQ 8Plex reporter ion, e.g. 113.", false}, {MS_frag__TMT_reporter_ion, "MS:1002670", "frag: TMT reporter ion", "Standard reporter ion for TMT. The value slot holds the integer mass of the TMT reporter ion and can be suffixed with either N or C, indicating whether the mass difference is encoded at a Nitrogen or Carbon atom, e.g. 127N.", false}, {MS_frag__TMT_ETD_reporter_ion, "MS:1002671", "frag: TMT ETD reporter ion", "Standard reporter ion for TMT with ETD fragmentation. The value slot holds the integer mass of the TMT ETD reporter ion and can be suffixed with either N or C, indicating whether the mass difference is encoded at a Nitrogen or Carbon atom, e.g. 127C.", false}, {MS_no_modification_threshold, "MS:1002672", "no modification threshold", "No statistical threshold for accepting or rejecting that a modification position.", false}, {MS_OpenXQuest, "MS:1002673", "OpenXQuest", "Cross-Linking MS search engine.", false}, {MS_X500R_QTOF, "MS:1002674", "X500R QTOF", "SCIEX X500R QTOF, a quadrupole - quadrupole - time-of-flight mass spectrometer.", false}, {MS_cross_linking_result_details, "MS:1002675", "cross-linking result details", "This subsection describes terms which can describe details of cross-linking results.", false}, {MS_protein_pair_level_global_FDR, "MS:1002676", "protein-pair-level global FDR", "Estimation of the global false discovery rate of proteins-pairs in cross-linking experiments.", false}, {MS_residue_pair_level_global_FDR, "MS:1002677", "residue-pair-level global FDR", "Estimation of the global false discovery rate of residue-pairs in cross-linking experiments.", false}, {MS_supplemental_beam_type_collision_induced_dissociation, "MS:1002678", "supplemental beam-type collision-induced dissociation", "A supplemental collision-induced dissociation process that occurs in a beam-type collision cell in addition to another primary type of dissociation.", false}, {MS_supplemental_collision_induced_dissociation, "MS:1002679", "supplemental collision-induced dissociation", "The dissociation of an ion after supplemental collisional excitation.", false}, {MS_supplemental_collision_energy, "MS:1002680", "supplemental collision energy", "Energy for an ion experiencing supplemental collision with a stationary gas particle resulting in dissociation of the ion.", false}, {MS_OpenXQuest_combined_score, "MS:1002681", "OpenXQuest:combined score", "OpenXQuest's combined score for a cross-link spectrum match.", false}, {MS_OpenXQuest_xcorr_xlink, "MS:1002682", "OpenXQuest:xcorr xlink", "OpenXQuest's cross-correlation of cross-linked ions subscore.", false}, {MS_OpenXQuest_xcorr_common, "MS:1002683", "OpenXQuest:xcorr common", "OpenXQuest's cross-correlation of unlinked ions subscore.", false}, {MS_OpenXQuest_match_odds, "MS:1002684", "OpenXQuest:match-odds", "OpenXQuest's match-odds subscore.", false}, {MS_OpenXQuest_intsum, "MS:1002685", "OpenXQuest:intsum", "OpenXQuest's sum of matched peak intensity subscore.", false}, {MS_OpenXQuest_wTIC, "MS:1002686", "OpenXQuest:wTIC", "OpenXQuest's weighted percent of total ion current subscore.", false}, {MS_analysis_attribute, "MS:1002687", "analysis attribute", "Attribute of an item in the result of mass spectrometry proteomics data analysis.", false}, {MS_PTM_localization_attribute, "MS:1002688", "PTM localization attribute", "Statistic derived from a post-translational modification localization analysis.", false}, {MS_PTM_localization_single_result_statistic, "MS:1002689", "PTM localization single result statistic", "Statistic for a single item derived from a post-translational modification localization analysis.", false}, {MS_PTM_localization_result_list_statistic, "MS:1002690", "PTM localization result list statistic", "Statistic for all items derived from a post-translational modification localization analysis.", false}, {MS_global_FLR, "MS:1002691", "global FLR", "Global false localization rate for all localizations in a dataset.", false}, {MS_local_FLR_at_threshold, "MS:1002692", "local FLR at threshold", "Local false localization rate for the bottom item in list of localizations sorted from most to least confident.", false}, {MS_identification_attribute, "MS:1002693", "identification attribute", "Attribute of an identification item in the result of mass spectrometry proteomics data analysis.", false}, {MS_single_identification_result_attribute, "MS:1002694", "single identification result attribute", "Attribute of a single identification item (as opposed to a list) in the result of mass spectrometry proteomics data analysis.", false}, {MS_frag__isobaric_label_ion, "MS:1002695", "frag: isobaric label ion", "Fragment ion corresponding to an isobaric label artifact.", false}, {MS_secondary_isotope_peak, "MS:1002697", "secondary isotope peak", "Fragment ion is an isotopic peak other than that monoisotopic peak. This is used in conjuction with another ion type, such as frag: y ion.", false}, {MS_protein_cluster_identification_attribute, "MS:1002698", "protein cluster identification attribute", "An attribute of the protein cluster concept as used in mzIdentML.", false}, {MS_result_list_attribute, "MS:1002699", "result list attribute", "General property of an entire result list.", false}, {MS_PSM_level_result_list_attribute, "MS:1002700", "PSM-level result list attribute", "General property of the list of all PSMs.", false}, {MS_PSM_level_result_list_statistic, "MS:1002701", "PSM-level result list statistic", "Statistic pertaining to the full list of all PSMs.", false}, {MS_peptide_sequence_level_result_list_attribute, "MS:1002702", "peptide sequence-level result list attribute", "General property of all peptide sequences in the list.", false}, {MS_peptide_sequence_level_result_list_statistic, "MS:1002703", "peptide sequence-level result list statistic", "Statistic pertaining to all peptide sequences in the list.", false}, {MS_protein_level_result_list_attribute, "MS:1002704", "protein-level result list attribute", "Attribute of an entire protein list.", false}, {MS_protein_level_result_list_statistic, "MS:1002705", "protein-level result list statistic", "A statistical metric of an entire protein list.", false}, {MS_protein_group_level_result_list_statistic, "MS:1002706", "protein group-level result list statistic", "Attrbiute of an entire list of protein groups.", false}, {MS_____KR__, "MS:1002707", "(?=[KR])", "Regular expression for LysargiNase.", false}, {MS_LysargiNase, "MS:1002708", "LysargiNase", "Metalloproteinase found in Methanosarcina acetivorans that cleaves on the N-terminal side of lysine and arginine residues.", false}, {MS_Pegasus_BT, "MS:1002719", "Pegasus BT", "LECO bench-top GC time-of-flight mass spectrometer.", false}, {MS_MSPathFinder, "MS:1002720", "MSPathFinder", "PNNL top-down/bottom-up analysis software for identifying peptides and proteoforms in fragmentation mass spectra.", false}, {MS_MSPathFinder_SpecEValue, "MS:1002721", "MSPathFinder:SpecEValue", "MSPathFinder spectral E-value.", false}, {MS_MSPathFinder_EValue, "MS:1002722", "MSPathFinder:EValue", "MSPathFinder E-value.", false}, {MS_MSPathFinder_QValue, "MS:1002723", "MSPathFinder:QValue", "MSPathFinder Q-value.", false}, {MS_MSPathFinder_PepQValue, "MS:1002724", "MSPathFinder:PepQValue", "MSPathFinder peptide-level Q-value.", false}, {MS_MSPathFinder_RawScore, "MS:1002725", "MSPathFinder:RawScore", "MSPathFinder raw score.", false}, {MS_SYNAPT_G2_Si, "MS:1002726", "SYNAPT G2-Si", "Waters Corporation SYNAPT G2-Si orthogonal acceleration time-of-flight mass spectrometer.", false}, {MS_MALDI_SYNAPT_G2_Si, "MS:1002727", "MALDI SYNAPT G2-Si", "Waters Corporation MALDI SYNAPT G2-Si orthogonal acceleration time-of-flight mass spectrometer.", false}, {MS_Vion_IMS_QTof, "MS:1002728", "Vion IMS QTof", "Waters Corporation Vion IMS QTof orthogonal acceleration time-of-flight mass spectrometer.", false}, {MS_Xevo_G2_XS_Tof, "MS:1002729", "Xevo G2 XS Tof", "Waters Corporation Xevo G2 XS Tof orthogonal acceleration time-of-flight mass spectrometer.", false}, {MS_Xevo_TQ_XS, "MS:1002730", "Xevo TQ-XS", "Waters Corporation Xevo TQ-XS triple quadrupole mass spectrometer.", false}, {MS_Xevo_TQ_S_micro, "MS:1002731", "Xevo TQ-S micro", "Waters Corporation Xevo TQ-S micro triple quadrupole mass spectrometer.", false}, {MS_Orbitrap_Fusion_Lumos, "MS:1002732", "Orbitrap Fusion Lumos", "Thermo Scientific Orbitrap Fusion Lumos mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers.", false}, {MS_peptide_level_spectral_count, "MS:1002733", "peptide-level spectral count", "The number of MS2 spectra identified for a peptide sequence specified by the amino acid one-letter codes plus optional PTMs in spectral counting.", false}, {MS_peptide_ion_level_spectral_count, "MS:1002734", "peptide ion-level spectral count", "The number of MS2 spectra identified for a molecular ion defined by the peptide sequence represented by the amino acid one-letter codes, plus optional PTMs plus optional charged aducts plus the charge state, in spectral counting.", false}, {MS_feature_level_quantification_datatype, "MS:1002735", "feature-level quantification datatype", "The data type of the value reported in a QuantLayer for a feature.", false}, {MS_PSM_level_quantification_datatype, "MS:1002736", "PSM-level quantification datatype", "The data type of the value reported in a QuantLayer for a PSM.", false}, {MS_peptide_level_quantification_datatype, "MS:1002737", "peptide-level quantification datatype", "The data type of the value reported in a QuantLayer for a peptide.", false}, {MS_protein_level_quantification_datatype, "MS:1002738", "protein-level quantification datatype", "The data type of the value reported in a QuantLayer for a protein.", false}, {MS_protein_group_level_quantification_datatype, "MS:1002739", "protein group-level quantification datatype", "The data type of the value reported in a QuantLayer for a protein group.", false}, {MS_unmapped_peptide, "MS:1002740", "unmapped peptide", "Within the context of a proteogenomics approach, a peptide sequence that has not been mapped to a genomic location.", false}, {MS_unmapped_protein, "MS:1002741", "unmapped protein", "Within the context of a proteogenomics approach, a protein sequence that has not been mapped to a genomic location.", false}, {MS_noise_array, "MS:1002742", "noise array", "A data array of noise values.", false}, {MS_sampled_noise_m_z_array, "MS:1002743", "sampled noise m/z array", "A data array of parallel, independent m/z values for a sampling of noise across a spectrum (typically much smaller than MS:1000514, the m/z array).", false}, {MS_sampled_noise_intensity_array, "MS:1002744", "sampled noise intensity array", "A data array of intensity values for the amplitude of noise variation superposed on the baseline (MS:1002745) across a spectrum (for use with MS:1002743, sampled noise m/z array).", false}, {MS_sampled_noise_baseline_array, "MS:1002745", "sampled noise baseline array", "A data array of baseline intensity values (the intensity in the absence of analytes) for a sampling of noise across a spectrum (for use with MS:1002743, sampled noise m/z array).", false}, {MS_MS_Numpress_linear_prediction_compression_followed_by_zlib_compression, "MS:1002746", "MS-Numpress linear prediction compression followed by zlib compression", "Compression using MS-Numpress linear prediction compression and zlib.", false}, {MS_MS_Numpress_positive_integer_compression_followed_by_zlib_compression, "MS:1002747", "MS-Numpress positive integer compression followed by zlib compression", "Compression using MS-Numpress positive integer compression and zlib.", false}, {MS_MS_Numpress_short_logged_float_compression_followed_by_zlib_compression, "MS:1002748", "MS-Numpress short logged float compression followed by zlib compression", "Compression using MS-Numpress short logged float compression and zlib.", false}, {MS_Mascot_IntegratedSpectralLibrarySearch, "MS:1002749", "Mascot:IntegratedSpectralLibrarySearch", "Means that Mascot has integrated the search results of database and spectral library search into a single data set.", false}, {MS_NIST_MSPepSearch, "MS:1002750", "NIST MSPepSearch", "Search tool of the NIST (National Institute of Standards and Technology) for spectral library searches.", false}, {MS_NIST_MSP_format, "MS:1002751", "NIST MSP format", "MSP text format defined by the NIST.", false}, {MS_database_type_spectral_library, "MS:1002752", "database type spectral library", "Database containing spectra.", false}, {MS_value_between_0_and_1000_inclusive, "MS:1002753", "value between 0 and 1000 inclusive", "Value range for scores.", false}, {MS_MSPepSearch_score, "MS:1002754", "MSPepSearch:score", "MSPepSearch score (0 for entirely dissimilar and 1000 for identical observed spectrum and library spectrum.", false}, {MS_combined_ms_ms___spectral_library_search, "MS:1002755", "combined ms-ms + spectral library search", "A combined MS2 (with fragment ions) and spectral library search.", false}, {MS_iodoTMT_quantitation_analysis, "MS:1002756", "iodoTMT quantitation analysis", "Quantitation analysis using the Thermo Fisher sulfhydryl-reactive iodo tandem mass tag (iodoTMT) labelling workflow.", false}, {MS_glyco_TMT_quantitation_analysis, "MS:1002757", "glyco-TMT quantitation analysis", "Quantitation analysis using the Thermo Fisher carbonyl-reactive glyco-tandem mass tag (glyco-TMT) labelling workflow.", false}, {MS_aminoxyTMT_quantitation_analysis, "MS:1002758", "aminoxyTMT quantitation analysis", "Quantitation analysis using the Thermo Fisher carbonyl-reactive aminoxy tandem mass tag (aminoxyTMT) labelling workflow.", false}, {MS_hydrazideTMT_quantitation_analysis, "MS:1002759", "hydrazideTMT quantitation analysis", "Quantitation analysis using the Thermo Fisher carbonyl-reactive hydrazide tandem mass tag (hydrazide-TMT) labelling workflow.", false}, {MS_iTRAQH_quantitation_analysis, "MS:1002760", "iTRAQH quantitation analysis", "Quantification analysis using the carbonyl-reactive isobaric tags for relative and absolute quantification hydrazide (iTRAQH) labelling workflow.", false}, {MS_DiART_quantitation_analysis, "MS:1002761", "DiART quantitation analysis", "Quantification analysis using the amine-reactive deuterium isobaric amine reactive tag (DiART) labelling workflow.", false}, {MS_DiLeu_quantitation_analysis, "MS:1002762", "DiLeu quantitation analysis", "Quantification analysis using the amine-reactive dimethyl leucine (DiLeu) tag labelling workflow.", false}, {MS_TMT_reagent_127N, "MS:1002763", "TMT reagent 127N", "The name of the sample labelled with the TMT reagent 127N.", false}, {MS_TMT_reagent_127C, "MS:1002764", "TMT reagent 127C", "The name of the sample labelled with the TMT reagent 127C.", false}, {MS_TMT_reagent_128N, "MS:1002765", "TMT reagent 128N", "The name of the sample labelled with the TMT reagent 128N.", false}, {MS_TMT_reagent_128C, "MS:1002766", "TMT reagent 128C", "The name of the sample labelled with the TMT reagent 128C.", false}, {MS_TMT_reagent_129N, "MS:1002767", "TMT reagent 129N", "The name of the sample labelled with the TMT reagent 129N.", false}, {MS_TMT_reagent_129C, "MS:1002768", "TMT reagent 129C", "The name of the sample labelled with the TMT reagent 129C.", false}, {MS_TMT_reagent_130N, "MS:1002769", "TMT reagent 130N", "The name of the sample labelled with the TMT reagent 130N.", false}, {MS_TMT_reagent_130C, "MS:1002770", "TMT reagent 130C", "The name of the sample labelled with the TMT reagent 130C.", false}, {MS_DiART_reagent, "MS:1002771", "DiART reagent", "Deuterium isobaric amine reactive tag labeling reagent.", false}, {MS_DiART_reagent_114, "MS:1002772", "DiART reagent 114", "The name of the sample labelled with the DiART reagent 114.", false}, {MS_DiART_reagent_115, "MS:1002773", "DiART reagent 115", "The name of the sample labelled with the DiART reagent 115.", false}, {MS_DiART_reagent_116, "MS:1002774", "DiART reagent 116", "The name of the sample labelled with the DiART reagent 116.", false}, {MS_DiART_reagent_117, "MS:1002775", "DiART reagent 117", "The name of the sample labelled with the DiART reagent 117.", false}, {MS_DiART_reagent_118, "MS:1002776", "DiART reagent 118", "The name of the sample labelled with the DiART reagent 118.", false}, {MS_DiART_reagent_119, "MS:1002777", "DiART reagent 119", "The name of the sample labelled with the DiART reagent 119.", false}, {MS_DiLeu_reagent, "MS:1002778", "DiLeu reagent", "Dimethyl leucine labeling reagent.", false}, {MS_DiLeu_reagent_115, "MS:1002779", "DiLeu reagent 115", "The name of the sample labelled with the DiLeu reagent 115.", false}, {MS_DiLeu_reagent_116, "MS:1002780", "DiLeu reagent 116", "The name of the sample labelled with the DiLeu reagent 116.", false}, {MS_DiLeu_reagent_117, "MS:1002781", "DiLeu reagent 117", "The name of the sample labelled with the DiLeu reagent 117.", false}, {MS_DiLeu_reagent_118, "MS:1002782", "DiLeu reagent 118", "The name of the sample labelled with the DiLeu reagent 118.", false}, {MS_6550_iFunnel_Q_TOF_LC_MS, "MS:1002783", "6550 iFunnel Q-TOF LC/MS", "The 6550 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6550A_iFunnel_Q_TOF_LC_MS, "MS:1002784", "6550A iFunnel Q-TOF LC/MS", "The 6550A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6520B_Q_TOF_LC_MS, "MS:1002785", "6520B Q-TOF LC/MS", "The 6520B Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6530A_Q_TOF_LC_MS, "MS:1002786", "6530A Q-TOF LC/MS", "The 6530A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6530B_Q_TOF_LC_MS, "MS:1002787", "6530B Q-TOF LC/MS", "The 6530B Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6538_Q_TOF_LC_MS, "MS:1002788", "6538 Q-TOF LC/MS", "The 6538 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6540_Q_TOF_LC_MS, "MS:1002789", "6540 Q-TOF LC/MS", "The 6540 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6542_Q_TOF_LC_MS, "MS:1002790", "6542 Q-TOF LC/MS", "The 6542 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6545_Q_TOF_LC_MS, "MS:1002791", "6545 Q-TOF LC/MS", "The 6545 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6560_Q_TOF_LC_MS, "MS:1002792", "6560 Q-TOF LC/MS", "The 6560 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6570_Q_TOF_LC_MS, "MS:1002793", "6570 Q-TOF LC/MS", "The 6570 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6120B_Quadrupole_LC_MS, "MS:1002794", "6120B Quadrupole LC/MS", "The 6120B Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers.", false}, {MS_6150_Quadrupole_LC_MS, "MS:1002795", "6150 Quadrupole LC/MS", "The 6150 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers.", false}, {MS_6224_Time_of_Flight_LC_MS, "MS:1002796", "6224 Time-of-Flight LC/MS", "The 6224 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6230A_Time_of_Flight_LC_MS, "MS:1002797", "6230A Time-of-Flight LC/MS", "The 6230A Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6230B_Time_of_Flight_LC_MS, "MS:1002798", "6230B Time-of-Flight LC/MS", "The 6230B Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer.", false}, {MS_6430_Triple_Quadrupole_LC_MS, "MS:1002799", "6430 Triple Quadrupole LC/MS", "The 6430 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_6495A_Triple_Quadrupole_LC_MS, "MS:1002800", "6495A Triple Quadrupole LC/MS", "The 6495A Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_6495B_Triple_Quadrupole_LC_MS, "MS:1002801", "6495B Triple Quadrupole LC/MS", "The 6495B Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_7000A_Triple_Quadrupole_GC_MS, "MS:1002802", "7000A Triple Quadrupole GC/MS", "The 7000A Quadrupole GC/MS system is a Agilent gas chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_7000B_Triple_Quadrupole_GC_MS, "MS:1002803", "7000B Triple Quadrupole GC/MS", "The 7000B Quadrupole GC/MS system is a Agilent gas chromatography instrument combined with a Agilent triple quadrupole mass spectrometer.", false}, {MS_7800_Quadrupole_ICP_MS, "MS:1002804", "7800 Quadrupole ICP-MS", "The 7800 Quadrupole ICP-MS system is a Agilent inductively couple plasma instrument combined with a Agilent quadrupole mass spectrometer.", false}, {MS_8800_Triple_Quadrupole_ICP_MS, "MS:1002805", "8800 Triple Quadrupole ICP-MS", "The 8800 Quadrupole ICP-MS system is a Agilent inductively couple plasma instrument combined with a Agilent quadrupole mass spectrometer.", false}, {MS_ion, "MS:1002806", "ion", "Molecular entity having a net positive or negative electric charge.", false}, {MS_positive_mode_adduct_ion, "MS:1002807", "positive mode adduct ion", "Adduct ion with positive ionization.", false}, {MS_negative_mode_adduct_ion, "MS:1002808", "negative mode adduct ion", "Adduct ion with negative ionization.", false}, {MS_adduct_ion_attribute, "MS:1002809", "adduct ion attribute", "Nonphysical characteristic attributed to an adduct ion.", false}, {MS_adduct_ion_X_m_z, "MS:1002810", "adduct ion X m/z", "Theoretical m/z of the X component in the adduct M+X or M-X. This term was formerly called 'adduct ion mass', but it is not really a mass. It corresponds to the column mislabelled as 'mass' at https://fiehnlab.ucdavis.edu/staff/kind/Metabolomics/MS-Adduct-Calculator.", false}, {MS_adduct_ion_isotope, "MS:1002811", "adduct ion isotope", "Isotope of the matrix molecule M of an adduct formation.", false}, {MS_Regular_expression_for_adduct_ion_formula, "MS:1002812", "Regular expression for adduct ion formula", "(\\[[:digit:]{0,1}M([+][:digit:]{0,1}(H|K|(Na)|(Li)|(Cl)|(Br)|(NH3)|(NH4)|(CH3OH)|(IsoProp)|(DMSO)|(FA)|(Hac)|(TFA)|(NaCOOH)|(HCOOH)|(CF3COOH)|(ACN))){0,}([-][:digit:]{0,1}(H|(H2O)|(CH2)|(CH4)|(NH3)|(CO)|(CO2)|(COCH2)|(HCOOH)|(C2H4)|(C4H8)|(C3H2O3)|(C5H8O4)|(C6H10O4)|(C6H10O5)|(C6H8O6))){0,}\\][:digit:]{0,1}[+-]).", false}, {MS_adduct_ion_formula, "MS:1002813", "adduct ion formula", "Adduct formation formula of the form M+X or M-X, as constrained by the provided regular expression.", false}, {MS_volt_second_per_square_centimeter, "MS:1002814", "volt-second per square centimeter", "An electrical mobility unit that equals the speed [cm/s] an ion reaches when pulled through a gas by a Voltage[V] over a certain distance [cm].", false}, {MS_inverse_reduced_ion_mobility, "MS:1002815", "inverse reduced ion mobility", "Ion mobility measurement for an ion or spectrum of ions as measured in an ion mobility mass spectrometer. This might refer to the central value of a bin into which all ions within a narrow range of mobilities have been aggregated.", false}, {MS_mean_ion_mobility_array, "MS:1002816", "mean ion mobility array", "Array of population mean ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_Bruker_TDF_format, "MS:1002817", "Bruker TDF format", "Bruker TDF raw file format.", false}, {MS_Bruker_TDF_nativeID_format, "MS:1002818", "Bruker TDF nativeID format", "Native format defined by frame=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger.", false}, {MS_Bruker_TDF_nativeID_format__combined_spectra, "MS:1002819", "Bruker TDF nativeID format, combined spectra", "Bruker TDF comma separated list of spectra that have been combined prior to searching or interpretation.", false}, {MS_M_H_ion_1002820, "MS:1002820", "M+H ion (MS:1002820)", "Adduct formed by protonation of a matrix molecule M, i.e. the addition of a matrix molecule M plus a proton.", false}, {MS_M_H_ion_1002821, "MS:1002821", "M-H ion (MS:1002821)", "Adduct formed by deprotonation of a matrix molecule M, i.e. the removal of a proton from a matrix molecule M.", false}, {MS_OpenMS_file_format, "MS:1002822", "OpenMS file format", "File format developed by the OpenMS team.", false}, {MS_idXML, "MS:1002823", "idXML", "OpenMS intermediate identification format.", false}, {MS_featureXML, "MS:1002824", "featureXML", "OpenMS feature file format.", false}, {MS_consensusXML, "MS:1002825", "consensusXML", "OpenMS consensus map format.", false}, {MS_MetaMorpheus, "MS:1002826", "MetaMorpheus", "MetaMorpheus search engine.", false}, {MS_MetaMorpheus_score, "MS:1002827", "MetaMorpheus:score", "MetaMorpheus score for PSMs.", false}, {MS_MetaMorpheus_protein_score, "MS:1002828", "MetaMorpheus:protein score", "MetaMorpheus score for protein groups.", false}, {MS_XCMS_into, "MS:1002829", "XCMS:into", "Feature intensity produced by XCMS findPeaks() from integrated peak intensity.", false}, {MS_XCMS_intf, "MS:1002830", "XCMS:intf", "Feature intensity produced by XCMS findPeaks() from baseline corrected integrated peak intensity.", false}, {MS_XCMS_maxo, "MS:1002831", "XCMS:maxo", "Feature intensity produced by XCMS findPeaks() from maximum peak intensity.", false}, {MS_XCMS_area, "MS:1002832", "XCMS:area", "Feature intensity produced by XCMS findPeaks() from feature area that is not normalized by the scan rate.", false}, {MS_alternating_polarity_mode, "MS:1002833", "alternating polarity mode", "Polarities of the scans of a run are alternating, i.e. both positive and negative mode scans are acquired.", false}, {MS_ProteomeDiscoverer_Delta_Score, "MS:1002834", "ProteomeDiscoverer:Delta Score", "The Delta Score reported by Proteome Discoverer version 2.", false}, {MS_LTQ_Orbitrap_Classic, "MS:1002835", "LTQ Orbitrap Classic", "Thermo Fisher Scientific LTQ Orbitrap Classic.", false}, {MS_iProX_dataset_identifier, "MS:1002836", "iProX dataset identifier", "Dataset identifier issued by the iProX repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_iProX_dataset_URI, "MS:1002837", "iProX dataset URI", "URI that allows the access to one dataset in the iProX repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_mzMLb_format, "MS:1002838", "mzMLb format", "mzMLb file format, mzML encapsulated within HDF5.", false}, {MS_Conversion_to_mzMLb, "MS:1002839", "Conversion to mzMLb", "Conversion of a file format to Proteomics Standards Initiative mzMLb file format.", false}, {MS_external_reference_data, "MS:1002840", "external reference data", "Data belonging to an external reference.", false}, {MS_external_HDF5_dataset, "MS:1002841", "external HDF5 dataset", "The HDF5 dataset location containing the binary data, relative to the dataset containing the mzML. Also indicates that there is no data in the section of the BinaryDataArray.", false}, {MS_external_offset, "MS:1002842", "external offset", "The position in the external data where the array begins.", false}, {MS_external_array_length, "MS:1002843", "external array length", "Describes how many fields an array contains.", false}, {MS_Experiment_additional_parameter, "MS:1002844", "Experiment additional parameter", "Root node for terms relating to the description of an Experiment in relation to the PRIDE-XML element ExperimentCollection/Experiment/additional/cvParam.", false}, {MS_Associated_file_URI, "MS:1002845", "Associated file URI", "URI of one external file associated to the PRIDE experiment (maybe through a PX submission).", false}, {MS_Associated_raw_file_URI, "MS:1002846", "Associated raw file URI", "URI of one raw data file associated to the PRIDE experiment (maybe through a PX submission).", false}, {MS_ProteomeCentral_dataset_URI, "MS:1002847", "ProteomeCentral dataset URI", "URI associated to one PX submission in ProteomeCentral.", false}, {MS_Result_file_URI, "MS:1002848", "Result file URI", "URI of one file labeled as 'Result', associated to one PX submission.", false}, {MS_Search_engine_output_file_URI, "MS:1002849", "Search engine output file URI", "URI of one search engine output file associated to one PX submission.", false}, {MS_Peak_list_file_URI, "MS:1002850", "Peak list file URI", "URI of one of one search engine output file associated to one PX submission.", false}, {MS_Other_type_file_URI, "MS:1002851", "Other type file URI", "URI of one file labeled as 'Other', associated to one PX submission.", false}, {MS_Dataset_FTP_location, "MS:1002852", "Dataset FTP location", "FTP location of one entire PX data set.", false}, {MS_Dataset_with_no_associated_published_manuscript, "MS:1002853", "Dataset with no associated published manuscript", "A dataset which does not have an associated published manuscript.", false}, {MS_Peer_reviewed_dataset, "MS:1002854", "Peer-reviewed dataset", "Dataset has been peer-reviewed somehow.", false}, {MS_Non_peer_reviewed_dataset, "MS:1002855", "Non peer-reviewed dataset", "Dataset that has not been peer-reviewed by any means.", false}, {MS_Supported_dataset_by_repository, "MS:1002856", "Supported dataset by repository", "Dataset for which the identifications and/or spectra/traces are in formats that can be parsed by the hosting data repository such that internal references between identifications and spectra/traces are preserved and browsable at the repository. This is usually called a complete submission.", false}, {MS_Unsupported_dataset_by_repository, "MS:1002857", "Unsupported dataset by repository", "Dataset for which the identifications and/or spectra/traces are in formats that cannot be parsed by the hosting data repository and thus internal references between identifications and spectra/traces are not browsable at the repository. This is usually called a partial submission.", false}, {MS_Dataset_with_its_publication_pending, "MS:1002858", "Dataset with its publication pending", "A dataset which has an associated manuscript pending for publication.", false}, {MS_Additional_associated_raw_file_URI, "MS:1002859", "Additional associated raw file URI", "Additional URI of one raw data file associated to the PRIDE experiment (maybe through a PX submission). The URI is provided via an additional resource to PRIDE.", false}, {MS_Gel_image_file_URI, "MS:1002860", "Gel image file URI", "URI of one gel image file associated to one PX submission.", false}, {MS_Reprocessed_complete_dataset, "MS:1002861", "Reprocessed complete dataset", "All the raw files included in the original dataset (or group of original datasets) have been reanalysed.", false}, {MS_Reprocessed_subset_dataset, "MS:1002862", "Reprocessed subset dataset", "A subset of the raw files included in the original dataset (or group of original datasets) has been reanalysed.", false}, {MS_Data_derived_from_previous_dataset, "MS:1002863", "Data derived from previous dataset", "One dataset is a reanalysis of previously published data.", false}, {MS_No_PTMs_are_included_in_the_dataset, "MS:1002864", "No PTMs are included in the dataset", "No post-translational-modifications are been included in the identified peptides of one dataset.", false}, {MS_Accepted_manuscript, "MS:1002865", "Accepted manuscript", "A dataset has one associated manuscript, which has been accepted but no PubMedID is available yet.", false}, {MS_Reference, "MS:1002866", "Reference", "Literature reference associated with one dataset (including the authors, title, year and journal details). The value field can be used for the PubMedID, or to specify if one manuscript is just submitted or accepted, but it does not have a PubMedID yet.", false}, {MS_Experimental_information_has_been_refined_since_this_experiment_was_originally_made_publicly_available, "MS:1002867", "Experimental information has been refined since this experiment was originally made publicly available", "This means that the experimental information available has been improved, for instance precursor charges were added.", false}, {MS_Original_data, "MS:1002868", "Original data", "One dataset is not a reanalysis of previously published data.", false}, {MS_mzR, "MS:1002869", "mzR", "Bioconductor package mzR for reading and writing mass spectrometry data files.", false}, {MS_MSnbase, "MS:1002870", "MSnbase", "Bioconductor package MSnbase provides infrastructure for manipulation, processing and visualization of mass spectrometry and proteomics data, ranging from raw to quantitative and annotated data.", false}, {MS_CAMERA, "MS:1002871", "CAMERA", "Bioconductor package CAMERA for annotation of peak lists generated by xcms, rule based annotation of isotopes and adducts, isotope validation, EIC correlation based tagging of unknown adducts and fragments.", false}, {MS_Panorama_Public_dataset_identifier, "MS:1002872", "Panorama Public dataset identifier", "Dataset identifier issued by the Panorama Public repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_Panorama_Public_dataset_URI, "MS:1002873", "Panorama Public dataset URI", "URI that allows the access to one dataset in the Panorama Public repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication.", false}, {MS_TSQ_Altis, "MS:1002874", "TSQ Altis", "Thermo Scientific TSQ Altis Triple Quadrupole MS.", false}, {MS_TSQ_Quantis, "MS:1002875", "TSQ Quantis", "Thermo Scientific TSQ Quantis Triple Quadrupole MS.", false}, {MS_TSQ_9000, "MS:1002876", "TSQ 9000", "Thermo Scientific TSQ 9000 Triple Quadrupole MS.", false}, {MS_Q_Exactive_HF_X, "MS:1002877", "Q Exactive HF-X", "Thermo Scientific Q Exactive HF-X Hybrid Quadrupole Orbitrap MS.", false}, {MS_small_molecule_analysis_software, "MS:1002878", "small molecule analysis software", "Software for the analysis of small molecules.", false}, {MS_Progenesis_QI, "MS:1002879", "Progenesis QI", "Metabolomics analysis software for LC-MS data from Nonlinear Dynamics.", false}, {MS_Compound_Discoverer, "MS:1002880", "Compound Discoverer", "Metabolomics analysis software from Thermo Fisher Scientific.", false}, {MS_MyCompoundID, "MS:1002881", "MyCompoundID", "Metabolite identification tool MyCompoundID.", false}, {MS_study_variable_average_function, "MS:1002882", "study variable average function", "Function used to calculate the study variable quantification value.", false}, {MS_median, "MS:1002883", "median", "Median function.", false}, {MS_study_variable_variation_function, "MS:1002884", "study variable variation function", "Function used to calculate the study variable quantification variation value.", false}, {MS_standard_error, "MS:1002885", "standard error", "Standard error function.", false}, {MS_small_molecule_quantification_datatype, "MS:1002886", "small molecule quantification datatype", "The value reported in a small molecule quantification.", false}, {MS_Progenesis_QI_normalised_abundance, "MS:1002887", "Progenesis QI normalised abundance", "The normalised abundance produced by Progenesis QI LC-MS.", false}, {MS_small_molecule_confidence_measure, "MS:1002888", "small molecule confidence measure", "The confidence score produced by a small molecule analysis software.", false}, {MS_Progenesis_MetaScope_score, "MS:1002889", "Progenesis MetaScope score", "The confidence score produced by Progenesis QI.", false}, {MS_fragmentation_score, "MS:1002890", "fragmentation score", "The fragmentation confidence score.", false}, {MS_isotopic_fit_score, "MS:1002891", "isotopic fit score", "The isotopic fit confidence score.", false}, {MS_ion_mobility_attribute, "MS:1002892", "ion mobility attribute", "An attribute describing ion mobility searches.", false}, {MS_ion_mobility_array, "MS:1002893", "ion mobility array", "Abstract array of ion mobility data values. A more specific child term concept should be specified in data files to make precise the nature of the data being provided.", false}, {MS_InChIKey, "MS:1002894", "InChIKey", "Unique chemical structure identifier for chemical compounds.", false}, {MS_small_molecule_identification_attribute, "MS:1002895", "small molecule identification attribute", "Compound identification information.", false}, {MS_compound_identification_confidence_level, "MS:1002896", "compound identification confidence level", "Confidence level for annotation of identified compounds as defined by the Metabolomics Standards Initiative (MSI). The value slot can have the values 'Level 0' until 'Level 4'.", false}, {MS_isotopomer_peak_OBSOLETE, "MS:1002897", "isotopomer peak", "Identifies a peak when no de-isotoping has been performed. The value slot reports the isotopomer peak, e.g. '2H', '13C', '15N', '18O', '31P'.", true}, {MS_Shimadzu_Biotech_QTOF_nativeID_format, "MS:1002898", "Shimadzu Biotech QTOF nativeID format", "Native format defined by scan=xsd:nonNegativeInteger.", false}, {MS_msalign_format, "MS:1002899", "msalign format", "msalign file format.", false}, {MS_feature_format, "MS:1002900", "feature format", "TopFD feature file format.", false}, {MS_TopPIC, "MS:1002901", "TopPIC", "TopPIC: a software tool for top-down mass spectrometry-based proteoform identification and characterization.", false}, {MS_TopFD, "MS:1002902", "TopFD", "Top-down mass spectral feature detection.", false}, {MS_TopMG, "MS:1002903", "TopMG", "A mass graph-based approach for the identification of modified proteoforms using top-down tandem mass spectra.", false}, {MS_proteoform_level_identification_attribute, "MS:1002904", "proteoform-level identification attribute", "Proteoform level information.", false}, {MS_proteoform_level_identification_statistic, "MS:1002905", "proteoform-level identification statistic", "Identification confidence metric for a proteoform.", false}, {MS_search_engine_specific_score_for_proteoforms, "MS:1002906", "search engine specific score for proteoforms", "Search engine specific proteoform scores.", false}, {MS_proteoform_level_global_FDR, "MS:1002907", "proteoform-level global FDR", "Estimation of the global false discovery rate of proteoforms.", false}, {MS_proteoform_level_local_FDR, "MS:1002908", "proteoform-level local FDR", "Estimation of the local false discovery rate of proteoforms.", false}, {MS_proteoform_level_statistical_threshold, "MS:1002909", "proteoform-level statistical threshold", "Estimated statistical threshold at proteoform-level.", false}, {MS_proteoform_level_global_FDR_threshold, "MS:1002910", "proteoform-level global FDR threshold", "Threshold for the global false discovery rate of proteoforms.", false}, {MS_proteoform_level_local_FDR_threshold, "MS:1002911", "proteoform-level local FDR threshold", "Threshold for the local false discovery rate of proteoforms.", false}, {MS_TopPIC_input_parameter, "MS:1002912", "TopPIC input parameter", "Search engine input parameters specific to TopPIC.", false}, {MS_TopPIC_fixed_modification, "MS:1002913", "TopPIC:fixed modification", "Fixed modifications for TopPIC searching.", false}, {MS_TopPIC_N_term_form, "MS:1002914", "TopPIC:N-term form", "N-terminal forms of proteins allowed in TopPIC searching.", false}, {MS_TopPIC_error_tolerance, "MS:1002915", "TopPIC:error tolerance", "Error tolerance for precursor and fragment masses in PPM.", false}, {MS_TopPIC_max_shift, "MS:1002916", "TopPIC:max shift", "Maximum value of the mass shift (in Dalton) of an unexpected modification.", false}, {MS_TopPIC_min_shift, "MS:1002917", "TopPIC:min shift", "Minimum value of the mass shift (in Dalton) of an unexpected modification.", false}, {MS_TopPIC_shift_num, "MS:1002918", "TopPIC:shift num", "Maximum number of unexpected modifications in a proteoform spectrum match.", false}, {MS_TopPIC_spectral_cutoff_type, "MS:1002919", "TopPIC:spectral cutoff type", "Spectrum-level cutoff type for filtering identified proteoform spectrum matches.", false}, {MS_TopPIC_spectral_cutoff_value, "MS:1002920", "TopPIC:spectral cutoff value", "Spectrum-level cutoff value for filtering identified proteoform spectrum matches.", false}, {MS_TopPIC_proteoform_level_cutoff_type, "MS:1002921", "TopPIC:proteoform-level cutoff type", "Proteoform-level cutoff type for filtering identified proteoform spectrum matches.", false}, {MS_TopPIC_proteoform_level_cutoff_value, "MS:1002922", "TopPIC:proteoform-level cutoff value", "Proteoform-level cutoff value for filtering identified proteoform spectrum matches.", false}, {MS_TopPIC_generating_function, "MS:1002923", "TopPIC:generating function", "P-value and E-value estimation using generating function.", false}, {MS_TopPIC_combined_spectrum_number, "MS:1002924", "TopPIC:combined spectrum number", "Number of combined spectra.", false}, {MS_TopPIC_mod_file, "MS:1002925", "TopPIC:mod file", "The text file containing the information of common PTMs.", false}, {MS_TopPIC_thread_number, "MS:1002926", "TopPIC:thread number", "Number of threads used in TopPIC.", false}, {MS_TopPIC_use_TopFD_feature, "MS:1002927", "TopPIC:use TopFD feature", "Proteoform identification using TopFD feature file.", false}, {MS_TopPIC_spectral_E_value, "MS:1002928", "TopPIC:spectral E-value", "TopPIC spectrum-level E-value.", false}, {MS_TopPIC_spectral_FDR, "MS:1002929", "TopPIC:spectral FDR", "TopPIC spectrum-level FDR.", false}, {MS_TopPIC_proteoform_level_FDR, "MS:1002930", "TopPIC:proteoform-level FDR", "TopPIC proteoform-level FDR.", false}, {MS_TopPIC_spectral_p_value, "MS:1002931", "TopPIC:spectral p-value", "TopPIC spectrum-level p-value.", false}, {MS_TopPIC_MIScore, "MS:1002932", "TopPIC:MIScore", "Modification identification score.", false}, {MS_TopPIC_MIScore_threshold, "MS:1002933", "TopPIC:MIScore threshold", "TopPIC:MIScore threshold.", false}, {MS_TopMG_input_parameter, "MS:1002934", "TopMG input parameter", "Search engine input parameters specific to TopMG.", false}, {MS_TopMG_fixed_modification, "MS:1002935", "TopMG:fixed modification", "Fixed modifications for TopMG searching.", false}, {MS_TopMG_N_term_form, "MS:1002936", "TopMG:N-term form", "N-terminal forms of proteins allowed in TopMG searching.", false}, {MS_TopMG_error_tolerance, "MS:1002937", "TopMG:error tolerance", "Error tolerance for precursor and fragment masses in PPM.", false}, {MS_TopMG_max_shift, "MS:1002938", "TopMG:max shift", "Maximum value of the mass shift (in Dalton).", false}, {MS_TopMG_spectral_cutoff_type, "MS:1002939", "TopMG:spectral cutoff type", "Spectrum-level cutoff type for filtering identified proteoform spectrum matches.", false}, {MS_TopMG_spectral_cutoff_value, "MS:1002940", "TopMG:spectral cutoff value", "Spectrum-level cutoff value for filtering identified proteoform spectrum matches.", false}, {MS_TopMG_proteoform_level_cutoff_type, "MS:1002941", "TopMG:proteoform-level cutoff type", "Proteoform-level cutoff type for filtering identified proteoform spectrum matches.", false}, {MS_TopMG_proteoform_level_cutoff_value, "MS:1002942", "TopMG:proteoform-level cutoff value", "Proteoform-level cutoff value for filtering identified proteoform spectrum matches.", false}, {MS_TopMG_mod_file, "MS:1002943", "TopMG:mod file", "The text file containing the information of common PTMs.", false}, {MS_TopMG_thread_number, "MS:1002944", "TopMG:thread number", "Number of threads used in TopMG.", false}, {MS_TopMG_use_TopFD_feature, "MS:1002945", "TopMG:use TopFD feature", "Proteoform identification using TopFD feature file.", false}, {MS_TopMG_proteoform_graph_gap_size, "MS:1002946", "TopMG:proteoform graph gap size", "Gap size in constructing proteoform graph.", false}, {MS_TopMG_variable_PTM_number, "MS:1002947", "TopMG:variable PTM number", "Maximum number of variable PTMs.", false}, {MS_TopMG_variable_PTM_number_in_proteoform_graph_gap, "MS:1002948", "TopMG:variable PTM number in proteoform graph gap", "Maximum number of variable PTMs in a proteoform graph gap.", false}, {MS_TopMG_use_ASF_DIAGONAL, "MS:1002949", "TopMG:use ASF-DIAGONAL", "Protein filtering using ASF-DIAGONAL method.", false}, {MS_TopMG_spectral_E_value, "MS:1002950", "TopMG:spectral E-value", "TopMG spectrum-level E-value.", false}, {MS_TopMG_spectral_FDR, "MS:1002951", "TopMG:spectral FDR", "TopMG spectrum-level FDR.", false}, {MS_TopMG_proteoform_level_FDR, "MS:1002952", "TopMG:proteoform-level FDR", "TopMG proteoform-level FDR.", false}, {MS_TopMG_spectral_p_value, "MS:1002953", "TopMG:spectral p-value", "TopMG spectrum-level p-value.", false}, {MS_collisional_cross_sectional_area, "MS:1002954", "collisional cross sectional area", "Structural molecular descriptor for the effective interaction area between the ion and neutral gas measured in ion mobility mass spectrometry.", false}, {MS_hr_ms_compound_identification_confidence_level, "MS:1002955", "hr-ms compound identification confidence level", "Refined High Resolution mass spectrometry confidence level for annotation of identified compounds as proposed by Schymanski et al. The value slot can have the values 'Level 1', 'Level 2', 'Level 2a', 'Level 2b', 'Level 3', 'Level 4', and 'Level 5'.", false}, {MS_isotopic_ion_MS_peak, "MS:1002956", "isotopic ion MS peak", "A mass spectrometry peak that represents one or more isotopic ions. The value slot contains a description of the represented isotope set, e.g. 'M+1 peak'.", false}, {MS_isotopomer_MS_peak, "MS:1002957", "isotopomer MS peak", "The described isotopomer mass spectrometric signal. The value slot contains a description of the represented isotopomer, e.g. '13C peak', '15N peak', '2H peak', '18O peak' or '31P peak'.", false}, {MS_isotopologue_MS_peak, "MS:1002958", "isotopologue MS peak", "The described isotopologue mass spectrometric signal. The value slot contains a description of the represented isotopologue, e.g. '13C1 peak' or '15N1 peak'.", false}, {MS_isomer, "MS:1002959", "isomer", "One of several species (or molecular entities) that have the same atomic composition (molecular formula) but different line formulae or different stereochemical formulae.", false}, {MS_isotopomer, "MS:1002960", "isotopomer", "An isomer that differs from another only in the spatial distribution of the constitutive isotopic atoms.", false}, {MS_isotopologue, "MS:1002961", "isotopologue", "A molecular entity that differs only in isotopic composition (number of isotopic substitutions).", false}, {MS_mean, "MS:1002962", "mean", "The arithmetic mean.", false}, {MS_variation_coefficient, "MS:1002963", "variation coefficient", "The coefficient of variation.", false}, {MS_lipidomics_analysis_software, "MS:1002964", "lipidomics analysis software", "Lipidomics analysis software.", false}, {MS_Lipid_Data_Analyzer, "MS:1002965", "Lipid Data Analyzer", "Lipid Data Analyzer software for lipid quantification.", false}, {MS_chrom_format, "MS:1002966", "chrom format", "The Lipid Data Analyzer native chrom format.", false}, {MS_LipidHunter, "MS:1002967", "LipidHunter", "Software for identification of phospholipids by high-throughput processing of LC-MS and shotgun lipidomics datasets.", false}, {MS_LipidXplorer, "MS:1002968", "LipidXplorer", "Software for consensual cross-platform lipidomics.", false}, {MS_LipidMatch, "MS:1002969", "LipidMatch", "An automated workflow for rule-based lipid identification using untargeted high-resolution tandem mass spectrometry data.", false}, {MS_Greazy, "MS:1002970", "Greazy", "Open-source software for automated phospholipid tandem mass spectrometry identification.", false}, {MS_LipidBlast, "MS:1002971", "LipidBlast", "LC-MS-based lipidomics and automated identification of lipids using the LipidBlast in-silico MS/MS library.", false}, {MS_Lipid_Pro, "MS:1002972", "Lipid-Pro", "A computational lipid identification solution for untargeted lipidomics on data-independent acquisition tandem mass spectrometry platforms.", false}, {MS_LipidFinder, "MS:1002973", "LipidFinder", "A computational workflow for the discovery of lipids for the identification of eicosanoid-phosphoinositides in platelets.", false}, {MS_LipiDex, "MS:1002974", "LipiDex", "An integrated software package for high-confidence lipid identification.", false}, {MS_LIQUID, "MS:1002975", "LIQUID", "An-open source software for identifying lipids in LC-MS/MS-based lipidomics data.", false}, {MS_ALEX, "MS:1002976", "ALEX", "Analysis of lipid experiments, a calculator for m/z values of intact lipid molecules (MS1).", false}, {MS_ALEX123, "MS:1002977", "ALEX123", "Analysis of lipid experiments 123, a calculator with m/z values of intact lipid molecules (MS1) and their fragment ions at the MS2 and MS3 level.", false}, {MS_LIMSA, "MS:1002978", "LIMSA", "Software tool for the quantitative analysis of mass spectrometric lipidome data.", false}, {MS_LOBSTAHS, "MS:1002979", "LOBSTAHS", "Adduct-Based lipidomics software for the discovery and identification of oxidative stress biomarkers.", false}, {MS_LipidQA, "MS:1002980", "LipidQA", "Lipid qualitative/quantitative analysis software for identification and quantitation of complex lipid molecular species.", false}, {MS_Proline, "MS:1002981", "Proline", "The Proline software suite for mass spectrometry based proteomics.", false}, {MS_PepNovo, "MS:1002982", "PepNovo", "PepNovo tool for de novo peptide sequencing.", false}, {MS_pNovo, "MS:1002983", "pNovo", "pNovo tool for de novo peptide sequencing and identification using HCD spectra.", false}, {MS_Novor, "MS:1002984", "Novor", "Novor real-time peptide de novo sequencing software tool.", false}, {MS_in_gel_digestion, "MS:1002985", "in-gel digestion", "Digestion of proteins separated by gel electrophoresis for mass spectrometric characterization of proteins and proteomes.", false}, {MS_in_solution_digestion, "MS:1002986", "in-solution digestion", "Digestion of proteins in solution for mass spectrometric characterization of proteins and proteomes.", false}, {MS_IdentiPy, "MS:1002987", "IdentiPy", "IdentiPy.", false}, {MS_IdentiPy_RHNS, "MS:1002988", "IdentiPy:RHNS", "The IdentiPy result 'RHNS'.", false}, {MS_IdentiPy_hyperscore, "MS:1002989", "IdentiPy:hyperscore", "The IdentiPy result 'hyperscore'.", false}, {MS_ms_deisotope, "MS:1002990", "ms_deisotope", "ms_deisotope, a library for deisotoping and charge state deconvolution of mass spectra.", false}, {MS_python_psims, "MS:1002991", "python-psims", "python-psims, a library for generating mzML and mzIdentML.", false}, {MS_Andromeda_PEP, "MS:1002995", "Andromeda:PEP", "Posterior error probability of the best identified peptide of the Andromeda search engine.", false}, {MS_Andromeda_apl_file_format, "MS:1002996", "Andromeda:apl file format", "Peak list file format of the Andromeda search engine.", false}, {MS_ProteomeXchange_dataset_identifier_reanalysis_number, "MS:1002997", "ProteomeXchange dataset identifier reanalysis number", "Index number of a reanalysis within a ProteomeXchange reprocessed dataset identifier container (RPXD).", false}, {MS_LCMS_9030, "MS:1002998", "LCMS-9030", "Shimadzu Scientific Instruments LCMS-9030 Q-TOF MS.", false}, {MS_LCMS_8060, "MS:1002999", "LCMS-8060", "Shimadzu Scientific Instruments LCMS-8060 MS.", false}, {MS_LCMS_8050, "MS:1003000", "LCMS-8050", "Shimadzu Scientific Instruments LCMS-8050 MS.", false}, {MS_LCMS_8045, "MS:1003001", "LCMS-8045", "Shimadzu Scientific Instruments LCMS-8045 MS.", false}, {MS_LCMS_8040, "MS:1003002", "LCMS-8040", "Shimadzu Scientific Instruments LCMS-8040 MS.", false}, {MS_LCMS_2020, "MS:1003003", "LCMS-2020", "Shimadzu Scientific Instruments LCMS-2020.", false}, {MS_maXis_II, "MS:1003004", "maXis II", "Bruker Daltonics' maXis II.", false}, {MS_timsTOF_Pro, "MS:1003005", "timsTOF Pro", "Bruker Daltonics' timsTOF Pro.", false}, {MS_mean_inverse_reduced_ion_mobility_array, "MS:1003006", "mean inverse reduced ion mobility array", "Array of population mean ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_raw_ion_mobility_array, "MS:1003007", "raw ion mobility array", "Array of raw ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_raw_inverse_reduced_ion_mobility_array, "MS:1003008", "raw inverse reduced ion mobility array", "Array of raw ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_Shimadzu_Biotech_LCD_format, "MS:1003009", "Shimadzu Biotech LCD format", "Shimadzu Biotech LCD file format.", false}, {MS_LPPtiger, "MS:1003010", "LPPtiger", "Software for lipidome-specific prediction and identification of oxidized phospholipids from LC-MS datasets.", false}, {MS_pFind, "MS:1003011", "pFind", "Sequence-tag-based search engine pFind.", false}, {MS_KSDP_score, "MS:1003012", "KSDP score", "Kernel mass spectral dot product scoring function.", false}, {MS_i3tms, "MS:1003013", "i3tms", "i3-tms search engine and data-analysis software.", false}, {MS_MSFragger, "MS:1003014", "MSFragger", "A database search-based peptide identification tool.", false}, {MS_razor_peptide, "MS:1003015", "razor peptide", "Peptide that is shared between protein groups and assigned to the protein group with the largest number of identified peptides.", false}, {MS_ProteinProphet_peptide_weight, "MS:1003016", "ProteinProphet:peptide weight", "Fraction of peptide evidence attributable to a protein or a set of indistinguishable proteins.", false}, {MS_ProteinProphet_peptide_group_weight, "MS:1003017", "ProteinProphet:peptide group weight", "Fraction of peptide evidence attributable to a group of proteins.", false}, {MS_Philosopher, "MS:1003018", "Philosopher", "General proteomics processing toolkit for shotgun proteomics.", false}, {MS_pressure_chromatogram, "MS:1003019", "pressure chromatogram", "Representation of chromatographic pressure versus time.", false}, {MS_flow_rate_chromatogram, "MS:1003020", "flow rate chromatogram", "Representation of the chromatographic flow rate versus time.", false}, {MS_Fixed_modification, "MS:1003021", "Fixed modification", "Post-translational modification which is assumed to be present at each instance of a residue type.", false}, {MS_Variable_modification, "MS:1003022", "Variable modification", "Post-translational modification which may or may not be present at a residue type.", false}, {MS_OpenPepXL, "MS:1003023", "OpenPepXL", "Cross-Linking MS search engine.", false}, {MS_OpenPepXL_score, "MS:1003024", "OpenPepXL:score", "The OpenPepXL score for a cross-link spectrum match.", false}, {MS_named_element, "MS:1003025", "named element", "A named element that is an attribute in a proteomics standards file.", false}, {MS_named_element_in_mzIdentML, "MS:1003026", "named element in mzIdentML", "A named element that is an attribute in a mzIdentML file.", false}, {MS_named_element_in_mzML, "MS:1003027", "named element in mzML", "A named element that is an attribute in a mzML file.", false}, {MS_Orbitrap_Exploris_480, "MS:1003028", "Orbitrap Exploris 480", "Thermo Scientific Orbitrap Exploris 480 Quadrupole Orbitrap MS.", false}, {MS_Orbitrap_Eclipse, "MS:1003029", "Orbitrap Eclipse", "Thermo Scientific Orbitrap Eclipse mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers.", false}, {MS_Mascot_MinNumSigUniqueSeqs, "MS:1003030", "Mascot:MinNumSigUniqueSeqs", "Minimum number of significant unique sequences required in a protein hit. The setting is only relevant if the protein grouping strategy is 'family clustering'.", false}, {MS_CPTAC_accession_number, "MS:1003031", "CPTAC accession number", "Main identifier of a CPTAC dataset.", false}, {MS_compound_identification_confidence_code_in_MS_DIAL, "MS:1003032", "compound identification confidence code in MS-DIAL", "The confidence code to describe the confidence of annotated compounds as defined by the MS-DIAL program.", false}, {MS_molecular_entity_attribute, "MS:1003033", "molecular entity attribute", "Non-inherent characteristic attributed to a molecular entity.", false}, {MS_atom, "MS:1003034", "atom", "Smallest constituent unit of ordinary matter that constitutes a chemical element.", false}, {MS_small_molecule, "MS:1003035", "small molecule", "Low molecular weight (< 900 daltons) organic compound that may regulate a biological process.", false}, {MS_metabolite, "MS:1003036", "metabolite", "Small molecule that is the intermediate end product of metabolism.", false}, {MS_ribonucleotide, "MS:1003037", "ribonucleotide", "Nucleotide containing ribose as its pentose component.", false}, {MS_deoxyribonucleotide, "MS:1003038", "deoxyribonucleotide", "Monomer, or single unit, of DNA, or deoxyribonucleic acid.", false}, {MS_amino_acid, "MS:1003039", "amino acid", "Organic molecule that contains amine (-NH2) and carboxyl (-COOH) functional groups, along with a side chain (R group) that is specific to each amino acid.", false}, {MS_monosaccharide, "MS:1003040", "monosaccharide", "Simplest form of sugar and the most basic units of carbohydrate that cannot be further hydrolyzed to a simpler molecule.", false}, {MS_nucleic_acid, "MS:1003041", "nucleic acid", "Molecule composed of a chain of nucleotides.", false}, {MS_polysaccharide, "MS:1003042", "polysaccharide", "Polymeric carbohydrate molecules composed of long chains of monosaccharide units bound together by glycosidic linkages.", false}, {MS_number_of_residues, "MS:1003043", "number of residues", "Number of amino acid residues in a peptide, commonly referred to as the peptide length.", false}, {MS_number_of_missed_cleavages, "MS:1003044", "number of missed cleavages", "Number of amino acid residue bonds that should have been cleaved by the cleavage agent used, but were not.", false}, {MS_peptide_to_protein_mapping, "MS:1003045", "peptide-to-protein mapping", "Process of mapping a peptide sequence to a protein sequence.", false}, {MS_peptide_to_protein_mapping_attribute, "MS:1003046", "peptide-to-protein mapping attribute", "Nonphysical characteristic attributed to the result of peptide-to-protein mapping.", false}, {MS_protein_sequence_offset, "MS:1003047", "protein sequence offset", "Offset in number of residues from the n terminus of the protein at which the peptide begins. Use 1 when the first residue of the peptide sequence is the first residue of the protein sequence.", false}, {MS_number_of_enzymatic_termini, "MS:1003048", "number of enzymatic termini", "Total number of termini that match standard rules for the cleavage agent, 2 when both termini match cleavage agent rules, 1 when only one terminus does, and 0 if neither terminus matches cleavage agent rules.", false}, {MS_peptidoform, "MS:1003049", "peptidoform", "Peptide that contains zero or more mass modifications on the termini or side chains of its amino acid residues, and may be differentiated from other peptidoforms with the same peptide sequence but different mass modification configurations.", false}, {MS_peptidoform_attribute, "MS:1003050", "peptidoform attribute", "Non-inherent characteristic attributed to a peptidoform.", false}, {MS_peptidoform_ion, "MS:1003051", "peptidoform ion", "Peptidoform that has formed an adduct with an ion, thereby rendering it potentially detectable with a mass spectrometer. Commonly called a 'precursor' or 'precursor ion' or 'parent ion'.", false}, {MS_peptidoform_ion_property, "MS:1003052", "peptidoform ion property", "Inherent or measurable characteristic of a peptidoform ion.", false}, {MS_theoretical_monoisotopic_m_z, "MS:1003053", "theoretical monoisotopic m/z", "Mass-to-charge ratio of a peptidoform ion composed of the most common isotope of each atom computed from the putative knowledge of its molecular constituents.", false}, {MS_theoretical_average_m_z, "MS:1003054", "theoretical average m/z", "Mass-to-charge ratio of a peptidoform ion computed from the putative knowledge of its molecular constituents, averaged over the distribution of naturally occurring isotopes.", false}, {MS_adduct, "MS:1003055", "adduct", "Product of a direct addition of two or more distinct molecules, resulting in a single reaction product containing all atoms of all components. The resultant is considered a distinct molecular species.", false}, {MS_adduct_ion_property, "MS:1003056", "adduct ion property", "Physical measurable characteristic of an adduct ion.", false}, {MS_scan_number, "MS:1003057", "scan number", "Ordinal number of the scan indicating its order of acquisition within a mass spectrometry acquisition run.", false}, {MS_spectrum_property, "MS:1003058", "spectrum property", "Inherent or measurable characteristic of a spectrum.", false}, {MS_number_of_peaks, "MS:1003059", "number of peaks", "Number of peaks or features in a spectrum. For a peak-picked spectrum, this will correspond to the number of data points. For a non-peak-picked spectrum, this corresponds to the number of features discernable in the spectrum, which will be fewer than the number of data points.", false}, {MS_number_of_data_points, "MS:1003060", "number of data points", "Number of data points in a spectrum. For a peak-picked spectrum, this will correspond to the number of peaks. For a non-peak-picked spectrum, this corresponds to the number of values in the data array, which are not all peaks.", false}, {MS_spectrum_name, "MS:1003061", "spectrum name", "Label attached to a spectrum uniquely naming it within a collection of spectra, often in a spectral library. It is often a string combination of peptide sequence, charge, mass modifications, collision energy, but will obviously be different for small molecules or unidentified spectra. It must be unique within a collection.", false}, {MS_spectrum_index, "MS:1003062", "spectrum index", "Integer index value associated with a spectrum within a collection of spectra, often in a spectral library. By custom, index counters should begin with 0.", false}, {MS_universal_spectrum_identifier, "MS:1003063", "universal spectrum identifier", "PSI universal spectrum identifier (USI) multipart key that uniquely identifies a spectrum available in a ProteomeXchange datasets or spectral library.", false}, {MS_spectrum_aggregation_attribute, "MS:1003064", "spectrum aggregation attribute", "Non-inherent characteristic attributed to spectrum aggregation.", false}, {MS_spectrum_aggregation_type, "MS:1003065", "spectrum aggregation type", "Categorization of a spectrum based on its type of aggregation (e.g., individual spectrum, consensus spectrum, best replicate spectrum, etc.).", false}, {MS_singleton_spectrum, "MS:1003066", "singleton spectrum", "Spectrum that is not the result of some aggregation process.", false}, {MS_consensus_spectrum, "MS:1003067", "consensus spectrum", "Spectrum that is the result of merging several replicate spectra to form a spectrum that is more representative of its class and ideally less noisy that any of its source replicates.", false}, {MS_best_replicate_spectrum, "MS:1003068", "best replicate spectrum", "Spectrum that is considered the most representative from a pool of replicate spectra.", false}, {MS_number_of_replicate_spectra_available, "MS:1003069", "number of replicate spectra available", "Number of replicate spectra available for use during the aggregation process.", false}, {MS_number_of_replicate_spectra_used, "MS:1003070", "number of replicate spectra used", "Number of replicate spectra used during the aggregation process. This is generally applicable when there are many replicates available, but some are discarded as being low S/N, blended, or otherwise unsuitable, and the remaining set is then used for merging via a consensus algorithm.", false}, {MS_spectrum_origin_attribute, "MS:1003071", "spectrum origin attribute", "Non-inherent characteristic attributed to spectrum aggregation.", false}, {MS_spectrum_origin_type, "MS:1003072", "spectrum origin type", "Categorization of a spectrum based on its origin (e.g., observed spectrum, predicted spectrum, demultiplexed spectrum, etc.).", false}, {MS_observed_spectrum, "MS:1003073", "observed spectrum", "Spectrum that originates from an analysis attempt of a single analyte species on an instrument.", false}, {MS_predicted_spectrum, "MS:1003074", "predicted spectrum", "Spectrum that originates from a compututational algorithm that attempts to predict spectra.", false}, {MS_demultiplexed_spectrum, "MS:1003075", "demultiplexed spectrum", "Spectrum that originates from an attempted extraction of a single ion spieces from a multiplexed spectrum that contains multiple ion species.", false}, {MS_uninterpreted_spectrum, "MS:1003076", "uninterpreted spectrum", "Spectrum provided in the form of plain numerical values without any information pertaining to the interpretation of features.", false}, {MS_interpreted_spectrum, "MS:1003077", "interpreted spectrum", "Spectrum provided in a form where specific features of the spectrum are interpreted to provide putative explanations for some feature.", false}, {MS_interpreted_spectrum_attribute, "MS:1003078", "interpreted spectrum attribute", "Non-inherent characteristic attributed to an interpreted spectrum.", false}, {MS_total_unassigned_intensity_fraction, "MS:1003079", "total unassigned intensity fraction", "Fraction of intensity summed from all unassigned peaks divided by the intensity summed from all peaks in the spectrum.", false}, {MS_top_20_peak_unassigned_intensity_fraction, "MS:1003080", "top 20 peak unassigned intensity fraction", "Fraction of intensity summed from unassigned peaks among the top 20 divided by the intensity summed from all top 20 peaks in the spectrum.", false}, {MS_unidentified_modification_monoisotopic_mass_delta, "MS:1003081", "unidentified modification monoisotopic mass delta", "Monoisotopic mass delta in Daltons of an amino acid residue modification whose atomic composition or molecular identity has not been determined. This term should not be used for modifications of known molecular identity such as those available in Unimod, RESID or PSI-MOD. This term MUST NOT be used inside the element in mzIdentML.", false}, {MS_MS_DIAL, "MS:1003082", "MS-DIAL", "Data processing software for untargeted metabolomics and lipidomics that supports multiple instruments and MS vendors.", false}, {MS_raw_data_file, "MS:1003083", "raw data file", "Data file that contains original data as generated by an instrument, although not necessarily in the original data format (i.e. an original raw file converted to a different format is still a raw data file).", false}, {MS_processed_data_file, "MS:1003084", "processed data file", "File that contains data that has been substantially processed or transformed from what was originally acquired by an instrument.", false}, {MS_previous_MSn_1_scan_precursor_intensity, "MS:1003085", "previous MSn-1 scan precursor intensity", "Intensity of the precursor ion in the previous MSn-1 scan (prior in time to the referencing MSn scan). For an MS2 scan, this means the MS1 precursor intensity. It is unspecified on whether this is an apex (across m/z) intensity, integrated (across m/z) intensity, a centroided peak intensity of unknown origin, or even summed across several isotopes.", false}, {MS_precursor_apex_intensity, "MS:1003086", "precursor apex intensity", "Intensity of the precursor ion current as measured by its apex point over time and m/z. It is unspecified whether this is the intensity of the selected isotope or the most intense isotope.", false}, {MS_supported_by_repository_but_incomplete_data_and_or_metadata, "MS:1003087", "supported by repository but incomplete data and/or metadata", "Dataset for which the identifications and/or spectra/traces are in formats that can be parsed by the hosting data repository such that internal references between identifications and spectra/traces are preserved and browsable at the repository. However, some metadata is not properly described due to lack of CV terms or some auxiliary data, such as data used to create a spectral library or a sequence search database crucial to the analysis, is not available.", false}, {MS_truncation_and_zlib_compression, "MS:1003088", "truncation and zlib compression", "Data array compression using mantissa bit truncation followed by zlib compression.", false}, {MS_truncation__delta_prediction_and_zlib_compression, "MS:1003089", "truncation, delta prediction and zlib compression", "Data array compression using mantissa bit truncation, delta prediction and zlib compression.", false}, {MS_truncation__linear_prediction_and_zlib_compression, "MS:1003090", "truncation, linear prediction and zlib compression", "Data array compression using mantissa bit truncation, linear prediction and zlib compression.", false}, {MS_binary_data_compression_parameter, "MS:1003091", "binary data compression parameter", "Settable parameter for a binary data compression event.", false}, {MS_number_of_mantissa_bits_truncated, "MS:1003092", "number of mantissa bits truncated", "Number of extraneous mantissa bits truncated to improve subsequent compression.", false}, {MS_Lys_N, "MS:1003093", "Lys-N", "Metalloendopeptidase found in the mushroom Grifola frondosa that cleaves proteins on the amino side of lysine residues.", false}, {MS_Orbitrap_Exploris_240, "MS:1003094", "Orbitrap Exploris 240", "Thermo Scientific Orbitrap Exploris 240 Quadrupole Orbitrap MS.", false}, {MS_Orbitrap_Exploris_120, "MS:1003095", "Orbitrap Exploris 120", "Thermo Scientific Orbitrap Exploris 120 Quadrupole Orbitrap MS.", false}, {MS_LTQ_Orbitrap_Velos_Pro, "MS:1003096", "LTQ Orbitrap Velos Pro", "Thermo Scientific LTQ Orbitrap Velos Pro, often just referred to as the Orbitrap Velos Pro.", false}, {MS_MaxQuant_protein_group_level_score, "MS:1003097", "MaxQuant protein group-level score", "The probability based MaxQuant protein group score.", false}, {MS_Andromeda_peptide_PEP, "MS:1003098", "Andromeda peptide PEP", "Peptide probability from Andromeda.", false}, {MS_MaxQuant_DIA_peptide_PEP, "MS:1003099", "MaxQuant-DIA peptide PEP", "Peptide probability from MaxQuant-DIA algorithm.", false}, {MS_MaxQuant_DIA_score, "MS:1003100", "MaxQuant-DIA score", "PSM evidence score from MaxQuant-DIA algorithm.", false}, {MS_MaxQuant_DIA_PEP, "MS:1003101", "MaxQuant-DIA PEP", "PSM evidence PEP probability from MaxQuant-DIA algorithm.", false}, {MS_NIST_msp_comment, "MS:1003102", "NIST msp comment", "Term for a comment field withing the NIST msp file format", false}, {MS_ion_interpretation_format, "MS:1003103", "ion interpretation format", "Interpretation format used for annotating individual spectrum ion peaks.", false}, {MS_peptide_ion_interpretation_format, "MS:1003104", "peptide ion interpretation format", "Interpretation format designed primarily for peptides, with allowances for generic chemical formulas and other miscellaneous named ions.", false}, {MS_cross_linked_peptide_ion_interpretation_format, "MS:1003105", "cross-linked peptide ion interpretation format", "Interpretation format designed specifically for cross-linked peptide ion peaks.", false}, {MS_glycan_ion_interpretation_format, "MS:1003106", "glycan ion interpretation format", "Interpretation format designed specifically for glycan ion peaks.", false}, {MS_lipid_ion_interpretation_format, "MS:1003107", "lipid ion interpretation format", "Interpretation format designed specifically for lipid ion peaks.", false}, {MS_PatternLab, "MS:1003108", "PatternLab", "PatternLab for Proteomics is an integrated computational environment for analyzing shotgun proteomic data.", false}, {MS_SIM_XL, "MS:1003109", "SIM-XL", "Identifying cross-linked peptides in complex protein mixtures", false}, {MS_SIM_XL_score, "MS:1003110", "SIM-XL score", "SIM-XL identification search engine score", false}, {MS_QUIN_XL, "MS:1003111", "QUIN-XL", "Quantification of cross-linked peptides in complex protein mixtures", false}, {MS_Orbitrap_ID_X, "MS:1003112", "Orbitrap ID-X", "Thermo Scientific Orbitrap ID-X mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers.", false}, {MS_OpenMS_ConsensusID_PEP, "MS:1003113", "OpenMS:ConsensusID PEP", "The OpenMS ConsesusID tool posterior error probability", false}, {MS_OpenMS_Best_PSM_Score, "MS:1003114", "OpenMS:Best PSM Score", "The score of the best PSM selected by the underlying identification tool", false}, {MS_OpenMS_Target_decoy_PSM_q_value, "MS:1003115", "OpenMS:Target-decoy PSM q-value", "The OpenMS Target-decoy q-values at PSM level", false}, {MS_OpenMS_Target_decoy_peptide_q_value, "MS:1003116", "OpenMS:Target-decoy peptide q-value", "The OpenMS Target-decoy q-values at peptide sequence level", false}, {MS_OpenMS_Target_decoy_protein_q_value, "MS:1003117", "OpenMS:Target-decoy protein q-value", "The OpenMS Target-decoy q-values at protein level", false}, {MS_EPIFANY, "MS:1003118", "EPIFANY", "A Method for Efficient High-Confidence Protein Inference. The tool is part of the OpenMS framework", false}, {MS_EPIFANY_Protein_posterior_probability, "MS:1003119", "EPIFANY:Protein posterior probability", "Protein Posterior probability calculated by EPIFANY protein inference algorithm", false}, {MS_OpenMS_LFQ_intensity, "MS:1003120", "OpenMS:LFQ intensity", "The data type LFQ intensity produced by OpenMS.", false}, {MS_OpenMS_LFQ_spectral_count, "MS:1003121", "OpenMS:LFQ spectral count", "The data type LFQ spectral count produced by OpenMS.", false}, {MS_rapifleX, "MS:1003122", "rapifleX", "Bruker Daltonics' rapiflex: MALDI TOF/TOF.", false}, {MS_Bruker_Daltonics_timsTOF_series, "MS:1003123", "Bruker Daltonics timsTOF series", "Bruker Daltonics timsTOF series", false}, {MS_timsTOF_fleX, "MS:1003124", "timsTOF fleX", "Bruker Daltonics' timsTOF fleX", false}, {MS_ProSight_spectral_Q_value, "MS:1003125", "ProSight:spectral Q-value", "ProSight spectrum-level Q-value.", false}, {MS_ProSight_spectral_P_score, "MS:1003126", "ProSight:spectral P-score", "ProSight spectrum-level P-score.", false}, {MS_ProSight_spectral_E_value, "MS:1003127", "ProSight:spectral E-value", "ProSight spectrum-level E-value.", false}, {MS_ProSight_spectral_C_score, "MS:1003128", "ProSight:spectral C-score", "ProSight spectrum-level C-score.", false}, {MS_proteoform_level_Q_value, "MS:1003129", "proteoform-level Q-value", "Estimation of the Q-value for proteoforms.", false}, {MS_ProSight_proteoform_Q_value, "MS:1003130", "ProSight:proteoform Q-value", "ProSight proteoform-level Q-value.", false}, {MS_isoform_level_identification_attribute, "MS:1003131", "isoform-level identification attribute", "Isoform level information.", false}, {MS_isoform_level_identification_statistic, "MS:1003132", "isoform-level identification statistic", "Identification confidence metric for a isoform.", false}, {MS_isoform_level_Q_value, "MS:1003133", "isoform-level Q-value", "Estimation of the Q-value for isoforms.", false}, {MS_ProSight_isoform_Q_value, "MS:1003134", "ProSight:isoform Q-value", "ProSight isoform-level Q-value.", false}, {MS_ProSight_protein_Q_value, "MS:1003135", "ProSight:protein Q-value", "ProSight protein-level Q-value.", false}, {MS_ProSight_input_parameter, "MS:1003136", "ProSight input parameter", "Search engine input parameters specific to ProSight.", false}, {MS_TDPortal_input_parameter, "MS:1003137", "TDPortal input parameter", "Search engine input parameters specific to TDPortal.", false}, {MS_ProSight_Run_delta_m_mode, "MS:1003138", "ProSight:Run delta m mode", "If true, runs delta m mode in ProSight.", false}, {MS_ProSight_Run_Subsequence_Search_mode, "MS:1003139", "ProSight:Run Subsequence Search mode", "If true, runs Subsequence Search mode in ProSight.", false}, {MS_ProSight_Run_Annotated_Proteoform_Search_mode, "MS:1003140", "ProSight:Run Annotated Proteoform Search mode", "If true, runs Annotated Proteoform Search mode in ProSight.", false}, {MS_ProSight, "MS:1003141", "ProSight", "ProSight: Database search engine for top-down proteomics.", false}, {MS_TDPortal, "MS:1003142", "TDPortal", "TDPortal: Database search engine for top-down proteomics.", false}, {MS_mass_array, "MS:1003143", "mass array", "A data array of mass values.", false}, {MS_Triple_Quad_7500, "MS:1003144", "Triple Quad 7500", "SCIEX Triple Quad 7500.", false}, {MS_ThermoRawFileParser, "MS:1003145", "ThermoRawFileParser", "Cross-platform software to convert Thermo RAW files to a number of open formats.", false}, {MS_pyteomics, "MS:1003146", "pyteomics", "Python module that helps handling various proteomics data analysis tasks.", false}, {MS_PTMProphet_probability, "MS:1003147", "PTMProphet probability", "Probability that one mass modification has been correctly localized to a specific residue as computed by PTMProphet.", false}, {MS_PTMProphet_mean_best_probability, "MS:1003148", "PTMProphet mean best probability", "PSM-specific average of the m best site probabilities over all potential sites where m is the number of modifications of a specific type, as computed by PTMProphet.", false}, {MS_PTMProphet_normalized_information_content, "MS:1003149", "PTMProphet normalized information content", "PTMProphet-computed PSM-specific normalized (0.0 - 1.0) measure of information content across all modifications of a specific type.", false}, {MS_PTMProphet_information_content, "MS:1003150", "PTMProphet information content", "PTMProphet-computed PSM-specific measure of information content per modification type ranging from 0 to m, where m is the number of modifications of a specific type.", false}, {MS_SHA_256, "MS:1003151", "SHA-256", "SHA-256 (member of Secure Hash Algorithm-2 family) is a cryptographic hash function designed by the National Security Agency (NSA) and published by the NIST as a U. S. government standard. It is also used to verify file integrity.", false}, {MS_GCMS_QP2010SE, "MS:1003152", "GCMS-QP2010SE", "Shimadzu Scientific Instruments GCMS-QP2010SE.", false}, {MS_raw_ion_mobility_drift_time_array, "MS:1003153", "raw ion mobility drift time array", "Array of raw ion mobility values from a drift time device, reported in seconds (or milliseconds), corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_deconvoluted_ion_mobility_array, "MS:1003154", "deconvoluted ion mobility array", "Array of ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_deconvoluted_inverse_reduced_ion_mobility_array, "MS:1003155", "deconvoluted inverse reduced ion mobility array", "Array of ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_deconvoluted_ion_mobility_drift_time_array, "MS:1003156", "deconvoluted ion mobility drift time array", "Array of mean ion mobility values from a drift time device, reported in seconds (or milliseconds), as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array.", false}, {MS_scanning_quadrupole_position_lower_bound_m_z_array, "MS:1003157", "scanning quadrupole position lower bound m/z array", "Array of m/z values representing the lower bound m/z of the quadrupole position at each point in the spectrum.", false}, {MS_scanning_quadrupole_position_upper_bound_m_z_array, "MS:1003158", "scanning quadrupole position upper bound m/z array", "Array of m/z values representing the upper bound m/z of the quadrupole position at each point in the spectrum.", false}, {MS_isolation_window_full_range, "MS:1003159", "isolation window full range", "Indicates an acquisition mode in which the isolation window is a full range, rather than a subset of the full range.", false}, {MS_mzQC_format, "MS:1003160", "mzQC format", "Proteomics Standards Initiative mzQC format for quality control data.", false}, {MS_quality_control_data_format, "MS:1003161", "quality control data format", "Grouping term for quality control data formats.", false}, {MS_PTX_QC, "MS:1003162", "PTX-QC", "Proteomics (PTX) - QualityControl (QC) software for QC report generation and visualization.", false}, {UNIMOD_unimod_root_node, "UNIMOD:0", "unimod root node", "The root node of the unimod modifications ontology.", false}, {UNIMOD_Acetyl, "UNIMOD:1", "Acetyl", "Acetylation.", false}, {UNIMOD_Amidated, "UNIMOD:2", "Amidated", "Amidation.", false}, {UNIMOD_Biotin, "UNIMOD:3", "Biotin", "Biotinylation.", false}, {UNIMOD_Carbamidomethyl, "UNIMOD:4", "Carbamidomethyl", "Iodoacetamide derivative.", false}, {UNIMOD_Carbamyl, "UNIMOD:5", "Carbamyl", "Carbamylation.", false}, {UNIMOD_Carboxymethyl, "UNIMOD:6", "Carboxymethyl", "Iodoacetic acid derivative.", false}, {UNIMOD_Deamidated, "UNIMOD:7", "Deamidated", "Deamidation.", false}, {UNIMOD_ICAT_G, "UNIMOD:8", "ICAT-G", "Gygi ICAT(TM) d0.", false}, {UNIMOD_ICAT_G_2H_8_, "UNIMOD:9", "ICAT-G:2H(8)", "Gygi ICAT(TM) d8.", false}, {UNIMOD_Met__Hse, "UNIMOD:10", "Met->Hse", "Homoserine.", false}, {UNIMOD_Met__Hsl, "UNIMOD:11", "Met->Hsl", "Homoserine lactone.", false}, {UNIMOD_ICAT_D_2H_8_, "UNIMOD:12", "ICAT-D:2H(8)", "Applied Biosystems original ICAT(TM) d8.", false}, {UNIMOD_ICAT_D, "UNIMOD:13", "ICAT-D", "Applied Biosystems original ICAT(TM) d0.", false}, {UNIMOD_NIPCAM, "UNIMOD:17", "NIPCAM", "N-isopropylcarboxamidomethyl.", false}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "UNIMOD:20", "PEO-Iodoacetyl-LC-Biotin", "Biotinyl-iodoacetamidyl-3,6-dioxaoctanediamine.", false}, {UNIMOD_Phospho, "UNIMOD:21", "Phospho", "Phosphorylation.", false}, {UNIMOD_Dehydrated, "UNIMOD:23", "Dehydrated", "Dehydration.", false}, {UNIMOD_Propionamide, "UNIMOD:24", "Propionamide", "Acrylamide adduct.", false}, {UNIMOD_Pyridylacetyl, "UNIMOD:25", "Pyridylacetyl", "Pyridylacetyl.", false}, {UNIMOD_Pyro_carbamidomethyl, "UNIMOD:26", "Pyro-carbamidomethyl", "S-carbamoylmethylcysteine cyclization (N-terminus).", false}, {UNIMOD_Glu__pyro_Glu, "UNIMOD:27", "Glu->pyro-Glu", "Pyro-glu from E.", false}, {UNIMOD_Gln__pyro_Glu, "UNIMOD:28", "Gln->pyro-Glu", "Pyro-glu from Q.", false}, {UNIMOD_SMA, "UNIMOD:29", "SMA", "N-Succinimidyl-2-morpholine acetate.", false}, {UNIMOD_Cation_Na, "UNIMOD:30", "Cation:Na", "Sodium adduct.", false}, {UNIMOD_Pyridylethyl, "UNIMOD:31", "Pyridylethyl", "S-pyridylethylation.", false}, {UNIMOD_Methyl, "UNIMOD:34", "Methyl", "Methylation.", false}, {UNIMOD_Oxidation, "UNIMOD:35", "Oxidation", "Oxidation or Hydroxylation.", false}, {UNIMOD_Dimethyl, "UNIMOD:36", "Dimethyl", "Di-Methylation.", false}, {UNIMOD_Trimethyl, "UNIMOD:37", "Trimethyl", "Tri-Methylation.", false}, {UNIMOD_Methylthio, "UNIMOD:39", "Methylthio", "Beta-methylthiolation.", false}, {UNIMOD_Sulfo, "UNIMOD:40", "Sulfo", "O-Sulfonation.", false}, {UNIMOD_Hex, "UNIMOD:41", "Hex", "Hexose.", false}, {UNIMOD_Lipoyl, "UNIMOD:42", "Lipoyl", "Lipoyl.", false}, {UNIMOD_HexNAc, "UNIMOD:43", "HexNAc", "N-Acetylhexosamine.", false}, {UNIMOD_Farnesyl, "UNIMOD:44", "Farnesyl", "Farnesylation.", false}, {UNIMOD_Myristoyl, "UNIMOD:45", "Myristoyl", "Myristoylation.", false}, {UNIMOD_PyridoxalPhosphate, "UNIMOD:46", "PyridoxalPhosphate", "Pyridoxal phosphate.", false}, {UNIMOD_Palmitoyl, "UNIMOD:47", "Palmitoyl", "Palmitoylation.", false}, {UNIMOD_GeranylGeranyl, "UNIMOD:48", "GeranylGeranyl", "Geranyl-geranyl.", false}, {UNIMOD_Phosphopantetheine, "UNIMOD:49", "Phosphopantetheine", "Phosphopantetheine.", false}, {UNIMOD_FAD, "UNIMOD:50", "FAD", "Flavin adenine dinucleotide.", false}, {UNIMOD_Tripalmitate, "UNIMOD:51", "Tripalmitate", "N-acyl diglyceride cysteine.", false}, {UNIMOD_Guanidinyl, "UNIMOD:52", "Guanidinyl", "Guanidination.", false}, {UNIMOD_HNE, "UNIMOD:53", "HNE", "4-hydroxynonenal (HNE).", false}, {UNIMOD_Glucuronyl, "UNIMOD:54", "Glucuronyl", "Hexuronic acid.", false}, {UNIMOD_Glutathione, "UNIMOD:55", "Glutathione", "Glutathione disulfide.", false}, {UNIMOD_Acetyl_2H_3_, "UNIMOD:56", "Acetyl:2H(3)", "Acetate labeling reagent (N-term & K) (heavy form, +3amu).", false}, {UNIMOD_Propionyl, "UNIMOD:58", "Propionyl", "Propionate labeling reagent light form (N-term & K).", false}, {UNIMOD_Propionyl_13C_3_, "UNIMOD:59", "Propionyl:13C(3)", "Propionate labeling reagent heavy form (+3amu), N-term & K.", false}, {UNIMOD_GIST_Quat, "UNIMOD:60", "GIST-Quat", "Quaternary amine labeling reagent light form (N-term & K).", false}, {UNIMOD_GIST_Quat_2H_3_, "UNIMOD:61", "GIST-Quat:2H(3)", "Quaternary amine labeling reagent heavy (+3amu) form, N-term & K.", false}, {UNIMOD_GIST_Quat_2H_6_, "UNIMOD:62", "GIST-Quat:2H(6)", "Quaternary amine labeling reagent heavy form (+6amu), N-term & K.", false}, {UNIMOD_GIST_Quat_2H_9_, "UNIMOD:63", "GIST-Quat:2H(9)", "Quaternary amine labeling reagent heavy form (+9amu), N-term & K.", false}, {UNIMOD_Succinyl, "UNIMOD:64", "Succinyl", "Succinic anhydride labeling reagent light form (N-term & K).", false}, {UNIMOD_Succinyl_2H_4_, "UNIMOD:65", "Succinyl:2H(4)", "Succinic anhydride labeling reagent, heavy form (+4amu, 4H2), N-term & K.", false}, {UNIMOD_Succinyl_13C_4_, "UNIMOD:66", "Succinyl:13C(4)", "Succinic anhydride labeling reagent, heavy form (+4amu, 4C13), N-term & K.", false}, {UNIMOD_Iminobiotin, "UNIMOD:89", "Iminobiotin", "Iminobiotinylation.", false}, {UNIMOD_ESP, "UNIMOD:90", "ESP", "ESP-Tag light d0.", false}, {UNIMOD_ESP_2H_10_, "UNIMOD:91", "ESP:2H(10)", "ESP-Tag heavy d10.", false}, {UNIMOD_NHS_LC_Biotin, "UNIMOD:92", "NHS-LC-Biotin", "NHS-LC-Biotin.", false}, {UNIMOD_EDT_maleimide_PEO_biotin, "UNIMOD:93", "EDT-maleimide-PEO-biotin", "EDT-maleimide-PEO-biotin.", false}, {UNIMOD_IMID, "UNIMOD:94", "IMID", "IMID d0.", false}, {UNIMOD_IMID_2H_4_, "UNIMOD:95", "IMID:2H(4)", "IMID d4.", false}, {UNIMOD_Propionamide_2H_3_, "UNIMOD:97", "Propionamide:2H(3)", "Acrylamide d3.", false}, {UNIMOD_ICAT_C, "UNIMOD:105", "ICAT-C", "Applied Biosystems cleavable ICAT(TM) light.", false}, {UNIMOD_ICAT_C_13C_9_, "UNIMOD:106", "ICAT-C:13C(9)", "Applied Biosystems cleavable ICAT(TM) heavy.", false}, {UNIMOD_FormylMet, "UNIMOD:107", "FormylMet", "Addition of N-formyl met.", false}, {UNIMOD_Nethylmaleimide, "UNIMOD:108", "Nethylmaleimide", "N-ethylmaleimide on cysteines.", false}, {UNIMOD_OxLysBiotinRed, "UNIMOD:112", "OxLysBiotinRed", "Oxidized lysine biotinylated with biotin-LC-hydrazide, reduced.", false}, {UNIMOD_OxLysBiotin, "UNIMOD:113", "OxLysBiotin", "Oxidized lysine biotinylated with biotin-LC-hydrazide.", false}, {UNIMOD_OxProBiotinRed, "UNIMOD:114", "OxProBiotinRed", "Oxidized proline biotinylated with biotin-LC-hydrazide, reduced.", false}, {UNIMOD_OxProBiotin, "UNIMOD:115", "OxProBiotin", "Oxidized Proline biotinylated with biotin-LC-hydrazide.", false}, {UNIMOD_OxArgBiotin, "UNIMOD:116", "OxArgBiotin", "Oxidized arginine biotinylated with biotin-LC-hydrazide.", false}, {UNIMOD_OxArgBiotinRed, "UNIMOD:117", "OxArgBiotinRed", "Oxidized arginine biotinylated with biotin-LC-hydrazide, reduced.", false}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "UNIMOD:118", "EDT-iodoacetyl-PEO-biotin", "EDT-iodo-PEO-biotin.", false}, {UNIMOD_IBTP, "UNIMOD:119", "IBTP", "Thio Ether Formation - BTP Adduct.", false}, {UNIMOD_GG, "UNIMOD:121", "GG", "Ubiquitinylation residue.", false}, {UNIMOD_Formyl, "UNIMOD:122", "Formyl", "Formylation.", false}, {UNIMOD_ICAT_H, "UNIMOD:123", "ICAT-H", "N-iodoacetyl, p-chlorobenzyl-12C6-glucamine.", false}, {UNIMOD_ICAT_H_13C_6_, "UNIMOD:124", "ICAT-H:13C(6)", "N-iodoacetyl, p-chlorobenzyl-13C6-glucamine.", false}, {UNIMOD_Xlink_DTSSP_88_, "UNIMOD:126", "Xlink:DTSSP[88]", "Cleaved and reduced DSP/DTSSP crosslinker.", false}, {UNIMOD_Fluoro, "UNIMOD:127", "Fluoro", "Fluorination.", false}, {UNIMOD_Fluorescein, "UNIMOD:128", "Fluorescein", "5-Iodoacetamidofluorescein (Molecular Probe, Eugene, OR).", false}, {UNIMOD_Iodo, "UNIMOD:129", "Iodo", "Iodination.", false}, {UNIMOD_Diiodo, "UNIMOD:130", "Diiodo", "Di-Iodination.", false}, {UNIMOD_Triiodo, "UNIMOD:131", "Triiodo", "Tri-Iodination.", false}, {UNIMOD_Myristoleyl, "UNIMOD:134", "Myristoleyl", "(cis-delta 5)-tetradecaenoyl.", false}, {UNIMOD_Myristoyl_Delta_H__4_, "UNIMOD:135", "Myristoyl+Delta:H(-4)", "(cis,cis-delta 5, delta 8)-tetradecadienoyl.", false}, {UNIMOD_Benzoyl, "UNIMOD:136", "Benzoyl", "Labeling reagent light form (N-term & K).", false}, {UNIMOD_Hex_5_HexNAc_2_, "UNIMOD:137", "Hex(5)HexNAc(2)", "M5/Man5.", false}, {UNIMOD_Dansyl, "UNIMOD:139", "Dansyl", "5-dimethylaminonaphthalene-1-sulfonyl.", false}, {UNIMOD_a_type_ion, "UNIMOD:140", "a-type-ion", "ISD a-series (C-Term).", false}, {UNIMOD_Amidine, "UNIMOD:141", "Amidine", "Amidination of lysines or N-terminal amines with methyl acetimidate.", false}, {UNIMOD_HexNAc_1_dHex_1_, "UNIMOD:142", "HexNAc(1)dHex(1)", "HexNAc1dHex1.", false}, {UNIMOD_HexNAc_2_, "UNIMOD:143", "HexNAc(2)", "HexNAc2.", false}, {UNIMOD_Hex_3_, "UNIMOD:144", "Hex(3)", "Hex3.", false}, {UNIMOD_HexNAc_1_dHex_2_, "UNIMOD:145", "HexNAc(1)dHex(2)", "HexNAc1dHex2.", false}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "UNIMOD:146", "Hex(1)HexNAc(1)dHex(1)", "Hex1HexNAc1dHex1.", false}, {UNIMOD_HexNAc_2_dHex_1_, "UNIMOD:147", "HexNAc(2)dHex(1)", "HexNAc2dHex1.", false}, {UNIMOD_Hex_1_HexNAc_2_, "UNIMOD:148", "Hex(1)HexNAc(2)", "Hex1HexNAc2.", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "UNIMOD:149", "Hex(1)HexNAc(1)NeuAc(1)", "Hex1HexNAc1NeuAc1.", false}, {UNIMOD_HexNAc_2_dHex_2_, "UNIMOD:150", "HexNAc(2)dHex(2)", "HexNAc2dHex2.", false}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "UNIMOD:151", "Hex(1)HexNAc(2)Pent(1)", "Hex1HexNAc2Pent1.", false}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "UNIMOD:152", "Hex(1)HexNAc(2)dHex(1)", "Hex1HexNAc2dHex1.", false}, {UNIMOD_Hex_2_HexNAc_2_, "UNIMOD:153", "Hex(2)HexNAc(2)", "Hex2HexNAc2.", false}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "UNIMOD:154", "Hex(3)HexNAc(1)Pent(1)", "Hex3HexNAc1Pent1.", false}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "UNIMOD:155", "Hex(1)HexNAc(2)dHex(1)Pent(1)", "Hex1HexNAc2dHex1Pent1.", false}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "UNIMOD:156", "Hex(1)HexNAc(2)dHex(2)", "Hex1HexNAc2dHex2.", false}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "UNIMOD:157", "Hex(2)HexNAc(2)Pent(1)", "Hex2HexNAc2Pent1.", false}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "UNIMOD:158", "Hex(2)HexNAc(2)dHex(1)", "Hex2HexNAc2dHex1.", false}, {UNIMOD_Hex_3_HexNAc_2_, "UNIMOD:159", "Hex(3)HexNAc(2)", "M3/Man3.", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "UNIMOD:160", "Hex(1)HexNAc(1)NeuAc(2)", "Hex HexNAc NeuAc(2) ---OR--- Hex HexNAc(3) HexA.", false}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "UNIMOD:161", "Hex(3)HexNAc(2)Phos(1)", "Hex(3) HexNAc(2) Phos.", false}, {UNIMOD_Delta_S__1_Se_1_, "UNIMOD:162", "Delta:S(-1)Se(1)", "Selenium replaces sulfur.", false}, {UNIMOD_Delta_H_1_N__1_18O_1_, "UNIMOD:170", "Delta:H(1)N(-1)18O(1)", "Glycosylated asparagine 18O labeling.", false}, {UNIMOD_NBS_13C_6_, "UNIMOD:171", "NBS:13C(6)", "Shimadzu NBS-13C.", false}, {UNIMOD_NBS, "UNIMOD:172", "NBS", "Shimadzu NBS-12C.", false}, {UNIMOD_BHT, "UNIMOD:176", "BHT", "Michael addition of BHT quinone methide to Cysteine and Lysine.", false}, {UNIMOD_DAET, "UNIMOD:178", "DAET", "Phosphorylation to amine thiol.", false}, {UNIMOD_Label_13C_9_, "UNIMOD:184", "Label:13C(9)", "13C(9) Silac label.", false}, {UNIMOD_Label_13C_9__Phospho, "UNIMOD:185", "Label:13C(9)+Phospho", "C13 label (Phosphotyrosine).", false}, {UNIMOD_HPG, "UNIMOD:186", "HPG", "Hydroxyphenylglyoxal arginine.", false}, {UNIMOD_2HPG, "UNIMOD:187", "2HPG", "Bis(hydroxphenylglyoxal) arginine.", false}, {UNIMOD_Label_13C_6_, "UNIMOD:188", "Label:13C(6)", "13C(6) Silac label.", false}, {UNIMOD_Label_18O_2_, "UNIMOD:193", "Label:18O(2)", "O18 label at both C-terminal oxygens.", false}, {UNIMOD_AccQTag, "UNIMOD:194", "AccQTag", "6-aminoquinolyl-N-hydroxysuccinimidyl carbamate.", false}, {UNIMOD_QAT, "UNIMOD:195", "QAT", "APTA-d0.", false}, {UNIMOD_QAT_2H_3_, "UNIMOD:196", "QAT:2H(3)", "APTA d3.", false}, {UNIMOD_EQAT, "UNIMOD:197", "EQAT", "EAPTA d0.", false}, {UNIMOD_EQAT_2H_5_, "UNIMOD:198", "EQAT:2H(5)", "EAPTA d5.", false}, {UNIMOD_Dimethyl_2H_4_, "UNIMOD:199", "Dimethyl:2H(4)", "DiMethyl-CHD2.", false}, {UNIMOD_Ethanedithiol, "UNIMOD:200", "Ethanedithiol", "EDT.", false}, {UNIMOD_Delta_H_6_C_6_O_1_, "UNIMOD:205", "Delta:H(6)C(6)O(1)", "Acrolein addition +94.", false}, {UNIMOD_Delta_H_4_C_3_O_1_, "UNIMOD:206", "Delta:H(4)C(3)O(1)", "Acrolein addition +56.", false}, {UNIMOD_Delta_H_2_C_3_, "UNIMOD:207", "Delta:H(2)C(3)", "Acrolein addition +38.", false}, {UNIMOD_Delta_H_4_C_6_, "UNIMOD:208", "Delta:H(4)C(6)", "Acrolein addition +76.", false}, {UNIMOD_Delta_H_8_C_6_O_2_, "UNIMOD:209", "Delta:H(8)C(6)O(2)", "Acrolein addition +112.", false}, {UNIMOD_NEIAA, "UNIMOD:211", "NEIAA", "N-ethyl iodoacetamide-d0.", false}, {UNIMOD_NEIAA_2H_5_, "UNIMOD:212", "NEIAA:2H(5)", "N-ethyl iodoacetamide-d5.", false}, {UNIMOD_ADP_Ribosyl, "UNIMOD:213", "ADP-Ribosyl", "ADP Ribose addition.", false}, {UNIMOD_iTRAQ4plex, "UNIMOD:214", "iTRAQ4plex", "Representative mass and accurate mass for 116 & 117.", false}, {UNIMOD_IGBP, "UNIMOD:243", "IGBP", "Light IDBEST tag for quantitation.", false}, {UNIMOD_Crotonaldehyde, "UNIMOD:253", "Crotonaldehyde", "Crotonaldehyde.", false}, {UNIMOD_Delta_H_2_C_2_, "UNIMOD:254", "Delta:H(2)C(2)", "Acetaldehyde +26.", false}, {UNIMOD_Delta_H_4_C_2_, "UNIMOD:255", "Delta:H(4)C(2)", "Acetaldehyde +28.", false}, {UNIMOD_Delta_H_4_C_3_, "UNIMOD:256", "Delta:H(4)C(3)", "Propionaldehyde +40.", false}, {UNIMOD_Label_18O_1_, "UNIMOD:258", "Label:18O(1)", "O18 Labeling.", false}, {UNIMOD_Label_13C_6_15N_2_, "UNIMOD:259", "Label:13C(6)15N(2)", "13C(6) 15N(2) Silac label.", false}, {UNIMOD_Thiophospho, "UNIMOD:260", "Thiophospho", "Thiophosphorylation.", false}, {UNIMOD_SPITC, "UNIMOD:261", "SPITC", "4-sulfophenyl isothiocyanate.", false}, {UNIMOD_Label_2H_3_, "UNIMOD:262", "Label:2H(3)", "Trideuteration.", false}, {UNIMOD_PET, "UNIMOD:264", "PET", "Phosphorylation to pyridyl thiol.", false}, {UNIMOD_Label_13C_6_15N_4_, "UNIMOD:267", "Label:13C(6)15N(4)", "13C(6) 15N(4) Silac label.", false}, {UNIMOD_Label_13C_5_15N_1_, "UNIMOD:268", "Label:13C(5)15N(1)", "13C(5) 15N(1) Silac label.", false}, {UNIMOD_Label_13C_9_15N_1_, "UNIMOD:269", "Label:13C(9)15N(1)", "13C(9) 15N(1) Silac label.", false}, {UNIMOD_Cytopiloyne, "UNIMOD:270", "Cytopiloyne", "Nucleophilic addtion to cytopiloyne.", false}, {UNIMOD_Cytopiloyne_water, "UNIMOD:271", "Cytopiloyne+water", "Nucleophilic addition to cytopiloyne+H2O.", false}, {UNIMOD_CAF, "UNIMOD:272", "CAF", "Sulfonation of N-terminus.", false}, {UNIMOD_Nitrosyl, "UNIMOD:275", "Nitrosyl", "Nitrosylation.", false}, {UNIMOD_AEBS, "UNIMOD:276", "AEBS", "Aminoethylbenzenesulfonylation.", false}, {UNIMOD_Ethanolyl, "UNIMOD:278", "Ethanolyl", "Ethanolation.", false}, {UNIMOD_Ethyl, "UNIMOD:280", "Ethyl", "Ethylation.", false}, {UNIMOD_CoenzymeA, "UNIMOD:281", "CoenzymeA", "Cysteine modified Coenzyme A.", false}, {UNIMOD_Methyl_2H_2_, "UNIMOD:284", "Methyl:2H(2)", "Deuterium Methylation of Lysine.", false}, {UNIMOD_SulfanilicAcid, "UNIMOD:285", "SulfanilicAcid", "Light Sulfanilic Acid (SA) C12.", false}, {UNIMOD_SulfanilicAcid_13C_6_, "UNIMOD:286", "SulfanilicAcid:13C(6)", "Heavy Sulfanilic Acid (SA) C13.", false}, {UNIMOD_Trp__Oxolactone, "UNIMOD:288", "Trp->Oxolactone", "Tryptophan oxidation to oxolactone.", false}, {UNIMOD_Biotin_PEO_Amine, "UNIMOD:289", "Biotin-PEO-Amine", "Biotin polyethyleneoxide amine.", false}, {UNIMOD_Biotin_HPDP, "UNIMOD:290", "Biotin-HPDP", "Pierce EZ-Link Biotin-HPDP.", false}, {UNIMOD_Delta_Hg_1_, "UNIMOD:291", "Delta:Hg(1)", "Mercury Mercaptan.", false}, {UNIMOD_IodoU_AMP, "UNIMOD:292", "IodoU-AMP", "(Iodo)-uracil MP.", false}, {UNIMOD_CAMthiopropanoyl, "UNIMOD:293", "CAMthiopropanoyl", "3-(carbamidomethylthio)propanoyl.", false}, {UNIMOD_IED_Biotin, "UNIMOD:294", "IED-Biotin", "Biotinoyl-iodoacetyl-ethylenediamine.", false}, {UNIMOD_dHex, "UNIMOD:295", "dHex", "Fucose.", false}, {UNIMOD_Methyl_2H_3_, "UNIMOD:298", "Methyl:2H(3)", "Deuterated methyl ester.", false}, {UNIMOD_Carboxy, "UNIMOD:299", "Carboxy", "Carboxylation.", false}, {UNIMOD_Bromobimane, "UNIMOD:301", "Bromobimane", "Monobromobimane derivative.", false}, {UNIMOD_Menadione, "UNIMOD:302", "Menadione", "Menadione quinone derivative.", false}, {UNIMOD_DeStreak, "UNIMOD:303", "DeStreak", "Cysteine mercaptoethanol.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "UNIMOD:305", "dHex(1)Hex(3)HexNAc(4)", "FA2/G0F.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "UNIMOD:307", "dHex(1)Hex(4)HexNAc(4)", "FA2G1/G1F.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "UNIMOD:308", "dHex(1)Hex(5)HexNAc(4)", "FA2G2/G2F.", false}, {UNIMOD_Hex_3_HexNAc_4_, "UNIMOD:309", "Hex(3)HexNAc(4)", "A2/G0.", false}, {UNIMOD_Hex_4_HexNAc_4_, "UNIMOD:310", "Hex(4)HexNAc(4)", "A2G1/G1.", false}, {UNIMOD_Hex_5_HexNAc_4_, "UNIMOD:311", "Hex(5)HexNAc(4)", "A2G2/G2.", false}, {UNIMOD_Cysteinyl, "UNIMOD:312", "Cysteinyl", "Cysteinylation.", false}, {UNIMOD_Lys_loss, "UNIMOD:313", "Lys-loss", "Loss of C-terminal K from Heavy Chain of MAb.", false}, {UNIMOD_Nmethylmaleimide, "UNIMOD:314", "Nmethylmaleimide", "Nmethylmaleimide.", false}, {UNIMOD_DimethylpyrroleAdduct, "UNIMOD:316", "DimethylpyrroleAdduct", "2,5-dimethypyrrole.", false}, {UNIMOD_Delta_H_2_C_5_, "UNIMOD:318", "Delta:H(2)C(5)", "MDA adduct +62.", false}, {UNIMOD_Delta_H_2_C_3_O_1_, "UNIMOD:319", "Delta:H(2)C(3)O(1)", "MDA adduct +54.", false}, {UNIMOD_Nethylmaleimide_water, "UNIMOD:320", "Nethylmaleimide+water", "Nethylmaleimidehydrolysis.", false}, {UNIMOD_Xlink_B10621, "UNIMOD:323", "Xlink:B10621", "Bis-((N-iodoacetyl)piperazinyl)sulfonerhodamine.", false}, {UNIMOD_Xlink_DTBP_87_, "UNIMOD:324", "Xlink:DTBP[87]", "Cleaved and reduced DTBP crosslinker.", false}, {UNIMOD_FP_Biotin, "UNIMOD:325", "FP-Biotin", "10-ethoxyphosphinyl-N-(biotinamidopentyl)decanamide.", false}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "UNIMOD:327", "Delta:H(4)C(2)O(-1)S(1)", "S-Ethylcystine from Serine.", false}, {UNIMOD_Methyl_2H_3_13C_1_, "UNIMOD:329", "Methyl:2H(3)13C(1)", "Monomethylation.", false}, {UNIMOD_Dimethyl_2H_6_13C_2_, "UNIMOD:330", "Dimethyl:2H(6)13C(2)", "Dimethylation.", false}, {UNIMOD_Thiophos_S_S_biotin, "UNIMOD:332", "Thiophos-S-S-biotin", "Thiophosphate labeled with biotin-HPDP.", false}, {UNIMOD_Can_FP_biotin, "UNIMOD:333", "Can-FP-biotin", "6-N-biotinylaminohexyl isopropyl phosphate.", false}, {UNIMOD_HNE_Delta_H_2_, "UNIMOD:335", "HNE+Delta:H(2)", "Reduced 4-Hydroxynonenal.", false}, {UNIMOD_Methylamine, "UNIMOD:337", "Methylamine", "Michael addition with methylamine.", false}, {UNIMOD_Bromo, "UNIMOD:340", "Bromo", "Bromination.", false}, {UNIMOD_Amino, "UNIMOD:342", "Amino", "Tyrosine oxidation to 2-aminotyrosine.", false}, {UNIMOD_Argbiotinhydrazide, "UNIMOD:343", "Argbiotinhydrazide", "Oxidized Arginine biotinylated with biotin hydrazide.", false}, {UNIMOD_Arg__GluSA, "UNIMOD:344", "Arg->GluSA", "Arginine oxidation to glutamic semialdehyde.", false}, {UNIMOD_Trioxidation, "UNIMOD:345", "Trioxidation", "Cysteine oxidation to cysteic acid.", false}, {UNIMOD_His__Asn, "UNIMOD:348", "His->Asn", "His->Asn substitution.", false}, {UNIMOD_His__Asp, "UNIMOD:349", "His->Asp", "His->Asp substitution.", false}, {UNIMOD_Trp__Hydroxykynurenin, "UNIMOD:350", "Trp->Hydroxykynurenin", "Tryptophan oxidation to hydroxykynurenin.", false}, {UNIMOD_Trp__Kynurenin, "UNIMOD:351", "Trp->Kynurenin", "Tryptophan oxidation to kynurenin.", false}, {UNIMOD_Lys__Allysine, "UNIMOD:352", "Lys->Allysine", "Lysine oxidation to aminoadipic semialdehyde.", false}, {UNIMOD_Lysbiotinhydrazide, "UNIMOD:353", "Lysbiotinhydrazide", "Oxidized Lysine biotinylated with biotin hydrazide.", false}, {UNIMOD_Nitro, "UNIMOD:354", "Nitro", "Oxidation to nitro.", false}, {UNIMOD_probiotinhydrazide, "UNIMOD:357", "probiotinhydrazide", "Oxidized proline biotinylated with biotin hydrazide.", false}, {UNIMOD_Pro__pyro_Glu, "UNIMOD:359", "Pro->pyro-Glu", "Proline oxidation to pyroglutamic acid.", false}, {UNIMOD_Pro__Pyrrolidinone, "UNIMOD:360", "Pro->Pyrrolidinone", "Proline oxidation to pyrrolidinone.", false}, {UNIMOD_Thrbiotinhydrazide, "UNIMOD:361", "Thrbiotinhydrazide", "Oxidized Threonine biotinylated with biotin hydrazide.", false}, {UNIMOD_Diisopropylphosphate, "UNIMOD:362", "Diisopropylphosphate", "O-Diisopropylphosphorylation.", false}, {UNIMOD_Isopropylphospho, "UNIMOD:363", "Isopropylphospho", "O-Isopropylphosphorylation.", false}, {UNIMOD_ICPL_13C_6_, "UNIMOD:364", "ICPL:13C(6)", "Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, heavy form.", false}, {UNIMOD_ICPL, "UNIMOD:365", "ICPL", "Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, light form.", false}, {UNIMOD_Deamidated_18O_1_, "UNIMOD:366", "Deamidated:18O(1)", "Deamidation in presence of O18.", false}, {UNIMOD_Cys__Dha, "UNIMOD:368", "Cys->Dha", "Dehydroalanine (from Cysteine).", false}, {UNIMOD_Pro__Pyrrolidone, "UNIMOD:369", "Pro->Pyrrolidone", "Pyrrolidone from Proline.", false}, {UNIMOD_HMVK, "UNIMOD:371", "HMVK", "Michael addition of hydroxymethylvinyl ketone to cysteine.", false}, {UNIMOD_Arg__Orn, "UNIMOD:372", "Arg->Orn", "Ornithine from Arginine.", false}, {UNIMOD_Dehydro, "UNIMOD:374", "Dehydro", "Half of a disulfide bridge.", false}, {UNIMOD_Diphthamide, "UNIMOD:375", "Diphthamide", "Diphthamide.", false}, {UNIMOD_Hydroxyfarnesyl, "UNIMOD:376", "Hydroxyfarnesyl", "Hydroxyfarnesyl.", false}, {UNIMOD_Diacylglycerol, "UNIMOD:377", "Diacylglycerol", "Diacylglycerol.", false}, {UNIMOD_Carboxyethyl, "UNIMOD:378", "Carboxyethyl", "Carboxyethyl.", false}, {UNIMOD_Hypusine, "UNIMOD:379", "Hypusine", "Hypusine.", false}, {UNIMOD_Retinylidene, "UNIMOD:380", "Retinylidene", "Retinal.", false}, {UNIMOD_Lys__AminoadipicAcid, "UNIMOD:381", "Lys->AminoadipicAcid", "Alpha-amino adipic acid.", false}, {UNIMOD_Cys__PyruvicAcid, "UNIMOD:382", "Cys->PyruvicAcid", "Pyruvic acid from N-term cys.", false}, {UNIMOD_Ammonia_loss, "UNIMOD:385", "Ammonia-loss", "Loss of ammonia.", false}, {UNIMOD_Phycocyanobilin, "UNIMOD:387", "Phycocyanobilin", "Phycocyanobilin.", false}, {UNIMOD_Phycoerythrobilin, "UNIMOD:388", "Phycoerythrobilin", "Phycoerythrobilin.", false}, {UNIMOD_Phytochromobilin, "UNIMOD:389", "Phytochromobilin", "Phytochromobilin.", false}, {UNIMOD_Heme, "UNIMOD:390", "Heme", "Heme.", false}, {UNIMOD_Molybdopterin, "UNIMOD:391", "Molybdopterin", "Molybdopterin.", false}, {UNIMOD_Quinone, "UNIMOD:392", "Quinone", "Quinone.", false}, {UNIMOD_Glucosylgalactosyl, "UNIMOD:393", "Glucosylgalactosyl", "Glucosylgalactosyl hydroxylysine.", false}, {UNIMOD_GPIanchor, "UNIMOD:394", "GPIanchor", "Glycosylphosphatidylinositol.", false}, {UNIMOD_PhosphoribosyldephosphoCoA, "UNIMOD:395", "PhosphoribosyldephosphoCoA", "Phosphoribosyl dephospho-coenzyme A.", false}, {UNIMOD_GlycerylPE, "UNIMOD:396", "GlycerylPE", "Glycerylphosphorylethanolamine.", false}, {UNIMOD_Triiodothyronine, "UNIMOD:397", "Triiodothyronine", "Triiodo.", false}, {UNIMOD_Thyroxine, "UNIMOD:398", "Thyroxine", "Tetraiodo.", false}, {UNIMOD_Tyr__Dha, "UNIMOD:400", "Tyr->Dha", "Dehydroalanine (from Tyrosine).", false}, {UNIMOD_Didehydro, "UNIMOD:401", "Didehydro", "2-amino-3-oxo-butanoic_acid.", false}, {UNIMOD_Cys__Oxoalanine, "UNIMOD:402", "Cys->Oxoalanine", "Oxoalanine.", false}, {UNIMOD_Ser__LacticAcid, "UNIMOD:403", "Ser->LacticAcid", "Lactic acid from N-term Ser.", false}, {UNIMOD_Phosphoadenosine, "UNIMOD:405", "Phosphoadenosine", "AMP.", false}, {UNIMOD_Hydroxycinnamyl, "UNIMOD:407", "Hydroxycinnamyl", "Hydroxycinnamyl.", false}, {UNIMOD_Glycosyl, "UNIMOD:408", "Glycosyl", "Glycosyl-L-hydroxyproline.", false}, {UNIMOD_FMNH, "UNIMOD:409", "FMNH", "Flavin mononucleotide.", false}, {UNIMOD_Archaeol, "UNIMOD:410", "Archaeol", "S-diphytanylglycerol diether.", false}, {UNIMOD_Phenylisocyanate, "UNIMOD:411", "Phenylisocyanate", "Phenyl isocyanate.", false}, {UNIMOD_Phenylisocyanate_2H_5_, "UNIMOD:412", "Phenylisocyanate:2H(5)", "D5-phenyl isocyanate.", false}, {UNIMOD_Phosphoguanosine, "UNIMOD:413", "Phosphoguanosine", "Phospho-guanosine.", false}, {UNIMOD_Hydroxymethyl, "UNIMOD:414", "Hydroxymethyl", "Hydroxymethyl.", false}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "UNIMOD:415", "MolybdopterinGD+Delta:S(-1)Se(1)", "L-selenocysteinyl molybdenum bis(molybdopterin guanine dinucleotide).", false}, {UNIMOD_Dipyrrolylmethanemethyl, "UNIMOD:416", "Dipyrrolylmethanemethyl", "Dipyrrolylmethanemethyl.", false}, {UNIMOD_PhosphoUridine, "UNIMOD:417", "PhosphoUridine", "Uridine phosphodiester.", false}, {UNIMOD_Glycerophospho, "UNIMOD:419", "Glycerophospho", "Glycerophospho.", false}, {UNIMOD_Carboxy__Thiocarboxy, "UNIMOD:420", "Carboxy->Thiocarboxy", "Thiocarboxylic acid.", false}, {UNIMOD_Sulfide, "UNIMOD:421", "Sulfide", "Persulfide.", false}, {UNIMOD_PyruvicAcidIminyl, "UNIMOD:422", "PyruvicAcidIminyl", "N-pyruvic acid 2-iminyl.", false}, {UNIMOD_Delta_Se_1_, "UNIMOD:423", "Delta:Se(1)", "Selenyl.", false}, {UNIMOD_MolybdopterinGD, "UNIMOD:424", "MolybdopterinGD", "Molybdenum bis(molybdopterin guanine dinucleotide).", false}, {UNIMOD_Dioxidation, "UNIMOD:425", "Dioxidation", "Dihydroxy.", false}, {UNIMOD_Octanoyl, "UNIMOD:426", "Octanoyl", "Octanoyl.", false}, {UNIMOD_PhosphoHexNAc, "UNIMOD:428", "PhosphoHexNAc", "N-acetylglucosamine-1-phosphoryl.", false}, {UNIMOD_PhosphoHex, "UNIMOD:429", "PhosphoHex", "Phosphoglycosyl-D-mannose-1-phosphoryl.", false}, {UNIMOD_Palmitoleyl, "UNIMOD:431", "Palmitoleyl", "Palmitoleyl.", false}, {UNIMOD_Cholesterol, "UNIMOD:432", "Cholesterol", "Cholesterol ester.", false}, {UNIMOD_Didehydroretinylidene, "UNIMOD:433", "Didehydroretinylidene", "3,4-didehydroretinylidene.", false}, {UNIMOD_CHDH, "UNIMOD:434", "CHDH", "Cis-14-hydroxy-10,13-dioxo-7-heptadecenoic ester.", false}, {UNIMOD_Methylpyrroline, "UNIMOD:435", "Methylpyrroline", "4-methyl-delta-1-pyrroline-5-carboxyl.", false}, {UNIMOD_Hydroxyheme, "UNIMOD:436", "Hydroxyheme", "Hydroxyheme.", false}, {UNIMOD_MicrocinC7, "UNIMOD:437", "MicrocinC7", "(3-aminopropyl)(L-aspartyl-1-amino)phosphoryl-5-adenosine.", false}, {UNIMOD_Cyano, "UNIMOD:438", "Cyano", "Cyano.", false}, {UNIMOD_Diironsubcluster, "UNIMOD:439", "Diironsubcluster", "Hydrogenase diiron subcluster.", false}, {UNIMOD_Amidino, "UNIMOD:440", "Amidino", "Amidino.", false}, {UNIMOD_FMN, "UNIMOD:442", "FMN", "O3-(riboflavin phosphoryl).", false}, {UNIMOD_FMNC, "UNIMOD:443", "FMNC", "S-(4a-FMN).", false}, {UNIMOD_CuSMo, "UNIMOD:444", "CuSMo", "Copper sulfido molybdopterin cytosine dinuncleotide.", false}, {UNIMOD_Hydroxytrimethyl, "UNIMOD:445", "Hydroxytrimethyl", "5-hydroxy-N6,N6,N6-trimethyl.", false}, {UNIMOD_Deoxy, "UNIMOD:447", "Deoxy", "Reduction.", false}, {UNIMOD_Microcin, "UNIMOD:448", "Microcin", "Microcin E492 siderophore ester from serine.", false}, {UNIMOD_Decanoyl, "UNIMOD:449", "Decanoyl", "Lipid.", false}, {UNIMOD_Glu, "UNIMOD:450", "Glu", "Monoglutamyl.", false}, {UNIMOD_GluGlu, "UNIMOD:451", "GluGlu", "Diglutamyl.", false}, {UNIMOD_GluGluGlu, "UNIMOD:452", "GluGluGlu", "Triglutamyl.", false}, {UNIMOD_GluGluGluGlu, "UNIMOD:453", "GluGluGluGlu", "Tetraglutamyl.", false}, {UNIMOD_HexN, "UNIMOD:454", "HexN", "Hexosamine.", false}, {UNIMOD_Xlink_DMP_154_, "UNIMOD:455", "Xlink:DMP[154]", "Free monolink of DMP crosslinker.", false}, {UNIMOD_NDA, "UNIMOD:457", "NDA", "Naphthalene-2,3-dicarboxaldehyde.", false}, {UNIMOD_SPITC_13C_6_, "UNIMOD:464", "SPITC:13C(6)", "4-sulfophenyl isothiocyanate (Heavy C13).", false}, {UNIMOD_AEC_MAEC, "UNIMOD:472", "AEC-MAEC", "Aminoethylcysteine.", false}, {UNIMOD_TMAB, "UNIMOD:476", "TMAB", "4-trimethyllammoniumbutyryl-.", false}, {UNIMOD_TMAB_2H_9_, "UNIMOD:477", "TMAB:2H(9)", "D9-4-trimethyllammoniumbutyryl-.", false}, {UNIMOD_FTC, "UNIMOD:478", "FTC", "Fluorescein-5-thiosemicarbazide.", false}, {UNIMOD_Label_2H_4_, "UNIMOD:481", "Label:2H(4)", "4,4,5,5-D4 Lysine.", false}, {UNIMOD_DHP, "UNIMOD:488", "DHP", "Dehydropyrrolizidine alkaloid (dehydroretronecine) on cysteines.", false}, {UNIMOD_Hep, "UNIMOD:490", "Hep", "Heptose.", false}, {UNIMOD_BADGE, "UNIMOD:493", "BADGE", "Bisphenol A diglycidyl ether derivative.", false}, {UNIMOD_CyDye_Cy3, "UNIMOD:494", "CyDye-Cy3", "Cy3 CyDye DIGE Fluor saturation dye.", false}, {UNIMOD_CyDye_Cy5, "UNIMOD:495", "CyDye-Cy5", "Cy5 CyDye DIGE Fluor saturation dye.", false}, {UNIMOD_BHTOH, "UNIMOD:498", "BHTOH", "Michael addition of t-butyl hydroxylated BHT (BHTOH) to C, H or K.", false}, {UNIMOD_IGBP_13C_2_, "UNIMOD:499", "IGBP:13C(2)", "Heavy IDBEST tag for quantitation.", false}, {UNIMOD_Nmethylmaleimide_water, "UNIMOD:500", "Nmethylmaleimide+water", "Nmethylmaleimidehydrolysis.", false}, {UNIMOD_PyMIC, "UNIMOD:501", "PyMIC", "3-methyl-2-pyridyl isocyanate.", false}, {UNIMOD_LG_lactam_K, "UNIMOD:503", "LG-lactam-K", "Levuglandinyl - lysine lactam adduct.", false}, {UNIMOD_LG_Hlactam_K, "UNIMOD:504", "LG-Hlactam-K", "Levuglandinyl - lysine hydroxylactam adduct.", false}, {UNIMOD_LG_lactam_R, "UNIMOD:505", "LG-lactam-R", "Levuglandinyl - arginine lactam adduct.", false}, {UNIMOD_LG_Hlactam_R, "UNIMOD:506", "LG-Hlactam-R", "Levuglandinyl - arginine hydroxylactam adduct.", false}, {UNIMOD_Dimethyl_2H_4_13C_2_, "UNIMOD:510", "Dimethyl:2H(4)13C(2)", "DiMethyl-C13HD2.", false}, {UNIMOD_Hex_2_, "UNIMOD:512", "Hex(2)", "Lactosylation.", false}, {UNIMOD_C8_QAT, "UNIMOD:513", "C8-QAT", "[3-(2,5)-Dioxopyrrolidin-1-yloxycarbonyl)-propyl]dimethyloctylammonium.", false}, {UNIMOD_PropylNAGthiazoline, "UNIMOD:514", "PropylNAGthiazoline", "Propyl-1,2-dideoxy-2\\'-methyl-alpha-D-glucopyranoso-[2,1-d]-Delta2\\'-thiazoline.", false}, {UNIMOD_FNEM, "UNIMOD:515", "FNEM", "Fluorescein-5-maleimide.", false}, {UNIMOD_Diethyl, "UNIMOD:518", "Diethyl", "Diethylation, analogous to Dimethylation.", false}, {UNIMOD_BisANS, "UNIMOD:519", "BisANS", "4,4\\'-dianilino-1,1\\'-binaphthyl-5,5\\'-disulfonic acid.", false}, {UNIMOD_Piperidine, "UNIMOD:520", "Piperidine", "Piperidination.", false}, {UNIMOD_Maleimide_PEO2_Biotin, "UNIMOD:522", "Maleimide-PEO2-Biotin", "Maleimide-Biotin.", false}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "UNIMOD:523", "Sulfo-NHS-LC-LC-Biotin", "Biot_LC_LC.", false}, {UNIMOD_CLIP_TRAQ_2, "UNIMOD:525", "CLIP_TRAQ_2", "CLIP_TRAQ_2.", false}, {UNIMOD_Dethiomethyl, "UNIMOD:526", "Dethiomethyl", "Prompt loss of side chain from oxidised Met.", false}, {UNIMOD_Methyl_Deamidated, "UNIMOD:528", "Methyl+Deamidated", "Deamidation followed by a methylation.", false}, {UNIMOD_Delta_H_5_C_2_, "UNIMOD:529", "Delta:H(5)C(2)", "Dimethylation of proline residue.", false}, {UNIMOD_Cation_K, "UNIMOD:530", "Cation:K", "Replacement of proton by potassium.", false}, {UNIMOD_Cation_Cu_I_, "UNIMOD:531", "Cation:Cu[I]", "Replacement of proton by copper.", false}, {UNIMOD_iTRAQ4plex114, "UNIMOD:532", "iTRAQ4plex114", "Accurate mass for 114.", false}, {UNIMOD_iTRAQ4plex115, "UNIMOD:533", "iTRAQ4plex115", "Accurate mass for 115.", false}, {UNIMOD_Dibromo, "UNIMOD:534", "Dibromo", "Dibromo.", false}, {UNIMOD_LRGG, "UNIMOD:535", "LRGG", "Ubiquitination.", false}, {UNIMOD_CLIP_TRAQ_3, "UNIMOD:536", "CLIP_TRAQ_3", "CLIP_TRAQ_3.", false}, {UNIMOD_CLIP_TRAQ_4, "UNIMOD:537", "CLIP_TRAQ_4", "CLIP_TRAQ_4.", false}, {UNIMOD_Biotin_Cayman_10141, "UNIMOD:538", "Biotin:Cayman-10141", "Was 15dB-biotin.", false}, {UNIMOD_Biotin_Cayman_10013, "UNIMOD:539", "Biotin:Cayman-10013", "Was PGA1-biotin.", false}, {UNIMOD_Ala__Ser, "UNIMOD:540", "Ala->Ser", "Ala->Ser substitution.", false}, {UNIMOD_Ala__Thr, "UNIMOD:541", "Ala->Thr", "Ala->Thr substitution.", false}, {UNIMOD_Ala__Asp, "UNIMOD:542", "Ala->Asp", "Ala->Asp substitution.", false}, {UNIMOD_Ala__Pro, "UNIMOD:543", "Ala->Pro", "Ala->Pro substitution.", false}, {UNIMOD_Ala__Gly, "UNIMOD:544", "Ala->Gly", "Ala->Gly substitution.", false}, {UNIMOD_Ala__Glu, "UNIMOD:545", "Ala->Glu", "Ala->Glu substitution.", false}, {UNIMOD_Ala__Val, "UNIMOD:546", "Ala->Val", "Ala->Val substitution.", false}, {UNIMOD_Cys__Phe, "UNIMOD:547", "Cys->Phe", "Cys->Phe substitution.", false}, {UNIMOD_Cys__Ser, "UNIMOD:548", "Cys->Ser", "Cys->Ser substitution.", false}, {UNIMOD_Cys__Trp, "UNIMOD:549", "Cys->Trp", "Cys->Trp substitution.", false}, {UNIMOD_Cys__Tyr, "UNIMOD:550", "Cys->Tyr", "Cys->Tyr substitution.", false}, {UNIMOD_Cys__Arg, "UNIMOD:551", "Cys->Arg", "Cys->Arg substitution.", false}, {UNIMOD_Cys__Gly, "UNIMOD:552", "Cys->Gly", "Cys->Gly substitution.", false}, {UNIMOD_Asp__Ala, "UNIMOD:553", "Asp->Ala", "Asp->Ala substitution.", false}, {UNIMOD_Asp__His, "UNIMOD:554", "Asp->His", "Asp->His substitution.", false}, {UNIMOD_Asp__Asn, "UNIMOD:555", "Asp->Asn", "Asp->Asn substitution.", false}, {UNIMOD_Asp__Gly, "UNIMOD:556", "Asp->Gly", "Asp->Gly substitution.", false}, {UNIMOD_Asp__Tyr, "UNIMOD:557", "Asp->Tyr", "Asp->Tyr substitution.", false}, {UNIMOD_Asp__Glu, "UNIMOD:558", "Asp->Glu", "Asp->Glu substitution.", false}, {UNIMOD_Asp__Val, "UNIMOD:559", "Asp->Val", "Asp->Val substitution.", false}, {UNIMOD_Glu__Ala, "UNIMOD:560", "Glu->Ala", "Glu->Ala substitution.", false}, {UNIMOD_Glu__Gln, "UNIMOD:561", "Glu->Gln", "Glu->Gln substitution.", false}, {UNIMOD_Glu__Asp, "UNIMOD:562", "Glu->Asp", "Glu->Asp substitution.", false}, {UNIMOD_Glu__Lys, "UNIMOD:563", "Glu->Lys", "Glu->Lys substitution.", false}, {UNIMOD_Glu__Gly, "UNIMOD:564", "Glu->Gly", "Glu->Gly substitution.", false}, {UNIMOD_Glu__Val, "UNIMOD:565", "Glu->Val", "Glu->Val substitution.", false}, {UNIMOD_Phe__Ser, "UNIMOD:566", "Phe->Ser", "Phe->Ser substitution.", false}, {UNIMOD_Phe__Cys, "UNIMOD:567", "Phe->Cys", "Phe->Cys substitution.", false}, {UNIMOD_Phe__Xle, "UNIMOD:568", "Phe->Xle", "Phe->Leu/Ile substitution.", false}, {UNIMOD_Phe__Tyr, "UNIMOD:569", "Phe->Tyr", "Phe->Tyr substitution.", false}, {UNIMOD_Phe__Val, "UNIMOD:570", "Phe->Val", "Phe->Val substitution.", false}, {UNIMOD_Gly__Ala, "UNIMOD:571", "Gly->Ala", "Gly->Ala substitution.", false}, {UNIMOD_Gly__Ser, "UNIMOD:572", "Gly->Ser", "Gly->Ser substitution.", false}, {UNIMOD_Gly__Trp, "UNIMOD:573", "Gly->Trp", "Gly->Trp substitution.", false}, {UNIMOD_Gly__Glu, "UNIMOD:574", "Gly->Glu", "Gly->Glu substitution.", false}, {UNIMOD_Gly__Val, "UNIMOD:575", "Gly->Val", "Gly->Val substitution.", false}, {UNIMOD_Gly__Asp, "UNIMOD:576", "Gly->Asp", "Gly->Asp substitution.", false}, {UNIMOD_Gly__Cys, "UNIMOD:577", "Gly->Cys", "Gly->Cys substitution.", false}, {UNIMOD_Gly__Arg, "UNIMOD:578", "Gly->Arg", "Gly->Arg substitution.", false}, {UNIMOD_His__Pro, "UNIMOD:580", "His->Pro", "His->Pro substitution.", false}, {UNIMOD_His__Tyr, "UNIMOD:581", "His->Tyr", "His->Tyr substitution.", false}, {UNIMOD_His__Gln, "UNIMOD:582", "His->Gln", "His->Gln substitution.", false}, {UNIMOD_His__Arg, "UNIMOD:584", "His->Arg", "His->Arg substitution.", false}, {UNIMOD_His__Xle, "UNIMOD:585", "His->Xle", "His->Leu/Ile substitution.", false}, {UNIMOD_Xle__Thr, "UNIMOD:588", "Xle->Thr", "Leu/Ile->Thr substitution.", false}, {UNIMOD_Xle__Asn, "UNIMOD:589", "Xle->Asn", "Leu/Ile->Asn substitution.", false}, {UNIMOD_Xle__Lys, "UNIMOD:590", "Xle->Lys", "Leu/Ile->Lys substitution.", false}, {UNIMOD_Lys__Thr, "UNIMOD:594", "Lys->Thr", "Lys->Thr substitution.", false}, {UNIMOD_Lys__Asn, "UNIMOD:595", "Lys->Asn", "Lys->Asn substitution.", false}, {UNIMOD_Lys__Glu, "UNIMOD:596", "Lys->Glu", "Lys->Glu substitution.", false}, {UNIMOD_Lys__Gln, "UNIMOD:597", "Lys->Gln", "Lys->Gln substitution.", false}, {UNIMOD_Lys__Met, "UNIMOD:598", "Lys->Met", "Lys->Met substitution.", false}, {UNIMOD_Lys__Arg, "UNIMOD:599", "Lys->Arg", "Lys->Arg substitution.", false}, {UNIMOD_Lys__Xle, "UNIMOD:600", "Lys->Xle", "Lys->Leu/Ile substitution.", false}, {UNIMOD_Xle__Ser, "UNIMOD:601", "Xle->Ser", "Leu/Ile->Ser substitution.", false}, {UNIMOD_Xle__Phe, "UNIMOD:602", "Xle->Phe", "Leu/Ile->Phe substitution.", false}, {UNIMOD_Xle__Trp, "UNIMOD:603", "Xle->Trp", "Leu/Ile->Trp substitution.", false}, {UNIMOD_Xle__Pro, "UNIMOD:604", "Xle->Pro", "Leu/Ile->Pro substitution.", false}, {UNIMOD_Xle__Val, "UNIMOD:605", "Xle->Val", "Leu/Ile->Val substitution.", false}, {UNIMOD_Xle__His, "UNIMOD:606", "Xle->His", "Leu/Ile->His substitution.", false}, {UNIMOD_Xle__Gln, "UNIMOD:607", "Xle->Gln", "Leu/Ile->Gln substitution.", false}, {UNIMOD_Xle__Met, "UNIMOD:608", "Xle->Met", "Leu/Ile->Met substitution.", false}, {UNIMOD_Xle__Arg, "UNIMOD:609", "Xle->Arg", "Leu/Ile->Arg substitution.", false}, {UNIMOD_Met__Thr, "UNIMOD:610", "Met->Thr", "Met->Thr substitution.", false}, {UNIMOD_Met__Arg, "UNIMOD:611", "Met->Arg", "Met->Arg substitution.", false}, {UNIMOD_Met__Lys, "UNIMOD:613", "Met->Lys", "Met->Lys substitution.", false}, {UNIMOD_Met__Xle, "UNIMOD:614", "Met->Xle", "Met->Leu/Ile substitution.", false}, {UNIMOD_Met__Val, "UNIMOD:615", "Met->Val", "Met->Val substitution.", false}, {UNIMOD_Asn__Ser, "UNIMOD:616", "Asn->Ser", "Asn->Ser substitution.", false}, {UNIMOD_Asn__Thr, "UNIMOD:617", "Asn->Thr", "Asn->Thr substitution.", false}, {UNIMOD_Asn__Lys, "UNIMOD:618", "Asn->Lys", "Asn->Lys substitution.", false}, {UNIMOD_Asn__Tyr, "UNIMOD:619", "Asn->Tyr", "Asn->Tyr substitution.", false}, {UNIMOD_Asn__His, "UNIMOD:620", "Asn->His", "Asn->His substitution.", false}, {UNIMOD_Asn__Asp, "UNIMOD:621", "Asn->Asp", "Asn->Asp substitution.", false}, {UNIMOD_Asn__Xle, "UNIMOD:622", "Asn->Xle", "Asn->Leu/Ile substitution.", false}, {UNIMOD_Pro__Ser, "UNIMOD:623", "Pro->Ser", "Pro->Ser substitution.", false}, {UNIMOD_Pro__Ala, "UNIMOD:624", "Pro->Ala", "Pro->Ala substitution.", false}, {UNIMOD_Pro__His, "UNIMOD:625", "Pro->His", "Pro->His substitution.", false}, {UNIMOD_Pro__Gln, "UNIMOD:626", "Pro->Gln", "Pro->Gln substitution.", false}, {UNIMOD_Pro__Thr, "UNIMOD:627", "Pro->Thr", "Pro->Thr substitution.", false}, {UNIMOD_Pro__Arg, "UNIMOD:628", "Pro->Arg", "Pro->Arg substitution.", false}, {UNIMOD_Pro__Xle, "UNIMOD:629", "Pro->Xle", "Pro->Leu/Ile substitution.", false}, {UNIMOD_Gln__Pro, "UNIMOD:630", "Gln->Pro", "Gln->Pro substitution.", false}, {UNIMOD_Gln__Lys, "UNIMOD:631", "Gln->Lys", "Gln->Lys substitution.", false}, {UNIMOD_Gln__Glu, "UNIMOD:632", "Gln->Glu", "Gln->Glu substitution.", false}, {UNIMOD_Gln__His, "UNIMOD:633", "Gln->His", "Gln->His substitution.", false}, {UNIMOD_Gln__Arg, "UNIMOD:634", "Gln->Arg", "Gln->Arg substitution.", false}, {UNIMOD_Gln__Xle, "UNIMOD:635", "Gln->Xle", "Gln->Leu/Ile substitution.", false}, {UNIMOD_Arg__Ser, "UNIMOD:636", "Arg->Ser", "Arg->Ser substitution.", false}, {UNIMOD_Arg__Trp, "UNIMOD:637", "Arg->Trp", "Arg->Trp substitution.", false}, {UNIMOD_Arg__Thr, "UNIMOD:638", "Arg->Thr", "Arg->Thr substitution.", false}, {UNIMOD_Arg__Pro, "UNIMOD:639", "Arg->Pro", "Arg->Pro substitution.", false}, {UNIMOD_Arg__Lys, "UNIMOD:640", "Arg->Lys", "Arg->Lys substitution.", false}, {UNIMOD_Arg__His, "UNIMOD:641", "Arg->His", "Arg->His substitution.", false}, {UNIMOD_Arg__Gln, "UNIMOD:642", "Arg->Gln", "Arg->Gln substitution.", false}, {UNIMOD_Arg__Met, "UNIMOD:643", "Arg->Met", "Arg->Met substitution.", false}, {UNIMOD_Arg__Cys, "UNIMOD:644", "Arg->Cys", "Arg->Cys substitution.", false}, {UNIMOD_Arg__Xle, "UNIMOD:645", "Arg->Xle", "Arg->Leu/Ile substitution.", false}, {UNIMOD_Arg__Gly, "UNIMOD:646", "Arg->Gly", "Arg->Gly substitution.", false}, {UNIMOD_Ser__Phe, "UNIMOD:647", "Ser->Phe", "Ser->Phe substitution.", false}, {UNIMOD_Ser__Ala, "UNIMOD:648", "Ser->Ala", "Ser->Ala substitution.", false}, {UNIMOD_Ser__Trp, "UNIMOD:649", "Ser->Trp", "Ser->Trp substitution.", false}, {UNIMOD_Ser__Thr, "UNIMOD:650", "Ser->Thr", "Ser->Thr substitution.", false}, {UNIMOD_Ser__Asn, "UNIMOD:651", "Ser->Asn", "Ser->Asn substitution.", false}, {UNIMOD_Ser__Pro, "UNIMOD:652", "Ser->Pro", "Ser->Pro substitution.", false}, {UNIMOD_Ser__Tyr, "UNIMOD:653", "Ser->Tyr", "Ser->Tyr substitution.", false}, {UNIMOD_Ser__Cys, "UNIMOD:654", "Ser->Cys", "Ser->Cys substitution.", false}, {UNIMOD_Ser__Arg, "UNIMOD:655", "Ser->Arg", "Ser->Arg substitution.", false}, {UNIMOD_Ser__Xle, "UNIMOD:656", "Ser->Xle", "Ser->Leu/Ile substitution.", false}, {UNIMOD_Ser__Gly, "UNIMOD:657", "Ser->Gly", "Ser->Gly substitution.", false}, {UNIMOD_Thr__Ser, "UNIMOD:658", "Thr->Ser", "Thr->Ser substitution.", false}, {UNIMOD_Thr__Ala, "UNIMOD:659", "Thr->Ala", "Thr->Ala substitution.", false}, {UNIMOD_Thr__Asn, "UNIMOD:660", "Thr->Asn", "Thr->Asn substitution.", false}, {UNIMOD_Thr__Lys, "UNIMOD:661", "Thr->Lys", "Thr->Lys substitution.", false}, {UNIMOD_Thr__Pro, "UNIMOD:662", "Thr->Pro", "Thr->Pro substitution.", false}, {UNIMOD_Thr__Met, "UNIMOD:663", "Thr->Met", "Thr->Met substitution.", false}, {UNIMOD_Thr__Xle, "UNIMOD:664", "Thr->Xle", "Thr->Leu/Ile substitution.", false}, {UNIMOD_Thr__Arg, "UNIMOD:665", "Thr->Arg", "Thr->Arg substitution.", false}, {UNIMOD_Val__Phe, "UNIMOD:666", "Val->Phe", "Val->Phe substitution.", false}, {UNIMOD_Val__Ala, "UNIMOD:667", "Val->Ala", "Val->Ala substitution.", false}, {UNIMOD_Val__Glu, "UNIMOD:668", "Val->Glu", "Val->Glu substitution.", false}, {UNIMOD_Val__Met, "UNIMOD:669", "Val->Met", "Val->Met substitution.", false}, {UNIMOD_Val__Asp, "UNIMOD:670", "Val->Asp", "Val->Asp substitution.", false}, {UNIMOD_Val__Xle, "UNIMOD:671", "Val->Xle", "Val->Leu/Ile substitution.", false}, {UNIMOD_Val__Gly, "UNIMOD:672", "Val->Gly", "Val->Gly substitution.", false}, {UNIMOD_Trp__Ser, "UNIMOD:673", "Trp->Ser", "Trp->Ser substitution.", false}, {UNIMOD_Trp__Cys, "UNIMOD:674", "Trp->Cys", "Trp->Cys substitution.", false}, {UNIMOD_Trp__Arg, "UNIMOD:675", "Trp->Arg", "Trp->Arg substitution.", false}, {UNIMOD_Trp__Gly, "UNIMOD:676", "Trp->Gly", "Trp->Gly substitution.", false}, {UNIMOD_Trp__Xle, "UNIMOD:677", "Trp->Xle", "Trp->Leu/Ile substitution.", false}, {UNIMOD_Tyr__Phe, "UNIMOD:678", "Tyr->Phe", "Tyr->Phe substitution.", false}, {UNIMOD_Tyr__Ser, "UNIMOD:679", "Tyr->Ser", "Tyr->Ser substitution.", false}, {UNIMOD_Tyr__Asn, "UNIMOD:680", "Tyr->Asn", "Tyr->Asn substitution.", false}, {UNIMOD_Tyr__His, "UNIMOD:681", "Tyr->His", "Tyr->His substitution.", false}, {UNIMOD_Tyr__Asp, "UNIMOD:682", "Tyr->Asp", "Tyr->Asp substitution.", false}, {UNIMOD_Tyr__Cys, "UNIMOD:683", "Tyr->Cys", "Tyr->Cys substitution.", false}, {UNIMOD_BDMAPP, "UNIMOD:684", "BDMAPP", "Mass Defect Tag on lysine e-amino.", false}, {UNIMOD_NA_LNO2, "UNIMOD:685", "NA-LNO2", "Nitroalkylation by Nitro Linoleic Acid.", false}, {UNIMOD_NA_OA_NO2, "UNIMOD:686", "NA-OA-NO2", "Nitroalkylation by Nitro Oleic Acid.", false}, {UNIMOD_ICPL_2H_4_, "UNIMOD:687", "ICPL:2H(4)", "Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, medium form.", false}, {UNIMOD_Label_13C_6_15N_1_, "UNIMOD:695", "Label:13C(6)15N(1)", "13C(6) 15N(1) Silac label.", false}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "UNIMOD:696", "Label:2H(9)13C(6)15N(2)", "13C(6) 15N(2) (D)9 SILAC label.", false}, {UNIMOD_NIC, "UNIMOD:697", "NIC", "Nicotinic Acid.", false}, {UNIMOD_dNIC, "UNIMOD:698", "dNIC", "Deuterated Nicotinic Acid.", false}, {UNIMOD_HNE_Delta_H_2_O, "UNIMOD:720", "HNE-Delta:H(2)O", "Dehydrated 4-hydroxynonenal.", false}, {UNIMOD_4_ONE, "UNIMOD:721", "4-ONE", "4-Oxononenal (ONE).", false}, {UNIMOD_O_Dimethylphosphate, "UNIMOD:723", "O-Dimethylphosphate", "O-Dimethylphosphorylation.", false}, {UNIMOD_O_Methylphosphate, "UNIMOD:724", "O-Methylphosphate", "O-Methylphosphorylation.", false}, {UNIMOD_Diethylphosphate, "UNIMOD:725", "Diethylphosphate", "O-Diethylphosphorylation.", false}, {UNIMOD_Ethylphosphate, "UNIMOD:726", "Ethylphosphate", "O-Ethylphosphorylation.", false}, {UNIMOD_O_pinacolylmethylphosphonate, "UNIMOD:727", "O-pinacolylmethylphosphonate", "O-pinacolylmethylphosphonylation.", false}, {UNIMOD_Methylphosphonate, "UNIMOD:728", "Methylphosphonate", "Methylphosphonylation.", false}, {UNIMOD_O_Isopropylmethylphosphonate, "UNIMOD:729", "O-Isopropylmethylphosphonate", "O-Isopropylmethylphosphonylation.", false}, {UNIMOD_iTRAQ8plex, "UNIMOD:730", "iTRAQ8plex", "Representative mass and accurate mass for 113, 114, 116 & 117.", false}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "UNIMOD:731", "iTRAQ8plex:13C(6)15N(2)", "Accurate mass for 115, 118, 119 & 121.", false}, {UNIMOD_Ethanolamine, "UNIMOD:734", "Ethanolamine", "Carboxyl modification with ethanolamine.", false}, {UNIMOD_BEMAD_ST, "UNIMOD:735", "BEMAD_ST", "Beta elimination of modified S or T followed by Michael addition of DTT.", false}, {UNIMOD_BEMAD_C, "UNIMOD:736", "BEMAD_C", "Beta elimination of alkylated Cys followed by Michael addition of DTT.", false}, {UNIMOD_TMT6plex, "UNIMOD:737", "TMT6plex", "Sixplex Tandem Mass Tag®.", false}, {UNIMOD_TMT2plex, "UNIMOD:738", "TMT2plex", "Duplex Tandem Mass Tag®.", false}, {UNIMOD_TMT, "UNIMOD:739", "TMT", "Native Tandem Mass Tag®.", false}, {UNIMOD_ExacTagThiol, "UNIMOD:740", "ExacTagThiol", "ExacTag Thiol label mass for 2-4-7-10 plex.", false}, {UNIMOD_ExacTagAmine, "UNIMOD:741", "ExacTagAmine", "ExacTag Amine label mass for 2-4-7-10 plex.", false}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "UNIMOD:743", "4-ONE+Delta:H(-2)O(-1)", "Dehydrated 4-Oxononenal Michael adduct.", false}, {UNIMOD_NO_SMX_SEMD, "UNIMOD:744", "NO_SMX_SEMD", "Nitroso Sulfamethoxazole Sulphenamide thiol adduct.", false}, {UNIMOD_NO_SMX_SMCT, "UNIMOD:745", "NO_SMX_SMCT", "Nitroso Sulfamethoxazole semimercaptal thiol adduct.", false}, {UNIMOD_NO_SMX_SIMD, "UNIMOD:746", "NO_SMX_SIMD", "Nitroso Sulfamethoxazole Sulfinamide thiol adduct.", false}, {UNIMOD_Malonyl, "UNIMOD:747", "Malonyl", "Malonylation.", false}, {UNIMOD_3sulfo, "UNIMOD:748", "3sulfo", "Derivatization by N-term modification using 3-Sulfobenzoic succinimidyl ester.", false}, {UNIMOD_trifluoro, "UNIMOD:750", "trifluoro", "Trifluoroleucine replacement of leucine.", false}, {UNIMOD_TNBS, "UNIMOD:751", "TNBS", "Tri nitro benzene.", false}, {UNIMOD_IDEnT, "UNIMOD:762", "IDEnT", "Isotope Distribution Encoded Tag.", false}, {UNIMOD_BEMAD_ST_2H_6_, "UNIMOD:763", "BEMAD_ST:2H(6)", "Beta elimination of modified S or T followed by Michael addition of labelled DTT.", false}, {UNIMOD_BEMAD_C_2H_6_, "UNIMOD:764", "BEMAD_C:2H(6)", "Beta elimination of alkylated Cys followed by Michael addition of labelled DTT.", false}, {UNIMOD_Met_loss, "UNIMOD:765", "Met-loss", "Removal of initiator methionine from protein N-terminus.", false}, {UNIMOD_Met_loss_Acetyl, "UNIMOD:766", "Met-loss+Acetyl", "Removal of initiator methionine from protein N-terminus, then acetylation of the new N-terminus.", false}, {UNIMOD_Menadione_HQ, "UNIMOD:767", "Menadione-HQ", "Menadione hydroquinone derivative.", false}, {UNIMOD_Methyl_Acetyl_2H_3_, "UNIMOD:768", "Methyl+Acetyl:2H(3)", "Mono-methylated lysine labelled with Acetyl_heavy.", false}, {UNIMOD_lapachenole, "UNIMOD:771", "lapachenole", "Lapachenole photochemically added to cysteine.", false}, {UNIMOD_Label_13C_5_, "UNIMOD:772", "Label:13C(5)", "13C(5) Silac label.", false}, {UNIMOD_maleimide, "UNIMOD:773", "maleimide", "Maleimide.", false}, {UNIMOD_Biotin_phenacyl, "UNIMOD:774", "Biotin-phenacyl", "Alkylation by biotinylated form of phenacyl bromide.", false}, {UNIMOD_Carboxymethyl_13C_2_, "UNIMOD:775", "Carboxymethyl:13C(2)", "Iodoacetic acid derivative w/ 13C label.", false}, {UNIMOD_NEM_2H_5_, "UNIMOD:776", "NEM:2H(5)", "D5 N-ethylmaleimide on cysteines.", false}, {UNIMOD_AEC_MAEC_2H_4_, "UNIMOD:792", "AEC-MAEC:2H(4)", "Deuterium cysteamine modification to S or T.", false}, {UNIMOD_Hex_1_HexNAc_1_, "UNIMOD:793", "Hex(1)HexNAc(1)", "Hex1HexNAc1.", false}, {UNIMOD_Label_13C_6__GG, "UNIMOD:799", "Label:13C(6)+GG", "13C6 labeled ubiquitinylation residue.", false}, {UNIMOD_Biotin_Thermo_21345, "UNIMOD:800", "Biotin:Thermo-21345", "Was PentylamineBiotin.", false}, {UNIMOD_Pentylamine, "UNIMOD:801", "Pentylamine", "Labeling transglutaminase substrate on glutamine side chain.", false}, {UNIMOD_Biotin_Thermo_21360, "UNIMOD:811", "Biotin:Thermo-21360", "Was Biotin-PEO4-hydrazide.", false}, {UNIMOD_Cy3b_maleimide, "UNIMOD:821", "Cy3b-maleimide", "Fluorescent dye that labels cysteines.", false}, {UNIMOD_Gly_loss_Amide, "UNIMOD:822", "Gly-loss+Amide", "Enzymatic glycine removal leaving an amidated C-terminus.", false}, {UNIMOD_Xlink_BMOE, "UNIMOD:824", "Xlink:BMOE", "Intact or monolink BMOE crosslinker.", false}, {UNIMOD_Xlink_DFDNB, "UNIMOD:825", "Xlink:DFDNB", "Intact DFDNB crosslinker.", false}, {UNIMOD_TMPP_Ac, "UNIMOD:827", "TMPP-Ac", "Tris(2,4,6-trimethoxyphenyl)phosphonium acetic acid N-hydroxysuccinimide ester derivative.", false}, {UNIMOD_Dihydroxyimidazolidine, "UNIMOD:830", "Dihydroxyimidazolidine", "Dihydroxy methylglyoxal adduct.", false}, {UNIMOD_Label_2H_4__Acetyl, "UNIMOD:834", "Label:2H(4)+Acetyl", "Acetyl 4,4,5,5-D4 Lysine.", false}, {UNIMOD_Label_13C_6__Acetyl, "UNIMOD:835", "Label:13C(6)+Acetyl", "Acetyl 13C(6) Silac label.", false}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "UNIMOD:836", "Label:13C(6)15N(2)+Acetyl", "Acetyl_13C(6) 15N(2) Silac label.", false}, {UNIMOD_Arg__Npo, "UNIMOD:837", "Arg->Npo", "Arginine replacement by Nitropyrimidyl ornithine.", false}, {UNIMOD_EQIGG, "UNIMOD:846", "EQIGG", "Sumo mutant Smt3-WT tail following trypsin digestion.", false}, {UNIMOD_Arg2PG, "UNIMOD:848", "Arg2PG", "Adduct of phenylglyoxal with Arg.", false}, {UNIMOD_cGMP, "UNIMOD:849", "cGMP", "S-guanylation.", false}, {UNIMOD_cGMP_RMP_loss, "UNIMOD:851", "cGMP+RMP-loss", "S-guanylation-2.", false}, {UNIMOD_Label_2H_4__GG, "UNIMOD:853", "Label:2H(4)+GG", "Ubiquitination 2H4 lysine.", false}, {UNIMOD_MG_H1, "UNIMOD:859", "MG-H1", "Methylglyoxal-derived hydroimidazolone.", false}, {UNIMOD_G_H1, "UNIMOD:860", "G-H1", "Glyoxal-derived hydroimiadazolone.", false}, {UNIMOD_ZGB, "UNIMOD:861", "ZGB", "NHS ester linked Green Fluorescent Bodipy Dye.", false}, {UNIMOD_Label_13C_1_2H_3_, "UNIMOD:862", "Label:13C(1)2H(3)", "SILAC.", false}, {UNIMOD_Label_13C_6_15N_2__GG, "UNIMOD:864", "Label:13C(6)15N(2)+GG", "13C(6) 15N(2) Lysine glygly.", false}, {UNIMOD_ICPL_13C_6_2H_4_, "UNIMOD:866", "ICPL:13C(6)2H(4)", "Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, +10 Da form.", false}, {UNIMOD_QEQTGG, "UNIMOD:876", "QEQTGG", "SUMOylation by SUMO-1.", false}, {UNIMOD_QQQTGG, "UNIMOD:877", "QQQTGG", "SUMOylation by SUMO-2/3.", false}, {UNIMOD_Bodipy, "UNIMOD:878", "Bodipy", "Bodipy modifications onto cysteine.", false}, {UNIMOD_Biotin_Thermo_21325, "UNIMOD:884", "Biotin:Thermo-21325", "Was ChromoBiotin.", false}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "UNIMOD:885", "Label:13C(1)2H(3)+Oxidation", "Oxidised methionine 13C(1)2H(3) SILAC label.", false}, {UNIMOD_HydroxymethylOP, "UNIMOD:886", "HydroxymethylOP", "2-ammonio-6-[4-(hydroxymethyl)-3-oxidopyridinium-1-yl]- hexanoate.", false}, {UNIMOD_MDCC, "UNIMOD:887", "MDCC", "Covalent linkage of maleimidyl coumarin probe (Molecular Probes D-10253).", false}, {UNIMOD_mTRAQ, "UNIMOD:888", "mTRAQ", "MTRAQ light.", false}, {UNIMOD_mTRAQ_13C_3_15N_1_, "UNIMOD:889", "mTRAQ:13C(3)15N(1)", "MTRAQ medium.", false}, {UNIMOD_DyLight_maleimide, "UNIMOD:890", "DyLight-maleimide", "Thiol-reactive dye for fluorescence labelling of proteins.", false}, {UNIMOD_Methyl_PEO12_Maleimide, "UNIMOD:891", "Methyl-PEO12-Maleimide", "Methyl-PEO12-Maleimide.", false}, {UNIMOD_CarbamidomethylDTT, "UNIMOD:893", "CarbamidomethylDTT", "Carbamidomethylated DTT modification of cysteine.", false}, {UNIMOD_CarboxymethylDTT, "UNIMOD:894", "CarboxymethylDTT", "Carboxymethylated DTT modification of cysteine.", false}, {UNIMOD_Biotin_PEG_PRA, "UNIMOD:895", "Biotin-PEG-PRA", "Biotin polyethyleneoxide (n=3) alkyne.", false}, {UNIMOD_Met__Aha, "UNIMOD:896", "Met->Aha", "Methionine replacement by azido homoalanine.", false}, {UNIMOD_Label_15N_4_, "UNIMOD:897", "Label:15N(4)", "SILAC 15N(4).", false}, {UNIMOD_pyrophospho, "UNIMOD:898", "pyrophospho", "Pyrophosphorylation of Ser/Thr.", false}, {UNIMOD_Met__Hpg, "UNIMOD:899", "Met->Hpg", "Methionine replacement by homopropargylglycine.", false}, {UNIMOD_4AcAllylGal, "UNIMOD:901", "4AcAllylGal", "2,3,4,6-tetra-O-Acetyl-1-allyl-alpha-D-galactopyranoside modification of cysteine.", false}, {UNIMOD_DimethylArsino, "UNIMOD:902", "DimethylArsino", "Reaction with dimethylarsinous (AsIII) acid.", false}, {UNIMOD_Lys__CamCys, "UNIMOD:903", "Lys->CamCys", "Lys->Cys substitution and carbamidomethylation.", false}, {UNIMOD_Phe__CamCys, "UNIMOD:904", "Phe->CamCys", "Phe->Cys substitution and carbamidomethylation.", false}, {UNIMOD_Leu__MetOx, "UNIMOD:905", "Leu->MetOx", "Leu->Met substitution and sulfoxidation.", false}, {UNIMOD_Lys__MetOx, "UNIMOD:906", "Lys->MetOx", "Lys->Met substitution and sulfoxidation.", false}, {UNIMOD_Galactosyl, "UNIMOD:907", "Galactosyl", "Gluconoylation.", false}, {UNIMOD_Xlink_SMCC_321_, "UNIMOD:908", "Xlink:SMCC[321]", "Monolink of SMCC terminated with 3-(dimethylamino)-1-propylamine.", false}, {UNIMOD_Bacillosamine, "UNIMOD:910", "Bacillosamine", "2,4-diacetamido-2,4,6-trideoxyglucopyranose.", false}, {UNIMOD_MTSL, "UNIMOD:911", "MTSL", "Cys modification by (1-oxyl-2,2,5,5-tetramethyl-3-pyrroline-3-methyl)methanesulfonate (MTSL).", false}, {UNIMOD_HNE_BAHAH, "UNIMOD:912", "HNE-BAHAH", "4-hydroxy-2-nonenal and biotinamidohexanoic acid hydrazide, reduced.", false}, {UNIMOD_Methylmalonylation, "UNIMOD:914", "Methylmalonylation", "Methylmalonylation on Serine.", false}, {UNIMOD_Label_13C_4_15N_2__GG, "UNIMOD:923", "Label:13C(4)15N(2)+GG", "13C(4) 15N(2) Lysine glygly.", false}, {UNIMOD_ethylamino, "UNIMOD:926", "ethylamino", "Ethyl amino.", false}, {UNIMOD_MercaptoEthanol, "UNIMOD:928", "MercaptoEthanol", "2-OH-ethyl thio-Ser.", false}, {UNIMOD_Ethyl_Deamidated, "UNIMOD:931", "Ethyl+Deamidated", "Deamidation followed by esterification with ethanol.", false}, {UNIMOD_VFQQQTGG, "UNIMOD:932", "VFQQQTGG", "SUMOylation by SUMO-2/3 (formic acid cleavage).", false}, {UNIMOD_VIEVYQEQTGG, "UNIMOD:933", "VIEVYQEQTGG", "SUMOylation by SUMO-1 (formic acid cleavage).", false}, {UNIMOD_AMTzHexNAc2, "UNIMOD:934", "AMTzHexNAc2", "Photocleavable Biotin + GalNAz on O-GlcNAc.", false}, {UNIMOD_Atto495Maleimide, "UNIMOD:935", "Atto495Maleimide", "High molecular absorption maleimide label for proteins.", false}, {UNIMOD_Chlorination, "UNIMOD:936", "Chlorination", "Chlorination of tyrosine residues.", false}, {UNIMOD_dichlorination, "UNIMOD:937", "dichlorination", "Dichlorination.", false}, {UNIMOD_AROD, "UNIMOD:938", "AROD", "Cysteine modifier.", false}, {UNIMOD_Cys__methylaminoAla, "UNIMOD:939", "Cys->methylaminoAla", "Carbamidomethylated Cys that undergoes beta-elimination and Michael addition of methylamine.", false}, {UNIMOD_Cys__ethylaminoAla, "UNIMOD:940", "Cys->ethylaminoAla", "Carbamidomethylated Cys that undergoes beta-elimination and Michael addition of ethylamine.", false}, {UNIMOD_DNPS, "UNIMOD:941", "DNPS", "2,4-Dinitrobenzenesulfenyl.", false}, {UNIMOD_SulfoGMBS, "UNIMOD:942", "SulfoGMBS", "High molecular absorption label for proteins.", false}, {UNIMOD_DimethylamineGMBS, "UNIMOD:943", "DimethylamineGMBS", "Modified GMBS X linker.", false}, {UNIMOD_Label_15N_2_2H_9_, "UNIMOD:944", "Label:15N(2)2H(9)", "SILAC label.", false}, {UNIMOD_LG_anhydrolactam, "UNIMOD:946", "LG-anhydrolactam", "Levuglandinyl-lysine anhydrolactam adduct.", false}, {UNIMOD_LG_pyrrole, "UNIMOD:947", "LG-pyrrole", "Levuglandinyl-lysine pyrrole adduct.", false}, {UNIMOD_LG_anhyropyrrole, "UNIMOD:948", "LG-anhyropyrrole", "Levuglandinyl-lysine anhyropyrrole adduct.", false}, {UNIMOD_3_deoxyglucosone, "UNIMOD:949", "3-deoxyglucosone", "Condensation product of 3-deoxyglucosone.", false}, {UNIMOD_Cation_Li, "UNIMOD:950", "Cation:Li", "Replacement of proton by lithium.", false}, {UNIMOD_Cation_Ca_II_, "UNIMOD:951", "Cation:Ca[II]", "Replacement of 2 protons by calcium.", false}, {UNIMOD_Cation_Fe_II_, "UNIMOD:952", "Cation:Fe[II]", "Replacement of 2 protons by iron.", false}, {UNIMOD_Cation_Ni_II_, "UNIMOD:953", "Cation:Ni[II]", "Replacement of 2 protons by nickel.", false}, {UNIMOD_Cation_Zn_II_, "UNIMOD:954", "Cation:Zn[II]", "Replacement of 2 protons by zinc.", false}, {UNIMOD_Cation_Ag, "UNIMOD:955", "Cation:Ag", "Replacement of proton by silver.", false}, {UNIMOD_Cation_Mg_II_, "UNIMOD:956", "Cation:Mg[II]", "Replacement of 2 protons by magnesium.", false}, {UNIMOD_2_succinyl, "UNIMOD:957", "2-succinyl", "S-(2-succinyl) cysteine.", false}, {UNIMOD_Propargylamine, "UNIMOD:958", "Propargylamine", "Propargylamine.", false}, {UNIMOD_Phosphopropargyl, "UNIMOD:959", "Phosphopropargyl", "Phospho-propargylamine.", false}, {UNIMOD_SUMO2135, "UNIMOD:960", "SUMO2135", "SUMOylation by SUMO-1 after tryptic cleavage.", false}, {UNIMOD_SUMO3549, "UNIMOD:961", "SUMO3549", "SUMOylation by SUMO-2/3 after tryptic cleavage.", false}, {UNIMOD_thioacylPA, "UNIMOD:967", "thioacylPA", "Membrane protein extraction.", false}, {UNIMOD_maleimide3, "UNIMOD:971", "maleimide3", "Maleimide-3-saccharide.", false}, {UNIMOD_maleimide5, "UNIMOD:972", "maleimide5", "Maleimide-5-saccharide.", false}, {UNIMOD_Puromycin, "UNIMOD:973", "Puromycin", "Puromycin.", false}, {UNIMOD_Carbofuran, "UNIMOD:977", "Carbofuran", "2,3-dihydro-2,2-dimethyl-7-benzofuranol N-methyl carbamate.", false}, {UNIMOD_BITC, "UNIMOD:978", "BITC", "Benzyl isothiocyanate.", false}, {UNIMOD_PEITC, "UNIMOD:979", "PEITC", "Phenethyl isothiocyanate.", false}, {UNIMOD_glucosone, "UNIMOD:981", "glucosone", "Condensation product of glucosone.", false}, {UNIMOD_cysTMT, "UNIMOD:984", "cysTMT", "Native cysteine-reactive Tandem Mass Tag®.", false}, {UNIMOD_cysTMT6plex, "UNIMOD:985", "cysTMT6plex", "Cysteine-reactive Sixplex Tandem Mass Tag®.", false}, {UNIMOD_Label_13C_6__Dimethyl, "UNIMOD:986", "Label:13C(6)+Dimethyl", "Dimethyl 13C(6) Silac label.", false}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "UNIMOD:987", "Label:13C(6)15N(2)+Dimethyl", "Dimethyl 13C(6)15N(2) Silac label.", false}, {UNIMOD_Ammonium, "UNIMOD:989", "Ammonium", "Replacement of proton with ammonium ion.", false}, {UNIMOD_ISD_z_2_ion, "UNIMOD:991", "ISD_z+2_ion", "ISD (z+2)-series.", false}, {UNIMOD_Biotin_Sigma_B1267, "UNIMOD:993", "Biotin:Sigma-B1267", "Was Biotin-maleimide.", false}, {UNIMOD_Label_15N_1_, "UNIMOD:994", "Label:15N(1)", "15N(1).", false}, {UNIMOD_Label_15N_2_, "UNIMOD:995", "Label:15N(2)", "15N(2).", false}, {UNIMOD_Label_15N_3_, "UNIMOD:996", "Label:15N(3)", "15N(3).", false}, {UNIMOD_sulfo_amino, "UNIMOD:997", "sulfo+amino", "Aminotyrosine with sulfation.", false}, {UNIMOD_AHA_Alkyne, "UNIMOD:1000", "AHA-Alkyne", "Azidohomoalanine (AHA) bound to propargylglycine-NH2 (alkyne).", false}, {UNIMOD_AHA_Alkyne_KDDDD, "UNIMOD:1001", "AHA-Alkyne-KDDDD", "Azidohomoalanine (AHA) bound to DDDDK-propargylglycine-NH2 (alkyne).", false}, {UNIMOD_EGCG1, "UNIMOD:1002", "EGCG1", "(-)-epigallocatechin-3-gallate.", false}, {UNIMOD_EGCG2, "UNIMOD:1003", "EGCG2", "(-)-dehydroepigallocatechin.", false}, {UNIMOD_Label_13C_6_15N_4__Methyl, "UNIMOD:1004", "Label:13C(6)15N(4)+Methyl", "Monomethylated Arg13C(6) 15N(4).", false}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "UNIMOD:1005", "Label:13C(6)15N(4)+Dimethyl", "Dimethylated Arg13C(6) 15N(4).", false}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "UNIMOD:1006", "Label:13C(6)15N(4)+Methyl:2H(3)13C(1)", "2H(3) 13C(1) monomethylated Arg13C(6) 15N(4).", false}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "UNIMOD:1007", "Label:13C(6)15N(4)+Dimethyl:2H(6)13C(2)", "2H(6) 13C(2) Dimethylated Arg13C(6) 15N(4).", false}, {UNIMOD_Cys__CamSec, "UNIMOD:1008", "Cys->CamSec", "Sec Iodoacetamide derivative.", false}, {UNIMOD_Thiazolidine, "UNIMOD:1009", "Thiazolidine", "Formaldehyde adduct.", false}, {UNIMOD_DEDGFLYMVYASQETFG, "UNIMOD:1010", "DEDGFLYMVYASQETFG", "Addition of DEDGFLYMVYASQETFG.", false}, {UNIMOD_Biotin_Invitrogen_M1602, "UNIMOD:1012", "Biotin:Invitrogen-M1602", "Nalpha-(3-maleimidylpropionyl)biocytin.", false}, {UNIMOD_glycidamide, "UNIMOD:1014", "glycidamide", "Glycidamide adduct.", false}, {UNIMOD_Ahx2_Hsl, "UNIMOD:1015", "Ahx2+Hsl", "C-terminal homoserine lactone and two aminohexanoic acids.", false}, {UNIMOD_DMPO, "UNIMOD:1017", "DMPO", "DMPO spin-trap nitrone adduct.", false}, {UNIMOD_ICDID, "UNIMOD:1018", "ICDID", "Isotope-Coded Dimedone light form.", false}, {UNIMOD_ICDID_2H_6_, "UNIMOD:1019", "ICDID:2H(6)", "Isotope-Coded Dimedone heavy form.", false}, {UNIMOD_Xlink_DSS_156_, "UNIMOD:1020", "Xlink:DSS[156]", "Water-quenched monolink of DSS/BS3 crosslinker.", false}, {UNIMOD_Xlink_EGS_244_, "UNIMOD:1021", "Xlink:EGS[244]", "Water quenched monolink of EGS cross-linker.", false}, {UNIMOD_Xlink_DST_132_, "UNIMOD:1022", "Xlink:DST[132]", "Water quenched monolink of DST crosslinker.", false}, {UNIMOD_Xlink_DTSSP_192_, "UNIMOD:1023", "Xlink:DTSSP[192]", "Water quenched monolink of DSP/DTSSP crosslinker.", false}, {UNIMOD_Xlink_SMCC_237_, "UNIMOD:1024", "Xlink:SMCC[237]", "Water quenched monolink of SMCC.", false}, {UNIMOD_Xlink_DMP_140_, "UNIMOD:1027", "Xlink:DMP[140]", "Water quenched monolink of DMP crosslinker.", false}, {UNIMOD_Xlink_EGS_115_, "UNIMOD:1028", "Xlink:EGS[115]", "Cleavage product of EGS protein crosslinks by hydroylamine treatment.", false}, {UNIMOD_Biotin_Thermo_88310, "UNIMOD:1031", "Biotin:Thermo-88310", "Desthiobiotin modification of lysine.", false}, {UNIMOD_2_nitrobenzyl, "UNIMOD:1032", "2-nitrobenzyl", "Tyrosine caged with 2-nitrobenzyl (ONB).", false}, {UNIMOD_Cys__SecNEM, "UNIMOD:1033", "Cys->SecNEM", "N-ethylmaleimide on selenocysteines.", false}, {UNIMOD_Cys__SecNEM_2H_5_, "UNIMOD:1034", "Cys->SecNEM:2H(5)", "D5 N-ethylmaleimide on selenocysteines.", false}, {UNIMOD_Thiadiazole, "UNIMOD:1035", "Thiadiazole", "Thiadiazolydation of Cys.", false}, {UNIMOD_Withaferin, "UNIMOD:1036", "Withaferin", "Modification of cystein by withaferin.", false}, {UNIMOD_Biotin_Thermo_88317, "UNIMOD:1037", "Biotin:Thermo-88317", "Desthiobiotin fluorophosphonate.", false}, {UNIMOD_TAMRA_FP, "UNIMOD:1038", "TAMRA-FP", "TAMRA fluorophosphonate modification of serine.", false}, {UNIMOD_Biotin_Thermo_21901_H2O, "UNIMOD:1039", "Biotin:Thermo-21901+H2O", "Maleimide-Biotin + Water.", false}, {UNIMOD_Deoxyhypusine, "UNIMOD:1041", "Deoxyhypusine", "Deoxyhypusine.", false}, {UNIMOD_Acetyldeoxyhypusine, "UNIMOD:1042", "Acetyldeoxyhypusine", "Acetyldeoxyhypusine.", false}, {UNIMOD_Acetylhypusine, "UNIMOD:1043", "Acetylhypusine", "Acetylhypusine.", false}, {UNIMOD_Ala__Cys, "UNIMOD:1044", "Ala->Cys", "Ala->Cys substitution.", false}, {UNIMOD_Ala__Phe, "UNIMOD:1045", "Ala->Phe", "Ala->Phe substitution.", false}, {UNIMOD_Ala__His, "UNIMOD:1046", "Ala->His", "Ala->His substitution.", false}, {UNIMOD_Ala__Xle, "UNIMOD:1047", "Ala->Xle", "Ala->Leu/Ile substitution.", false}, {UNIMOD_Ala__Lys, "UNIMOD:1048", "Ala->Lys", "Ala->Lys substitution.", false}, {UNIMOD_Ala__Met, "UNIMOD:1049", "Ala->Met", "Ala->Met substitution.", false}, {UNIMOD_Ala__Asn, "UNIMOD:1050", "Ala->Asn", "Ala->Asn substitution.", false}, {UNIMOD_Ala__Gln, "UNIMOD:1051", "Ala->Gln", "Ala->Gln substitution.", false}, {UNIMOD_Ala__Arg, "UNIMOD:1052", "Ala->Arg", "Ala->Arg substitution.", false}, {UNIMOD_Ala__Trp, "UNIMOD:1053", "Ala->Trp", "Ala->Trp substitution.", false}, {UNIMOD_Ala__Tyr, "UNIMOD:1054", "Ala->Tyr", "Ala->Tyr substitution.", false}, {UNIMOD_Cys__Ala, "UNIMOD:1055", "Cys->Ala", "Cys->Ala substitution.", false}, {UNIMOD_Cys__Asp, "UNIMOD:1056", "Cys->Asp", "Cys->Asp substitution.", false}, {UNIMOD_Cys__Glu, "UNIMOD:1057", "Cys->Glu", "Cys->Glu substitution.", false}, {UNIMOD_Cys__His, "UNIMOD:1058", "Cys->His", "Cys->His substitution.", false}, {UNIMOD_Cys__Xle, "UNIMOD:1059", "Cys->Xle", "Cys->Leu/Ile substitution.", false}, {UNIMOD_Cys__Lys, "UNIMOD:1060", "Cys->Lys", "Cys->Lys substitution.", false}, {UNIMOD_Cys__Met, "UNIMOD:1061", "Cys->Met", "Cys->Met substitution.", false}, {UNIMOD_Cys__Asn, "UNIMOD:1062", "Cys->Asn", "Cys->Asn substitution.", false}, {UNIMOD_Cys__Pro, "UNIMOD:1063", "Cys->Pro", "Cys->Pro substitution.", false}, {UNIMOD_Cys__Gln, "UNIMOD:1064", "Cys->Gln", "Cys->Gln substitution.", false}, {UNIMOD_Cys__Thr, "UNIMOD:1065", "Cys->Thr", "Cys->Thr substitution.", false}, {UNIMOD_Cys__Val, "UNIMOD:1066", "Cys->Val", "Cys->Val substitution.", false}, {UNIMOD_Asp__Cys, "UNIMOD:1067", "Asp->Cys", "Asp->Cys substitution.", false}, {UNIMOD_Asp__Phe, "UNIMOD:1068", "Asp->Phe", "Asp->Phe substitution.", false}, {UNIMOD_Asp__Xle, "UNIMOD:1069", "Asp->Xle", "Asp->Leu/Ile substitution.", false}, {UNIMOD_Asp__Lys, "UNIMOD:1070", "Asp->Lys", "Asp->Lys substitution.", false}, {UNIMOD_Asp__Met, "UNIMOD:1071", "Asp->Met", "Asp->Met substitution.", false}, {UNIMOD_Asp__Pro, "UNIMOD:1072", "Asp->Pro", "Asp->Pro substitution.", false}, {UNIMOD_Asp__Gln, "UNIMOD:1073", "Asp->Gln", "Asp->Gln substitution.", false}, {UNIMOD_Asp__Arg, "UNIMOD:1074", "Asp->Arg", "Asp->Arg substitution.", false}, {UNIMOD_Asp__Ser, "UNIMOD:1075", "Asp->Ser", "Asp->Ser substitution.", false}, {UNIMOD_Asp__Thr, "UNIMOD:1076", "Asp->Thr", "Asp->Thr substitution.", false}, {UNIMOD_Asp__Trp, "UNIMOD:1077", "Asp->Trp", "Asp->Trp substitution.", false}, {UNIMOD_Glu__Cys, "UNIMOD:1078", "Glu->Cys", "Glu->Cys substitution.", false}, {UNIMOD_Glu__Phe, "UNIMOD:1079", "Glu->Phe", "Glu->Phe substitution.", false}, {UNIMOD_Glu__His, "UNIMOD:1080", "Glu->His", "Glu->His substitution.", false}, {UNIMOD_Glu__Xle, "UNIMOD:1081", "Glu->Xle", "Glu->Leu/Ile substitution.", false}, {UNIMOD_Glu__Met, "UNIMOD:1082", "Glu->Met", "Glu->Met substitution.", false}, {UNIMOD_Glu__Asn, "UNIMOD:1083", "Glu->Asn", "Glu->Asn substitution.", false}, {UNIMOD_Glu__Pro, "UNIMOD:1084", "Glu->Pro", "Glu->Pro substitution.", false}, {UNIMOD_Glu__Arg, "UNIMOD:1085", "Glu->Arg", "Glu->Arg substitution.", false}, {UNIMOD_Glu__Ser, "UNIMOD:1086", "Glu->Ser", "Glu->Ser substitution.", false}, {UNIMOD_Glu__Thr, "UNIMOD:1087", "Glu->Thr", "Glu->Thr substitution.", false}, {UNIMOD_Glu__Trp, "UNIMOD:1088", "Glu->Trp", "Glu->Trp substitution.", false}, {UNIMOD_Glu__Tyr, "UNIMOD:1089", "Glu->Tyr", "Glu->Tyr substitution.", false}, {UNIMOD_Phe__Ala, "UNIMOD:1090", "Phe->Ala", "Phe->Ala substitution.", false}, {UNIMOD_Phe__Asp, "UNIMOD:1091", "Phe->Asp", "Phe->Asp substitution.", false}, {UNIMOD_Phe__Glu, "UNIMOD:1092", "Phe->Glu", "Phe->Glu substitution.", false}, {UNIMOD_Phe__Gly, "UNIMOD:1093", "Phe->Gly", "Phe->Gly substitution.", false}, {UNIMOD_Phe__His, "UNIMOD:1094", "Phe->His", "Phe->His substitution.", false}, {UNIMOD_Phe__Lys, "UNIMOD:1095", "Phe->Lys", "Phe->Lys substitution.", false}, {UNIMOD_Phe__Met, "UNIMOD:1096", "Phe->Met", "Phe->Met substitution.", false}, {UNIMOD_Phe__Asn, "UNIMOD:1097", "Phe->Asn", "Phe->Asn substitution.", false}, {UNIMOD_Phe__Pro, "UNIMOD:1098", "Phe->Pro", "Phe->Pro substitution.", false}, {UNIMOD_Phe__Gln, "UNIMOD:1099", "Phe->Gln", "Phe->Gln substitution.", false}, {UNIMOD_Phe__Arg, "UNIMOD:1100", "Phe->Arg", "Phe->Arg substitution.", false}, {UNIMOD_Phe__Thr, "UNIMOD:1101", "Phe->Thr", "Phe->Thr substitution.", false}, {UNIMOD_Phe__Trp, "UNIMOD:1102", "Phe->Trp", "Phe->Trp substitution.", false}, {UNIMOD_Gly__Phe, "UNIMOD:1103", "Gly->Phe", "Gly->Phe substitution.", false}, {UNIMOD_Gly__His, "UNIMOD:1104", "Gly->His", "Gly->His substitution.", false}, {UNIMOD_Gly__Xle, "UNIMOD:1105", "Gly->Xle", "Gly->Leu/Ile substitution.", false}, {UNIMOD_Gly__Lys, "UNIMOD:1106", "Gly->Lys", "Gly->Lys substitution.", false}, {UNIMOD_Gly__Met, "UNIMOD:1107", "Gly->Met", "Gly->Met substitution.", false}, {UNIMOD_Gly__Asn, "UNIMOD:1108", "Gly->Asn", "Gly->Asn substitution.", false}, {UNIMOD_Gly__Pro, "UNIMOD:1109", "Gly->Pro", "Gly->Pro substitution.", false}, {UNIMOD_Gly__Gln, "UNIMOD:1110", "Gly->Gln", "Gly->Gln substitution.", false}, {UNIMOD_Gly__Thr, "UNIMOD:1111", "Gly->Thr", "Gly->Thr substitution.", false}, {UNIMOD_Gly__Tyr, "UNIMOD:1112", "Gly->Tyr", "Gly->Tyr substitution.", false}, {UNIMOD_His__Ala, "UNIMOD:1113", "His->Ala", "His->Ala substitution.", false}, {UNIMOD_His__Cys, "UNIMOD:1114", "His->Cys", "His->Cys substitution.", false}, {UNIMOD_His__Glu, "UNIMOD:1115", "His->Glu", "His->Glu substitution.", false}, {UNIMOD_His__Phe, "UNIMOD:1116", "His->Phe", "His->Phe substitution.", false}, {UNIMOD_His__Gly, "UNIMOD:1117", "His->Gly", "His->Gly substitution.", false}, {UNIMOD_His__Lys, "UNIMOD:1119", "His->Lys", "His->Lys substitution.", false}, {UNIMOD_His__Met, "UNIMOD:1120", "His->Met", "His->Met substitution.", false}, {UNIMOD_His__Ser, "UNIMOD:1121", "His->Ser", "His->Ser substitution.", false}, {UNIMOD_His__Thr, "UNIMOD:1122", "His->Thr", "His->Thr substitution.", false}, {UNIMOD_His__Val, "UNIMOD:1123", "His->Val", "His->Val substitution.", false}, {UNIMOD_His__Trp, "UNIMOD:1124", "His->Trp", "His->Trp substitution.", false}, {UNIMOD_Xle__Ala, "UNIMOD:1125", "Xle->Ala", "Leu/Ile->Ala substitution.", false}, {UNIMOD_Xle__Cys, "UNIMOD:1126", "Xle->Cys", "Leu/Ile->Cys substitution.", false}, {UNIMOD_Xle__Asp, "UNIMOD:1127", "Xle->Asp", "Leu/Ile->Asp substitution.", false}, {UNIMOD_Xle__Glu, "UNIMOD:1128", "Xle->Glu", "Leu/Ile->Glu substitution.", false}, {UNIMOD_Xle__Gly, "UNIMOD:1129", "Xle->Gly", "Leu/Ile->Gly substitution.", false}, {UNIMOD_Xle__Tyr, "UNIMOD:1130", "Xle->Tyr", "Leu/Ile->Tyr substitution.", false}, {UNIMOD_Lys__Ala, "UNIMOD:1131", "Lys->Ala", "Lys->Ala substitution.", false}, {UNIMOD_Lys__Cys, "UNIMOD:1132", "Lys->Cys", "Lys->Cys substitution.", false}, {UNIMOD_Lys__Asp, "UNIMOD:1133", "Lys->Asp", "Lys->Asp substitution.", false}, {UNIMOD_Lys__Phe, "UNIMOD:1134", "Lys->Phe", "Lys->Phe substitution.", false}, {UNIMOD_Lys__Gly, "UNIMOD:1135", "Lys->Gly", "Lys->Gly substitution.", false}, {UNIMOD_Lys__His, "UNIMOD:1136", "Lys->His", "Lys->His substitution.", false}, {UNIMOD_Lys__Pro, "UNIMOD:1137", "Lys->Pro", "Lys->Pro substitution.", false}, {UNIMOD_Lys__Ser, "UNIMOD:1138", "Lys->Ser", "Lys->Ser substitution.", false}, {UNIMOD_Lys__Val, "UNIMOD:1139", "Lys->Val", "Lys->Val substitution.", false}, {UNIMOD_Lys__Trp, "UNIMOD:1140", "Lys->Trp", "Lys->Trp substitution.", false}, {UNIMOD_Lys__Tyr, "UNIMOD:1141", "Lys->Tyr", "Lys->Tyr substitution.", false}, {UNIMOD_Met__Ala, "UNIMOD:1142", "Met->Ala", "Met->Ala substitution.", false}, {UNIMOD_Met__Cys, "UNIMOD:1143", "Met->Cys", "Met->Cys substitution.", false}, {UNIMOD_Met__Asp, "UNIMOD:1144", "Met->Asp", "Met->Asp substitution.", false}, {UNIMOD_Met__Glu, "UNIMOD:1145", "Met->Glu", "Met->Glu substitution.", false}, {UNIMOD_Met__Phe, "UNIMOD:1146", "Met->Phe", "Met->Phe substitution.", false}, {UNIMOD_Met__Gly, "UNIMOD:1147", "Met->Gly", "Met->Gly substitution.", false}, {UNIMOD_Met__His, "UNIMOD:1148", "Met->His", "Met->His substitution.", false}, {UNIMOD_Met__Asn, "UNIMOD:1149", "Met->Asn", "Met->Asn substitution.", false}, {UNIMOD_Met__Pro, "UNIMOD:1150", "Met->Pro", "Met->Pro substitution.", false}, {UNIMOD_Met__Gln, "UNIMOD:1151", "Met->Gln", "Met->Gln substitution.", false}, {UNIMOD_Met__Ser, "UNIMOD:1152", "Met->Ser", "Met->Ser substitution.", false}, {UNIMOD_Met__Trp, "UNIMOD:1153", "Met->Trp", "Met->Trp substitution.", false}, {UNIMOD_Met__Tyr, "UNIMOD:1154", "Met->Tyr", "Met->Tyr substitution.", false}, {UNIMOD_Asn__Ala, "UNIMOD:1155", "Asn->Ala", "Asn->Ala substitution.", false}, {UNIMOD_Asn__Cys, "UNIMOD:1156", "Asn->Cys", "Asn->Cys substitution.", false}, {UNIMOD_Asn__Glu, "UNIMOD:1157", "Asn->Glu", "Asn->Glu substitution.", false}, {UNIMOD_Asn__Phe, "UNIMOD:1158", "Asn->Phe", "Asn->Phe substitution.", false}, {UNIMOD_Asn__Gly, "UNIMOD:1159", "Asn->Gly", "Asn->Gly substitution.", false}, {UNIMOD_Asn__Met, "UNIMOD:1160", "Asn->Met", "Asn->Met substitution.", false}, {UNIMOD_Asn__Pro, "UNIMOD:1161", "Asn->Pro", "Asn->Pro substitution.", false}, {UNIMOD_Asn__Gln, "UNIMOD:1162", "Asn->Gln", "Asn->Gln substitution.", false}, {UNIMOD_Asn__Arg, "UNIMOD:1163", "Asn->Arg", "Asn->Arg substitution.", false}, {UNIMOD_Asn__Val, "UNIMOD:1164", "Asn->Val", "Asn->Val substitution.", false}, {UNIMOD_Asn__Trp, "UNIMOD:1165", "Asn->Trp", "Asn->Trp substitution.", false}, {UNIMOD_Pro__Cys, "UNIMOD:1166", "Pro->Cys", "Pro->Cys substitution.", false}, {UNIMOD_Pro__Asp, "UNIMOD:1167", "Pro->Asp", "Pro->Asp substitution.", false}, {UNIMOD_Pro__Glu, "UNIMOD:1168", "Pro->Glu", "Pro->Glu substitution.", false}, {UNIMOD_Pro__Phe, "UNIMOD:1169", "Pro->Phe", "Pro->Phe substitution.", false}, {UNIMOD_Pro__Gly, "UNIMOD:1170", "Pro->Gly", "Pro->Gly substitution.", false}, {UNIMOD_Pro__Lys, "UNIMOD:1171", "Pro->Lys", "Pro->Lys substitution.", false}, {UNIMOD_Pro__Met, "UNIMOD:1172", "Pro->Met", "Pro->Met substitution.", false}, {UNIMOD_Pro__Asn, "UNIMOD:1173", "Pro->Asn", "Pro->Asn substitution.", false}, {UNIMOD_Pro__Val, "UNIMOD:1174", "Pro->Val", "Pro->Val substitution.", false}, {UNIMOD_Pro__Trp, "UNIMOD:1175", "Pro->Trp", "Pro->Trp substitution.", false}, {UNIMOD_Pro__Tyr, "UNIMOD:1176", "Pro->Tyr", "Pro->Tyr substitution.", false}, {UNIMOD_Gln__Ala, "UNIMOD:1177", "Gln->Ala", "Gln->Ala substitution.", false}, {UNIMOD_Gln__Cys, "UNIMOD:1178", "Gln->Cys", "Gln->Cys substitution.", false}, {UNIMOD_Gln__Asp, "UNIMOD:1179", "Gln->Asp", "Gln->Asp substitution.", false}, {UNIMOD_Gln__Phe, "UNIMOD:1180", "Gln->Phe", "Gln->Phe substitution.", false}, {UNIMOD_Gln__Gly, "UNIMOD:1181", "Gln->Gly", "Gln->Gly substitution.", false}, {UNIMOD_Gln__Met, "UNIMOD:1182", "Gln->Met", "Gln->Met substitution.", false}, {UNIMOD_Gln__Asn, "UNIMOD:1183", "Gln->Asn", "Gln->Asn substitution.", false}, {UNIMOD_Gln__Ser, "UNIMOD:1184", "Gln->Ser", "Gln->Ser substitution.", false}, {UNIMOD_Gln__Thr, "UNIMOD:1185", "Gln->Thr", "Gln->Thr substitution.", false}, {UNIMOD_Gln__Val, "UNIMOD:1186", "Gln->Val", "Gln->Val substitution.", false}, {UNIMOD_Gln__Trp, "UNIMOD:1187", "Gln->Trp", "Gln->Trp substitution.", false}, {UNIMOD_Gln__Tyr, "UNIMOD:1188", "Gln->Tyr", "Gln->Tyr substitution.", false}, {UNIMOD_Arg__Ala, "UNIMOD:1189", "Arg->Ala", "Arg->Ala substitution.", false}, {UNIMOD_Arg__Asp, "UNIMOD:1190", "Arg->Asp", "Arg->Asp substitution.", false}, {UNIMOD_Arg__Glu, "UNIMOD:1191", "Arg->Glu", "Arg->Glu substitution.", false}, {UNIMOD_Arg__Asn, "UNIMOD:1192", "Arg->Asn", "Arg->Asn substitution.", false}, {UNIMOD_Arg__Val, "UNIMOD:1193", "Arg->Val", "Arg->Val substitution.", false}, {UNIMOD_Arg__Tyr, "UNIMOD:1194", "Arg->Tyr", "Arg->Tyr substitution.", false}, {UNIMOD_Arg__Phe, "UNIMOD:1195", "Arg->Phe", "Arg->Phe substitution.", false}, {UNIMOD_Ser__Asp, "UNIMOD:1196", "Ser->Asp", "Ser->Asp substitution.", false}, {UNIMOD_Ser__Glu, "UNIMOD:1197", "Ser->Glu", "Ser->Glu substitution.", false}, {UNIMOD_Ser__His, "UNIMOD:1198", "Ser->His", "Ser->His substitution.", false}, {UNIMOD_Ser__Lys, "UNIMOD:1199", "Ser->Lys", "Ser->Lys substitution.", false}, {UNIMOD_Ser__Met, "UNIMOD:1200", "Ser->Met", "Ser->Met substitution.", false}, {UNIMOD_Ser__Gln, "UNIMOD:1201", "Ser->Gln", "Ser->Gln substitution.", false}, {UNIMOD_Ser__Val, "UNIMOD:1202", "Ser->Val", "Ser->Val substitution.", false}, {UNIMOD_Thr__Cys, "UNIMOD:1203", "Thr->Cys", "Thr->Cys substitution.", false}, {UNIMOD_Thr__Asp, "UNIMOD:1204", "Thr->Asp", "Thr->Asp substitution.", false}, {UNIMOD_Thr__Glu, "UNIMOD:1205", "Thr->Glu", "Thr->Glu substitution.", false}, {UNIMOD_Thr__Phe, "UNIMOD:1206", "Thr->Phe", "Thr->Phe substitution.", false}, {UNIMOD_Thr__Gly, "UNIMOD:1207", "Thr->Gly", "Thr->Gly substitution.", false}, {UNIMOD_Thr__His, "UNIMOD:1208", "Thr->His", "Thr->His substitution.", false}, {UNIMOD_Thr__Gln, "UNIMOD:1209", "Thr->Gln", "Thr->Gln substitution.", false}, {UNIMOD_Thr__Val, "UNIMOD:1210", "Thr->Val", "Thr->Val substitution.", false}, {UNIMOD_Thr__Trp, "UNIMOD:1211", "Thr->Trp", "Thr->Trp substitution.", false}, {UNIMOD_Thr__Tyr, "UNIMOD:1212", "Thr->Tyr", "Thr->Tyr substitution.", false}, {UNIMOD_Val__Cys, "UNIMOD:1213", "Val->Cys", "Val->Cys substitution.", false}, {UNIMOD_Val__His, "UNIMOD:1214", "Val->His", "Val->His substitution.", false}, {UNIMOD_Val__Lys, "UNIMOD:1215", "Val->Lys", "Val->Lys substitution.", false}, {UNIMOD_Val__Asn, "UNIMOD:1216", "Val->Asn", "Val->Asn substitution.", false}, {UNIMOD_Val__Pro, "UNIMOD:1217", "Val->Pro", "Val->Pro substitution.", false}, {UNIMOD_Val__Gln, "UNIMOD:1218", "Val->Gln", "Val->Gln substitution.", false}, {UNIMOD_Val__Arg, "UNIMOD:1219", "Val->Arg", "Val->Arg substitution.", false}, {UNIMOD_Val__Ser, "UNIMOD:1220", "Val->Ser", "Val->Ser substitution.", false}, {UNIMOD_Val__Thr, "UNIMOD:1221", "Val->Thr", "Val->Thr substitution.", false}, {UNIMOD_Val__Trp, "UNIMOD:1222", "Val->Trp", "Val->Trp substitution.", false}, {UNIMOD_Val__Tyr, "UNIMOD:1223", "Val->Tyr", "Val->Tyr substitution.", false}, {UNIMOD_Trp__Ala, "UNIMOD:1224", "Trp->Ala", "Trp->Ala substitution.", false}, {UNIMOD_Trp__Asp, "UNIMOD:1225", "Trp->Asp", "Trp->Asp substitution.", false}, {UNIMOD_Trp__Glu, "UNIMOD:1226", "Trp->Glu", "Trp->Glu substitution.", false}, {UNIMOD_Trp__Phe, "UNIMOD:1227", "Trp->Phe", "Trp->Phe substitution.", false}, {UNIMOD_Trp__His, "UNIMOD:1228", "Trp->His", "Trp->His substitution.", false}, {UNIMOD_Trp__Lys, "UNIMOD:1229", "Trp->Lys", "Trp->Lys substitution.", false}, {UNIMOD_Trp__Met, "UNIMOD:1230", "Trp->Met", "Trp->Met substitution.", false}, {UNIMOD_Trp__Asn, "UNIMOD:1231", "Trp->Asn", "Trp->Asn substitution.", false}, {UNIMOD_Trp__Pro, "UNIMOD:1232", "Trp->Pro", "Trp->Pro substitution.", false}, {UNIMOD_Trp__Gln, "UNIMOD:1233", "Trp->Gln", "Trp->Gln substitution.", false}, {UNIMOD_Trp__Thr, "UNIMOD:1234", "Trp->Thr", "Trp->Thr substitution.", false}, {UNIMOD_Trp__Val, "UNIMOD:1235", "Trp->Val", "Trp->Val substitution.", false}, {UNIMOD_Trp__Tyr, "UNIMOD:1236", "Trp->Tyr", "Trp->Tyr substitution.", false}, {UNIMOD_Tyr__Ala, "UNIMOD:1237", "Tyr->Ala", "Tyr->Ala substitution.", false}, {UNIMOD_Tyr__Glu, "UNIMOD:1238", "Tyr->Glu", "Tyr->Glu substitution.", false}, {UNIMOD_Tyr__Gly, "UNIMOD:1239", "Tyr->Gly", "Tyr->Gly substitution.", false}, {UNIMOD_Tyr__Lys, "UNIMOD:1240", "Tyr->Lys", "Tyr->Lys substitution.", false}, {UNIMOD_Tyr__Met, "UNIMOD:1241", "Tyr->Met", "Tyr->Met substitution.", false}, {UNIMOD_Tyr__Pro, "UNIMOD:1242", "Tyr->Pro", "Tyr->Pro substitution.", false}, {UNIMOD_Tyr__Gln, "UNIMOD:1243", "Tyr->Gln", "Tyr->Gln substitution.", false}, {UNIMOD_Tyr__Arg, "UNIMOD:1244", "Tyr->Arg", "Tyr->Arg substitution.", false}, {UNIMOD_Tyr__Thr, "UNIMOD:1245", "Tyr->Thr", "Tyr->Thr substitution.", false}, {UNIMOD_Tyr__Val, "UNIMOD:1246", "Tyr->Val", "Tyr->Val substitution.", false}, {UNIMOD_Tyr__Trp, "UNIMOD:1247", "Tyr->Trp", "Tyr->Trp substitution.", false}, {UNIMOD_Tyr__Xle, "UNIMOD:1248", "Tyr->Xle", "Tyr->Leu/Ile substitution.", false}, {UNIMOD_AHA_SS, "UNIMOD:1249", "AHA-SS", "Azidohomoalanine coupled to reductively cleaved tag.", false}, {UNIMOD_AHA_SS_CAM, "UNIMOD:1250", "AHA-SS_CAM", "Carbamidomethylated form of reductively cleaved tag coupled to azidohomoalanine.", false}, {UNIMOD_Biotin_Thermo_33033, "UNIMOD:1251", "Biotin:Thermo-33033", "Sulfo-SBED Label Photoreactive Biotin Crosslinker.", false}, {UNIMOD_Biotin_Thermo_33033_H, "UNIMOD:1252", "Biotin:Thermo-33033-H", "Sulfo-SBED Label Photoreactive Biotin Crosslinker minus Hydrogen.", false}, {UNIMOD_2_monomethylsuccinyl, "UNIMOD:1253", "2-monomethylsuccinyl", "S-(2-monomethylsuccinyl) cysteine.", false}, {UNIMOD_Saligenin, "UNIMOD:1254", "Saligenin", "O-toluene.", false}, {UNIMOD_Cresylphosphate, "UNIMOD:1255", "Cresylphosphate", "O-toluyl-phosphorylation.", false}, {UNIMOD_CresylSaligeninPhosphate, "UNIMOD:1256", "CresylSaligeninPhosphate", "Cresyl-Saligenin-phosphorylation.", false}, {UNIMOD_Ub_Br2, "UNIMOD:1257", "Ub-Br2", "Ub Bromide probe addition.", false}, {UNIMOD_Ub_VME, "UNIMOD:1258", "Ub-VME", "Ubiquitin vinylmethylester.", false}, {UNIMOD_Ub_amide, "UNIMOD:1260", "Ub-amide", "Ub amide probe addition.", false}, {UNIMOD_Ub_fluorescein, "UNIMOD:1261", "Ub-fluorescein", "Ub Fluorescein probe addition.", false}, {UNIMOD_2_dimethylsuccinyl, "UNIMOD:1262", "2-dimethylsuccinyl", "S-(2-dimethylsuccinyl) cysteine.", false}, {UNIMOD_Gly, "UNIMOD:1263", "Gly", "Addition of Glycine.", false}, {UNIMOD_pupylation, "UNIMOD:1264", "pupylation", "Addition of GGE.", false}, {UNIMOD_Label_13C_4_, "UNIMOD:1266", "Label:13C(4)", "13C4 Methionine label.", false}, {UNIMOD_Label_13C_4__Oxidation, "UNIMOD:1267", "Label:13C(4)+Oxidation", "Oxidised 13C4 labelled Methionine.", false}, {UNIMOD_HCysThiolactone, "UNIMOD:1270", "HCysThiolactone", "N-Homocysteine thiolactone.", false}, {UNIMOD_HCysteinyl, "UNIMOD:1271", "HCysteinyl", "S-homocysteinylation.", false}, {UNIMOD_UgiJoullie, "UNIMOD:1276", "UgiJoullie", "Side reaction of HisTag.", false}, {UNIMOD_Dipyridyl, "UNIMOD:1277", "Dipyridyl", "Cys modified with dipy ligand.", false}, {UNIMOD_Furan, "UNIMOD:1278", "Furan", "Chemical modification of the iodinated sites of thyroglobulin by Suzuki reaction.", false}, {UNIMOD_Difuran, "UNIMOD:1279", "Difuran", "Chemical modification of the diiodinated sites of thyroglobulin by Suzuki reaction.", false}, {UNIMOD_BMP_piperidinol, "UNIMOD:1281", "BMP-piperidinol", "1-methyl-3-benzoyl-4-hydroxy-4-phenylpiperidine.", false}, {UNIMOD_UgiJoullieProGly, "UNIMOD:1282", "UgiJoullieProGly", "Side reaction of PG with Side chain of aspartic or glutamic acid.", false}, {UNIMOD_UgiJoullieProGlyProGly, "UNIMOD:1283", "UgiJoullieProGlyProGly", "Side reaction of PGPG with Side chain of aspartic or glutamic acid.", false}, {UNIMOD_IMEHex_2_NeuAc_1_, "UNIMOD:1286", "IMEHex(2)NeuAc(1)", "Glycosylation with IME linked Hex(2) NeuAc.", false}, {UNIMOD_Arg_loss, "UNIMOD:1287", "Arg-loss", "Loss of arginine due to transpeptidation.", false}, {UNIMOD_Arg, "UNIMOD:1288", "Arg", "Addition of arginine due to transpeptidation.", false}, {UNIMOD_Butyryl, "UNIMOD:1289", "Butyryl", "Butyryl.", false}, {UNIMOD_Dicarbamidomethyl, "UNIMOD:1290", "Dicarbamidomethyl", "Double Carbamidomethylation.", false}, {UNIMOD_Dimethyl_2H_6_, "UNIMOD:1291", "Dimethyl:2H(6)", "Dimethyl-Medium.", false}, {UNIMOD_GGQ, "UNIMOD:1292", "GGQ", "SUMOylation leaving GlyGlyGln.", false}, {UNIMOD_QTGG, "UNIMOD:1293", "QTGG", "SUMOylation leaving GlnThrGlyGly.", false}, {UNIMOD_Label_13C_3_, "UNIMOD:1296", "Label:13C(3)", "13C3 label for SILAC.", false}, {UNIMOD_Label_13C_3_15N_1_, "UNIMOD:1297", "Label:13C(3)15N(1)", "SILAC or AQUA label.", false}, {UNIMOD_Label_13C_4_15N_1_, "UNIMOD:1298", "Label:13C(4)15N(1)", "13C4 15N1 label for SILAC.", false}, {UNIMOD_Label_2H_10_, "UNIMOD:1299", "Label:2H(10)", "2H(10) label.", false}, {UNIMOD_Label_2H_4_13C_1_, "UNIMOD:1300", "Label:2H(4)13C(1)", "Label:2H(4)13C(1).", false}, {UNIMOD_Lys, "UNIMOD:1301", "Lys", "Addition of lysine due to transpeptidation.", false}, {UNIMOD_mTRAQ_13C_6_15N_2_, "UNIMOD:1302", "mTRAQ:13C(6)15N(2)", "MTRAQ heavy.", false}, {UNIMOD_NeuAc, "UNIMOD:1303", "NeuAc", "N-acetyl neuraminic acid.", false}, {UNIMOD_NeuGc, "UNIMOD:1304", "NeuGc", "N-glycoyl neuraminic acid.", false}, {UNIMOD_Propyl, "UNIMOD:1305", "Propyl", "Propyl.", false}, {UNIMOD_Propyl_2H_6_, "UNIMOD:1306", "Propyl:2H(6)", "Propyl:2H(6).", false}, {UNIMOD_Propiophenone, "UNIMOD:1310", "Propiophenone", "Propiophenone.", false}, {UNIMOD_Delta_H_6_C_3_O_1_, "UNIMOD:1312", "Delta:H(6)C(3)O(1)", "Reduced acrolein addition +58.", false}, {UNIMOD_Delta_H_8_C_6_O_1_, "UNIMOD:1313", "Delta:H(8)C(6)O(1)", "Reduced acrolein addition +96.", false}, {UNIMOD_biotinAcrolein298, "UNIMOD:1314", "biotinAcrolein298", "Biotin hydrazide labeled acrolein addition +298.", false}, {UNIMOD_MM_diphenylpentanone, "UNIMOD:1315", "MM-diphenylpentanone", "3-methyl-5-(methylamino)-1,3-diphenylpentan-1-one.", false}, {UNIMOD_EHD_diphenylpentanone, "UNIMOD:1317", "EHD-diphenylpentanone", "2-ethyl-3-hydroxy-1,3-diphenylpentan-1-one.", false}, {UNIMOD_Biotin_Thermo_21901_2H2O, "UNIMOD:1320", "Biotin:Thermo-21901+2H2O", "Maleimide-Biotin + 2Water.", false}, {UNIMOD_DiLeu4plex115, "UNIMOD:1321", "DiLeu4plex115", "Accurate mass for DiLeu 115 isobaric tag.", false}, {UNIMOD_DiLeu4plex, "UNIMOD:1322", "DiLeu4plex", "Accurate mass for DiLeu 116 isobaric tag.", false}, {UNIMOD_DiLeu4plex117, "UNIMOD:1323", "DiLeu4plex117", "Accurate mass for DiLeu 117 isobaric tag.", false}, {UNIMOD_DiLeu4plex118, "UNIMOD:1324", "DiLeu4plex118", "Accurate mass for DiLeu 118 isobaric tag.", false}, {UNIMOD_NEMsulfur, "UNIMOD:1326", "NEMsulfur", "N-ethylmaleimideSulfur.", false}, {UNIMOD_SulfurDioxide, "UNIMOD:1327", "SulfurDioxide", "SulfurDioxide.", false}, {UNIMOD_NEMsulfurWater, "UNIMOD:1328", "NEMsulfurWater", "N-ethylmaleimideSulfurWater.", false}, {UNIMOD_bisANS_sulfonates, "UNIMOD:1330", "bisANS-sulfonates", "BisANS with loss of both sulfonates.", false}, {UNIMOD_DNCB_hapten, "UNIMOD:1331", "DNCB_hapten", "Chemical reaction with 2,4-dinitro-1-chloro benzene (DNCB).", false}, {UNIMOD_Biotin_Thermo_21911, "UNIMOD:1340", "Biotin:Thermo-21911", "Biotin-PEG11-maleimide.", false}, {UNIMOD_iodoTMT, "UNIMOD:1341", "iodoTMT", "Native iodoacetyl Tandem Mass Tag®.", false}, {UNIMOD_iodoTMT6plex, "UNIMOD:1342", "iodoTMT6plex", "Sixplex iodoacetyl Tandem Mass Tag®.", false}, {UNIMOD_Phosphogluconoylation, "UNIMOD:1344", "Phosphogluconoylation", "Phosphogluconoylation.", false}, {UNIMOD_PS_Hapten, "UNIMOD:1345", "PS_Hapten", "Reaction with phenyl salicylate (PS).", false}, {UNIMOD_Cy3_maleimide, "UNIMOD:1348", "Cy3-maleimide", "Cy3 Maleimide mono-Reactive dye.", false}, {UNIMOD_benzylguanidine, "UNIMOD:1349", "benzylguanidine", "Modification of the lysine side chain from NH2 to guanidine with a H removed in favor of a benzyl group.", false}, {UNIMOD_CarboxymethylDMAP, "UNIMOD:1350", "CarboxymethylDMAP", "A fixed +1 charge tag attached to the N-terminus of peptides.", false}, {UNIMOD_azole, "UNIMOD:1355", "azole", "Formation of five membered aromatic heterocycle.", false}, {UNIMOD_phosphoRibosyl, "UNIMOD:1356", "phosphoRibosyl", "Phosphate-ribosylation.", false}, {UNIMOD_NEM_2H_5__H2O, "UNIMOD:1358", "NEM:2H(5)+H2O", "D5 N-ethylmaleimide+water on cysteines.", false}, {UNIMOD_Crotonyl, "UNIMOD:1363", "Crotonyl", "Crotonylation.", false}, {UNIMOD_O_Et_N_diMePhospho, "UNIMOD:1364", "O-Et-N-diMePhospho", "O-ethyl, N-dimethyl phosphate.", false}, {UNIMOD_N_dimethylphosphate, "UNIMOD:1365", "N-dimethylphosphate", "N-dimethylphosphate.", false}, {UNIMOD_dHex_1_Hex_1_, "UNIMOD:1367", "dHex(1)Hex(1)", "Hex1dHex1.", false}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "UNIMOD:1368", "Methyl:2H(3)+Acetyl:2H(3)", "3-fold methylated lysine labelled with Acetyl_heavy.", false}, {UNIMOD_Label_2H_3__Oxidation, "UNIMOD:1370", "Label:2H(3)+Oxidation", "Oxidised 2H(3) labelled Methionine.", false}, {UNIMOD_Trimethyl_2H_9_, "UNIMOD:1371", "Trimethyl:2H(9)", "3-fold methylation with deuterated methyl groups.", false}, {UNIMOD_Acetyl_13C_2_, "UNIMOD:1372", "Acetyl:13C(2)", "Heavy acetylation.", false}, {UNIMOD_dHex_1_Hex_2_, "UNIMOD:1375", "dHex(1)Hex(2)", "Hex2dHex1.", false}, {UNIMOD_dHex_1_Hex_3_, "UNIMOD:1376", "dHex(1)Hex(3)", "Hex3dHex1.", false}, {UNIMOD_dHex_1_Hex_4_, "UNIMOD:1377", "dHex(1)Hex(4)", "Hex4dHex1.", false}, {UNIMOD_dHex_1_Hex_5_, "UNIMOD:1378", "dHex(1)Hex(5)", "Hex5dHex1.", false}, {UNIMOD_dHex_1_Hex_6_, "UNIMOD:1379", "dHex(1)Hex(6)", "Hex6dHex1.", false}, {UNIMOD_methylsulfonylethyl, "UNIMOD:1380", "methylsulfonylethyl", "Reaction with methyl vinyl sulfone.", false}, {UNIMOD_ethylsulfonylethyl, "UNIMOD:1381", "ethylsulfonylethyl", "Reaction with ethyl vinyl sulfone.", false}, {UNIMOD_phenylsulfonylethyl, "UNIMOD:1382", "phenylsulfonylethyl", "Reaction with phenyl vinyl sulfone.", false}, {UNIMOD_PyridoxalPhosphateH2, "UNIMOD:1383", "PyridoxalPhosphateH2", "PLP bound to lysine reduced by sodium borohydride (NaBH4) to create amine linkage.", false}, {UNIMOD_Homocysteic_acid, "UNIMOD:1384", "Homocysteic_acid", "Methionine oxidation to homocysteic acid.", false}, {UNIMOD_Hydroxamic_acid, "UNIMOD:1385", "Hydroxamic_acid", "ADP-ribosylation followed by conversion to hydroxamic acid via hydroxylamine.", false}, {UNIMOD_3_phosphoglyceryl, "UNIMOD:1387", "3-phosphoglyceryl", "3-phosphoglyceryl.", false}, {UNIMOD_HN2_mustard, "UNIMOD:1388", "HN2_mustard", "Modification by hydroxylated mechloroethamine (HN-2).", false}, {UNIMOD_HN3_mustard, "UNIMOD:1389", "HN3_mustard", "Modification by hydroxylated tris-(2-chloroethyl)amine (HN-3).", false}, {UNIMOD_Oxidation_NEM, "UNIMOD:1390", "Oxidation+NEM", "N-ethylmaleimide on cysteine sulfenic acid.", false}, {UNIMOD_NHS_fluorescein, "UNIMOD:1391", "NHS-fluorescein", "Fluorescein-hexanoate-NHS hydrolysis.", false}, {UNIMOD_DiART6plex, "UNIMOD:1392", "DiART6plex", "Representative mass and accurate mass for 114.", false}, {UNIMOD_DiART6plex115, "UNIMOD:1393", "DiART6plex115", "Accurate mass for DiART6plex 115.", false}, {UNIMOD_DiART6plex116_119, "UNIMOD:1394", "DiART6plex116/119", "Accurate mass for DiART6plex 116 and 119.", false}, {UNIMOD_DiART6plex117, "UNIMOD:1395", "DiART6plex117", "Accurate mass for DiART6plex 117.", false}, {UNIMOD_DiART6plex118, "UNIMOD:1396", "DiART6plex118", "Accurate mass for DiART6plex 118.", false}, {UNIMOD_Iodoacetanilide, "UNIMOD:1397", "Iodoacetanilide", "Iodoacetanilide derivative.", false}, {UNIMOD_Iodoacetanilide_13C_6_, "UNIMOD:1398", "Iodoacetanilide:13C(6)", "13C labelled iodoacetanilide derivative.", false}, {UNIMOD_Dap_DSP, "UNIMOD:1399", "Dap-DSP", "Diaminopimelic acid-DSP monolinked.", false}, {UNIMOD_MurNAc, "UNIMOD:1400", "MurNAc", "N-Acetylmuramic acid.", false}, {UNIMOD_Label_2H_7_15N_4_, "UNIMOD:1402", "Label:2H(7)15N(4)", "Label:2H(7)15N(4).", false}, {UNIMOD_Label_2H_6_15N_1_, "UNIMOD:1403", "Label:2H(6)15N(1)", "Label:2H(6)15N(1).", false}, {UNIMOD_EEEDVIEVYQEQTGG, "UNIMOD:1405", "EEEDVIEVYQEQTGG", "Sumoylation by SUMO-1 after Cyanogen bromide (CNBr) cleavage.", false}, {UNIMOD_EDEDTIDVFQQQTGG, "UNIMOD:1406", "EDEDTIDVFQQQTGG", "Sumoylation by SUMO-2/3 after Cyanogen bromide (CNBr) cleavage.", false}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "UNIMOD:1408", "Hex(5)HexNAc(4)NeuAc(2)", "A2G2S2/G2S2.", false}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "UNIMOD:1409", "Hex(5)HexNAc(4)NeuAc(1)", "A2G2S1/G2S1.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "UNIMOD:1410", "dHex(1)Hex(5)HexNAc(4)NeuAc(1)", "FA2G2S1/G2FS1.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "UNIMOD:1411", "dHex(1)Hex(5)HexNAc(4)NeuAc(2)", "FA2G2S2/G2FS2.", false}, {UNIMOD_s_GlcNAc, "UNIMOD:1412", "s-GlcNAc", "O3S1HexNAc1.", false}, {UNIMOD_PhosphoHex_2_, "UNIMOD:1413", "PhosphoHex(2)", "H1O3P1Hex2.", false}, {UNIMOD_Trimethyl_13C_3_2H_9_, "UNIMOD:1414", "Trimethyl:13C(3)2H(9)", "3-fold methylation with fully labelled methyl groups.", false}, {UNIMOD_15N_oxobutanoic, "UNIMOD:1419", "15N-oxobutanoic", "Loss of ammonia (15N).", false}, {UNIMOD_spermine, "UNIMOD:1420", "spermine", "Spermine adduct.", false}, {UNIMOD_spermidine, "UNIMOD:1421", "spermidine", "Spermidine adduct.", false}, {UNIMOD_Biotin_Thermo_21330, "UNIMOD:1423", "Biotin:Thermo-21330", "Biotin_PEG4.", false}, {UNIMOD_Pentose, "UNIMOD:1425", "Pentose", "Pentose.", false}, {UNIMOD_Hex_1_Pent_1_, "UNIMOD:1426", "Hex(1)Pent(1)", "Hex Pent.", false}, {UNIMOD_Hex_1_HexA_1_, "UNIMOD:1427", "Hex(1)HexA(1)", "Hex HexA.", false}, {UNIMOD_Hex_1_Pent_2_, "UNIMOD:1428", "Hex(1)Pent(2)", "Hex Pent(2).", false}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "UNIMOD:1429", "Hex(1)HexNAc(1)Phos(1)", "Hex HexNAc Phos.", false}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "UNIMOD:1430", "Hex(1)HexNAc(1)Sulf(1)", "Hex HexNAc Sulf.", false}, {UNIMOD_Hex_1_NeuAc_1_, "UNIMOD:1431", "Hex(1)NeuAc(1)", "Hex NeuAc ---OR--- HexNAc Kdn.", false}, {UNIMOD_Hex_1_NeuGc_1_, "UNIMOD:1432", "Hex(1)NeuGc(1)", "Hex NeuGc.", false}, {UNIMOD_HexNAc_3_, "UNIMOD:1433", "HexNAc(3)", "HexNAc(3).", false}, {UNIMOD_HexNAc_1_NeuAc_1_, "UNIMOD:1434", "HexNAc(1)NeuAc(1)", "HexNAc NeuAc.", false}, {UNIMOD_HexNAc_1_NeuGc_1_, "UNIMOD:1435", "HexNAc(1)NeuGc(1)", "HexNAc NeuGc.", false}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "UNIMOD:1436", "Hex(1)HexNAc(1)dHex(1)Me(1)", "Hex HexNAc dHex Me.", false}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "UNIMOD:1437", "Hex(1)HexNAc(1)dHex(1)Me(2)", "Hex HexNAc dHex Me(2).", false}, {UNIMOD_Hex_2_HexNAc_1_, "UNIMOD:1438", "Hex(2)HexNAc(1)", "Hex(2) HexNAc.", false}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "UNIMOD:1439", "Hex(1)HexA(1)HexNAc(1)", "Hex HexA HexNAc.", false}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "UNIMOD:1440", "Hex(2)HexNAc(1)Me(1)", "Hex(2) HexNAc Me.", false}, {UNIMOD_Hex_1_Pent_3_, "UNIMOD:1441", "Hex(1)Pent(3)", "Hex Pent(3).", false}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "UNIMOD:1442", "Hex(1)NeuAc(1)Pent(1)", "Hex NeuAc Pent.", false}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "UNIMOD:1443", "Hex(2)HexNAc(1)Sulf(1)", "Hex(2) HexNAc Sulf.", false}, {UNIMOD_Hex_2_NeuAc_1_, "UNIMOD:1444", "Hex(2)NeuAc(1)", "Hex(2) NeuAc ---OR--- Hex HexNAc Kdn.", false}, {UNIMOD_dHex_2_Hex_2_, "UNIMOD:1445", "dHex(2)Hex(2)", "Hex2 dHex2.", false}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "UNIMOD:1446", "dHex(1)Hex(2)HexA(1)", "DHex Hex(2) HexA.", false}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "UNIMOD:1447", "Hex(1)HexNAc(2)Sulf(1)", "Hex HexNAc(2) Sulf.", false}, {UNIMOD_Hex_4_, "UNIMOD:1448", "Hex(4)", "Hex(4).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "UNIMOD:1449", "dHex(1)Hex(2)HexNAc(2)Pent(1)", "DHex Hex(2) HexNAc(2) Pent.", false}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "UNIMOD:1450", "Hex(2)HexNAc(2)NeuAc(1)", "Hex(2) HexNAc(2) NeuAc ---OR--- dHex Hex HexNAc(2) NeuGc.", false}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "UNIMOD:1451", "Hex(3)HexNAc(2)Pent(1)", "Hex(3) HexNAc(2) Pent.", false}, {UNIMOD_Hex_4_HexNAc_2_, "UNIMOD:1452", "Hex(4)HexNAc(2)", "Hex(4) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "UNIMOD:1453", "dHex(1)Hex(4)HexNAc(1)Pent(1)", "DHex Hex(4) HexNAc Pent.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "UNIMOD:1454", "dHex(1)Hex(3)HexNAc(2)Pent(1)", "DHex Hex(3) HexNAc(2) Pent.", false}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "UNIMOD:1455", "Hex(3)HexNAc(2)NeuAc(1)", "Hex(3) HexNAc(2) NeuAc.", false}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "UNIMOD:1456", "Hex(4)HexNAc(2)Pent(1)", "Hex(4) HexNAc(2) Pent.", false}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "UNIMOD:1457", "Hex(3)HexNAc(3)Pent(1)", "Hex(3) HexNAc(3) Pent.", false}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "UNIMOD:1458", "Hex(5)HexNAc(2)Phos(1)", "Hex(5) HexNAc(2) Phos.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "UNIMOD:1459", "dHex(1)Hex(4)HexNAc(2)Pent(1)", "DHex Hex(4) HexNAc(2) Pent.", false}, {UNIMOD_Hex_7_HexNAc_1_, "UNIMOD:1460", "Hex(7)HexNAc(1)", "Hex(7) HexNAc.", false}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "UNIMOD:1461", "Hex(4)HexNAc(2)NeuAc(1)", "Hex(4) HexNAc(2) NeuAc ---OR--- Hex(3) HexNAc(2) dHex NeuGc.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "UNIMOD:1462", "dHex(1)Hex(5)HexNAc(2)", "DHex Hex(5) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "UNIMOD:1463", "dHex(1)Hex(3)HexNAc(3)Pent(1)", "DHex Hex(3) HexNAc(3) Pent.", false}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "UNIMOD:1464", "Hex(3)HexNAc(4)Sulf(1)", "Hex(3) HexNAc(4) Sulf.", false}, {UNIMOD_Hex_6_HexNAc_2_, "UNIMOD:1465", "Hex(6)HexNAc(2)", "M6/Man6.", false}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "UNIMOD:1466", "Hex(4)HexNAc(3)Pent(1)", "Hex(4) HexNAc(3) Pent.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "UNIMOD:1467", "dHex(1)Hex(4)HexNAc(3)", "DHex Hex(4) HexNAc(3).", false}, {UNIMOD_Hex_5_HexNAc_3_, "UNIMOD:1468", "Hex(5)HexNAc(3)", "Hex(5) HexNAc(3).", false}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "UNIMOD:1469", "Hex(3)HexNAc(4)Pent(1)", "Hex(3) HexNAc(4) Pent.", false}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "UNIMOD:1470", "Hex(6)HexNAc(2)Phos(1)", "Hex(6) HexNAc(2) Phos.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "UNIMOD:1471", "dHex(1)Hex(4)HexNAc(3)Sulf(1)", "DHex Hex(4) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "UNIMOD:1472", "dHex(1)Hex(5)HexNAc(2)Pent(1)", "DHex Hex(5) HexNAc(2) Pent.", false}, {UNIMOD_Hex_8_HexNAc_1_, "UNIMOD:1473", "Hex(8)HexNAc(1)", "Hex(8) HexNAc.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "UNIMOD:1474", "dHex(1)Hex(3)HexNAc(3)Pent(2)", "DHex Hex(3) HexNAc(3) Pent(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "UNIMOD:1475", "dHex(2)Hex(3)HexNAc(3)Pent(1)", "DHex(2) Hex(3) HexNAc(3) Pent.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "UNIMOD:1476", "dHex(1)Hex(3)HexNAc(4)Sulf(1)", "DHex Hex(3) HexNAc(4) Sulf.", false}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "UNIMOD:1477", "dHex(1)Hex(6)HexNAc(2)", "DHex Hex(6) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "UNIMOD:1478", "dHex(1)Hex(4)HexNAc(3)Pent(1)", "DHex Hex(4) HexNAc(3) Pent.", false}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "UNIMOD:1479", "Hex(4)HexNAc(4)Sulf(1)", "Hex(4) HexNAc(4) Sulf.", false}, {UNIMOD_Hex_7_HexNAc_2_, "UNIMOD:1480", "Hex(7)HexNAc(2)", "M7/Man7.", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "UNIMOD:1481", "dHex(2)Hex(4)HexNAc(3)", "DHex(2) Hex(4) HexNAc(3).", false}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "UNIMOD:1482", "Hex(5)HexNAc(3)Pent(1)", "Hex(5) HexNAc(3) Pent.", false}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "UNIMOD:1483", "Hex(4)HexNAc(3)NeuGc(1)", "Hex(4) HexNAc(3) NeuGc.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "UNIMOD:1484", "dHex(1)Hex(5)HexNAc(3)", "DHex Hex(5) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "UNIMOD:1485", "dHex(1)Hex(3)HexNAc(4)Pent(1)", "DHex Hex(3) HexNAc(4) Pent.", false}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "UNIMOD:1486", "Hex(3)HexNAc(5)Sulf(1)", "Hex(3) HexNAc(5) Sulf.", false}, {UNIMOD_Hex_6_HexNAc_3_, "UNIMOD:1487", "Hex(6)HexNAc(3)", "Hex(6) HexNAc(3).", false}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "UNIMOD:1488", "Hex(3)HexNAc(4)NeuAc(1)", "Hex(3) HexNAc(4) NeuAc ---OR--- Hex(2) HexNAc(4) dHex NeuGc.", false}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "UNIMOD:1489", "Hex(4)HexNAc(4)Pent(1)", "Hex(4) HexNAc(4) Pent.", false}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "UNIMOD:1490", "Hex(7)HexNAc(2)Phos(1)", "Hex(7) HexNAc(2) Phos.", false}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "UNIMOD:1491", "Hex(4)HexNAc(4)Me(2)Pent(1)", "Hex(4) HexNAc(4) Me(2) Pent.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "UNIMOD:1492", "dHex(1)Hex(3)HexNAc(3)Pent(3)", "DHex Hex(3) HexNAc(3) Pent(3) ---OR--- Hex(4) HexNAc(2) dHex(2) NeuAc.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "UNIMOD:1493", "dHex(1)Hex(5)HexNAc(3)Sulf(1)", "DHex Hex(5) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "UNIMOD:1494", "dHex(2)Hex(3)HexNAc(3)Pent(2)", "DHex(2) Hex(3) HexNAc(3) Pent(2).", false}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "UNIMOD:1495", "Hex(6)HexNAc(3)Phos(1)", "Hex(6) HexNAc(3) Phos.", false}, {UNIMOD_Hex_4_HexNAc_5_, "UNIMOD:1496", "Hex(4)HexNAc(5)", "Hex(4) HexNAc(5).", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "UNIMOD:1497", "dHex(3)Hex(3)HexNAc(3)Pent(1)", "DHex(3) Hex(3) HexNAc(3) Pent.", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "UNIMOD:1498", "dHex(2)Hex(4)HexNAc(3)Pent(1)", "DHex(2) Hex(4) HexNAc(3) Pent.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "UNIMOD:1499", "dHex(1)Hex(4)HexNAc(4)Sulf(1)", "DHex Hex(4) HexNAc(4) Sulf.", false}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "UNIMOD:1500", "dHex(1)Hex(7)HexNAc(2)", "DHex Hex(7) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "UNIMOD:1501", "dHex(1)Hex(4)HexNAc(3)NeuAc(1)", "DHex Hex(4) HexNAc(3) NeuAc ---OR--- dHex(2) Hex(3) HexNAc(3) NeuGc.", false}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "UNIMOD:1502", "Hex(7)HexNAc(2)Phos(2)", "Hex(7) HexNAc(2) Phos(2).", false}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "UNIMOD:1503", "Hex(5)HexNAc(4)Sulf(1)", "Hex(5) HexNAc(4) Sulf.", false}, {UNIMOD_Hex_8_HexNAc_2_, "UNIMOD:1504", "Hex(8)HexNAc(2)", "M8/Man8.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "UNIMOD:1505", "dHex(1)Hex(3)HexNAc(4)Pent(2)", "DHex Hex(3) HexNAc(4) Pent(2).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "UNIMOD:1506", "dHex(1)Hex(4)HexNAc(3)NeuGc(1)", "DHex Hex(4) HexNAc(3) NeuGc ---OR--- Hex(5) HexNAc(3) NeuAc.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "UNIMOD:1507", "dHex(2)Hex(3)HexNAc(4)Pent(1)", "DHex(2) Hex(3) HexNAc(4) Pent.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "UNIMOD:1508", "dHex(1)Hex(3)HexNAc(5)Sulf(1)", "DHex Hex(3) HexNAc(5) Sulf.", false}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "UNIMOD:1509", "dHex(1)Hex(6)HexNAc(3)", "DHex Hex(6) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "UNIMOD:1510", "dHex(1)Hex(3)HexNAc(4)NeuAc(1)", "DHex Hex(3) HexNAc(4) NeuAc.", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "UNIMOD:1511", "dHex(3)Hex(3)HexNAc(4)", "DHex(3) Hex(3) HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "UNIMOD:1512", "dHex(1)Hex(4)HexNAc(4)Pent(1)", "DHex Hex(4) HexNAc(4) Pent.", false}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "UNIMOD:1513", "Hex(4)HexNAc(5)Sulf(1)", "Hex(4) HexNAc(5) Sulf.", false}, {UNIMOD_Hex_7_HexNAc_3_, "UNIMOD:1514", "Hex(7)HexNAc(3)", "Hex(7) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1515", "dHex(1)Hex(4)HexNAc(3)NeuAc(1)Sulf(1)", "DHex Hex(4) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "UNIMOD:1516", "Hex(5)HexNAc(4)Me(2)Pent(1)", "Hex(5) HexNAc(4) Me(2) Pent.", false}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "UNIMOD:1517", "Hex(3)HexNAc(6)Sulf(1)", "Hex(3) HexNAc(6) Sulf.", false}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "UNIMOD:1518", "dHex(1)Hex(6)HexNAc(3)Sulf(1)", "DHex Hex(6) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "UNIMOD:1519", "dHex(1)Hex(4)HexNAc(5)", "DHex Hex(4) HexNAc(5).", false}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "UNIMOD:1520", "dHex(1)Hex(5)HexA(1)HexNAc(3)Sulf(1)", "DHex Hex(5) HexA HexNAc(3) Sulf.", false}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "UNIMOD:1521", "Hex(7)HexNAc(3)Phos(1)", "Hex(7) HexNAc(3) Phos.", false}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "UNIMOD:1522", "Hex(6)HexNAc(4)Me(3)", "Hex(6) HexNAc(4) Me(3).", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "UNIMOD:1523", "dHex(2)Hex(4)HexNAc(4)Sulf(1)", "DHex(2) Hex(4) HexNAc(4) Sulf.", false}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "UNIMOD:1524", "Hex(4)HexNAc(3)NeuAc(2)", "Hex(4) HexNAc(3) NeuAc(2).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "UNIMOD:1525", "dHex(1)Hex(3)HexNAc(4)Pent(3)", "DHex Hex(3) HexNAc(4) Pent(3).", false}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "UNIMOD:1526", "dHex(2)Hex(5)HexNAc(3)Pent(1)", "DHex(2) Hex(5) HexNAc(3) Pent.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "UNIMOD:1527", "dHex(1)Hex(5)HexNAc(4)Sulf(1)", "DHex Hex(5) HexNAc(4) Sulf.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "UNIMOD:1528", "dHex(2)Hex(3)HexNAc(4)Pent(2)", "DHex(2) Hex(3) HexNAc(4) Pent(2).", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "UNIMOD:1529", "dHex(1)Hex(5)HexNAc(3)NeuAc(1)", "DHex Hex(5) HexNAc(3) NeuAc.", false}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "UNIMOD:1530", "Hex(3)HexNAc(6)Sulf(2)", "Hex(3) HexNAc(6) Sulf(2).", false}, {UNIMOD_Hex_9_HexNAc_2_, "UNIMOD:1531", "Hex(9)HexNAc(2)", "M9/Man9.", false}, {UNIMOD_Hex_4_HexNAc_6_, "UNIMOD:1532", "Hex(4)HexNAc(6)", "Hex(4) HexNAc(6).", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "UNIMOD:1533", "dHex(3)Hex(3)HexNAc(4)Pent(1)", "DHex(3) Hex(3) HexNAc(4) Pent.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "UNIMOD:1534", "dHex(1)Hex(5)HexNAc(3)NeuGc(1)", "DHex Hex(5) HexNAc(3) NeuGc ---OR--- Hex(6) HexNAc(3) NeuAc.", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "UNIMOD:1535", "dHex(2)Hex(4)HexNAc(4)Pent(1)", "DHex(2) Hex(4) HexNAc(4) Pent.", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "UNIMOD:1536", "dHex(1)Hex(4)HexNAc(5)Sulf(1)", "DHex Hex(4) HexNAc(5) Sulf.", false}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "UNIMOD:1537", "dHex(1)Hex(7)HexNAc(3)", "DHex Hex(7) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "UNIMOD:1538", "dHex(1)Hex(5)HexNAc(4)Pent(1)", "DHex Hex(5) HexNAc(4) Pent.", false}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "UNIMOD:1539", "dHex(1)Hex(5)HexA(1)HexNAc(3)Sulf(2)", "DHex Hex(5) HexA HexNAc(3) Sulf(2).", false}, {UNIMOD_Hex_3_HexNAc_7_, "UNIMOD:1540", "Hex(3)HexNAc(7)", "Hex(3) HexNAc(7).", false}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "UNIMOD:1541", "dHex(2)Hex(5)HexNAc(4)", "DHex(2) Hex(5) HexNAc(4).", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1542", "dHex(2)Hex(4)HexNAc(3)NeuAc(1)Sulf(1)", "DHex(2) Hex(4) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "UNIMOD:1543", "dHex(1)Hex(5)HexNAc(4)Sulf(2)", "DHex Hex(5) HexNAc(4) Sulf(2).", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "UNIMOD:1544", "dHex(1)Hex(5)HexNAc(4)Me(2)Pent(1)", "DHex Hex(5) HexNAc(4) Me(2) Pent.", false}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "UNIMOD:1545", "Hex(5)HexNAc(4)NeuGc(1)", "Hex(5) HexNAc(4) NeuGc.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "UNIMOD:1546", "dHex(1)Hex(3)HexNAc(6)Sulf(1)", "DHex Hex(3) HexNAc(6) Sulf.", false}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "UNIMOD:1547", "dHex(1)Hex(6)HexNAc(4)", "DHex Hex(6) HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1548", "dHex(1)Hex(5)HexNAc(3)NeuAc(1)Sulf(1)", "DHex Hex(5) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_Hex_7_HexNAc_4_, "UNIMOD:1549", "Hex(7)HexNAc(4)", "Hex(7) HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "UNIMOD:1550", "dHex(1)Hex(5)HexNAc(3)NeuGc(1)Sulf(1)", "DHex Hex(5) HexNAc(3) NeuGc Sulf.", false}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "UNIMOD:1551", "Hex(4)HexNAc(5)NeuAc(1)", "Hex(4) HexNAc(5) NeuAc.", false}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "UNIMOD:1552", "Hex(6)HexNAc(4)Me(3)Pent(1)", "Hex(6) HexNAc(4) Me(3) Pent.", false}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "UNIMOD:1553", "dHex(1)Hex(7)HexNAc(3)Sulf(1)", "DHex Hex(7) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "UNIMOD:1554", "dHex(1)Hex(7)HexNAc(3)Phos(1)", "DHex Hex(7) HexNAc(3) Phos.", false}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "UNIMOD:1555", "dHex(1)Hex(5)HexNAc(5)", "DHex Hex(5) HexNAc(5).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "UNIMOD:1556", "dHex(1)Hex(4)HexNAc(4)NeuAc(1)Sulf(1)", "DHex Hex(4) HexNAc(4) NeuAc Sulf.", false}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "UNIMOD:1557", "dHex(3)Hex(4)HexNAc(4)Sulf(1)", "DHex(3) Hex(4) HexNAc(4) Sulf.", false}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "UNIMOD:1558", "Hex(3)HexNAc(7)Sulf(1)", "Hex(3) HexNAc(7) Sulf.", false}, {UNIMOD_Hex_6_HexNAc_5_, "UNIMOD:1559", "Hex(6)HexNAc(5)", "A3G3.", false}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "UNIMOD:1560", "Hex(5)HexNAc(4)NeuAc(1)Sulf(1)", "Hex(5) HexNAc(4) NeuAc Sulf.", false}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "UNIMOD:1561", "Hex(3)HexNAc(6)NeuAc(1)", "Hex(3) HexNAc(6) NeuAc.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "UNIMOD:1562", "dHex(2)Hex(3)HexNAc(6)", "DHex(2) Hex(3) HexNAc(6).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "UNIMOD:1563", "Hex(1)HexNAc(1)NeuGc(1)", "Hex HexNAc NeuGc.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "UNIMOD:1564", "dHex(1)Hex(2)HexNAc(1)", "DHex Hex(2) HexNAc.", false}, {UNIMOD_HexNAc_3_Sulf_1_, "UNIMOD:1565", "HexNAc(3)Sulf(1)", "HexNAc(3) Sulf.", false}, {UNIMOD_Hex_3_HexNAc_1_, "UNIMOD:1566", "Hex(3)HexNAc(1)", "Hex(3) HexNAc.", false}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "UNIMOD:1567", "Hex(1)HexNAc(1)Kdn(1)Sulf(1)", "Hex HexNAc Kdn Sulf.", false}, {UNIMOD_HexNAc_2_NeuAc_1_, "UNIMOD:1568", "HexNAc(2)NeuAc(1)", "HexNAc(2) NeuAc.", false}, {UNIMOD_HexNAc_1_Kdn_2_, "UNIMOD:1570", "HexNAc(1)Kdn(2)", "HexNAc Kdn(2) ---OR--- Hex(2) HexNAc HexA.", false}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "UNIMOD:1571", "Hex(3)HexNAc(1)Me(1)", "Hex(3) HexNAc Me.", false}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "UNIMOD:1572", "Hex(2)HexA(1)Pent(1)Sulf(1)", "Hex(2) HexA Pent Sulf.", false}, {UNIMOD_HexNAc_2_NeuGc_1_, "UNIMOD:1573", "HexNAc(2)NeuGc(1)", "HexNAc(2) NeuGc.", false}, {UNIMOD_Hex_4_Phos_1_, "UNIMOD:1575", "Hex(4)Phos(1)", "Hex(4) Phos.", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "UNIMOD:1577", "Hex(1)HexNAc(1)NeuAc(1)Sulf(1)", "Hex HexNAc NeuAc Sulf.", false}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "UNIMOD:1578", "Hex(1)HexA(1)HexNAc(2)", "Hex HexA HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "UNIMOD:1579", "dHex(1)Hex(2)HexNAc(1)Sulf(1)", "DHex Hex(2) HexNAc Sulf.", false}, {UNIMOD_dHex_1_HexNAc_3_, "UNIMOD:1580", "dHex(1)HexNAc(3)", "DHex HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "UNIMOD:1581", "dHex(1)Hex(1)HexNAc(1)Kdn(1)", "DHex Hex HexNAc Kdn ---OR--- Hex(2) dHex NeuAc.", false}, {UNIMOD_Hex_1_HexNAc_3_, "UNIMOD:1582", "Hex(1)HexNAc(3)", "Hex HexNAc(3).", false}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1583", "HexNAc(2)NeuAc(1)Sulf(1)", "HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_dHex_2_Hex_3_, "UNIMOD:1584", "dHex(2)Hex(3)", "DHex(2) Hex(3).", false}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "UNIMOD:1585", "Hex(2)HexA(1)HexNAc(1)Sulf(1)", "Hex(2) HexA HexNAc Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "UNIMOD:1586", "dHex(2)Hex(2)HexA(1)", "DHex(2) Hex(2) HexA.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "UNIMOD:1587", "dHex(1)Hex(1)HexNAc(2)Sulf(1)", "DHex Hex HexNAc(2) Sulf.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "UNIMOD:1588", "dHex(1)Hex(1)HexNAc(1)NeuAc(1)", "DHex Hex HexNAc NeuAc.", false}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "UNIMOD:1589", "Hex(2)HexNAc(2)Sulf(1)", "Hex(2) HexNAc(2) Sulf.", false}, {UNIMOD_Hex_5_, "UNIMOD:1590", "Hex(5)", "Hex(5).", false}, {UNIMOD_HexNAc_4_, "UNIMOD:1591", "HexNAc(4)", "HexNAc(4).", false}, {UNIMOD_HexNAc_1_NeuGc_2_, "UNIMOD:1592", "HexNAc(1)NeuGc(2)", "HexNAc NeuGc(2).", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "UNIMOD:1593", "dHex(1)Hex(1)HexNAc(1)NeuGc(1)", "DHex Hex HexNAc NeuGc ---OR--- Hex(2) HexNAc NeuAc.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "UNIMOD:1594", "dHex(2)Hex(2)HexNAc(1)", "DHex(2) Hex(2) HexNAc.", false}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "UNIMOD:1595", "Hex(2)HexNAc(1)NeuGc(1)", "Hex(2) HexNAc NeuGc.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "UNIMOD:1596", "dHex(1)Hex(3)HexNAc(1)", "DHex Hex(3) HexNAc.", false}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "UNIMOD:1597", "dHex(1)Hex(2)HexA(1)HexNAc(1)", "DHex Hex(2) HexA HexNAc.", false}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "UNIMOD:1598", "Hex(1)HexNAc(3)Sulf(1)", "Hex HexNAc(3) Sulf.", false}, {UNIMOD_Hex_4_HexNAc_1_, "UNIMOD:1599", "Hex(4)HexNAc(1)", "Hex(4) HexNAc.", false}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "UNIMOD:1600", "Hex(1)HexNAc(2)NeuAc(1)", "Hex HexNAc(2) NeuAc.", false}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "UNIMOD:1602", "Hex(1)HexNAc(2)NeuGc(1)", "Hex HexNAc(2) NeuGc.", false}, {UNIMOD_Hex_5_Phos_1_, "UNIMOD:1604", "Hex(5)Phos(1)", "Hex(5) Phos.", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "UNIMOD:1606", "dHex(2)Hex(1)HexNAc(1)Kdn(1)", "DHex(2) Hex HexNAc Kdn.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "UNIMOD:1607", "dHex(1)Hex(3)HexNAc(1)Sulf(1)", "DHex Hex(3) HexNAc Sulf.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "UNIMOD:1608", "dHex(1)Hex(1)HexNAc(3)", "DHex Hex HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "UNIMOD:1609", "dHex(1)Hex(2)HexA(1)HexNAc(1)Sulf(1)", "DHex Hex(2) HexA HexNAc Sulf.", false}, {UNIMOD_Hex_2_HexNAc_3_, "UNIMOD:1610", "Hex(2)HexNAc(3)", "Hex(2) HexNAc(3).", false}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1611", "Hex(1)HexNAc(2)NeuAc(1)Sulf(1)", "Hex HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_dHex_2_Hex_4_, "UNIMOD:1612", "dHex(2)Hex(4)", "DHex(2) Hex(4).", false}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "UNIMOD:1614", "dHex(2)HexNAc(2)Kdn(1)", "DHex(2) HexNAc(2) Kdn.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "UNIMOD:1615", "dHex(1)Hex(2)HexNAc(2)Sulf(1)", "DHex Hex(2) HexNAc(2) Sulf.", false}, {UNIMOD_dHex_1_HexNAc_4_, "UNIMOD:1616", "dHex(1)HexNAc(4)", "DHex HexNAc(4).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "UNIMOD:1617", "Hex(1)HexNAc(1)NeuAc(1)NeuGc(1)", "Hex HexNAc NeuAc NeuGc.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "UNIMOD:1618", "dHex(1)Hex(1)HexNAc(2)Kdn(1)", "DHex Hex HexNAc(2) Kdn ---OR--- Hex(2) HexNAc dHex NeuAc.", false}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "UNIMOD:1619", "Hex(1)HexNAc(1)NeuGc(2)", "Hex HexNAc NeuGc(2).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "UNIMOD:1620", "Hex(1)HexNAc(1)NeuAc(2)Ac(1)", "Ac Hex HexNAc NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "UNIMOD:1621", "dHex(2)Hex(2)HexA(1)HexNAc(1)", "DHex(2) Hex(2) HexA HexNAc.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "UNIMOD:1622", "dHex(1)Hex(1)HexNAc(3)Sulf(1)", "DHex Hex HexNAc(3) Sulf.", false}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "UNIMOD:1623", "Hex(2)HexA(1)NeuAc(1)Pent(1)Sulf(1)", "Hex(2) HexA NeuAc Pent Sulf.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "UNIMOD:1624", "dHex(1)Hex(1)HexNAc(2)NeuAc(1)", "DHex Hex HexNAc(2) NeuAc.", false}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "UNIMOD:1625", "dHex(1)Hex(3)HexA(1)HexNAc(1)", "DHex Hex(3) HexA HexNAc.", false}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "UNIMOD:1626", "Hex(2)HexNAc(3)Sulf(1)", "Hex(2) HexNAc(3) Sulf.", false}, {UNIMOD_Hex_5_HexNAc_1_, "UNIMOD:1627", "Hex(5)HexNAc(1)", "Hex(5) HexNAc.", false}, {UNIMOD_HexNAc_5_, "UNIMOD:1628", "HexNAc(5)", "HexNAc(5).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "UNIMOD:1630", "Hex(1)HexNAc(1)NeuAc(2)Ac(2)", "Ac(2) Hex HexNAc NeuAc(2).", false}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "UNIMOD:1631", "Hex(2)HexNAc(2)NeuGc(1)", "Hex(2) HexNAc(2) NeuGc.", false}, {UNIMOD_Hex_5_Phos_3_, "UNIMOD:1632", "Hex(5)Phos(3)", "Hex(5) Phos(3).", false}, {UNIMOD_Hex_6_Phos_1_, "UNIMOD:1633", "Hex(6)Phos(1)", "Hex(6) Phos.", false}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "UNIMOD:1634", "dHex(1)Hex(2)HexA(1)HexNAc(2)", "DHex Hex(2) HexA HexNAc(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "UNIMOD:1635", "dHex(2)Hex(3)HexNAc(1)Sulf(1)", "DHex(2) Hex(3) HexNAc Sulf.", false}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "UNIMOD:1636", "Hex(1)HexNAc(3)NeuAc(1)", "Hex HexNAc(3) NeuAc.", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "UNIMOD:1637", "dHex(2)Hex(1)HexNAc(3)", "DHex(2) Hex HexNAc(3).", false}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "UNIMOD:1638", "Hex(1)HexNAc(3)NeuGc(1)", "Hex HexNAc(3) NeuGc.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1639", "dHex(1)Hex(1)HexNAc(2)NeuAc(1)Sulf(1)", "DHex Hex HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "UNIMOD:1640", "dHex(1)Hex(3)HexA(1)HexNAc(1)Sulf(1)", "DHex Hex(3) HexA HexNAc Sulf.", false}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "UNIMOD:1641", "dHex(1)Hex(1)HexA(1)HexNAc(3)", "DHex Hex HexA HexNAc(3).", false}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1642", "Hex(2)HexNAc(2)NeuAc(1)Sulf(1)", "Hex(2) HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "UNIMOD:1643", "dHex(2)Hex(2)HexNAc(2)Sulf(1)", "DHex(2) Hex(2) HexNAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "UNIMOD:1644", "dHex(2)Hex(1)HexNAc(2)Kdn(1)", "DHex(2) Hex HexNAc(2) Kdn ---OR--- Hex(2) HexNAc dHex(2) NeuAc.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "UNIMOD:1645", "dHex(1)Hex(1)HexNAc(4)", "DHex Hex HexNAc(4).", false}, {UNIMOD_Hex_2_HexNAc_4_, "UNIMOD:1646", "Hex(2)HexNAc(4)", "Hex(2) HexNAc(4).", false}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "UNIMOD:1647", "Hex(2)HexNAc(1)NeuGc(2)", "Hex(2) HexNAc NeuGc(2).", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "UNIMOD:1648", "dHex(2)Hex(4)HexNAc(1)", "DHex(2) Hex(4) HexNAc.", false}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "UNIMOD:1649", "Hex(1)HexNAc(2)NeuAc(2)", "Hex HexNAc(2) NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "UNIMOD:1650", "dHex(2)Hex(1)HexNAc(2)NeuAc(1)", "DHex(2) Hex HexNAc(2) NeuAc.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "UNIMOD:1651", "dHex(1)Hex(2)HexNAc(3)Sulf(1)", "DHex Hex(2) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_1_HexNAc_5_, "UNIMOD:1652", "dHex(1)HexNAc(5)", "DHex HexNAc(5).", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "UNIMOD:1653", "dHex(2)Hex(1)HexNAc(2)NeuGc(1)", "DHex(2) Hex HexNAc(2) NeuGc ---OR--- Hex(2) HexNAc(2) dHex NeuAc ---OR--- Hex HexNAc(3) dHex Kdn.", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "UNIMOD:1654", "dHex(3)Hex(2)HexNAc(2)", "DHex(3) Hex(2) HexNAc(2).", false}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "UNIMOD:1655", "Hex(3)HexNAc(3)Sulf(1)", "Hex(3) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "UNIMOD:1656", "dHex(2)Hex(2)HexNAc(2)Sulf(2)", "DHex(2) Hex(2) HexNAc(2) Sulf(2).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "UNIMOD:1657", "dHex(1)Hex(2)HexNAc(2)NeuGc(1)", "DHex Hex(2) HexNAc(2) NeuGc ---OR--- Hex(3) HexNAc(2) NeuAc.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "UNIMOD:1658", "dHex(1)Hex(1)HexNAc(3)NeuAc(1)", "DHex Hex HexNAc(3) NeuAc.", false}, {UNIMOD_Hex_6_Phos_3_, "UNIMOD:1659", "Hex(6)Phos(3)", "Hex(6) Phos(3).", false}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "UNIMOD:1660", "dHex(1)Hex(3)HexA(1)HexNAc(2)", "DHex Hex(3) HexA HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "UNIMOD:1661", "dHex(1)Hex(1)HexNAc(3)NeuGc(1)", "DHex Hex HexNAc(3) NeuGc ---OR--- Hex(2) HexNAc(3) NeuAc.", false}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "UNIMOD:1662", "Hex(1)HexNAc(2)NeuAc(2)Sulf(1)", "Hex HexNAc(2) NeuAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "UNIMOD:1663", "dHex(2)Hex(3)HexA(1)HexNAc(1)Sulf(1)", "DHex(2) Hex(3) HexA HexNAc Sulf.", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "UNIMOD:1664", "Hex(1)HexNAc(1)NeuAc(3)", "Hex HexNAc NeuAc(3).", false}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "UNIMOD:1665", "Hex(2)HexNAc(3)NeuGc(1)", "Hex(2) HexNAc(3) NeuGc.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1666", "dHex(1)Hex(2)HexNAc(2)NeuAc(1)Sulf(1)", "DHex Hex(2) HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "UNIMOD:1667", "dHex(3)Hex(1)HexNAc(2)Kdn(1)", "DHex(3) Hex HexNAc(2) Kdn.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "UNIMOD:1668", "dHex(2)Hex(3)HexNAc(2)Sulf(1)", "DHex(2) Hex(3) HexNAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "UNIMOD:1669", "dHex(2)Hex(2)HexNAc(2)Kdn(1)", "DHex(2) Hex(2) HexNAc(2) Kdn.", false}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "UNIMOD:1670", "dHex(2)Hex(2)HexA(1)HexNAc(2)Sulf(1)", "DHex(2) Hex(2) HexA HexNAc(2) Sulf.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "UNIMOD:1671", "dHex(1)Hex(2)HexNAc(4)", "DHex Hex(2) HexNAc(4).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "UNIMOD:1672", "Hex(1)HexNAc(1)NeuGc(3)", "Hex HexNAc NeuGc(3).", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1673", "dHex(1)Hex(1)HexNAc(3)NeuAc(1)Sulf(1)", "DHex Hex HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "UNIMOD:1674", "dHex(1)Hex(3)HexA(1)HexNAc(2)Sulf(1)", "DHex Hex(3) HexA HexNAc(2) Sulf.", false}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "UNIMOD:1675", "dHex(1)Hex(1)HexNAc(2)NeuAc(2)", "DHex Hex HexNAc(2) NeuAc(2).", false}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "UNIMOD:1676", "dHex(3)HexNAc(3)Kdn(1)", "DHex(3) HexNAc(3) Kdn.", false}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1678", "Hex(2)HexNAc(3)NeuAc(1)Sulf(1)", "Hex(2) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "UNIMOD:1679", "dHex(2)Hex(2)HexNAc(3)Sulf(1)", "DHex(2) Hex(2) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_2_HexNAc_5_, "UNIMOD:1680", "dHex(2)HexNAc(5)", "DHex(2) HexNAc(5).", false}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "UNIMOD:1681", "Hex(2)HexNAc(2)NeuAc(2)", "Hex(2) HexNAc(2) NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "UNIMOD:1682", "dHex(2)Hex(2)HexNAc(2)NeuAc(1)", "DHex(2) Hex(2) HexNAc(2) NeuAc ---OR--- Hex HexNAc(3) dHex(2) Kdn.", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "UNIMOD:1683", "dHex(1)Hex(3)HexNAc(3)Sulf(1)", "DHex Hex(3) HexNAc(3) Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "UNIMOD:1684", "dHex(2)Hex(2)HexNAc(2)NeuGc(1)", "DHex(2) Hex(2) HexNAc(2) NeuGc ---OR--- Hex(3) HexNAc(2) dHex NeuAc ---OR--- Hex(2) HexNAc(3) dHex Kdn.", false}, {UNIMOD_Hex_2_HexNAc_5_, "UNIMOD:1685", "Hex(2)HexNAc(5)", "Hex(2) HexNAc(5).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "UNIMOD:1686", "dHex(1)Hex(3)HexNAc(2)NeuGc(1)", "DHex Hex(3) HexNAc(2) NeuGc.", false}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "UNIMOD:1687", "Hex(1)HexNAc(3)NeuAc(2)", "Hex HexNAc(3) NeuAc(2).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "UNIMOD:1688", "dHex(1)Hex(2)HexNAc(3)NeuAc(1)", "DHex Hex(2) HexNAc(3) NeuAc.", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "UNIMOD:1689", "dHex(3)Hex(2)HexNAc(3)", "DHex(3) Hex(2) HexNAc(3).", false}, {UNIMOD_Hex_7_Phos_3_, "UNIMOD:1690", "Hex(7)Phos(3)", "Hex(7) Phos(3).", false}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "UNIMOD:1691", "dHex(1)Hex(4)HexA(1)HexNAc(2)", "DHex Hex(4) HexA HexNAc(2).", false}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "UNIMOD:1692", "Hex(3)HexNAc(3)NeuAc(1)", "Hex(3) HexNAc(3) NeuAc ---OR--- Hex(2) HexNAc(3) dHex NeuGc ---OR--- Hex(2) HexNAc(4) Kdn.", false}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "UNIMOD:1693", "dHex(1)Hex(3)HexA(2)HexNAc(2)", "DHex Hex(3) HexA(2) HexNAc(2).", false}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "UNIMOD:1694", "Hex(2)HexNAc(2)NeuAc(2)Sulf(1)", "Hex(2) HexNAc(2) NeuAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "UNIMOD:1695", "dHex(2)Hex(2)HexNAc(2)NeuAc(1)Sulf(1)", "DHex(2) Hex(2) HexNAc(2) NeuAc Sulf.", false}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "UNIMOD:1696", "Hex(3)HexNAc(3)NeuGc(1)", "Hex(3) HexNAc(3) NeuGc.", false}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "UNIMOD:1697", "dHex(4)Hex(1)HexNAc(2)Kdn(1)", "DHex(4) Hex HexNAc(2) Kdn.", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "UNIMOD:1698", "dHex(3)Hex(2)HexNAc(2)Kdn(1)", "DHex(3) Hex(2) HexNAc(2) Kdn.", false}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "UNIMOD:1699", "dHex(3)Hex(2)HexA(1)HexNAc(2)Sulf(1)", "DHex(3) Hex(2) HexA HexNAc(2) Sulf.", false}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "UNIMOD:1700", "Hex(2)HexNAc(4)NeuAc(1)", "Hex(2) HexNAc(4) NeuAc.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "UNIMOD:1701", "dHex(2)Hex(2)HexNAc(4)", "DHex(2) Hex(2) HexNAc(4).", false}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "UNIMOD:1702", "dHex(2)Hex(3)HexA(1)HexNAc(2)Sulf(1)", "DHex(2) Hex(3) HexA HexNAc(2) Sulf.", false}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "UNIMOD:1703", "dHex(4)HexNAc(3)Kdn(1)", "DHex(4) HexNAc(3) Kdn.", false}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "UNIMOD:1705", "Hex(2)HexNAc(1)NeuGc(3)", "Hex(2) HexNAc NeuGc(3).", false}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "UNIMOD:1706", "dHex(4)Hex(1)HexNAc(1)Kdn(2)", "DHex(4) Hex HexNAc Kdn(2).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1707", "dHex(1)Hex(2)HexNAc(3)NeuAc(1)Sulf(1)", "DHex Hex(2) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "UNIMOD:1708", "dHex(1)Hex(2)HexNAc(2)NeuAc(2)", "DHex Hex(2) HexNAc(2) NeuAc(2).", false}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "UNIMOD:1709", "dHex(3)Hex(1)HexNAc(3)Kdn(1)", "DHex(3) Hex HexNAc(3) Kdn.", false}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "UNIMOD:1711", "Hex(3)HexNAc(3)NeuAc(1)Sulf(1)", "Hex(3) HexNAc(3) NeuAc Sulf.", false}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "UNIMOD:1712", "Hex(3)HexNAc(2)NeuAc(2)", "Hex(3) HexNAc(2) NeuAc(2).", false}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "UNIMOD:1713", "Hex(3)HexNAc(3)NeuGc(1)Sulf(1)", "Hex(3) HexNAc(3) NeuGc Sulf.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "UNIMOD:1714", "dHex(1)Hex(2)HexNAc(2)NeuGc(2)", "DHex Hex(2) HexNAc(2) NeuGc(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "UNIMOD:1715", "dHex(2)Hex(3)HexNAc(2)NeuGc(1)", "DHex(2) Hex(3) HexNAc(2) NeuGc ---OR--- Hex(4) HexNAc(2) dHex NeuAc.", false}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "UNIMOD:1716", "dHex(1)Hex(3)HexA(1)HexNAc(3)Sulf(1)", "DHex Hex(3) HexA HexNAc(3) Sulf.", false}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "UNIMOD:1717", "Hex(2)HexNAc(3)NeuAc(2)", "Hex(2) HexNAc(3) NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "UNIMOD:1718", "dHex(2)Hex(2)HexNAc(3)NeuAc(1)", "DHex(2) Hex(2) HexNAc(3) NeuAc.", false}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "UNIMOD:1719", "dHex(4)Hex(2)HexNAc(3)", "DHex(4) Hex(2) HexNAc(3).", false}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "UNIMOD:1720", "Hex(2)HexNAc(3)NeuAc(1)NeuGc(1)", "Hex(2) HexNAc(3) NeuAc NeuGc.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "UNIMOD:1721", "dHex(2)Hex(2)HexNAc(3)NeuGc(1)", "DHex(2) Hex(2) HexNAc(3) NeuGc ---OR--- Hex(3) HexNAc(3) dHex NeuAc ---OR--- Hex(2) HexNAc(4) dHex Kdn.", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "UNIMOD:1722", "dHex(3)Hex(3)HexNAc(3)", "DHex(3) Hex(3) HexNAc(3).", false}, {UNIMOD_Hex_8_Phos_3_, "UNIMOD:1723", "Hex(8)Phos(3)", "Hex(8) Phos(3).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "UNIMOD:1724", "dHex(1)Hex(2)HexNAc(2)NeuAc(2)Sulf(1)", "DHex Hex(2) HexNAc(2) NeuAc(2) Sulf.", false}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "UNIMOD:1725", "Hex(2)HexNAc(3)NeuGc(2)", "Hex(2) HexNAc(3) NeuGc(2).", false}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "UNIMOD:1726", "dHex(4)Hex(2)HexNAc(2)Kdn(1)", "DHex(4) Hex(2) HexNAc(2) Kdn.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "UNIMOD:1727", "dHex(1)Hex(2)HexNAc(4)NeuAc(1)", "DHex Hex(2) HexNAc(4) NeuAc.", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "UNIMOD:1728", "dHex(3)Hex(2)HexNAc(4)", "DHex(3) Hex(2) HexNAc(4).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "UNIMOD:1729", "Hex(1)HexNAc(1)NeuGc(4)", "Hex HexNAc NeuGc(4).", false}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "UNIMOD:1730", "dHex(4)Hex(1)HexNAc(3)Kdn(1)", "DHex(4) Hex HexNAc(3) Kdn.", false}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "UNIMOD:1732", "Hex(4)HexNAc(4)Sulf(2)", "Hex(4) HexNAc(4) Sulf(2).", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "UNIMOD:1733", "dHex(3)Hex(2)HexNAc(3)Kdn(1)", "DHex(3) Hex(2) HexNAc(3) Kdn ---OR--- Hex(3) HexNAc(2) dHex(3) NeuAc.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "UNIMOD:1735", "dHex(2)Hex(2)HexNAc(5)", "DHex(2) Hex(2) HexNAc(5).", false}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "UNIMOD:1736", "dHex(2)Hex(3)HexA(1)HexNAc(3)Sulf(1)", "DHex(2) Hex(3) HexA HexNAc(3) Sulf.", false}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "UNIMOD:1737", "dHex(1)Hex(4)HexA(1)HexNAc(3)Sulf(1)", "DHex Hex(4) HexA HexNAc(3) Sulf.", false}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "UNIMOD:1738", "Hex(3)HexNAc(3)NeuAc(2)", "Hex(3) HexNAc(3) NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "UNIMOD:1739", "dHex(2)Hex(3)HexNAc(3)NeuAc(1)", "DHex(2) Hex(3) HexNAc(3) NeuAc ---OR--- Hex(2) HexNAc(4) dHex(2) Kdn.", false}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "UNIMOD:1740", "dHex(4)Hex(3)HexNAc(3)", "DHex(4) Hex(3) HexNAc(3).", false}, {UNIMOD_Hex_9_Phos_3_, "UNIMOD:1742", "Hex(9)Phos(3)", "Hex(9) Phos(3).", false}, {UNIMOD_dHex_2_HexNAc_7_, "UNIMOD:1743", "dHex(2)HexNAc(7)", "DHex(2) HexNAc(7).", false}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "UNIMOD:1744", "Hex(2)HexNAc(1)NeuGc(4)", "Hex(2) HexNAc NeuGc(4).", false}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "UNIMOD:1745", "Hex(3)HexNAc(3)NeuAc(2)Sulf(1)", "Hex(3) HexNAc(3) NeuAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "UNIMOD:1746", "dHex(2)Hex(3)HexNAc(5)", "DHex(2) Hex(3) HexNAc(5).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "UNIMOD:1747", "dHex(1)Hex(2)HexNAc(2)NeuGc(3)", "DHex Hex(2) HexNAc(2) NeuGc(3).", false}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "UNIMOD:1748", "dHex(2)Hex(4)HexA(1)HexNAc(3)Sulf(1)", "DHex(2) Hex(4) HexA HexNAc(3) Sulf.", false}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "UNIMOD:1749", "Hex(2)HexNAc(3)NeuAc(3)", "Hex(2) HexNAc(3) NeuAc(3).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "UNIMOD:1750", "dHex(1)Hex(3)HexNAc(3)NeuAc(2)", "DHex Hex(3) HexNAc(3) NeuAc(2).", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "UNIMOD:1751", "dHex(3)Hex(3)HexNAc(3)NeuAc(1)", "DHex(3) Hex(3) HexNAc(3) NeuAc.", false}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "UNIMOD:1752", "Hex(2)HexNAc(3)NeuGc(3)", "Hex(2) HexNAc(3) NeuGc(3).", false}, {UNIMOD_Hex_10_Phos_3_, "UNIMOD:1753", "Hex(10)Phos(3)", "Hex(10) Phos(3).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "UNIMOD:1754", "dHex(1)Hex(2)HexNAc(4)NeuAc(2)", "DHex Hex(2) HexNAc(4) NeuAc(2).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "UNIMOD:1755", "Hex(1)HexNAc(1)NeuGc(5)", "Hex HexNAc NeuGc(5).", false}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "UNIMOD:1756", "Hex(4)HexNAc(4)NeuAc(1)Sulf(2)", "Hex(4) HexNAc(4) NeuAc Sulf(2).", false}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "UNIMOD:1757", "Hex(4)HexNAc(4)NeuGc(1)Sulf(2)", "Hex(4) HexNAc(4) NeuGc Sulf(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "UNIMOD:1758", "dHex(2)Hex(3)HexNAc(3)NeuAc(2)", "DHex(2) Hex(3) HexNAc(3) NeuAc(2).", false}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "UNIMOD:1759", "Hex(4)HexNAc(4)NeuAc(1)Sulf(3)", "Hex(4) HexNAc(4) NeuAc Sulf(3).", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "UNIMOD:1760", "dHex(2)Hex(2)HexNAc(2)", "DHex(2) Hex(2) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "UNIMOD:1761", "dHex(1)Hex(3)HexNAc(2)", "DHex Hex(3) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "UNIMOD:1762", "dHex(1)Hex(2)HexNAc(3)", "DHex Hex(2) HexNAc(3).", false}, {UNIMOD_Hex_3_HexNAc_3_, "UNIMOD:1763", "Hex(3)HexNAc(3)", "Hex(3) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "UNIMOD:1764", "dHex(1)Hex(3)HexNAc(2)Sulf(1)", "DHex Hex(3) HexNAc(2) Sulf.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "UNIMOD:1765", "dHex(2)Hex(3)HexNAc(2)", "DHex(2) Hex(3) HexNAc(2).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "UNIMOD:1766", "dHex(1)Hex(4)HexNAc(2)", "DHex Hex(4) HexNAc(2).", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "UNIMOD:1767", "dHex(2)Hex(2)HexNAc(3)", "DHex(2) Hex(2) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "UNIMOD:1768", "dHex(1)Hex(3)HexNAc(3)", "DHex Hex(3) HexNAc(3).", false}, {UNIMOD_Hex_4_HexNAc_3_, "UNIMOD:1769", "Hex(4)HexNAc(3)", "Hex(4) HexNAc(3).", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "UNIMOD:1770", "dHex(2)Hex(4)HexNAc(2)", "DHex(2) Hex(4) HexNAc(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "UNIMOD:1771", "dHex(2)Hex(3)HexNAc(3)", "DHex(2) Hex(3) HexNAc(3).", false}, {UNIMOD_Hex_3_HexNAc_5_, "UNIMOD:1772", "Hex(3)HexNAc(5)", "A3.", false}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "UNIMOD:1773", "Hex(4)HexNAc(3)NeuAc(1)", "Hex(4) HexNAc(3) NeuAc ---OR--- Hex(3) HexNAc(4) Kdn.", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "UNIMOD:1774", "dHex(2)Hex(3)HexNAc(4)", "DHex(2) Hex(3) HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "UNIMOD:1775", "dHex(1)Hex(3)HexNAc(5)", "DHex Hex(3) HexNAc(5).", false}, {UNIMOD_Hex_3_HexNAc_6_, "UNIMOD:1776", "Hex(3)HexNAc(6)", "A4.", false}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "UNIMOD:1777", "Hex(4)HexNAc(4)NeuAc(1)", "Hex(4) HexNAc(4) NeuAc.", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "UNIMOD:1778", "dHex(2)Hex(4)HexNAc(4)", "DHex(2) Hex(4) HexNAc(4) ---OR--- Hex(4) HexNAc(4) dHex Pent Me.", false}, {UNIMOD_Hex_6_HexNAc_4_, "UNIMOD:1779", "Hex(6)HexNAc(4)", "Hex(6) HexNAc(4).", false}, {UNIMOD_Hex_5_HexNAc_5_, "UNIMOD:1780", "Hex(5)HexNAc(5)", "Hex(5) HexNAc(5).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "UNIMOD:1781", "dHex(1)Hex(3)HexNAc(6)", "DHex Hex(3) HexNAc(6).", false}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "UNIMOD:1782", "dHex(1)Hex(4)HexNAc(4)NeuAc(1)", "DHex Hex(4) HexNAc(4) NeuAc ---OR--- Hex(3) HexNAc(5) dHex Kdn.", false}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "UNIMOD:1783", "dHex(3)Hex(4)HexNAc(4)", "DHex(3) Hex(4) HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "UNIMOD:1784", "dHex(1)Hex(3)HexNAc(5)NeuAc(1)", "DHex Hex(3) HexNAc(5) NeuAc.", false}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "UNIMOD:1785", "dHex(2)Hex(4)HexNAc(5)", "DHex(2) Hex(4) HexNAc(5).", false}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "UNIMOD:1786", "Hex(1)HexNAc(1)NeuAc(1)Ac(1)", "Ac Hex HexNAc NeuAc.", false}, {UNIMOD_Label_13C_2_15N_2_, "UNIMOD:1787", "Label:13C(2)15N(2)", "13C(2) 15N(2).", false}, {UNIMOD_Xlink_DSS_155_, "UNIMOD:1789", "Xlink:DSS[155]", "Ammonium-quenched monolink of DSS/BS3 crosslinker.", false}, {UNIMOD_NQIGG, "UNIMOD:1799", "NQIGG", "SUMOylation by Giardia lamblia.", false}, {UNIMOD_Carboxyethylpyrrole, "UNIMOD:1800", "Carboxyethylpyrrole", "Carboxyethylpyrrole.", false}, {UNIMOD_Fluorescein_tyramine, "UNIMOD:1801", "Fluorescein-tyramine", "Fluorescein-tyramine adduct by peroxidase activity.", false}, {UNIMOD_GEE, "UNIMOD:1824", "GEE", "Transamidation of glycine ethyl ester to glutamine.", false}, {UNIMOD_RNPXL, "UNIMOD:1825", "RNPXL", "Simulate peptide-RNA conjugates.", false}, {UNIMOD_Glu__pyro_Glu_Methyl, "UNIMOD:1826", "Glu->pyro-Glu+Methyl", "Pyro-Glu from E + Methylation.", false}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "UNIMOD:1827", "Glu->pyro-Glu+Methyl:2H(2)13C(1)", "Pyro-Glu from E + Methylation Medium.", false}, {UNIMOD_LRGG_methyl, "UNIMOD:1828", "LRGG+methyl", "LeumethylArgGlyGly.", false}, {UNIMOD_LRGG_dimethyl, "UNIMOD:1829", "LRGG+dimethyl", "LeudimethylArgGlyGly.", false}, {UNIMOD_Biotin_tyramide, "UNIMOD:1830", "Biotin-tyramide", "Biotin-Phenol.", false}, {UNIMOD_Tris, "UNIMOD:1831", "Tris", "Tris adduct causes 104 Da addition at asparagine-succinimide intermediate.", false}, {UNIMOD_IASD, "UNIMOD:1832", "IASD", "Iodoacetamide derivative of stilbene (reaction product with thiol).", false}, {UNIMOD_NP40, "UNIMOD:1833", "NP40", "NP-40 synthetic polymer terminus.", false}, {UNIMOD_Tween20, "UNIMOD:1834", "Tween20", "Tween 20 synthetic polymer terminus.", false}, {UNIMOD_Tween80, "UNIMOD:1835", "Tween80", "Tween 80 synthetic polymer terminus.", false}, {UNIMOD_Triton, "UNIMOD:1836", "Triton", "Triton synthetic polymer terminus.", false}, {UNIMOD_Brij35, "UNIMOD:1837", "Brij35", "Brij 35 synthetic polymer terminus.", false}, {UNIMOD_Brij58, "UNIMOD:1838", "Brij58", "Brij 58 synthetic polymer terminus.", false}, {UNIMOD_betaFNA, "UNIMOD:1839", "betaFNA", "Beta-Funaltrexamine.", false}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "UNIMOD:1840", "dHex(1)Hex(7)HexNAc(4)", "Fucosylated biantennary + 2 alphaGal.", false}, {UNIMOD_Biotin_Thermo_21328, "UNIMOD:1841", "Biotin:Thermo-21328", "EZ-Link Sulfo-NHS-SS-Biotin.", false}, {UNIMOD_PhosphoCytidine, "UNIMOD:1843", "PhosphoCytidine", "Cytidine monophosphate.", false}, {UNIMOD_AzidoF, "UNIMOD:1845", "AzidoF", "Azidophenylalanine.", false}, {UNIMOD_Dimethylaminoethyl, "UNIMOD:1846", "Dimethylaminoethyl", "Cys alkylation by dimethylaminoethyl halide.", false}, {UNIMOD_Gluratylation, "UNIMOD:1848", "Gluratylation", "Glutarylation.", false}, {UNIMOD_hydroxyisobutyryl, "UNIMOD:1849", "hydroxyisobutyryl", "2-hydroxyisobutyrylation.", false}, {UNIMOD_MeMePhosphorothioate, "UNIMOD:1868", "MeMePhosphorothioate", "S-Methyl Methyl phosphorothioate.", false}, {UNIMOD_Cation_Fe_III_, "UNIMOD:1870", "Cation:Fe[III]", "Replacement of 3 protons by iron.", false}, {UNIMOD_DTT, "UNIMOD:1871", "DTT", "DTT adduct of cysteine.", false}, {UNIMOD_DYn_2, "UNIMOD:1872", "DYn-2", "Sulfenic Acid specific probe.", false}, {UNIMOD_MesitylOxide, "UNIMOD:1873", "MesitylOxide", "Acetone chemical artifact.", false}, {UNIMOD_methylol, "UNIMOD:1875", "methylol", "Formaldehyde induced modifications.", false}, {UNIMOD_Xlink_DSS_259_, "UNIMOD:1877", "Xlink:DSS[259]", "Tris-quenched monolink of DSS/BS3 crosslinker.", false}, {UNIMOD_Xlink_DSSO_176_, "UNIMOD:1878", "Xlink:DSSO[176]", "Water-quenched monolink of DSSO crosslinker.", false}, {UNIMOD_Xlink_DSSO_175_, "UNIMOD:1879", "Xlink:DSSO[175]", "Ammonia-quenched monolink of DSSO crosslinker.", false}, {UNIMOD_Xlink_DSSO_279_, "UNIMOD:1880", "Xlink:DSSO[279]", "Tris-quenched monolink of DSSO crosslinker.", false}, {UNIMOD_Xlink_DSSO_54_, "UNIMOD:1881", "Xlink:DSSO[54]", "Alkene fragment of DSSO crosslinker.", false}, {UNIMOD_Xlink_DSSO_86_, "UNIMOD:1882", "Xlink:DSSO[86]", "Thiol fragment of DSSO crosslinker.", false}, {UNIMOD_Xlink_DSSO_104_, "UNIMOD:1883", "Xlink:DSSO[104]", "Sulfenic acid fragment of DSSO crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_111_, "UNIMOD:1885", "Xlink:BuUrBu[111]", "BuUr fragment of BuUrBu crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_85_, "UNIMOD:1886", "Xlink:BuUrBu[85]", "Bu fragment of BuUrBu crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_213_, "UNIMOD:1887", "Xlink:BuUrBu[213]", "Ammonia quenched monolink of BuUrBu crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_214_, "UNIMOD:1888", "Xlink:BuUrBu[214]", "Water quenched monolink of BuUrBu crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_317_, "UNIMOD:1889", "Xlink:BuUrBu[317]", "Tris quenched monolink of BuUrBu crosslinker.", false}, {UNIMOD_Xlink_DSSO_158_, "UNIMOD:1896", "Xlink:DSSO[158]", "Intact DSSO crosslinker.", false}, {UNIMOD_Xlink_EGS_226_, "UNIMOD:1897", "Xlink:EGS[226]", "Intact EGS cross-linker.", false}, {UNIMOD_Xlink_DSS_138_, "UNIMOD:1898", "Xlink:DSS[138]", "Intact DSS/BS3 crosslinker.", false}, {UNIMOD_Xlink_BuUrBu_196_, "UNIMOD:1899", "Xlink:BuUrBu[196]", "Intact BuUrBu crosslinker.", false}, {UNIMOD_Xlink_DTBP_172_, "UNIMOD:1900", "Xlink:DTBP[172]", "Intact DTBP crosslinker.", false}, {UNIMOD_Xlink_DST_114_, "UNIMOD:1901", "Xlink:DST[114]", "Intact DST crosslinker.", false}, {UNIMOD_Xlink_DTSSP_174_, "UNIMOD:1902", "Xlink:DTSSP[174]", "Intact DSP/DTSSP crosslinker.", false}, {UNIMOD_Xlink_SMCC_219_, "UNIMOD:1903", "Xlink:SMCC[219]", "Intact SMCC cross-link.", false}, {UNIMOD_Xlink_BS2G_96_, "UNIMOD:1905", "Xlink:BS2G[96]", "Intact BS2-G crosslinker.", false}, {UNIMOD_Xlink_BS2G_113_, "UNIMOD:1906", "Xlink:BS2G[113]", "Ammonium-quenched monolink of BS2-G crosslinker.", false}, {UNIMOD_Xlink_BS2G_114_, "UNIMOD:1907", "Xlink:BS2G[114]", "Water-quenched monolink of BS2-G crosslinker.", false}, {UNIMOD_Xlink_BS2G_217_, "UNIMOD:1908", "Xlink:BS2G[217]", "Tris-quenched monolink of BS2-G crosslinker.", false}, {UNIMOD_Cation_Al_III_, "UNIMOD:1910", "Cation:Al[III]", "Replacement of 3 protons by aluminium.", false}, {UNIMOD_Xlink_DMP_139_, "UNIMOD:1911", "Xlink:DMP[139]", "Ammonia quenched monolink of DMP crosslinker.", false}, {UNIMOD_Xlink_DMP_122_, "UNIMOD:1912", "Xlink:DMP[122]", "Intact DMP crosslinker.", false}, {UNIMOD_glyoxalAGE, "UNIMOD:1913", "glyoxalAGE", "Glyoxal-derived AGE.", false}, {UNIMOD_Met__AspSA, "UNIMOD:1914", "Met->AspSA", "Methionine oxidation to aspartic semialdehyde.", false}, {UNIMOD_Decarboxylation, "UNIMOD:1915", "Decarboxylation", "Decarboxylation.", false}, {UNIMOD_Aspartylurea, "UNIMOD:1916", "Aspartylurea", "Aspartylurea.", false}, {UNIMOD_Formylasparagine, "UNIMOD:1917", "Formylasparagine", "In Bachi as Formylaspargine (typo?).", false}, {UNIMOD_Carbonyl, "UNIMOD:1918", "Carbonyl", "Aldehyde and ketone modifications.", false}, {UNIMOD_AFB1_Dialdehyde, "UNIMOD:1920", "AFB1_Dialdehyde", "Adduction of aflatoxin B1 Dialdehyde to lysine.", false}, {UNIMOD_Pro__HAVA, "UNIMOD:1922", "Pro->HAVA", "Proline oxidation to 5-hydroxy-2-aminovaleric acid.", false}, {UNIMOD_Delta_H__4_O_2_, "UNIMOD:1923", "Delta:H(-4)O(2)", "Tryptophan oxidation to beta-unsaturated-2,4-bis-tryptophandione.", false}, {UNIMOD_Delta_H__4_O_3_, "UNIMOD:1924", "Delta:H(-4)O(3)", "Tryptophan oxidation to hydroxy-bis-tryptophandione.", false}, {UNIMOD_Delta_O_4_, "UNIMOD:1925", "Delta:O(4)", "Tryptophan oxidation to dihydroxy-N-formaylkynurenine.", false}, {UNIMOD_Delta_H_3_C_3_O_2_, "UNIMOD:1926", "Delta:H(3)C(3)O(2)", "Methylglyoxal-derived carboxyethyllysine.", false}, {UNIMOD_Delta_H_4_C_5_O_1_, "UNIMOD:1927", "Delta:H(4)C(5)O(1)", "Methylglyoxal-derived argpyrimidine.", false}, {UNIMOD_Delta_H_10_C_8_O_1_, "UNIMOD:1928", "Delta:H(10)C(8)O(1)", "Crotonaldehyde-derived dimethyl-FDP-lysine.", false}, {UNIMOD_Delta_H_6_C_7_O_4_, "UNIMOD:1929", "Delta:H(6)C(7)O(4)", "Methylglyoxal-derived tetrahydropyrimidine.", false}, {UNIMOD_Pent_2_, "UNIMOD:1930", "Pent(2)", "Pent(2).", false}, {UNIMOD_Pent_1_HexNAc_1_, "UNIMOD:1931", "Pent(1)HexNAc(1)", "Pent HexNAc.", false}, {UNIMOD_Hex_2_Sulf_1_, "UNIMOD:1932", "Hex(2)Sulf(1)", "Hex(2) O(3) S.", false}, {UNIMOD_Hex_1_Pent_2_Me_1_, "UNIMOD:1933", "Hex(1)Pent(2)Me(1)", "Hex:1 Pent:2 Me:1.", false}, {UNIMOD_HexNAc_2_Sulf_1_, "UNIMOD:1934", "HexNAc(2)Sulf(1)", "HexNAc(2) Sulf.", false}, {UNIMOD_Hex_1_Pent_3_Me_1_, "UNIMOD:1935", "Hex(1)Pent(3)Me(1)", "Hex Pent(3) Me.", false}, {UNIMOD_Hex_2_Pent_2_, "UNIMOD:1936", "Hex(2)Pent(2)", "Hex(2) Pent(2).", false}, {UNIMOD_Hex_2_Pent_2_Me_1_, "UNIMOD:1937", "Hex(2)Pent(2)Me(1)", "Hex(2) Pent(2) Me.", false}, {UNIMOD_Hex_4_HexA_1_, "UNIMOD:1938", "Hex(4)HexA(1)", "Hex(4) HexA.", false}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "UNIMOD:1939", "Hex(2)HexNAc(1)Pent(1)HexA(1)", "Hex(2) HexNAc Pent HexA.", false}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "UNIMOD:1940", "Hex(3)HexNAc(1)HexA(1)", "Hex(3) HexNAc HexA.", false}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "UNIMOD:1941", "Hex(1)HexNAc(2)dHex(2)Sulf(1)", "Hex HexNAc(2) dHex(2) Sulf.", false}, {UNIMOD_HexA_2_HexNAc_3_, "UNIMOD:1942", "HexA(2)HexNAc(3)", "HexA(2) HexNAc(3).", false}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "UNIMOD:1943", "dHex(1)Hex(4)HexA(1)", "DHex Hex(4) HexA.", false}, {UNIMOD_Hex_5_HexA_1_, "UNIMOD:1944", "Hex(5)HexA(1)", "Hex(5) HexA.", false}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "UNIMOD:1945", "Hex(4)HexA(1)HexNAc(1)", "Hex(4) HexA HexNAc.", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "UNIMOD:1946", "dHex(3)Hex(3)HexNAc(1)", "DHex(3) Hex(3) HexNAc.", false}, {UNIMOD_Hex_6_HexNAc_1_, "UNIMOD:1947", "Hex(6)HexNAc(1)", "Hex(6) HexNAc.", false}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "UNIMOD:1948", "Hex(1)HexNAc(4)dHex(1)Sulf(1)", "Sulf dHex Hex HexNAc(4).", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "UNIMOD:1949", "dHex(1)Hex(2)HexNAc(1)NeuAc(2)", "DHex Hex(2) HexNAc NeuAc(2).", false}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "UNIMOD:1950", "dHex(3)Hex(3)HexNAc(2)", "DHex(3) Hex(3) HexNAc(2).", false}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "UNIMOD:1951", "dHex(2)Hex(1)HexNAc(4)Sulf(1)", "DHex(2) Hex HexNAc(4) Sulf.", false}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "UNIMOD:1952", "dHex(1)Hex(2)HexNAc(4)Sulf(2)", "DHex Hex(2) HexNAc(4) Sulf(2).", false}, {UNIMOD_Hex_9_, "UNIMOD:1953", "Hex(9)", "Hex(9).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "UNIMOD:1954", "dHex(2)Hex(3)HexNAc(3)Sulf(1)", "Sulf dHex(2) Hex(3) HexNAc(3).", false}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "UNIMOD:1955", "dHex(2)Hex(5)HexNAc(2)Me(1)", "Me dHex(2) Hex(5) HexNAc(2).", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "UNIMOD:1956", "dHex(2)Hex(2)HexNAc(4)Sulf(2)", "Sulf(2) dHex(2) Hex(2) HexNAc(4).", false}, {UNIMOD_Hex_9_HexNAc_1_, "UNIMOD:1957", "Hex(9)HexNAc(1)", "Hex(9) HexNAc.", false}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "UNIMOD:1958", "dHex(3)Hex(2)HexNAc(4)Sulf(2)", "DHex(3) Hex(2) HexNAc(4) Sulf(2).", false}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "UNIMOD:1959", "Hex(4)HexNAc(4)NeuGc(1)", "Hex(4) HexNAc(4) NeuGc.", false}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "UNIMOD:1960", "dHex(4)Hex(3)HexNAc(2)NeuAc(1)", "DHex(4) Hex(3) HexNAc(2) NeuAc(1).", false}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "UNIMOD:1961", "Hex(3)HexNAc(5)NeuAc(1)", "Hex(3) HexNAc(5) NeuAc(1).", false}, {UNIMOD_Hex_10_HexNAc_1_, "UNIMOD:1962", "Hex(10)HexNAc(1)", "Hex(10) HexNAc(1).", false}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "UNIMOD:1963", "dHex(1)Hex(8)HexNAc(2)", "DHex Hex(8) HexNAc(2).", false}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "UNIMOD:1964", "Hex(3)HexNAc(4)NeuAc(2)", "Hex(3) HexNAc(4) NeuAc(2).", false}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "UNIMOD:1965", "dHex(2)Hex(3)HexNAc(4)NeuAc(1)", "DHex(2) Hex(3) HexNAc(4) NeuAc.", false}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "UNIMOD:1966", "dHex(2)Hex(2)HexNAc(6)Sulf(1)", "DHex(2) Hex(2) HexNAc(6) Sulf.", false}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "UNIMOD:1967", "Hex(5)HexNAc(4)NeuAc(1)Ac(1)", "Hex(5) HexNAc(4) NeuAc Ac.", false}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "UNIMOD:1968", "Hex(3)HexNAc(3)NeuAc(3)", "Hex(3) HexNAc(3) NeuAc(3).", false}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "UNIMOD:1969", "Hex(5)HexNAc(4)NeuAc(1)Ac(2)", "Hex(5) HexNAc(4) NeuAc Ac(2).", false}, {UNIMOD_Unknown_162, "UNIMOD:1970", "Unknown:162", "Unidentified modification of 162.1258 found in open search.", false}, {UNIMOD_Unknown_177, "UNIMOD:1971", "Unknown:177", "Unidentified modification of 176.7462 found in open search.", false}, {UNIMOD_Unknown_210, "UNIMOD:1972", "Unknown:210", "Unidentified modification of 210.1616 found in open search.", false}, {UNIMOD_Unknown_216, "UNIMOD:1973", "Unknown:216", "Unidentified modification of 216.1002 found in open search.", false}, {UNIMOD_Unknown_234, "UNIMOD:1974", "Unknown:234", "Unidentified modification of 234.0742 found in open search.", false}, {UNIMOD_Unknown_248, "UNIMOD:1975", "Unknown:248", "Unidentified modification of 248.1986 found in open search.", false}, {UNIMOD_Unknown_250, "UNIMOD:1976", "Unknown:250", "Unidentified modification of 249.981 found in open search.", false}, {UNIMOD_Unknown_302, "UNIMOD:1977", "Unknown:302", "Unidentified modification of 301.9864 found in open search.", false}, {UNIMOD_Unknown_306, "UNIMOD:1978", "Unknown:306", "Unidentified modification of 306.0952 found in open search.", false}, {UNIMOD_Unknown_420, "UNIMOD:1979", "Unknown:420", "Unidentified modification of 420.0506 found in open search.", false}, {UNIMOD_Diethylphosphothione, "UNIMOD:1986", "Diethylphosphothione", "O-diethylphosphothione.", false}, {UNIMOD_Dimethylphosphothione, "UNIMOD:1987", "Dimethylphosphothione", "O-dimethylphosphothione.", false}, {UNIMOD_monomethylphosphothione, "UNIMOD:1989", "monomethylphosphothione", "O-methylphosphothione.", false}, {UNIMOD_CIGG, "UNIMOD:1990", "CIGG", "Ubiquitin D (FAT10) leaving after chymotrypsin digestion Cys-Ile-Gly-Gly.", false}, {UNIMOD_GNLLFLACYCIGG, "UNIMOD:1991", "GNLLFLACYCIGG", "Ubiquitin D (FAT10) leaving after trypsin digestion Gly-Asn-Leu-Leu-Phe-Leu-Ala-Cys-Tyr-Cys-Ile-Gly-Gly.", false}, {UNIMOD_serotonylation, "UNIMOD:1992", "serotonylation", "5-glutamyl serotonin.", false}, {UNIMOD_TMPP_Ac_13C_9_, "UNIMOD:1993", "TMPP-Ac:13C(9)", "Heavy tris(2,4,6-trimethoxyphenyl)phosphonium acetic acid N-hydroxysuccinimide ester derivative.", false}, {UNIMOD_Xlink_DST_56_, "UNIMOD:1999", "Xlink:DST[56]", "DST crosslinker cleaved by sodium periodate.", false}, {UNIMOD_ZQG, "UNIMOD:2001", "ZQG", "Carbobenzoxy-L-glutaminyl-glycine.", false}, {UNIMOD_Haloxon, "UNIMOD:2006", "Haloxon", "O-Dichloroethylphosphate.", false}, {UNIMOD_Methamidophos_S, "UNIMOD:2007", "Methamidophos-S", "S-methyl amino phosphinate.", false}, {UNIMOD_Methamidophos_O, "UNIMOD:2008", "Methamidophos-O", "O-methyl amino phosphinate.", false}, {UNIMOD_Nitrene, "UNIMOD:2014", "Nitrene", "Loss of O2; nitro photochemical decomposition.", false}, {UNIMOD_shTMT, "UNIMOD:2015", "shTMT", "Super Heavy Tandem Mass Tag.", false}, {UNIMOD_TMTpro, "UNIMOD:2016", "TMTpro", "TMTpro 16plex Tandem Mass Tag.", false}, {UNIMOD_TMTpro_zero, "UNIMOD:2017", "TMTpro_zero", "Native TMTpro Tandem Mass Tag.", false}, {UNIMOD_Kdo, "UNIMOD:2022", "Kdo", "Glycosylation with KDO.", false}, {UNIMOD_Andro_H2O, "UNIMOD:2025", "Andro-H2O", "Andrographolide with the loss of H2O.", false}, {UNIMOD_His_O_2_, "UNIMOD:2027", "His+O(2)", "Photo-induced histidine adduct.", false}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "UNIMOD:2028", "Hex(6)HexNAc(5)NeuAc(3)", "A3G3S3.", false}, {UNIMOD_Hex_7_HexNAc_6_, "UNIMOD:2029", "Hex(7)HexNAc(6)", "A4G4.", false}, {UNIMOD_Met_O_2_, "UNIMOD:2033", "Met+O(2)", "Photo-induced Methionine Adduct.", false}, {UNIMOD_Gly_O_2_, "UNIMOD:2034", "Gly+O(2)", "Photo-induced Glycine Adduct.", false}, {UNIMOD_Pro_O_2_, "UNIMOD:2035", "Pro+O(2)", "Photo-induced Proline adduct.", false}, {UNIMOD_Lys_O_2_, "UNIMOD:2036", "Lys+O(2)", "Photo-induced Lysine adduct.", false}, {UNIMOD_Glu_O_2_, "UNIMOD:2037", "Glu+O(2)", "Photo-induced Glutamate adduct.", false}, {UNIMOD_LTX_Lophotoxin, "UNIMOD:2039", "LTX+Lophotoxin", "Addition of lophotoxin to tyrosine.", false}, {UNIMOD_MBS_peptide, "UNIMOD:2040", "MBS+peptide", "MBS_233p24 plus peptide 1250p53.", false}, {UNIMOD_3_hydroxybenzyl_phosphate, "UNIMOD:2041", "3-hydroxybenzyl-phosphate", "3-hydroxybenzyl phosphate.", false}, {UNIMOD_phenyl_phosphate, "UNIMOD:2042", "phenyl-phosphate", "Phenyl phosphate.", false}, {UO_unit, "UO:0000000", "unit", "A unit of measurement is a standardized quantity of a physical quality.", false}, {UO_length_unit, "UO:0000001", "length unit", "A unit which is a standard measure of the distance between two points.", false}, {UO_mass_unit, "UO:0000002", "mass unit", "A unit which is a standard measure of the amount of matter/energy of a physical object.", false}, {UO_time_unit, "UO:0000003", "time unit", "A unit which is a standard measure of the dimension in which events occur in sequence.", false}, {UO_electric_current_unit, "UO:0000004", "electric current unit", "A unit which is a standard measure of the flow of electric charge.", false}, {UO_temperature_unit, "UO:0000005", "temperature unit", "A unit which is a standard measure of the average kinetic energy of the particles in a sample of matter.", false}, {UO_substance_unit, "UO:0000006", "substance unit", "A unit which is a standardised quantity of an element or compound with uniform composition.", false}, {UO_luminous_intensity_unit, "UO:0000007", "luminous intensity unit", "A unit which is a standard measure of the wavelength-weighted power emitted by a light source in a particular direction.", false}, {UO_meter, "UO:0000008", "meter", "A length unit which is equal to the length of the path traveled by light in vacuum during a time interval of 1/299 792 458 of a second.", false}, {UO_kilogram, "UO:0000009", "kilogram", "A mass unit which is equal to the mass of the International Prototype Kilogram kept by the BIPM at Svres, France.", false}, {UO_second, "UO:0000010", "second", "A time unit which is equal to the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the caesium 133 atom.", false}, {UO_ampere, "UO:0000011", "ampere", "An electric current unit which is equal to the constant current which, if maintained in two straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 m apart in vacuum, would produce between these conductors a force equal to 2 x 10^[-7] newton per meter of length.", false}, {UO_kelvin, "UO:0000012", "kelvin", "A thermodynamic temperature unit which is equal to the fraction 1/273.16 of the thermodynamic temperature of the triple point of water.", false}, {UO_mole, "UO:0000013", "mole", "A substance unit which is equal to the amount of substance of a molecular system which contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12.", false}, {UO_candela, "UO:0000014", "candela", "A luminous intensity unit which equal to the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540 x 1012 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian.", false}, {UO_centimeter, "UO:0000015", "centimeter", "A length unit which is equal to one hundredth of a meter or 10^[-2] m.", false}, {UO_millimeter, "UO:0000016", "millimeter", "A length unit which is equal to one thousandth of a meter or 10^[-3] m.", false}, {UO_micrometer, "UO:0000017", "micrometer", "A length unit which is equal to one millionth of a meter or 10^[-6] m.", false}, {UO_nanometer, "UO:0000018", "nanometer", "A length unit which is equal to one thousandth of one millionth of a meter or 10^[-9] m.", false}, {UO_angstrom, "UO:0000019", "angstrom", "A length unit which is equal to 10 [-10] m.", false}, {UO_picometer, "UO:0000020", "picometer", "A length unit which is equal to 10^[-12] m.", false}, {UO_gram, "UO:0000021", "gram", "A mass unit which is equal to one thousandth of a kilogram or 10^[-3] kg.", false}, {UO_milligram, "UO:0000022", "milligram", "A mass unit which is equal to one thousandth of a gram or 10^[-3] g.", false}, {UO_microgram, "UO:0000023", "microgram", "A mass unit which is equal to one millionth of a gram or 10^[-6] g.", false}, {UO_nanogram, "UO:0000024", "nanogram", "A mass unit which is equal to one thousandth of one millionth of a gram or 10^[-9] g.", false}, {UO_picogram, "UO:0000025", "picogram", "A mass unit which is equal to 10^[-12] g.", false}, {UO_femtogram, "UO:0000026", "femtogram", "A mass unit which is equal to 10^[-15] g.", false}, {UO_degree_Celsius, "UO:0000027", "degree Celsius", "A temperature unit which is equal to one kelvin degree. However, they have their zeros at different points. The centigrade scale has its zero at 273.15 K.", false}, {UO_millisecond, "UO:0000028", "millisecond", "A time unit which is equal to one thousandth of a second or 10^[-3] s.", false}, {UO_microsecond, "UO:0000029", "microsecond", "A time unit which is equal to one millionth of a second or 10^[-6] s.", false}, {UO_picosecond, "UO:0000030", "picosecond", "A time unit which is equal to 10^[-12] s.", false}, {UO_minute, "UO:0000031", "minute", "A time unit which is equal to 60 seconds.", false}, {UO_hour, "UO:0000032", "hour", "A time unit which is equal to 3600 seconds or 60 minutes.", false}, {UO_day, "UO:0000033", "day", "A time unit which is equal to 24 hours.", false}, {UO_week, "UO:0000034", "week", "A time unit which is equal to 7 days.", false}, {UO_month, "UO:0000035", "month", "A time unit which is approximately equal to the length of time of one of cycle of the moon's phases which in science is taken to be equal to 30 days.", false}, {UO_year, "UO:0000036", "year", "A time unit which is equal to 12 months which in science is taken to be equal to 365.25 days.", false}, {UO_milliampere, "UO:0000037", "milliampere", "An electric current unit current which is equal to one thousandth of an ampere or 10^[-3] A.", false}, {UO_microampere, "UO:0000038", "microampere", "An electric current unit current which is equal to one millionth of an ampere or 10^[-6] A.", false}, {UO_micromole_300000039, "UO:0000039", "micromole (UO:300000039)", "A substance unit equal to a millionth of a mol or 10^[-6] mol.", false}, {UO_millimole, "UO:0000040", "millimole", "A substance unit equal to a thousandth of a mol or 10^[-3] mol.", false}, {UO_nanomole, "UO:0000041", "nanomole", "A substance unit equal to one thousandth of one millionth of a mole or 10^[-9] mol.", false}, {UO_picomole, "UO:0000042", "picomole", "A substance unit equal to 10^[-12] mol.", false}, {UO_femtomole, "UO:0000043", "femtomole", "A substance unit equal to 10^[-15] mol.", false}, {UO_attomole, "UO:0000044", "attomole", "A substance unit equal to 10^[-18] mol.", false}, {UO_base_unit, "UO:0000045", "base unit", "A unit which is one of a particular measure to which all measures of that type can be related.", false}, {UO_prefix, "UO:0000046", "prefix", "", false}, {UO_area_unit, "UO:0000047", "area unit", "A unit which is a standard measure of the amount of a 2-dimensional flat surface.", false}, {UO_acceleration_unit, "UO:0000048", "acceleration unit", "A unit which is a standard measure of the rate of change of velocity in either speed or direction.", false}, {UO_angular_velocity_unit, "UO:0000049", "angular velocity unit", "A unit which is a standard measure of the rate of angular movement about an axis; the angle rotated in a given time.", false}, {UO_angular_acceleration_unit, "UO:0000050", "angular acceleration unit", "A unit which is a standard measure of the rate of change of angular velocity.", false}, {UO_concentration_unit, "UO:0000051", "concentration unit", "A unit which represents a standard measurement of how much of a given substance there is mixed with another substance.", false}, {UO_mass_density_unit, "UO:0000052", "mass density unit", "A density unit which is a standard measure of the mass of a substance in a given volume.", false}, {UO_luminance_unit, "UO:0000053", "luminance unit", "A unit which is a standard measure of the luminous intensity impinging on a given area.", false}, {UO_area_density_unit, "UO:0000054", "area density unit", "A density unit which is a standard measure of the mass exerting an influence on a given area.", false}, {UO_molar_mass_unit, "UO:0000055", "molar mass unit", "A unit which is a standard measure of the mass of a homogeneous substance containing 6.02 x 1023 atoms or molecules.", false}, {UO_molar_volume_unit, "UO:0000056", "molar volume unit", "A unit which is a standard measure of the volume of a homogeneous substance containing 6.02 x 1023 atoms or molecules.", false}, {UO_momentum_unit, "UO:0000057", "momentum unit", "A unit which is a standard measure of the quantity of motion measured by the product of mass and velocity.", false}, {UO_rotational_frequency_unit, "UO:0000058", "rotational frequency unit", "A unit which is a standard measure of the number of rotations in a given time.", false}, {UO_specific_volume_unit, "UO:0000059", "specific volume unit", "A unit which is a standard measure of the volume of a given mass of substance (the reciprocal of density).", false}, {UO_speed_velocity_unit, "UO:0000060", "speed/velocity unit", "A unit which is a standard measure of the rate of movement. Speed is measured in the same physical units of measurement as velocity, but does not contain the element of direction that velocity has. Speed is thus the magnitude component of velocity.", false}, {UO_unit_of_molarity, "UO:0000061", "unit of molarity", "A concentration unit which is a standard measure of the number of moles of a given substance per liter of solution.", false}, {UO_molar, "UO:0000062", "molar", "A unit of concentration which expresses a concentration of 1 mole of solute per liter of solution (mol/L).", false}, {UO_millimolar, "UO:0000063", "millimolar", "A unit of molarity which is equal to one thousandth of a molar or 10^[-3] M.", false}, {UO_micromolar, "UO:0000064", "micromolar", "A unit of molarity which is equal to one millionth of a molar or 10^[-6] M.", false}, {UO_nanomolar, "UO:0000065", "nanomolar", "A unit of molarity which is equal to one thousandth of one millionth of a molar or 10^[-9] M.", false}, {UO_picomolar, "UO:0000066", "picomolar", "A unit of molarity which is equal to 10^[-12] M.", false}, {UO_unit_of_molality, "UO:0000067", "unit of molality", "A concentration unit which is a standard measure of the number of moles of a given substance per kilogram of solvent.", false}, {UO_molal, "UO:0000068", "molal", "A unit of concentration which expresses a concentration of a solution of 1 mole per kilogram of solvent (mol/kg).", false}, {UO_millimolal, "UO:0000069", "millimolal", "A molality unit which is equal to one thousandth of a molal or 10^[-3] m.", false}, {UO_micromolal, "UO:0000070", "micromolal", "A molality unit which is equal to one millionth of a molal or 10^[-6] m.", false}, {UO_nanomolal, "UO:0000071", "nanomolal", "A molality unit which is equal to one thousandth of one millionth of a molal or 10^[-9] m.", false}, {UO_picomolal, "UO:0000072", "picomolal", "A molality unit which is equal to 10^[-12] m.", false}, {UO_femtomolar, "UO:0000073", "femtomolar", "A unit of molarity which is equal to 10^[-15] M.", false}, {UO_unit_of_normality, "UO:0000074", "unit of normality", "A unit of concentration which highlights the chemical nature of salts.", false}, {UO_normal, "UO:0000075", "normal", "A unit of concentration which is one gram equivalent of a solute per liter of solution. A gram equivalent weight or equivalent is a measure of the reactive capacity of a given molecule.", false}, {UO_mole_fraction, "UO:0000076", "mole fraction", "A concentration unit which denotes the number of moles of solute as a proportion of the total number of moles in a solution.", false}, {UO_meter_per_second_per_second, "UO:0000077", "meter per second per second", "An acceleration unit which is equal to the acceleration an object changing its velocity by 1meter/s over a time period that equals one second.", false}, {UO_radian_per_second_per_second, "UO:0000078", "radian per second per second", "An angular unit acceleration which is equal to the angular acceleration of an object changing its angular velocity by 1rad/s over a time period that equals one second.", false}, {UO_radian_per_second, "UO:0000079", "radian per second", "An angular unit velocity which is equal to about 9.54930 rpm (revolutions per minute).", false}, {UO_square_meter, "UO:0000080", "square meter", "An area unit which is equal to an area enclosed by a square with sides each 1 meter long.", false}, {UO_square_centimeter, "UO:0000081", "square centimeter", "An area unit which is equal to one ten thousandth of a square meter or 10^[-4] m^[2].", false}, {UO_square_millimeter, "UO:0000082", "square millimeter", "An area unit which is equal to one millionth of a square meter or 10^[-6] m^[2].", false}, {UO_kilogram_per_cubic_meter, "UO:0000083", "kilogram per cubic meter", "A mass unit density which is equal to mass of an object in kilograms divided by the volume in cubic meters.", false}, {UO_gram_per_cubic_centimeter, "UO:0000084", "gram per cubic centimeter", "A mass unit density which is equal to mass of an object in grams divided by the volume in cubic centimeters.", false}, {UO_candela_per_square_meter, "UO:0000085", "candela per square meter", "A luminance unit which is equal to a luminous intensity of one candela radiating from a surface whose area is one square meter.", false}, {UO_kilogram_per_square_meter, "UO:0000086", "kilogram per square meter", "An area density unit which is equal to the mass of an object in kilograms divided by the surface area in meters squared.", false}, {UO_kilogram_per_mole, "UO:0000087", "kilogram per mole", "A molar mass unit which is equal to one kilogram of mass of one mole of chemical element or chemical compound.", false}, {UO_gram_per_mole, "UO:0000088", "gram per mole", "A molar mass unit which is equal to one gram of mass of one mole of chemical element or chemical compound.", false}, {UO_cubic_meter_per_mole, "UO:0000089", "cubic meter per mole", "A molar volume unit which is equal to 1 cubic meter occupied by one mole of a substance in the form of a solid, liquid, or gas.", false}, {UO_cubic_centimeter_per_mole, "UO:0000090", "cubic centimeter per mole", "A molar volume unit which is equal to 1 cubic centimeter occupied by one mole of a substance in the form of a solid, liquid, or gas.", false}, {UO_kilogram_meter_per_second, "UO:0000091", "kilogram meter per second", "A momentum unit which is equal to the momentum of a one kilogram mass object with a speed of one meter per second.", false}, {UO_turns_per_second, "UO:0000092", "turns per second", "A rotational frequency unit which is equal to the number complete turn in a period of time that equals to 1 second.", false}, {UO_cubic_meter_per_kilogram, "UO:0000093", "cubic meter per kilogram", "A specific volume unit which is equal to one cubic meter volume occupied by one kilogram of a particular substance.", false}, {UO_meter_per_second, "UO:0000094", "meter per second", "A speed/velocity unit which is equal to the speed of an object traveling 1 meter distance in one second.", false}, {UO_volume_unit, "UO:0000095", "volume unit", "A unit which is a standard measure of the amount of space occupied by any substance, whether solid, liquid, or gas.", false}, {UO_cubic_meter, "UO:0000096", "cubic meter", "A volume unit which is equal to the volume of a cube with edges one meter in length. One cubic meter equals to 1000 liters.", false}, {UO_cubic_centimeter, "UO:0000097", "cubic centimeter", "A volume unit which is equal to one millionth of a cubic meter or 10^[-9] m^[3], or to 1 ml.", false}, {UO_milliliter, "UO:0000098", "milliliter", "A volume unit which is equal to one thousandth of a liter or 10^[-3] L, or to 1 cubic centimeter.", false}, {UO_liter, "UO:0000099", "liter", "A volume unit which is equal to one thousandth of a cubic meter or 10^[-3] m^[3], or to 1 decimeter.", false}, {UO_cubic_decimeter, "UO:0000100", "cubic decimeter", "A volume unit which is equal to one thousand of a cubic meter or 10^[-3] m^[3], or to 1 L.", false}, {UO_microliter, "UO:0000101", "microliter", "A volume unit which is equal to one millionth of a liter or 10^[-6] L.", false}, {UO_nanoliter, "UO:0000102", "nanoliter", "A volume unit which is equal to one thousandth of one millionth of a liter or 10^[-9] L.", false}, {UO_picoliter, "UO:0000103", "picoliter", "A volume unit which is equal to 10^[-12] L.", false}, {UO_femtoliter, "UO:0000104", "femtoliter", "A volume unit which is equal to 10^[-15] L.", false}, {UO_frequency_unit, "UO:0000105", "frequency unit", "A unit which is a standard measure of the number of repetitive actions in a particular time.", false}, {UO_hertz, "UO:0000106", "hertz", "A frequency unit which is equal to 1 complete cycle of a recurring phenomenon in 1 second.", false}, {UO_force_unit, "UO:0000107", "force unit", "A unit which is a standard measure of the force is applied when a mass is accelerated.", false}, {UO_newton, "UO:0000108", "newton", "A force unit which is equal to the force required to cause an acceleration of 1m/s2 of a mass of 1 Kg in the direction of the force.", false}, {UO_pressure_unit, "UO:0000109", "pressure unit", "A unit which is a standard measure of the force applied to a given area.", false}, {UO_pascal, "UO:0000110", "pascal", "A pressure unit which is equal to the pressure or stress on a surface caused by a force of 1 newton spread over a surface of 1 m^[2].", false}, {UO_energy_unit, "UO:0000111", "energy unit", "A unit which is a standard measure of the work done by a certain force (gravitational, electric, magnetic, force of inertia, etc).", false}, {UO_joule, "UO:0000112", "joule", "An energy unit which is equal to the energy required when a force of 1 newton moves an object 1 meter in the direction of the force.", false}, {UO_power_unit, "UO:0000113", "power unit", "A unit which is a standard measure power or the rate of doing work.", false}, {UO_watt, "UO:0000114", "watt", "A power unit which is equal to the power used when work is done at the rate of 1 joule per second.", false}, {UO_illuminance_unit, "UO:0000115", "illuminance unit", "A unit which is a standard measure of the luminous flux incident on a unit area.", false}, {UO_lux, "UO:0000116", "lux", "An illuminance unit which is equal to the illuminance produced by 1 lumen evenly spread over an area 1 m^[2].", false}, {UO_luminous_flux_unit, "UO:0000117", "luminous flux unit", "A unit which is a standard measure of the flow of radiant energy.", false}, {UO_lumen, "UO:0000118", "lumen", "A luminous flux unit which is equal to the luminous flux emitted into 1 steradian by a point source of 1 candela.", false}, {UO_catalytic_activity_unit, "UO:0000119", "catalytic activity unit", "A unit which is a standard measure of the amount of the action of a catalyst.", false}, {UO_katal, "UO:0000120", "katal", "A catalytic unit activity which is equal to the activity of a catalyst in moles per second, such as the amount of an enzyme needed to transform one mole of substrate per second.", false}, {UO_angle_unit, "UO:0000121", "angle unit", "A unit which is a standard measure of the figure or space formed by the junction of two lines or planes.", false}, {UO_plane_angle_unit, "UO:0000122", "plane angle unit", "A unit which is a standard measure of the angle formed by two straight lines in the same plane.", false}, {UO_radian, "UO:0000123", "radian", "A plane angle unit which is equal to the angle subtended at the center of a circle by an arc equal in length to the radius of the circle, approximately 57 degrees 17 minutes and 44.6 seconds.", false}, {UO_solid_angle_unit, "UO:0000124", "solid angle unit", "A unit which is a standard measure of the angle formed by three or more planes intersecting at a common point.", false}, {UO_steradian, "UO:0000125", "steradian", "A solid angle unit which is equal to the solid angle subtended at the center of a sphere by an area on the surface of the sphere that is equal to the radius squared.", false}, {UO_radiation_unit, "UO:0000127", "radiation unit", "A unit which is a standard measure of the amount of radiation emitted by a given radiation source as well as the amount of radiation absorbed or deposited in a specific material by a radiation source.", false}, {UO_activity__of_a_radionuclide__unit, "UO:0000128", "activity (of a radionuclide) unit", "A unit which is a standard measure of the transformation (disintegration) rate of a radioactive substance.", false}, {UO_absorbed_dose_unit, "UO:0000129", "absorbed dose unit", "A unit which is a standard measure of the energy imparted by ionizing radiation to unit mass of matter such as tissue.", false}, {UO_dose_equivalent_unit, "UO:0000130", "dose equivalent unit", "A unit which is a standard measure of the expression of dose in terms of its biological effect.", false}, {UO_exposure_unit, "UO:0000131", "exposure unit", "A unit which is a standard measure of the quantity that expresses the ability of radiation to ionize air and thereby create electric charges which can be collected and measured.", false}, {UO_becquerel, "UO:0000132", "becquerel", "An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per second or there is one atom disintegration per second (dps).", false}, {UO_curie, "UO:0000133", "curie", "An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which there are 3.7 x 10^[10] atom disintegration per second (dps).", false}, {UO_gray, "UO:0000134", "gray", "An absorbed dose unit which is equal to the absorption of one joule of radiation energy by one kilogram of matter.", false}, {UO_rad, "UO:0000135", "rad", "An absorbed dose unit which is equal to 0.01 gray (Gy).", false}, {UO_roentgen, "UO:0000136", "roentgen", "An exposure unit which is equal to the amount of radiation required to liberate positive and negative charges of one electrostatic unit of charge in 1 cm^[3] of air at standard temperature and pressure (STP). This corresponds to the generation of approximately 2.0810^[9] ion pairs.", false}, {UO_sievert, "UO:0000137", "sievert", "A dose equivalent unit which is equal to the absorption of one joule of radiation energy by one kilogram of matter.", false}, {UO_millisievert, "UO:0000138", "millisievert", "A dose equivalent unit which is equal to one thousandth of a sievert or 10^[-3] Sv.", false}, {UO_microsievert, "UO:0000139", "microsievert", "A dose equivalent unit which is equal to one millionth of a sievert or 10^[-6] Sv.", false}, {UO_Roentgen_equivalent_man, "UO:0000140", "Roentgen equivalent man", "A dose equivalent unit which when multiplied by hundred is equal to one sievert or 1 Sv. 1 Sv is equal to 100 rem.", false}, {UO_microgray, "UO:0000141", "microgray", "An absorbed dose unit which is equal to one millionth of a gray or 10^[-6] Gy.", false}, {UO_milligray, "UO:0000142", "milligray", "An absorbed dose unit which is equal to one thousandth of a gray or 10^[-3] Gy.", false}, {UO_nanogray, "UO:0000143", "nanogray", "An absorbed dose unit which is equal to one thousandth of a millionth of a gray or 10^[-9] Gy.", false}, {UO_nanosievert, "UO:0000144", "nanosievert", "A dose equivalent unit which is equal to one thousandth of a millionth of a sievert or 10^[-9] Sv.", false}, {UO_millicurie, "UO:0000145", "millicurie", "An activity (of a radionuclide) unit which is equal to one thousandth of a curie or 10^[-3] Ci.", false}, {UO_microcurie, "UO:0000146", "microcurie", "An activity (of a radionuclide) unit which is equal to one millionth of a curie or 10^[-6] Ci.", false}, {UO_disintegrations_per_minute, "UO:0000147", "disintegrations per minute", "An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per minute or there is one atom disintegration per minute.", false}, {UO_counts_per_minute, "UO:0000148", "counts per minute", "An activity (of a radionuclide) unit which is equal to the number of light emissions produced by ionizing radiation in one minute.", false}, {UO_nanosecond, "UO:0000150", "nanosecond", "A time unit which is equal to one thousandth of one millionth of a second or 10^[-9] s.", false}, {UO_century, "UO:0000151", "century", "A time unit which is equal to 100 years.", false}, {UO_half_life, "UO:0000152", "half life", "A time unit which represents the period over which the activity or concentration of a specified chemical or element falls to half its original activity or concentration.", false}, {UO_foot_candle, "UO:0000153", "foot candle", "An illuminance unit which is equal to the illuminance produced by 1 lumen evenly spread over an area 1 foot^[2]. One footcandle is equal to 10.76 lux.", false}, {UO_irradiance_unit, "UO:0000154", "irradiance unit", "A unit which is a standard measure of the power of electromagnetic radiation at a surface, per unit area.", false}, {UO_watt_per_square_meter, "UO:0000155", "watt per square meter", "An irradiance unit which is equal to 1 watt of radiant power incident per one square meter surface area.", false}, {UO_einstein_per_square_meter_per_second, "UO:0000156", "einstein per square meter per second", "An irradiance unit which is equal to one einstein per square meter per second. One einstein is one mole of photons, regardless of their frequency. Therefore, the number of photons in an einstein is Avogadro's number.", false}, {UO_light_unit, "UO:0000157", "light unit", "A unit which is a standard measure of the intensity of light.", false}, {UO_watt_per_steradian_per_square_meter, "UO:0000158", "watt per steradian per square meter", "A radiance unit which is equal to one watt of radiant power incident per steradian solid angle per one square meter projected area of the source, as viewed from the given direction.", false}, {UO_radiant_intensity_unit, "UO:0000159", "radiant intensity unit", "A unit which is a standard measure of the intensity of electromagnetic radiation.", false}, {UO_microeinstein_per_square_meter_per_second, "UO:0000160", "microeinstein per square meter per second", "An irradiance unit which is equal to one microeinstein per square meter per second or 10^[-6] microeinstein/sm^[2].", false}, {UO_radiance_unit, "UO:0000161", "radiance unit", "A unit which is a standard measure of the power of electromagnetic radiation through space or through a material medium in the form of electromagnetic waves.", false}, {UO_watt_per_steradian, "UO:0000162", "watt per steradian", "A radiant intensity unit which is equal to one kilogram meter squared per second cubed per steradian.", false}, {UO_mass_percentage, "UO:0000163", "mass percentage", "A dimensionless concentration unit which denotes the mass of a substance in a mixture as a percentage of the mass of the entire mixture.", false}, {UO_mass_volume_percentage, "UO:0000164", "mass volume percentage", "A dimensionless concentration unit which denotes the mass of the substance in a mixture as a percentage of the volume of the entire mixture.", false}, {UO_volume_percentage, "UO:0000165", "volume percentage", "A dimensionless concentration unit which denotes the volume of the solute in mL per 100 mL of the resulting solution.", false}, {UO_parts_per_notation_unit, "UO:0000166", "parts per notation unit", "A dimensionless concentration notation which describes the amount of one substance in another. It is the ratio of the amount of the substance of interest to the amount of that substance plus the amount of the substance.", false}, {UO_parts_per_hundred, "UO:0000167", "parts per hundred", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 100 regardless of the units of measure as long as they are the same.", false}, {UO_parts_per_thousand, "UO:0000168", "parts per thousand", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1000 regardless of the units of measure as long as they are the same.", false}, {UO_parts_per_million, "UO:0000169", "parts per million", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[6].", false}, {UO_parts_per_billion, "UO:0000170", "parts per billion", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000 regardless of the units of measure as long as they are the same or 1 part in 10^[9].", false}, {UO_parts_per_trillion, "UO:0000171", "parts per trillion", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[12].", false}, {UO_parts_per_quadrillion, "UO:0000172", "parts per quadrillion", "A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[15].", false}, {UO_gram_per_milliliter, "UO:0000173", "gram per milliliter", "A mass unit density which is equal to mass of an object in grams divided by the volume in milliliter.", false}, {UO_kilogram_per_liter, "UO:0000174", "kilogram per liter", "A mass unit density which is equal to mass of an object in kilograms divided by the volume in liters.", false}, {UO_gram_per_liter, "UO:0000175", "gram per liter", "A mass unit density which is equal to mass of an object in grams divided by the volume in liters.", false}, {UO_milligram_per_milliliter, "UO:0000176", "milligram per milliliter", "A mass unit density which is equal to mass of an object in milligrams divided by the volume in milliliters.", false}, {UO_unit_per_volume_unit, "UO:0000177", "unit per volume unit", "A concentration unit which is a standard measure of the number of units, as an agreed arbitrary amount, of a given substance per a specific volume of solution.", false}, {UO_unit_per_milliliter, "UO:0000178", "unit per milliliter", "A unit per milliliter unit which is equal to one unit of an agreed arbitrary amount per one milliliter.", false}, {UO_unit_per_liter, "UO:0000179", "unit per liter", "A unit per milliliter unit which is equal to one unit of an agreed arbitrary amount per one liter.", false}, {UO_mass_per_unit_volume, "UO:0000180", "mass per unit volume", "A concentration unit which is a standard measure of the mass of a substance in a given volume (density).", false}, {UO_enzyme_unit, "UO:0000181", "enzyme unit", "A catalytic unit activity which is equal to the amount of the enzyme that catalyzes the conversion of 1 micro mole of substrate per minute.", false}, {UO_density_unit, "UO:0000182", "density unit", "A unit which is a standard measure of the influence exerted by some mass.", false}, {UO_linear_density_unit, "UO:0000183", "linear density unit", "A density unit which is a standard measure of the mass exerting an influence on a one-dimensional object.", false}, {UO_kilogram_per_meter, "UO:0000184", "kilogram per meter", "An area density unit which is equal to the mass of an object in kilograms divided by one meter.", false}, {UO_degree, "UO:0000185", "degree", "A plane angle unit which is equal to 1/360 of a full rotation or 1.7453310^[-2] rad.", false}, {UO_dimensionless_unit, "UO:0000186", "dimensionless unit", "A unit which is a standard measure of physical quantity consisting of only a numerical number without any units.", false}, {UO_percent, "UO:0000187", "percent", "A dimensionless ratio unit which denotes numbers as fractions of 100.", false}, {UO_pi, "UO:0000188", "pi", "A dimensionless unit which denoted an irrational real number, approximately equal to 3.14159 which is the ratio of a circle's circumference to its diameter in Euclidean geometry.", false}, {UO_count_unit, "UO:0000189", "count unit", "A dimensionless unit which denotes a simple count of things.", false}, {UO_ratio_300000190, "UO:0000190", "ratio (UO:300000190)", "A dimensionless unit which denotes an amount or magnitude of one quantity relative to another.", false}, {UO_fraction, "UO:0000191", "fraction", "A dimensionless ratio unit which relates the part (the numerator) to the whole (the denominator).", false}, {UO_molecule_count, "UO:0000192", "molecule count", "A dimensionless count unit which denotes the number of molecules.", false}, {UO_purity_percentage, "UO:0000193", "purity percentage", "A dimensionless percent unit which denotes the homogeneity of a biomaterial.", false}, {UO_confluence_percentage, "UO:0000194", "confluence percentage", "A dimensionless percent unit which denotes the density of an attached or monolayer culture (e.g., cell culture).", false}, {UO_degree_Fahrenheit, "UO:0000195", "degree Fahrenheit", "A temperature unit which is equal to 5/9ths of a kelvin. Negative 40 degrees Fahrenheit is equal to negative 40 degrees Celsius.", false}, {UO_pH, "UO:0000196", "pH", "A dimensionless concentration notation which denotes the acidity of a solution in terms of activity of hydrogen ions (H+).", false}, {UO_liter_per_kilogram, "UO:0000197", "liter per kilogram", "A specific volume unit which is equal to one liter volume occupied by one kilogram of a particular substance.", false}, {UO_milliliter_per_kilogram, "UO:0000198", "milliliter per kilogram", "A specific volume unit which is equal to a thousandth of a liter per kilogram or 10^[-3] l/kg.", false}, {UO_microliter_per_kilogram, "UO:0000199", "microliter per kilogram", "A specific volume unit which is equal to one millionth of a liter per kilogram or 10^[-6] l/kg.", false}, {UO_cell_concentration_unit, "UO:0000200", "cell concentration unit", "A concentration unit which denotes the average cell number in a given volume.", false}, {UO_cells_per_milliliter, "UO:0000201", "cells per milliliter", "A unit of cell concentration which is equal to one cell in a volume of 1 milliliter.", false}, {UO_catalytic__activity__concentration_unit, "UO:0000202", "catalytic (activity) concentration unit", "A concentration unit which is a standard measure of the amount of the action of a catalyst in a given volume.", false}, {UO_katal_per_cubic_meter, "UO:0000203", "katal per cubic meter", "A catalytic (activity) concentration unit which is equal to 1 katal activity of a catalyst in a given volume of one cubic meter.", false}, {UO_katal_per_liter, "UO:0000204", "katal per liter", "A catalytic (activity) concentration unit which is equal to 1 katal activity of a catalyst in a given volume of one thousandth of a cubic meter.", false}, {UO_volume_per_unit_volume, "UO:0000205", "volume per unit volume", "A dimensionless concentration unit which denotes the given volume of the solute in the total volume of the resulting solution.", false}, {UO_milliliter_per_cubic_meter, "UO:0000206", "milliliter per cubic meter", "A volume per unit volume unit which is equal to one millionth of a liter of solute in one cubic meter of solution.", false}, {UO_milliliter_per_liter, "UO:0000207", "milliliter per liter", "A volume per unit volume unit which is equal to one millionth of a liter of solute in one liter of solution.", false}, {UO_gram_per_deciliter, "UO:0000208", "gram per deciliter", "A mass density unit which is equal to mass of an object in grams divided by the volume in deciliters.", false}, {UO_deciliter, "UO:0000209", "deciliter", "A volume unit which is equal to one tenth of a liter or 10^[-1] L.", false}, {UO_colony_forming_unit, "UO:0000210", "colony forming unit", "A dimensionless count unit which a measure of viable bacterial numbers.", false}, {UO_plaque_forming_unit, "UO:0000211", "plaque forming unit", "A dimensionless count unit which a measure of plague forming units in a given volume.", false}, {UO_colony_forming_unit_per_volume, "UO:0000212", "colony forming unit per volume", "A concentration unit which a measure of viable bacterial numbers in a given volume.", false}, {UO_colony_forming_unit_per_milliliter, "UO:0000213", "colony forming unit per milliliter", "A colony forming unit which a measure of viable bacterial numbers in one milliliter.", false}, {UO_plaque_forming_unit_per_volume, "UO:0000214", "plaque forming unit per volume", "A concentration unit which a measure of plague forming units in a given volume.", false}, {UO_plaque_forming_unit_per_milliliter, "UO:0000215", "plaque forming unit per milliliter", "A concentration unit which a measure of plague forming units in one milliliter.", false}, {UO_disintegrations_per_second, "UO:0000216", "disintegrations per second", "An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per second or there is one atom disintegration per second.", false}, {UO_electric_potential_difference_unit, "UO:0000217", "electric potential difference unit", "A unit which is a standard measure of the work done per unit charge as a charge is moved between two points in an electric field.", false}, {UO_volt, "UO:0000218", "volt", "An electric potential difference unit which is equal to the work per unit charge. One volt is the potential difference required to move one coulomb of charge between two points in a circuit while using one joule of energy.", false}, {UO_electric_charge, "UO:0000219", "electric charge", "A unit which is a standard measure of the quantity of unbalanced electricity in a body (either positive or negative) and construed as an excess or deficiency of electrons.", false}, {UO_coulomb, "UO:0000220", "coulomb", "An electrical charge unit which is equal to the amount of charge transferred by a current of 1 ampere in 1 second.", false}, {UO_dalton, "UO:0000221", "dalton", "An independently to the base SI units defined mass unit which is equal to one twelfth of the mass of an unbound atom of the carbon-12 nuclide, at rest and in its ground state.", false}, {UO_kilodalton, "UO:0000222", "kilodalton", "A mass unit which is equal to one thousand daltons.", false}, {UO_watt_hour, "UO:0000223", "watt-hour", "An energy unit which is equal to the amount of electrical energy equivalent to a one-watt load drawing power for one hour.", false}, {UO_kilowatt_hour, "UO:0000224", "kilowatt-hour", "An energy unit which is equal to 1,000 watt-hours.", false}, {UO_magnetic_flux_unit, "UO:0000225", "magnetic flux unit", "A unit which is a standard measure of quantity of magnetism, taking account of the strength and the extent of a magnetic field.", false}, {UO_weber, "UO:0000226", "weber", "A magnetic flux unit which is equal to the amount of flux that when linked with a single turn of wire for an interval of one second will induce an electromotive force of one volt.", false}, {UO_magnetic_flux_density_unit, "UO:0000227", "magnetic flux density unit", "A unit which is a standard measure of the strength of a magnetic field.", false}, {UO_tesla, "UO:0000228", "tesla", "A magnetic flux density unit which is equal to one weber per square meter.", false}, {UO_volt_hour, "UO:0000229", "volt-hour", "A magnetic flux unit which is equal to 3600 Wb.", false}, {UO_kilovolt_hour, "UO:0000230", "kilovolt-hour", "A magnetic flux unit which is equal to one thousand volt-hours.", false}, {UO_information_unit, "UO:0000231", "information unit", "A unit which is a standard measure of the amount of information.", false}, {UO_bit, "UO:0000232", "bit", "An information unit which refers to a digit in the binary numeral system, which consists of base 2 digits (ie there are only 2 possible values: 0 or 1).", false}, {UO_byte, "UO:0000233", "byte", "An information unit which is equal to 8 bits.", false}, {UO_kilobyte, "UO:0000234", "kilobyte", "An information unit which is equal to 1000 bytes.", false}, {UO_megabyte, "UO:0000235", "megabyte", "An information unit which is equal to 1000 kB.", false}, {UO_image_resolution_unit, "UO:0000236", "image resolution unit", "An information unit which is a standard measure of the detail an image holds.", false}, {UO_chroma_sampling_unit, "UO:0000237", "chroma sampling unit", "An image resolution unit which is a standard measure of the amount of spatial detail in an image.", false}, {UO_dynamic_range_unit, "UO:0000238", "dynamic range unit", "An image resolution unit which is a standard measure of the amount of contrast available in a pixel.", false}, {UO_spatial_resolution_unit, "UO:0000239", "spatial resolution unit", "An image resolution unit which is a standard measure of the way luminance and chrominance may be sampled at different levels.", false}, {UO_dots_per_inch, "UO:0000240", "dots per inch", "A spatial resolution unit which is a standard measure of the printing resolution, in particular the number of individual dots of ink a printer or toner can produce within a linear one-inch space.", false}, {UO_micron_pixel, "UO:0000241", "micron pixel", "A spatial resolution unit which is equal to a pixel size of one micrometer.", false}, {UO_pixels_per_inch, "UO:0000242", "pixels per inch", "A spatial resolution unit which is a standard measure of the resolution of a computer display, related to the size of the display in inches and the total number of pixels in the horizontal and vertical directions.", false}, {UO_pixels_per_millimeter, "UO:0000243", "pixels per millimeter", "A spatial resolution unit which is a standard measure of the number of pixels in one millimeter length or width of a digital image divided by the physical length or width of a printed image.", false}, {UO_base_pair, "UO:0000244", "base pair", "A count unit which contains one nucleotide.", false}, {UO_kibibyte, "UO:0000245", "kibibyte", "An information unit which is equal to 1024 B.", false}, {UO_mebibyte, "UO:0000246", "mebibyte", "An information unit which is equal to 1024 KiB.", false}, {UO_millivolt, "UO:0000247", "millivolt", "An electric potential difference unit which is equal to one thousandth of a volt or 10^[-3] V.", false}, {UO_kilovolt, "UO:0000248", "kilovolt", "An electric potential difference unit which is equal to one thousand volts or 10^[3] V.", false}, {UO_microvolt, "UO:0000249", "microvolt", "An electric potential difference unit which is equal to one millionth of a volt or 10^[-6] V.", false}, {UO_nanovolt, "UO:0000250", "nanovolt", "An electric potential difference unit which is equal to one billionth of a volt or 10^[-12] V.", false}, {UO_picovolt, "UO:0000251", "picovolt", "An electric potential difference unit which is equal to one trillionth of a volt or 10^[-12] V.", false}, {UO_megavolt, "UO:0000252", "megavolt", "An electric potential difference unit which is equal to one million volts or 10^[6] V.", false}, {UO_surface_tension_unit, "UO:0000253", "surface tension unit", "A unit which is a standard measure of the ability of a liguid to attraction of molecules at its surface as a result of unbalanced molecular cohesive forces.", false}, {UO_newton_per_meter, "UO:0000254", "newton per meter", "A surface tension unit which is equal to one newton per meter.", false}, {UO_dyne_per_cm, "UO:0000255", "dyne per cm", "A surface tension unit which is equal to one dyne per centimeter.", false}, {UO_viscosity_unit, "UO:0000256", "viscosity unit", "A unit which is a standard measure of the internal resistance of fluids to flow.", false}, {UO_pascal_second, "UO:0000257", "pascal second", "A viscosity unit which is equal to one pascale per second.", false}, {UO_poise, "UO:0000258", "poise", "A viscosity unit which is equal to one dyne second per square centimeter.", false}, {UO_decibel, "UO:0000259", "decibel", "A ratio unit which is an indicator of sound power per unit area.", false}, {UO_effective_dose_unit, "UO:0000260", "effective dose unit", "A unit which is a standard measure of the estimate of the stochastic effect that a non-uniform radiation dose has on a human.", false}, {UO_conduction_unit, "UO:0000261", "conduction unit", "A unit which represents a standard measurement of the transmission of an entity through a medium.", false}, {UO_electrical_conduction_unit, "UO:0000262", "electrical conduction unit", "A unit which represents a standard measurement of the movement of electrically charged particles through a transmission medium (electrical conductor).", false}, {UO_heat_conduction_unit, "UO:0000263", "heat conduction unit", "A unit which represents a standard measurement of the spontaneous transfer of thermal energy through matter, from a region of higher temperature to a region of lower temperature.", false}, {UO_siemens, "UO:0000264", "siemens", "An electrical conduction unit which is equal to A/V.", false}, {UO_watt_per_meter_kelvin, "UO:0000265", "watt per meter kelvin", "An heat conduction unit which is equal to one watt divided by meter kelvin.", false}, {UO_electronvolt, "UO:0000266", "electronvolt", "A non-SI unit of energy (eV) defined as the energy acquired by a single unbound electron when it passes through an electrostatic potential difference of one volt. An electronvolt is equal to 1.602 176 53(14) x 10^-19 J.", false}, {UO_electric_field_strength_unit, "UO:0000267", "electric field strength unit", "The electric field strength is a unit which is a measure of the potential difference between two points some distance apart.", false}, {UO_volt_per_meter, "UO:0000268", "volt per meter", "The volt per meter is a unit of electric field strength equal to the a potential difference of 1 volt existing between two points that are 1 meter apart.", false}, {UO_absorbance_unit, "UO:0000269", "absorbance unit", "A dimensionless logarithmic unit assigned to a measure of absorbance of light through a partially absorbing substance, defined as -log10(I/I_0) where I = transmitted light and I_0 = incident light.", false}, {UO_volumetric_flow_rate_unit, "UO:0000270", "volumetric flow rate unit", "A unit which is a standard measure of the volume of fluid which passes through a given surface per unit time .", false}, {UO_microliters_per_minute, "UO:0000271", "microliters per minute", "A volumetric flow rate unit which is equal to one microliter volume through a given surface in one minute.", false}, {UO_millimetres_of_mercury, "UO:0000272", "millimetres of mercury", "A unit of pressure equal to the amount of fluid pressure one millimeter deep in mercury at zero degrees centigrade on Earth.", false}, {UO_milligram_per_liter, "UO:0000273", "milligram per liter", "A mass unit density which is equal to mass of an object in milligrams divided by the volume in liters.", false}, {UO_microgram_per_milliliter, "UO:0000274", "microgram per milliliter", "A mass unit density which is equal to mass of an object in micrograms divided by the volume in millliters.", false}, {UO_nanogram_per_milliliter, "UO:0000275", "nanogram per milliliter", "A mass unit density which is equal to mass of an object in nanograms divided by the volume in milliliters.", false}, {UO_amount_per_container, "UO:0000276", "amount per container", "A concentration unit which is a standard measure of the amount of a substance in a given container.", false}, {UO_ug_disk, "UO:0000277", "ug/disk", "A unit which is equal to one microgram per disk, where a disk is some physical surface/container upon which the substance is deposited.", false}, {UO_nmole_disk, "UO:0000278", "nmole/disk", "A unit which is equal to one nanomole per disk, where a disk is some physical surface/container upon which the substance is deposited.", false}, {UO_milliunits_per_milliliter, "UO:0000279", "milliunits per milliliter", "A unit per milliliter unit which is equal to one thousandth of a unit of an agreed arbitrary amount per one milliliter.", false}, {UO_rate_unit, "UO:0000280", "rate unit", "A unit which represents a standard measurement occurrence of a process per unit time.", false}, {UO_count_per_nanomolar_second, "UO:0000281", "count per nanomolar second", "A rate unit which is equal to one over one nanomolar second.", false}, {UO_count_per_molar_second, "UO:0000282", "count per molar second", "A rate unit which is equal to one over one molar second.", false}, {UO_kilogram_per_hectare, "UO:0000283", "kilogram per hectare", "An area density unit which is equal to the mass of an object in kilograms divided by the surface area in hectares.", false}, {UO_count_per_nanomolar, "UO:0000284", "count per nanomolar", "A rate unit which is equal to one over one nanomolar.", false}, {UO_count_per_molar, "UO:0000285", "count per molar", "A rate unit which is equal to one over one molar.", false}, {UO_yotta, "UO:0000286", "yotta", "A prefix in the metric system denoting a factor of ten to the power of 24.", false}, {UO_hecto, "UO:0000287", "hecto", "A prefix in the metric system denoting a factor of one hundred.", false}, {UO_zetta, "UO:0000288", "zetta", "A prefix in the metric system denoting a factor of ten to the power of 21.", false}, {UO_exa, "UO:0000289", "exa", "A prefix in the metric system denoting a factor of ten to the power of 18.", false}, {UO_peta, "UO:0000290", "peta", "A prefix in the metric system denoting a factor of ten to the power of 15.", false}, {UO_tera, "UO:0000291", "tera", "A prefix in the metric system denoting a factor of ten to the power of 12.", false}, {UO_giga, "UO:0000292", "giga", "A prefix in the metric system denoting a factor of ten to the power of 9.", false}, {UO_mega, "UO:0000293", "mega", "A prefix in the metric system denoting a factor of million.", false}, {UO_kilo, "UO:0000294", "kilo", "A prefix in the metric system denoting a factor of one thousand.", false}, {UO_deca, "UO:0000295", "deca", "A prefix in the metric system denoting a factor of ten.", false}, {UO_deci, "UO:0000296", "deci", "A prefix in the metric system denoting a factor of one tenth.", false}, {UO_milli_300000297, "UO:0000297", "milli (UO:300000297)", "A prefix in the metric system denoting a factor of one thousand.", false}, {UO_centi, "UO:0000298", "centi", "A prefix in the metric system denoting a factor of one hundred.", false}, {UO_micro, "UO:0000299", "micro", "A prefix in the metric system denoting a factor of 10 to the power of -6.", false}, {UO_nano, "UO:0000300", "nano", "A prefix in the metric system denoting a factor of 10 to the power of -9.", false}, {UO_microgram_per_liter, "UO:0000301", "microgram per liter", "A mass unit density which is equal to mass of an object in micrograms divided by the volume in liters.", false}, {UO_pico, "UO:0000302", "pico", "A prefix in the metric system denoting a factor of 10 to the power of -12.", false}, {UO_femto, "UO:0000303", "femto", "A prefix in the metric system denoting a factor of 10 to the power of -15.", false}, {UO_atto, "UO:0000304", "atto", "A prefix in the metric system denoting a factor of 10 to the power of -18.", false}, {UO_zepto, "UO:0000305", "zepto", "A prefix in the metric system denoting a factor of 10 to the power of -21.", false}, {UO_yocto, "UO:0000306", "yocto", "A prefix in the metric system denoting a factor of 10 to the power of -24.", false}, {UO_dose_unit, "UO:0000307", "dose unit", "A concentration unit which is a standard measure of the amount of a toxic or pharmaceutical substance administered to a recipient subject, expressed in terms of the size of the subject.", false}, {UO_milligram_per_kilogram, "UO:0000308", "milligram per kilogram", "A dose unit which is equal to 1 milligram of a toxic or pharmaceutical substance per kilogram body weight of the recipient subject.", false}, {UO_milligram_per_square_meter, "UO:0000309", "milligram per square meter", "A dose unit which is equal to 1 milligram of a toxic or pharmaceutical substance per square meter of surface area of the recipient subject.", false}, {UO_dosage_unit, "UO:0000310", "dosage unit", "A concentration unit which is a standard measure of the amount of a toxic or pharmaceutical substance administered over time to a recipient subject, expressed in terms of the size of the subject.", false}, {UO_milligram_per_kilogram_per_day, "UO:0000311", "milligram per kilogram per day", "A dosage unit which is equal to 1 milligram per day of a toxic or pharmaceutical substance per kilogram body weight of the recipient subject.", false}, {UO_relative_light_unit, "UO:0000312", "relative light unit", "A derived unit which is a measure of relative light intensity, as typically measured by a luminometer, spectrophotometer, or fluorimeter in biological research applications.", false}, {UO_relative_luminescence_unit, "UO:0000313", "relative luminescence unit", "A relative light unit which is a measure of relative luminescence intensity.", false}, {UO_relative_fluorescence_unit, "UO:0000314", "relative fluorescence unit", "A relative light unit which is a measure of relative fluorescence intensity.", false}, {UO_turbidity_unit, "UO:0000315", "turbidity unit", "A unit used to indicate the clarity of water or other solutions or suspensions, as measured by the ability of the solution or suspension to scatter light of a defined wavelength range.", false}, {UO_cells_per_microliter, "UO:0000316", "cells per microliter", "A unit of cell concentration which is equal to one cell in a volume of 1 microliter.", false}, {UO_cells_per_well, "UO:0000317", "cells per well", "A unit of cell concentration which is equal to 1 cell in a well or discrete container of arbitrary volume.", false}, {UO_formazin_nephelometric_unit, "UO:0000318", "formazin nephelometric unit", "1000 formazin turbidity units (FNU) on the empirical formazin turbidity scale represents reflectance of insol. reaction products of 0.0725 g hydrazine sulfate with 0.7250 g hexamethylenetetramine diluted to 1 L.", false}, {UO_radioactivity_concentration, "UO:0000319", "radioactivity concentration", "A concentration unit which is a standard measure of the amount of radioactivity in a given volume.", false}, {UO_curie_per_liter, "UO:0000320", "curie per liter", "A unit of radioactivity concentration which is equal to one curie in a volume of 1 liter.", false}, {UO_microcurie_per_milliliter, "UO:0000321", "microcurie per milliliter", "A unit of radioactivity concentration which is equal to one micro curie in a volume of 1 liter.", false}, {UO_fold_dilution, "UO:0000322", "fold dilution", "A unit that is the ratio of concentration of two solutions of interest, typically with one solution derived from the other by the addition of solvent.", false}, {UO_ton_per_hectare, "UO:0000323", "ton per hectare", "An area density unit which is equal to the mass of an object in tons divided by the surface area in hectares.", false}, {UO_square_angstrom, "UO:0000324", "square angstrom", "An area unit which is equal to an area enclosed by a square with sides each 1 angstrom long.", false}, {UO_megaHertz, "UO:0000325", "megaHertz", "A frequency unit which is equal to one million hertz or 10^[6] V.", false}, {UO_centiMorgan, "UO:0000326", "centiMorgan", "A unit used to express distances on a genetic map. In genetic mapping, distances between markers are determined by measuring the rate of meoitic recombination between them, which increases proportionately with the distance separating them. A cM is defined as the length of an interval in which there is a 1% probability of recombination. On the average, 1 cM is roughly equivalent to 1 megabase (Mb) of DNA, although this can vary widely due to hot and cold spots of recombination.", false}, {UO_centiRay, "UO:0000327", "centiRay", "A unit of genetic map distance defined corresponding to an interval in which there is a 1% probability of X-irradiation induced breakage. To be completely specified, the unit must be qualified by the radiation in dosage in rads (e.g. cR8000), because this determines the actual breakage probability.", false}, {UO_kilo_base_pair, "UO:0000328", "kilo base pair", "A unit equal to one thousand base pairs.", false}, {UO_mega_base_pair, "UO:0000329", "mega base pair", "A unit equal to one million base pairs", false}, {UO_giga_base_pair, "UO:0000330", "giga base pair", "A unit equal to one billion base pairs.", false}, {UO_gigabyte, "UO:0000331", "gigabyte", "An information unit which is equal to 1000000000 bytes.", false}, {UO_terabyte, "UO:0000332", "terabyte", "An information unit which is equal to 1000 gigabytes.", false}, {UO_square_micrometer, "UO:0010001", "square micrometer", "An area unit which is equal to an area enclosed by a square with sides each 1 micrometer long.", false}, {UO_millisiemens, "UO:0010002", "millisiemens", "An electrical conduction unit which is equal to one thousandth of a siemen or 10^[-3] siemens.", false}, {UO_micromole_per_litre, "UO:0010003", "micromole per litre", "A specific concentration unit which is equal to 1 micromole in a given volume of one thousandth of a cubic meter.", false}, {UO_micromole_per_kilogram, "UO:0010004", "micromole per kilogram", "A specific concentration unit which is equal to 1 micromole of a given substance per kilogram of solvent.", false}, {UO_millimeters_per_day, "UO:0010005", "millimeters per day", "A speed/velocity unit which is equal to the speed of an object traveling 1 millimeter distance in one day.", false}, {UO_ratio_300010006, "UO:0010006", "ratio (UO:300010006)", "A dimensionless ratio unit which, given a pair of quantities a and b, for which b is a multiple of a, denotes b by giving the multiplier (coefficient) c for a to result in b.", false}, {UO_volt_second_per_square_centimeter, "UO:0010007", "volt-second per square centimeter", "An electrical mobility unit which is equal to one volt second per square centimeter.", false}, {UO_kilometer_per_hour, "UO:0010008", "kilometer per hour", "A speed/velocity unit which is equal to the speed of an object traveling 1 kilometer distance in one hour.", false}, {UO_milli_300010009, "UO:0010009", "milli (UO:300010009)", "A mass unit which is equal to 1/12 the mass of 12C", false}, {UO_hectare, "UO:0010010", "hectare", "An area unit which is equal to an area of 10,000 square meters. Equivalent to 2.471 acres.", false}, {UO_inch, "UO:0010011", "inch", "A length unit which is equal to 0.0254 metres.", false}, {UO_thou, "UO:0010012", "thou", "A length unit which is equal to 0.0254 millimetres.", false}, {UO_foot, "UO:0010013", "foot", "A length unit which is equal to 0.3048 metres, or 12 inches.", false}, {UO_yard, "UO:0010014", "yard", "A length unit which is equal to 0.9144 metres, or 3 feet.", false}, {UO_chain, "UO:0010015", "chain", "A length unit which is equal to 20.1168 metres, 66 feet, or 22 yards.", false}, {UO_furlong, "UO:0010016", "furlong", "A length unit which is equal to 20,116.8 metres, 660 feet, or 10 chains.", false}, {UO_mile, "UO:0010017", "mile", "A length unit which is equal to 1,609.344 metres, or 8 furlongs.", false}, {UO_league, "UO:0010018", "league", "A length unit which is equal to 3 miles, or 4,828.032 metres", false}, {UO_maritime_length_unit, "UO:0010019", "maritime length unit", "A maritime length unit is one used primarily at sea.", false}, {UO_fathom, "UO:0010020", "fathom", "A maritime length unit which is equal to 6.08 feet, or 1.853184 metres", false}, {UO_cable, "UO:0010021", "cable", "A maritime length unit which is equal to 608 feet, 100 fathoms, or 185.3184 metres", false}, {UO_nautical_mile, "UO:0010022", "nautical mile", "A maritime length unit which is equal to 6,080 feet, 10 cables, or 1,853.184 metres", false}, {UO_perch, "UO:0010023", "perch", "An area unit which is equal to an area of 25.292,852,64 square meters, or 1 square rod.", false}, {UO_rood, "UO:0010024", "rood", "An area unit which is equivalent to 1 furlong x 1 rod. This is equal to an area of 1,011.714,1056 square meters, or 40 square rods.", false}, {UO_acre, "UO:0010025", "acre", "An area unit which is equivalent to 1 furlong x 1 chain. This is equal to an area of 4,046.856,4224 square meters, or 43,500 square feet.", false}, {UO_fluid_ounce, "UO:0010026", "fluid ounce", "An imperial volume unit which is equivalent to 28.413,0625 millilitres.", false}, {UO_gill, "UO:0010027", "gill", "An imperial volume unit which is equivalent to 142.065,3125 millilitres.", false}, {UO_pint, "UO:0010028", "pint", "An imperial volume unit which is equivalent to 568.261,25 millilitres.", false}, {UO_quart, "UO:0010029", "quart", "An imperial volume unit which is equivalent to 1,136.5225 millilitres, or two pints.", false}, {UO_gallon, "UO:0010030", "gallon", "An imperial volume unit which is equivalent to 4,546.09 millilitres, or 8 pints.", false}, {UO_grain, "UO:0010031", "grain", "An imperial mass unit which is equivalent to 64.798,91 milligrams.", false}, {UO_drachm, "UO:0010032", "drachm", "An imperial mass unit which is equivalent to 1.771,845,195,3125 grams, or 1/256 of 1 pound.", false}, {UO_ounce, "UO:0010033", "ounce", "An imperial mass unit which is equivalent to 28.349,523,125 grams, or 1/16 of 1 pound.", false}, {UO_pound, "UO:0010034", "pound", "An imperial mass unit which is equivalent to 453.592,37 grams.", false}, {UO_stone, "UO:0010035", "stone", "An imperial mass unit which is equivalent to 6,350.293,18 grams, or 14 pounds.", false}, {UO_quarter, "UO:0010036", "quarter", "An imperial mass unit which is equivalent to 12.700,586,36 kilograms, or 28 pounds.", false}, {UO_hundredweight, "UO:0010037", "hundredweight", "An imperial mass unit which is equivalent to 50.802,345,44 kilograms, 112 pounds, or 8 stone.", false}, {UO_ton, "UO:0010038", "ton", "An imperial mass unit which is equivalent to 1,016.046,9088 kilograms, or 2,240 pounds.", false}, {UO_slug, "UO:0010039", "slug", "An imperial gravitational unit which is equivalent to a mass that accelerates by 1ft/s² when a force of one pound (lbf) is exerted on it.", false}, {UO_teaspoon, "UO:0010040", "teaspoon", "A metric teaspoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 5mL volume.", false}, {UO_united_states_customary_teaspoon, "UO:0010041", "united states customary teaspoon", "A United States customary units teaspoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 4.93 mL volume.", false}, {UO_tablespoon, "UO:0010042", "tablespoon", "A metric tablespoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 15mL volume.", false}, {UO_australian_metric_tablespoon, "UO:0010043", "australian metric tablespoon", "An Australian metric tablespoon is a unit of measurement of volume used in Australia for cooking recipes and pharmaceutic prescriptions. It equals a 20mL volume.", false}, {UO_united_states_customary_tablespoon, "UO:0010044", "united states customary tablespoon", "A United States customary units tablespoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 14.79 mL volume.", false}, {UO_metric_cup, "UO:0010045", "metric cup", "A metric cup is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 250mL volume.", false}, {UO_united_states_customary_cup, "UO:0010046", "united states customary cup", "A United States customary units cup is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 236.59 mL volume.", false}, {UO_united_states_fda_cup, "UO:0010047", "united states fda cup", "A United States FDA cup is a unit of measurement of volume used by the US Federal Department of Agriculture as a nutritional serving measure. It equals a 240 mL volume.", false}, {UO_micromole_300010048, "UO:0010048", "micromole (UO:300010048)", "A substance unit which is equal to one millionth of a mole.", false}, {UO_gram_per_square_meter, "UO:0010049", "gram per square meter", "An area density unit which is equal to the mass of an object in grams divided by the surface area in meters squared.", false}, {UO_nanogram_per_microliter, "UO:0010050", "nanogram per microliter", "A mass unit density which is equal to mass of an object in nanograms divided by the volume in microliters.", false}, {UO_large_calorie, "UO:0010051", "large calorie", "A unit of energy widely used in nutrition, equivalent to the amount of heat needed to cause one kilogram of water to rise in temperature by one degree Celsius.", false}, {UO_pounds_per_square_inch, "UO:0010052", "pounds per square inch", "A pressure unit which is equal to 6894.757 pascal.", false}, {UO_micrograms_per_wheaton_bottle, "UO:0010053", "micrograms per wheaton bottle", "A unit of mass concentration defined as the number of micrograms of a substance per 250 ml Wheaton bottle.", false}, {UO_picoampere, "UO:0010054", "picoampere", "An electric current unit current which is equal to one trillionth of an ampere or 10^[-12] A.", false}, {UO_centigray, "UO:0010055", "centigray", "An absorbed dose unit which is equal to 0.01 gray (Gy)", false}, {UO_gigaelectronvolt, "UO:0010056", "gigaelectronvolt", "A unit of energy that is equal to one thousand million electronvolts.", false}, {UO_gigaelectronvolt_per_nucleon, "UO:0010057", "gigaelectronvolt per nucleon", "Derived unit which is equal to the total kinetic energy of an atomic nucleus in GeV divided by the number of nucleons in the nucleus", false}, {UO_megaelectronvolt_per_nucleon, "UO:0010058", "megaelectronvolt per nucleon", "Derived unit which is equal to the total kinetic energy of an atomic nucleus in MeV divided by the number of nucleons in the nucleus", false}, {UO_kiloelectronvolt_per_micron, "UO:0010059", "kiloelectronvolt per micron", "A derived unit equal to the energy deposited by ionizing radiation per micron of path length in matter", false}, {UO_gray_per_minute, "UO:0010060", "gray per minute", "A derived absorbed dose unit which is equal to one gray absorbed per minute.", false}, {UO_centigray_per_minute, "UO:0010061", "centigray per minute", "A derived absorbed dose unit which is equal to one centigray absorbed per minute.", false}, {UO_milligray_per_minute, "UO:0010062", "milligray per minute", "A derived absorbed dose unit which is equal to one milligray absorbed per minute.", false}, {UO_milligray_per_day, "UO:0010063", "milligray per day", "A derived absorbed dose unit which is equal to one milligray absorbed per day.", false}, }; // termInfos_ const size_t termInfosSize_ = sizeof(termInfos_)/sizeof(TermInfo); struct CVIDPair { CVID first; CVID second; }; CVIDPair relationsIsA_[] = { {PEFF_PEFF_file_header_section_term, PEFF_PEFF_CV_term}, {PEFF_PEFF_file_sequence_entry_term, PEFF_PEFF_CV_term}, {PEFF_DbName, PEFF_PEFF_file_header_section_term}, {PEFF_Prefix, PEFF_PEFF_file_header_section_term}, {PEFF_DbDescription, PEFF_PEFF_file_header_section_term}, {PEFF_Decoy, PEFF_PEFF_file_header_section_term}, {PEFF_DbSource, PEFF_PEFF_file_header_section_term}, {PEFF_DbVersion, PEFF_PEFF_file_header_section_term}, {PEFF_DbDate_OBSOLETE, PEFF_PEFF_file_header_section_term}, {PEFF_NumberOfEntries, PEFF_PEFF_file_header_section_term}, {PEFF_Conversion, PEFF_PEFF_file_header_section_term}, {PEFF_SequenceType, PEFF_PEFF_file_header_section_term}, {PEFF_SpecificKey, PEFF_PEFF_file_header_section_term}, {PEFF_SpecificValue, PEFF_PEFF_file_header_section_term}, {PEFF_DatabaseDescription, PEFF_PEFF_file_header_section_term}, {PEFF_GeneralComment, PEFF_PEFF_file_header_section_term}, {PEFF_ProteoformDb, PEFF_PEFF_file_header_section_term}, {PEFF_OptionalTagDef, PEFF_PEFF_file_header_section_term}, {PEFF_HasAnnotationIdentifiers, PEFF_PEFF_file_header_section_term}, {PEFF_DbUniqueId_OBSOLETE, PEFF_PEFF_file_sequence_entry_term}, {PEFF_PName, PEFF_PEFF_file_sequence_entry_term}, {PEFF_NcbiTaxId, PEFF_PEFF_file_sequence_entry_term}, {PEFF_TaxName, PEFF_PEFF_file_sequence_entry_term}, {PEFF_GName, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Length, PEFF_PEFF_file_sequence_entry_term}, {PEFF_SV, PEFF_PEFF_file_sequence_entry_term}, {PEFF_EV, PEFF_PEFF_file_sequence_entry_term}, {PEFF_PE, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Processed, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Variant_OBSOLETE, PEFF_PEFF_file_sequence_entry_term}, {PEFF_ModResPsi, PEFF_PEFF_file_sequence_entry_term}, {PEFF_ModRes, PEFF_PEFF_file_sequence_entry_term}, {PEFF_AltAC, PEFF_PEFF_file_sequence_entry_term}, {PEFF_SeqStatus, PEFF_PEFF_file_sequence_entry_term}, {PEFF_CC, PEFF_PEFF_file_sequence_entry_term}, {PEFF_KW, PEFF_PEFF_file_sequence_entry_term}, {PEFF_GO, PEFF_PEFF_file_sequence_entry_term}, {PEFF_XRef, PEFF_PEFF_file_sequence_entry_term}, {PEFF_mature_protein, PEFF_PEFF_molecule_processing_keyword}, {PEFF_signal_peptide, PEFF_PEFF_molecule_processing_keyword}, {PEFF_transit_peptide, PEFF_PEFF_molecule_processing_keyword}, {PEFF_Conflict, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Crc64, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Domain, PEFF_PEFF_file_sequence_entry_term}, {PEFF_ID, PEFF_PEFF_file_sequence_entry_term}, {PEFF_ModResUnimod, PEFF_PEFF_file_sequence_entry_term}, {PEFF_VariantSimple, PEFF_PEFF_file_sequence_entry_term}, {PEFF_VariantComplex, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Proteoform, PEFF_PEFF_file_sequence_entry_term}, {PEFF_DisulfideBond, PEFF_PEFF_file_sequence_entry_term}, {PEFF_PEFF_molecule_processing_keyword, PEFF_PEFF_file_sequence_entry_term}, {PEFF_Comment, PEFF_PEFF_file_sequence_entry_term}, {PEFF_propeptide, PEFF_PEFF_molecule_processing_keyword}, {PEFF_initiator_methionine, PEFF_PEFF_molecule_processing_keyword}, {MS_sample_number, MS_sample_attribute}, {MS_sample_name, MS_sample_attribute}, {MS_sample_state, MS_sample_attribute}, {MS_sample_mass, MS_sample_attribute}, {MS_sample_volume, MS_sample_attribute}, {MS_sample_concentration, MS_sample_attribute}, {MS_mass_resolution, MS_scan_attribute}, {MS_resolution_measurement_method, MS_measurement_method}, {MS_accuracy, MS_mass_analyzer_attribute}, {MS_scan_rate, MS_scan_attribute}, {MS_scan_start_time, MS_scan_attribute}, {MS_scan_start_time, MS_PSM_level_attribute}, {MS_reflectron_state, MS_mass_analyzer_attribute}, {MS_TOF_Total_Path_Length, MS_mass_analyzer_attribute}, {MS_final_MS_exponent, MS_mass_analyzer_attribute}, {MS_magnetic_field_strength, MS_mass_analyzer_attribute}, {MS_detector_resolution, MS_detector_attribute}, {MS_sampling_frequency, MS_detector_attribute}, {MS_customization, MS_instrument_attribute}, {MS_deisotoping, MS_data_processing_action}, {MS_charge_deconvolution, MS_data_processing_action}, {MS_peak_picking, MS_data_processing_action}, {MS_charge_state, MS_ion_selection_attribute}, {MS_charge_state, MS_ion_property}, {MS_peak_intensity, MS_ion_selection_attribute}, {MS_collision_energy, MS_precursor_activation_attribute}, {MS_emulsion, MS_sample_state}, {MS_gaseous_sample_state, MS_sample_state}, {MS_liquid_sample_state, MS_sample_state}, {MS_solid_sample_state, MS_sample_state}, {MS_solution, MS_sample_state}, {MS_suspension, MS_sample_state}, {MS_sample_batch, MS_sample_attribute}, {MS_continuous_flow_fast_atom_bombardment, MS_inlet_type}, {MS_direct_inlet, MS_inlet_type}, {MS_electrospray_inlet, MS_inlet_type}, {MS_flow_injection_analysis, MS_inlet_type}, {MS_inductively_coupled_plasma, MS_inlet_type}, {MS_infusion, MS_inlet_type}, {MS_jet_separator, MS_inlet_type}, {MS_membrane_separator, MS_inlet_type}, {MS_moving_belt, MS_inlet_type}, {MS_moving_wire, MS_inlet_type}, {MS_open_split, MS_inlet_type}, {MS_particle_beam, MS_inlet_type}, {MS_reservoir, MS_inlet_type}, {MS_septum, MS_inlet_type}, {MS_thermospray_inlet, MS_inlet_type}, {MS_atmospheric_pressure_chemical_ionization, MS_atmospheric_pressure_ionization}, {MS_chemical_ionization, MS_ionization_type}, {MS_electrospray_ionization, MS_ionization_type}, {MS_fast_atom_bombardment_ionization, MS_ionization_type}, {MS_matrix_assisted_laser_desorption_ionization, MS_desorption_ionization}, {MS_axial_ejection_linear_ion_trap, MS_linear_ion_trap}, {MS_fourier_transform_ion_cyclotron_resonance_mass_spectrometer, MS_mass_analyzer_type}, {MS_magnetic_sector, MS_mass_analyzer_type}, {MS_quadrupole, MS_mass_analyzer_type}, {MS_quadrupole_ion_trap, MS_ion_trap}, {MS_radial_ejection_linear_ion_trap, MS_linear_ion_trap}, {MS_time_of_flight, MS_mass_analyzer_type}, {MS_baseline, MS_resolution_measurement_method}, {MS_full_width_at_half_maximum, MS_resolution_measurement_method}, {MS_ten_percent_valley, MS_resolution_measurement_method}, {MS_decreasing_m_z_scan, MS_scan_direction}, {MS_increasing_m_z_scan, MS_scan_direction}, {MS_exponential, MS_scan_law}, {MS_linear_OBSOLETE, MS_scan_law}, {MS_quadratic, MS_scan_law}, {MS_reflectron_off, MS_reflectron_state}, {MS_reflectron_on, MS_reflectron_state}, {MS_channeltron, MS_detector_type}, {MS_conversion_dynode_electron_multiplier, MS_conversion_dynode}, {MS_conversion_dynode_photomultiplier, MS_conversion_dynode}, {MS_daly_detector, MS_detector_type}, {MS_electron_multiplier_tube, MS_electron_multiplier}, {MS_faraday_cup, MS_detector_type}, {MS_focal_plane_array, MS_focal_plane_collector}, {MS_microchannel_plate_detector, MS_array_detector}, {MS_multi_collector, MS_detector_type}, {MS_photomultiplier, MS_detector_type}, {MS_analog_digital_converter, MS_detector_acquisition_mode}, {MS_pulse_counting, MS_detector_acquisition_mode}, {MS_time_digital_converter, MS_detector_acquisition_mode}, {MS_transient_recorder, MS_detector_acquisition_mode}, {MS_SCIEX_instrument_model, MS_instrument_model}, {MS_Bruker_Daltonics_instrument_model, MS_instrument_model}, {MS_IonSpec_instrument_model, MS_Varian_instrument_model}, {MS_Shimadzu_instrument_model, MS_instrument_model}, {MS_Thermo_Finnigan_instrument_model, MS_Thermo_Fisher_Scientific_instrument_model}, {MS_Waters_instrument_model, MS_instrument_model}, {MS_centroid_spectrum, MS_spectrum_representation}, {MS_profile_spectrum, MS_spectrum_representation}, {MS_negative_scan, MS_scan_polarity}, {MS_negative_scan, MS_chromatogram_attribute}, {MS_positive_scan, MS_scan_polarity}, {MS_positive_scan, MS_chromatogram_attribute}, {MS_number_of_detector_counts, MS_intensity_unit}, {MS_percent_of_base_peak, MS_intensity_unit}, {MS_collision_induced_dissociation, MS_dissociation_method}, {MS_plasma_desorption, MS_dissociation_method}, {MS_post_source_decay, MS_dissociation_method}, {MS_surface_induced_dissociation, MS_dissociation_method}, {MS_normalized_collision_energy, MS_precursor_activation_attribute}, {MS_4000_QTRAP, MS_SCIEX_instrument_model}, {MS_4700_Proteomics_Analyzer, MS_Applied_Biosystems_instrument_model}, {MS_apex_IV, MS_Bruker_Daltonics_apex_series}, {MS_apex_Q, MS_Bruker_Daltonics_apex_series}, {MS_API_150EX, MS_SCIEX_instrument_model}, {MS_API_150EX_Prep, MS_SCIEX_instrument_model}, {MS_API_2000, MS_SCIEX_instrument_model}, {MS_API_3000, MS_SCIEX_instrument_model}, {MS_API_4000, MS_SCIEX_instrument_model}, {MS_autoflex_II, MS_Bruker_Daltonics_flex_series}, {MS_autoflex_TOF_TOF, MS_Bruker_Daltonics_flex_series}, {MS_Auto_Spec_Ultima_NT, MS_Waters_instrument_model}, {MS_BioTOF_II, MS_Bruker_Daltonics_BioTOF_series}, {MS_BioTOF_Q, MS_Bruker_Daltonics_BioTOF_series}, {MS_DELTA_plusAdvantage, MS_Thermo_Finnigan_instrument_model}, {MS_DELTAplusXP, MS_Thermo_Finnigan_instrument_model}, {MS_esquire_4000, MS_Bruker_Daltonics_esquire_series}, {MS_esquire_6000, MS_Bruker_Daltonics_esquire_series}, {MS_explorer, MS_IonSpec_instrument_model}, {MS_GCT, MS_Waters_instrument_model}, {MS_HCT, MS_Bruker_Daltonics_HCT_Series}, {MS_HCTplus, MS_Bruker_Daltonics_HCT_Series}, {MS_HiRes_ESI, MS_IonSpec_instrument_model}, {MS_HiRes_MALDI, MS_IonSpec_instrument_model}, {MS_IsoPrime, MS_Waters_instrument_model}, {MS_IsoProbe, MS_Waters_instrument_model}, {MS_IsoProbe_T, MS_Waters_instrument_model}, {MS_LCQ_Advantage, MS_Thermo_Finnigan_instrument_model}, {MS_LCQ_Classic, MS_Thermo_Finnigan_instrument_model}, {MS_LCQ_Deca_XP_Plus, MS_Thermo_Finnigan_instrument_model}, {MS_M_LDI_L, MS_Waters_instrument_model}, {MS_M_LDI_LR, MS_Waters_instrument_model}, {MS_MAT253, MS_Finnigan_MAT_instrument_model}, {MS_MAT900XP, MS_Finnigan_MAT_instrument_model}, {MS_MAT900XP_Trap, MS_Finnigan_MAT_instrument_model}, {MS_MAT95XP, MS_Finnigan_MAT_instrument_model}, {MS_MAT95XP_Trap, MS_Finnigan_MAT_instrument_model}, {MS_microflex, MS_Bruker_Daltonics_flex_series}, {MS_microTOF_LC, MS_Bruker_Daltonics_micrOTOF_series}, {MS_neptune, MS_Thermo_Finnigan_instrument_model}, {MS_NG_5400, MS_Waters_instrument_model}, {MS_OMEGA, MS_IonSpec_instrument_model}, {MS_OMEGA_2001, MS_IonSpec_instrument_model}, {MS_OmniFlex, MS_Bruker_Daltonics_flex_series}, {MS_Platform_ICP, MS_Waters_instrument_model}, {MS_PolarisQ, MS_Thermo_Finnigan_instrument_model}, {MS_proteomics_solution_1, MS_SCIEX_instrument_model}, {MS_Q_TRAP, MS_SCIEX_instrument_model}, {MS_Q_Tof_micro, MS_Waters_instrument_model}, {MS_Q_Tof_Ultima, MS_Waters_instrument_model}, {MS_QSTAR, MS_SCIEX_instrument_model}, {MS_quattro_micro, MS_Waters_instrument_model}, {MS_Quattro_Ultima, MS_Waters_instrument_model}, {MS_Surveyor_MSQ, MS_Thermo_Finnigan_instrument_model}, {MS_SymBiot_I, MS_SCIEX_instrument_model}, {MS_SymBiot_XVI, MS_SCIEX_instrument_model}, {MS_TEMPUS_TOF, MS_Thermo_Finnigan_instrument_model}, {MS_TRACE_DSQ, MS_Thermo_Finnigan_instrument_model}, {MS_TRITON, MS_Thermo_Finnigan_instrument_model}, {MS_TSQ_Quantum, MS_Thermo_Finnigan_instrument_model}, {MS_ultima, MS_IonSpec_instrument_model}, {MS_ultraflex, MS_Bruker_Daltonics_flex_series}, {MS_ultraflex_TOF_TOF, MS_Bruker_Daltonics_flex_series}, {MS_Voyager_DE_PRO, MS_Applied_Biosystems_instrument_model}, {MS_Voyager_DE_STR, MS_Applied_Biosystems_instrument_model}, {MS_selected_ion_monitoring, MS_measurement_method}, {MS_selected_reaction_monitoring, MS_measurement_method}, {MS_base_peak, MS_peak}, {MS_field_free_region, MS_ion_optics_attribute}, {MS_magnetic_deflection, MS_ion_optics_type}, {MS_molecular_mass, MS_molecular_entity_property}, {MS_multiphoton_ionization, MS_ionization_type}, {MS_total_ion_current_chromatogram, MS_ion_current_chromatogram}, {MS_transmission, MS_instrument_attribute}, {MS_atmospheric_pressure_matrix_assisted_laser_desorption_ionization, MS_atmospheric_pressure_ionization}, {MS_atmospheric_pressure_ionization, MS_ionization_type}, {MS_blackbody_infrared_radiative_dissociation, MS_dissociation_method}, {MS_charge_stripping, MS_precursor_activation_attribute}, {MS_delayed_extraction, MS_ion_optics_type}, {MS_desorption_ionization, MS_ionization_type}, {MS_direct_insertion_probe, MS_inlet_type}, {MS_direct_liquid_introduction, MS_inlet_type}, {MS_electron_capture_dissociation, MS_dissociation_method}, {MS_electron_multiplier, MS_detector_type}, {MS_electrostatic_energy_analyzer, MS_mass_analyzer_type}, {MS_flowing_afterglow, MS_ionization_type}, {MS_field_desorption, MS_desorption_ionization}, {MS_field_ionization, MS_ionization_type}, {MS_glow_discharge_ionization, MS_ionization_type}, {MS_infrared_multiphoton_dissociation, MS_dissociation_method}, {MS_ion_trap, MS_mass_analyzer_type}, {MS_Negative_Ion_chemical_ionization, MS_ionization_type}, {MS_neutralization_reionization_mass_spectrometry, MS_ionization_type}, {MS_photoionization, MS_ionization_type}, {MS_pyrolysis_mass_spectrometry, MS_ionization_type}, {MS_collision_quadrupole, MS_ion_optics_type}, {MS_resonance_enhanced_multiphoton_ionization, MS_ionization_type}, {MS_surface_enhanced_laser_desorption_ionization, MS_surface_ionization}, {MS_surface_enhanced_neat_desorption, MS_surface_ionization}, {MS_selected_ion_flow_tube, MS_ion_optics_type}, {MS_sustained_off_resonance_irradiation, MS_dissociation_method}, {MS_stored_waveform_inverse_fourier_transform, MS_mass_analyzer_type}, {MS_total_ion_current, MS_spectrum_property}, {MS_time_lag_focusing, MS_ion_optics_type}, {MS_cyclotron, MS_mass_analyzer_type}, {MS_linear_ion_trap, MS_ion_trap}, {MS_mass_spectrum, MS_data_file_content}, {MS_mass_spectrum, MS_spectrum_type}, {MS_reflectron, MS_ion_optics_type}, {MS_accelerating_voltage, MS_ion_optics_attribute}, {MS_einzel_lens, MS_ion_optics_type}, {MS_electric_field_strength, MS_ion_optics_attribute}, {MS_first_stability_region, MS_ion_optics_type}, {MS_fringing_field, MS_ion_optics_type}, {MS_kinetic_energy_analyzer, MS_ion_optics_type}, {MS_space_charge_effect, MS_ion_optics_attribute}, {MS_static_field, MS_ion_optics_type}, {MS_charge_inversion_mass_spectrum, MS_mass_spectrum}, {MS_constant_neutral_gain_spectrum, MS_mass_spectrum}, {MS_constant_neutral_loss_spectrum, MS_mass_spectrum}, {MS_e_2_mass_spectrum, MS_mass_spectrum}, {MS_neutral_loss, MS_modification_parameters}, {MS_precursor_ion_spectrum, MS_mass_spectrum}, {MS_product_ion_spectrum_OBSOLETE, MS_mass_spectrum}, {MS_array_detector, MS_detector_type}, {MS_conversion_dynode, MS_detector_type}, {MS_dynode, MS_detector_type}, {MS_focal_plane_collector, MS_detector_type}, {MS_ion_to_photon_detector, MS_detector_type}, {MS_point_collector, MS_detector_type}, {MS_postacceleration_detector, MS_detector_type}, {MS_adduct_ion, MS_adduct}, {MS_adiabatic_ionization, MS_ionization_type}, {MS_associative_ionization, MS_ionization_type}, {MS_atmospheric_pressure_photoionization, MS_atmospheric_pressure_ionization}, {MS_autodetachment, MS_ionization_type}, {MS_autoionization, MS_ionization_type}, {MS_charge_exchange_ionization, MS_ionization_type}, {MS_chemi_ionization, MS_ionization_type}, {MS_desorption_ionization_on_silicon, MS_desorption_ionization}, {MS_dissociative_ionization, MS_ionization_type}, {MS_electron_ionization, MS_ionization_type}, {MS_ionization_efficiency, MS_source_attribute}, {MS_laser_desorption_ionization, MS_desorption_ionization}, {MS_liquid_secondary_ionization, MS_ionization_type}, {MS_membrane_inlet, MS_inlet_type}, {MS_microelectrospray, MS_electrospray_ionization}, {MS_nanoelectrospray, MS_electrospray_ionization}, {MS_penning_ionization, MS_ionization_type}, {MS_plasma_desorption_ionization, MS_ionization_type}, {MS_secondary_ionization, MS_ionization_type}, {MS_soft_ionization, MS_ionization_type}, {MS_spark_ionization, MS_ionization_type}, {MS_surface_assisted_laser_desorption_ionization, MS_desorption_ionization}, {MS_surface_ionization, MS_ionization_type}, {MS_thermal_ionization, MS_ionization_type}, {MS_vertical_ionization, MS_ionization_type}, {MS_buffer_gas, MS_precursor_activation_attribute}, {MS_collision_gas, MS_precursor_activation_attribute}, {MS_beam_type_collision_induced_dissociation, MS_collision_induced_dissociation}, {MS_low_energy_collision_induced_dissociation, MS_dissociation_method}, {MS_photodissociation, MS_dissociation_method}, {MS_fast_ion_bombardment, MS_ionization_type}, {MS_LTQ, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_FT, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Orbitrap, MS_Thermo_Scientific_instrument_model}, {MS_LXQ, MS_Thermo_Scientific_instrument_model}, {MS_ion_selection_attribute, MS_object_attribute}, {MS_1200_series_LC_MSD_SL, MS_Agilent_instrument_model}, {MS_6110_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6120A_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6130_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6140_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6210_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6310_Ion_Trap_LC_MS, MS_Agilent_instrument_model}, {MS_6320_Ion_Trap_LC_MS, MS_Agilent_instrument_model}, {MS_6330_Ion_Trap_LC_MS, MS_Agilent_instrument_model}, {MS_6340_Ion_Trap_LC_MS, MS_Agilent_instrument_model}, {MS_6410_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_1200_series_LC_MSD_VL, MS_Agilent_instrument_model}, {MS_Thermo_Fisher_Scientific_instrument_model, MS_instrument_model}, {MS_orbitrap, MS_mass_analyzer_type}, {MS_nanospray_inlet, MS_electrospray_inlet}, {MS_source_potential, MS_source_attribute}, {MS_ion_optics_attribute, MS_ion_optics}, {MS_Hitachi_instrument_model, MS_instrument_model}, {MS_Varian_instrument_model, MS_instrument_model}, {MS_Agilent_instrument_model, MS_instrument_model}, {MS_Dionex_instrument_model, MS_instrument_model}, {MS_Thermo_Electron_instrument_model, MS_Thermo_Fisher_Scientific_instrument_model}, {MS_Finnigan_MAT_instrument_model, MS_Thermo_Fisher_Scientific_instrument_model}, {MS_Thermo_Scientific_instrument_model, MS_Thermo_Fisher_Scientific_instrument_model}, {MS_Applied_Biosystems_instrument_model, MS_instrument_model}, {MS_instrument_attribute, MS_object_attribute}, {MS_zoom_scan, MS_scan_attribute}, {MS_scan_window_upper_limit, MS_selection_window_attribute}, {MS_scan_window_lower_limit, MS_selection_window_attribute}, {MS_dwell_time, MS_scan_attribute}, {MS_scan_attribute, MS_object_attribute}, {MS_base_peak_m_z, MS_spectrum_property}, {MS_base_peak_intensity, MS_spectrum_property}, {MS_activation_energy, MS_precursor_activation_attribute}, {MS_ms_level, MS_spectrum_attribute}, {MS_filter_string, MS_scan_attribute}, {MS_m_z_array, MS_binary_data_array}, {MS_intensity_array, MS_binary_data_array}, {MS_charge_array, MS_binary_data_array}, {MS_signal_to_noise_array, MS_binary_data_array}, {MS_32_bit_integer, MS_binary_data_type}, {MS_16_bit_float_OBSOLETE, MS_binary_data_type}, {MS_32_bit_float, MS_binary_data_type}, {MS_64_bit_integer, MS_binary_data_type}, {MS_64_bit_float, MS_binary_data_type}, {MS_Waters_raw_format, MS_mass_spectrometer_file_format}, {MS_highest_observed_m_z, MS_chromatogram_attribute}, {MS_highest_observed_m_z, MS_spectrum_property}, {MS_lowest_observed_m_z, MS_chromatogram_attribute}, {MS_lowest_observed_m_z, MS_spectrum_property}, {MS_instrument_serial_number, MS_instrument_attribute}, {MS_file_format_conversion, MS_data_transformation}, {MS_Xcalibur, MS_Thermo_Finnigan_software}, {MS_Xcalibur, MS_acquisition_software}, {MS_Xcalibur, MS_analysis_software}, {MS_Xcalibur, MS_data_processing_software}, {MS_Bioworks, MS_Thermo_Finnigan_software}, {MS_Bioworks, MS_analysis_software}, {MS_Bioworks, MS_data_processing_software}, {MS_MassLynx, MS_Waters_software}, {MS_MassLynx, MS_acquisition_software}, {MS_MassLynx, MS_analysis_software}, {MS_MassLynx, MS_data_processing_software}, {MS_FlexAnalysis, MS_Bruker_software}, {MS_FlexAnalysis, MS_analysis_software}, {MS_FlexAnalysis, MS_data_processing_software}, {MS_Data_Explorer, MS_Applied_Biosystems_software}, {MS_Data_Explorer, MS_acquisition_software}, {MS_Data_Explorer, MS_analysis_software}, {MS_Data_Explorer, MS_data_processing_software}, {MS_4700_Explorer, MS_Applied_Biosystems_software}, {MS_4700_Explorer, MS_acquisition_software}, {MS_4700_Explorer, MS_analysis_software}, {MS_4700_Explorer, MS_data_processing_software}, {MS_massWolf, MS_data_processing_software}, {MS_Voyager_Biospectrometry_Workstation_System, MS_Applied_Biosystems_software}, {MS_Voyager_Biospectrometry_Workstation_System, MS_acquisition_software}, {MS_Voyager_Biospectrometry_Workstation_System, MS_analysis_software}, {MS_Voyager_Biospectrometry_Workstation_System, MS_data_processing_software}, {MS_FlexControl, MS_Bruker_software}, {MS_FlexControl, MS_acquisition_software}, {MS_ReAdW, MS_data_processing_software}, {MS_MzStar, MS_data_processing_software}, {MS_data_processing_action, MS_data_transformation}, {MS_Conversion_to_mzML, MS_file_format_conversion}, {MS_Conversion_to_mzXML, MS_file_format_conversion}, {MS_Conversion_to_mzData, MS_file_format_conversion}, {MS_sample_attribute, MS_object_attribute}, {MS_selection_window_attribute, MS_object_attribute}, {MS_Analyst, MS_SCIEX_software}, {MS_Analyst, MS_acquisition_software}, {MS_Analyst, MS_analysis_software}, {MS_Analyst, MS_data_processing_software}, {MS_Trapper, MS_data_processing_software}, {MS_LCQ_Deca, MS_Thermo_Finnigan_instrument_model}, {MS_LTQ_Orbitrap_Discovery, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Orbitrap_XL, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_FT_Ultra, MS_Thermo_Scientific_instrument_model}, {MS_GC_Quantum, MS_Thermo_Finnigan_instrument_model}, {MS_mass_spectrometer_file_format, MS_file_format}, {MS_ABI_WIFF_format, MS_mass_spectrometer_file_format}, {MS_Thermo_RAW_format, MS_mass_spectrometer_file_format}, {MS_PSI_mzData_format, MS_mass_spectrometer_file_format}, {MS_Micromass_PKL_format, MS_mass_spectrometer_file_format}, {MS_ISB_mzXML_format, MS_mass_spectrometer_file_format}, {MS_Bruker_Agilent_YEP_format, MS_mass_spectrometer_file_format}, {MS_MD5, MS_data_file_checksum_type}, {MS_SHA_1, MS_data_file_checksum_type}, {MS_sum_of_spectra, MS_spectra_combination}, {MS_median_of_spectra, MS_spectra_combination}, {MS_zlib_compression, MS_binary_data_compression_type}, {MS_mean_of_spectra, MS_spectra_combination}, {MS_no_compression, MS_binary_data_compression_type}, {MS_source_data_file, MS_spectrum_attribute}, {MS_LCQ_Fleet, MS_Thermo_Finnigan_instrument_model}, {MS_MS1_spectrum, MS_mass_spectrum}, {MS_MSn_spectrum, MS_mass_spectrum}, {MS_CRM_spectrum, MS_mass_spectrum}, {MS_SIM_spectrum, MS_mass_spectrum}, {MS_SRM_spectrum, MS_mass_spectrum}, {MS_mzML_format, MS_mass_spectrometer_file_format}, {MS_contact_attribute, MS_object_attribute}, {MS_contact_name, MS_contact_attribute}, {MS_contact_address, MS_contact_attribute}, {MS_contact_URL, MS_contact_attribute}, {MS_contact_email, MS_contact_attribute}, {MS_contact_affiliation, MS_contact_attribute}, {MS_MzWiff, MS_data_processing_software}, {MS_smoothing, MS_data_processing_action}, {MS_baseline_reduction, MS_data_processing_action}, {MS_low_intensity_data_point_removal, MS_data_filtering}, {MS_time_array, MS_binary_data_array}, {MS_ion_optics_type, MS_ion_optics}, {MS_electron_transfer_dissociation, MS_dissociation_method}, {MS_pulsed_q_dissociation, MS_dissociation_method}, {MS_Proteios, MS_analysis_software}, {MS_Proteios, MS_data_processing_software}, {MS_ProteinLynx_Global_Server, MS_Waters_software}, {MS_ProteinLynx_Global_Server, MS_analysis_software}, {MS_ProteinLynx_Global_Server, MS_data_processing_software}, {MS_Shimadzu_MALDI_TOF_instrument_model, MS_Shimadzu_instrument_model}, {MS_Shimadzu_Scientific_Instruments_instrument_model, MS_Shimadzu_instrument_model}, {MS_LCMS_IT_TOF, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_2010EV, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_2010A, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_AXIMA_CFR_MALDI_TOF, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_AXIMA_QIT, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_AXIMA_CFR_plus, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_AXIMA_Performance_MALDI_TOF_TOF, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_AXIMA_Confidence_MALDI_TOF, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_AXIMA_Assurance_Linear_MALDI_TOF, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_DTA_format, MS_mass_spectrometer_file_format}, {MS_ProteinLynx_Global_Server_mass_spectrum_XML_format, MS_mass_spectrometer_file_format}, {MS_ProteoWizard_software, MS_analysis_software}, {MS_ProteoWizard_software, MS_data_processing_software}, {MS_preset_scan_configuration, MS_scan_attribute}, {MS_wavelength_array, MS_binary_data_array}, {MS_highest_observed_wavelength, MS_spectrum_property}, {MS_highest_observed_wavelength, MS_chromatogram_attribute}, {MS_lowest_observed_wavelength, MS_spectrum_property}, {MS_lowest_observed_wavelength, MS_chromatogram_attribute}, {MS_PDA_spectrum_OBSOLETE, MS_data_file_content}, {MS_PDA_spectrum_OBSOLETE, MS_spectrum_type}, {MS_photodiode_array_detector, MS_array_detector}, {MS_Surveyor_PDA, MS_Thermo_Scientific_instrument_model}, {MS_Accela_PDA, MS_Thermo_Scientific_instrument_model}, {MS_inductive_detector, MS_detector_type}, {MS_selected_ion_current_chromatogram, MS_ion_current_chromatogram}, {MS_basepeak_chromatogram, MS_ion_current_chromatogram}, {MS_low_intensity_threshold, MS_data_processing_parameter}, {MS_high_intensity_threshold, MS_data_processing_parameter}, {MS_Q_Tof_Premier, MS_Waters_instrument_model}, {MS_possible_charge_state, MS_ion_selection_attribute}, {MS_DSQ, MS_Thermo_Finnigan_instrument_model}, {MS_ITQ_700, MS_Thermo_Scientific_instrument_model}, {MS_ITQ_900, MS_Thermo_Scientific_instrument_model}, {MS_ITQ_1100, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_XL_ETD, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Orbitrap_XL_ETD, MS_Thermo_Scientific_instrument_model}, {MS_DFS, MS_Thermo_Scientific_instrument_model}, {MS_DSQ_II, MS_Thermo_Scientific_instrument_model}, {MS_MALDI_LTQ_XL, MS_Thermo_Scientific_instrument_model}, {MS_MALDI_LTQ_Orbitrap, MS_Thermo_Scientific_instrument_model}, {MS_TSQ_Quantum_Access, MS_Thermo_Scientific_instrument_model}, {MS_Element_XR, MS_Thermo_Scientific_instrument_model}, {MS_Element_2, MS_Thermo_Scientific_instrument_model}, {MS_Element_GD, MS_Thermo_Scientific_instrument_model}, {MS_GC_IsoLink, MS_Thermo_Scientific_instrument_model}, {MS_Exactive, MS_Thermo_Scientific_instrument_model}, {MS_Proteome_Discoverer, MS_Thermo_Finnigan_software}, {MS_Proteome_Discoverer, MS_analysis_software}, {MS_Proteome_Discoverer, MS_data_processing_software}, {MS_3200_QTRAP, MS_SCIEX_instrument_model}, {MS_4800_Plus_MALDI_TOF_TOF, MS_SCIEX_instrument_model}, {MS_API_3200, MS_SCIEX_instrument_model}, {MS_API_5000, MS_SCIEX_instrument_model}, {MS_QSTAR_Elite, MS_SCIEX_instrument_model}, {MS_QSTAR_Pulsar, MS_SCIEX_instrument_model}, {MS_QSTAR_XL, MS_SCIEX_instrument_model}, {MS_4800_Proteomics_Analyzer, MS_Applied_Biosystems_instrument_model}, {MS_4000_Series_Explorer_Software, MS_SCIEX_software}, {MS_4000_Series_Explorer_Software, MS_acquisition_software}, {MS_4000_Series_Explorer_Software, MS_analysis_software}, {MS_4000_Series_Explorer_Software, MS_data_processing_software}, {MS_GPS_Explorer, MS_SCIEX_software}, {MS_GPS_Explorer, MS_acquisition_software}, {MS_GPS_Explorer, MS_analysis_software}, {MS_GPS_Explorer, MS_data_processing_software}, {MS_LightSight_Software, MS_SCIEX_software}, {MS_LightSight_Software, MS_analysis_software}, {MS_LightSight_Software, MS_data_processing_software}, {MS_ProteinPilot_Software, MS_SCIEX_software}, {MS_ProteinPilot_Software, MS_analysis_software}, {MS_ProteinPilot_Software, MS_data_processing_software}, {MS_TissueView_Software, MS_SCIEX_software}, {MS_TissueView_Software, MS_analysis_software}, {MS_TissueView_Software, MS_data_processing_software}, {MS_MarkerView_Software, MS_SCIEX_software}, {MS_MarkerView_Software, MS_analysis_software}, {MS_MarkerView_Software, MS_data_processing_software}, {MS_MRMPilot_Software, MS_SCIEX_software}, {MS_MRMPilot_Software, MS_analysis_software}, {MS_MRMPilot_Software, MS_data_processing_software}, {MS_BioAnalyst, MS_SCIEX_software}, {MS_BioAnalyst, MS_analysis_software}, {MS_BioAnalyst, MS_data_processing_software}, {MS_Pro_ID, MS_SCIEX_software}, {MS_Pro_ID, MS_analysis_software}, {MS_Pro_ID, MS_data_processing_software}, {MS_Pro_ICAT, MS_SCIEX_software}, {MS_Pro_ICAT, MS_analysis_software}, {MS_Pro_ICAT, MS_data_processing_software}, {MS_Pro_Quant, MS_SCIEX_software}, {MS_Pro_Quant, MS_analysis_software}, {MS_Pro_Quant, MS_data_processing_software}, {MS_Pro_BLAST, MS_SCIEX_software}, {MS_Pro_BLAST, MS_analysis_software}, {MS_Pro_BLAST, MS_data_processing_software}, {MS_Cliquid, MS_SCIEX_software}, {MS_MIDAS_Workflow_Designer, MS_SCIEX_software}, {MS_MultiQuant, MS_SCIEX_software}, {MS_MultiQuant, MS_analysis_software}, {MS_MultiQuant, MS_data_processing_software}, {MS_6220_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6510_Quadrupole_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6520A_Quadrupole_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_MassHunter_Data_Acquisition, MS_Agilent_software}, {MS_MassHunter_Data_Acquisition, MS_acquisition_software}, {MS_MassHunter_Easy_Access, MS_Agilent_software}, {MS_MassHunter_Easy_Access, MS_acquisition_software}, {MS_MassHunter_Qualitative_Analysis, MS_Agilent_software}, {MS_MassHunter_Qualitative_Analysis, MS_analysis_software}, {MS_MassHunter_Qualitative_Analysis, MS_data_processing_software}, {MS_MassHunter_Quantitative_Analysis, MS_Agilent_software}, {MS_MassHunter_Quantitative_Analysis, MS_analysis_software}, {MS_MassHunter_Quantitative_Analysis, MS_data_processing_software}, {MS_MassHunter_Metabolite_ID, MS_Agilent_software}, {MS_MassHunter_Metabolite_ID, MS_analysis_software}, {MS_MassHunter_Metabolite_ID, MS_data_processing_software}, {MS_MassHunter_BioConfirm, MS_Agilent_software}, {MS_MassHunter_BioConfirm, MS_analysis_software}, {MS_MassHunter_BioConfirm, MS_data_processing_software}, {MS_Genespring_MS, MS_Agilent_software}, {MS_Genespring_MS, MS_analysis_software}, {MS_Genespring_MS, MS_data_processing_software}, {MS_MassHunter_Mass_Profiler, MS_Agilent_software}, {MS_MassHunter_Mass_Profiler, MS_analysis_software}, {MS_MassHunter_Mass_Profiler, MS_data_processing_software}, {MS_METLIN, MS_Agilent_software}, {MS_METLIN, MS_analysis_software}, {MS_METLIN, MS_data_processing_software}, {MS_Spectrum_Mill_for_MassHunter_Workstation, MS_Agilent_software}, {MS_Spectrum_Mill_for_MassHunter_Workstation, MS_analysis_software}, {MS_Spectrum_Mill_for_MassHunter_Workstation, MS_data_processing_software}, {MS_6300_Series_Ion_Trap_Data_Analysis_Software, MS_Agilent_software}, {MS_6300_Series_Ion_Trap_Data_Analysis_Software, MS_acquisition_software}, {MS_6300_Series_Ion_Trap_Data_Analysis_Software, MS_analysis_software}, {MS_6300_Series_Ion_Trap_Data_Analysis_Software, MS_data_processing_software}, {MS_Agilent_software, MS_software}, {MS_SCIEX_software, MS_software}, {MS_Applied_Biosystems_software, MS_software}, {MS_Bruker_software, MS_software}, {MS_Thermo_Finnigan_software, MS_software}, {MS_Waters_software, MS_software}, {MS_apex_ultra, MS_Bruker_Daltonics_apex_series}, {MS_autoflex_III_smartbeam, MS_Bruker_Daltonics_flex_series}, {MS_Bruker_Daltonics_HCT_Series, MS_Bruker_Daltonics_instrument_model}, {MS_HCTultra, MS_Bruker_Daltonics_HCT_Series}, {MS_HCTultra_PTM, MS_Bruker_Daltonics_HCT_Series}, {MS_HCTultra_ETD_II, MS_Bruker_Daltonics_HCT_Series}, {MS_microflex_LT, MS_Bruker_Daltonics_flex_series}, {MS_micrOTOF, MS_Bruker_Daltonics_micrOTOF_series}, {MS_micrOTOF_Q, MS_Bruker_Daltonics_micrOTOF_series}, {MS_micrOTOF_Q_II, MS_Bruker_Daltonics_micrOTOF_series}, {MS_ultraflex_III_TOF_TOF, MS_Bruker_Daltonics_flex_series}, {MS_apexControl, MS_Bruker_software}, {MS_apexControl, MS_acquisition_software}, {MS_BioTools, MS_Bruker_software}, {MS_BioTools, MS_analysis_software}, {MS_BioTools, MS_data_processing_software}, {MS_CLINPROT, MS_Bruker_software}, {MS_CLINPROT, MS_analysis_software}, {MS_CLINPROT, MS_data_processing_software}, {MS_CLINPROT_micro, MS_Bruker_software}, {MS_CLINPROT_micro, MS_analysis_software}, {MS_CLINPROT_micro, MS_data_processing_software}, {MS_CLINPROT_robot, MS_Bruker_software}, {MS_ClinProTools, MS_Bruker_software}, {MS_Compass, MS_Bruker_software}, {MS_Compass, MS_analysis_software}, {MS_Compass, MS_data_processing_software}, {MS_Compass_for_HCT_esquire, MS_Bruker_software}, {MS_Compass_for_HCT_esquire, MS_analysis_software}, {MS_Compass_for_HCT_esquire, MS_data_processing_software}, {MS_Compass_for_micrOTOF, MS_Bruker_software}, {MS_Compass_for_micrOTOF, MS_analysis_software}, {MS_Compass_for_micrOTOF, MS_data_processing_software}, {MS_Compass_OpenAccess, MS_Bruker_software}, {MS_Compass_OpenAccess, MS_analysis_software}, {MS_Compass_OpenAccess, MS_data_processing_software}, {MS_Compass_Security_Pack, MS_Bruker_software}, {MS_CompassXport, MS_Bruker_software}, {MS_CompassXport, MS_data_processing_software}, {MS_CompassXtract, MS_Bruker_software}, {MS_CompassXtract, MS_data_processing_software}, {MS_DataAnalysis, MS_Bruker_software}, {MS_DataAnalysis, MS_analysis_software}, {MS_DataAnalysis, MS_data_processing_software}, {MS_dpControl, MS_Bruker_software}, {MS_dpControl, MS_acquisition_software}, {MS_esquireControl, MS_Bruker_software}, {MS_esquireControl, MS_acquisition_software}, {MS_flexImaging, MS_Bruker_software}, {MS_flexImaging, MS_analysis_software}, {MS_flexImaging, MS_data_processing_software}, {MS_GENOLINK, MS_Bruker_software}, {MS_GenoTools, MS_Bruker_software}, {MS_HCTcontrol, MS_Bruker_software}, {MS_HCTcontrol, MS_acquisition_software}, {MS_micrOTOFcontrol, MS_Bruker_software}, {MS_micrOTOFcontrol, MS_acquisition_software}, {MS_PolyTools, MS_Bruker_software}, {MS_ProfileAnalysis, MS_Bruker_software}, {MS_ProfileAnalysis, MS_analysis_software}, {MS_ProfileAnalysis, MS_data_processing_software}, {MS_PROTEINEER, MS_Bruker_software}, {MS_PROTEINEER_dp, MS_Bruker_software}, {MS_PROTEINEER_fc, MS_Bruker_software}, {MS_PROTEINEER_spII, MS_Bruker_software}, {MS_PROTEINEER_LC, MS_Bruker_software}, {MS_ProteinScape, MS_Bruker_software}, {MS_ProteinScape, MS_analysis_software}, {MS_PureDisk, MS_Bruker_software}, {MS_QuantAnalysis, MS_Bruker_software}, {MS_QuantAnalysis, MS_analysis_software}, {MS_QuantAnalysis, MS_data_processing_software}, {MS_spControl, MS_Bruker_software}, {MS_spControl, MS_acquisition_software}, {MS_TargetAnalysis, MS_Bruker_software}, {MS_WARP_LC, MS_Bruker_software}, {MS_WARP_LC, MS_quantitation_software_name}, {MS_parameter_file, MS_mass_spectrometer_file_format}, {MS_Conversion_to_dta, MS_file_format_conversion}, {MS_Bioworks_SRF_format, MS_mass_spectrometer_file_format}, {MS_Bioworks_SRF_format, MS_intermediate_analysis_format}, {MS_TSQ_Quantum_Ultra_AM, MS_Thermo_Scientific_instrument_model}, {MS_selected_ion_m_z, MS_ion_selection_attribute}, {MS_retention_time_alignment, MS_data_processing_action}, {MS_high_intensity_data_point_removal, MS_data_filtering}, {MS_completion_time, MS_data_processing_parameter}, {MS_SSQ_7000, MS_Finnigan_MAT_instrument_model}, {MS_TSQ_7000, MS_Finnigan_MAT_instrument_model}, {MS_TSQ, MS_Finnigan_MAT_instrument_model}, {MS_TSQ_Quantum_Ultra, MS_Thermo_Scientific_instrument_model}, {MS_TOPP_software, MS_analysis_software}, {MS_TOPP_software, MS_data_processing_software}, {MS_BaselineFilter, MS_TOPP_software}, {MS_DBExporter, MS_TOPP_software}, {MS_DBImporter, MS_TOPP_software}, {MS_FileConverter, MS_TOPP_software}, {MS_FileFilter, MS_TOPP_software}, {MS_FileMerger, MS_TOPP_software}, {MS_InternalCalibration, MS_TOPP_software}, {MS_MapAligner_OBSOLETE, MS_TOPP_software}, {MS_MapNormalizer, MS_TOPP_software}, {MS_NoiseFilter_OBSOLETE, MS_TOPP_software}, {MS_PeakPicker_OBSOLETE, MS_TOPP_software}, {MS_Resampler, MS_TOPP_software}, {MS_SpectraFilter_OBSOLETE, MS_TOPP_software}, {MS_TOFCalibration, MS_TOPP_software}, {MS_Thermo_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Waters_nativeID_format, MS_native_spectrum_identifier_format}, {MS_WIFF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Bruker_Agilent_YEP_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Bruker_BAF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Bruker_FID_nativeID_format, MS_native_spectrum_identifier_format}, {MS_multiple_peak_list_nativeID_format, MS_native_spectrum_identifier_format}, {MS_single_peak_list_nativeID_format, MS_native_spectrum_identifier_format}, {MS_scan_number_only_nativeID_format, MS_native_spectrum_identifier_format}, {MS_spectrum_identifier_nativeID_format, MS_native_spectrum_identifier_format}, {MS_charge_state_calculation, MS_data_processing_action}, {MS_below_precursor_intensity_dominance_charge_state_calculation, MS_charge_state_calculation}, {MS_precursor_recalculation, MS_data_processing_action}, {MS_msPrefix_precursor_recalculation, MS_precursor_recalculation}, {MS_Savitzky_Golay_smoothing, MS_smoothing}, {MS_LOWESS_smoothing, MS_smoothing}, {MS_Gaussian_smoothing, MS_smoothing}, {MS_moving_average_smoothing, MS_smoothing}, {MS_non_standard_data_array, MS_binary_data_array}, {MS_inclusive_low_intensity_threshold, MS_data_processing_parameter}, {MS_inclusive_high_intensity_threshold, MS_data_processing_parameter}, {MS_enhanced_multiply_charged_spectrum, MS_MS1_spectrum}, {MS_time_delayed_fragmentation_spectrum, MS_MSn_spectrum}, {MS_isolation_window_attribute, MS_object_attribute}, {MS_isolation_window_upper_limit_OBSOLETE, MS_isolation_window_attribute}, {MS_isolation_window_lower_limit_OBSOLETE, MS_isolation_window_attribute}, {MS_no_combination, MS_spectra_combination}, {MS_spectrum_title, MS_spectrum_identification_result_details}, {MS_spectrum_title, MS_spectrum_attribute}, {MS_peak_list_scans, MS_spectrum_identification_result_details}, {MS_peak_list_scans, MS_spectrum_property}, {MS_peak_list_raw_scans, MS_spectrum_identification_result_details}, {MS_peak_list_raw_scans, MS_spectrum_property}, {MS_custom_unreleased_software_tool, MS_software}, {MS_mass_resolving_power, MS_scan_attribute}, {MS_area_peak_picking, MS_peak_picking}, {MS_height_peak_picking, MS_peak_picking}, {MS_analyzer_scan_offset, MS_scan_attribute}, {MS_electromagnetic_radiation_spectrum, MS_data_file_content}, {MS_electromagnetic_radiation_spectrum, MS_spectrum_type}, {MS_emission_spectrum, MS_data_file_content}, {MS_emission_spectrum, MS_spectrum_type}, {MS_absorption_spectrum, MS_data_file_content}, {MS_absorption_spectrum, MS_spectrum_type}, {MS_chromatogram_attribute, MS_object_attribute}, {MS_chromatogram_title, MS_chromatogram_attribute}, {MS_ion_current_chromatogram, MS_data_file_content}, {MS_ion_current_chromatogram, MS_chromatogram_type}, {MS_electromagnetic_radiation_chromatogram, MS_data_file_content}, {MS_electromagnetic_radiation_chromatogram, MS_chromatogram_type}, {MS_absorption_chromatogram, MS_electromagnetic_radiation_chromatogram}, {MS_emission_chromatogram, MS_electromagnetic_radiation_chromatogram}, {MS_counts_per_second, MS_intensity_unit}, {MS_Bruker_BAF_format, MS_mass_spectrometer_file_format}, {MS_Bruker_U2_format, MS_mass_spectrometer_file_format}, {MS_HyStar, MS_Bruker_software}, {MS_Acquity_UPLC_PDA, MS_Waters_instrument_model}, {MS_Acquity_UPLC_PDA, MS_photodiode_array_detector}, {MS_Acquity_UPLC_FLR, MS_Waters_instrument_model}, {MS_Acquity_UPLC_FLR, MS_fluorescence_detector}, {MS_flow_rate_array, MS_binary_data_array}, {MS_pressure_array, MS_binary_data_array}, {MS_temperature_array, MS_binary_data_array}, {MS_Bruker_U2_nativeID_format, MS_native_spectrum_identifier_format}, {MS_no_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Bruker_FID_format, MS_mass_spectrometer_file_format}, {MS_elution_time, MS_scan_attribute}, {MS_isolation_window_target_m_z, MS_isolation_window_attribute}, {MS_isolation_window_lower_offset, MS_isolation_window_attribute}, {MS_isolation_window_upper_offset, MS_isolation_window_attribute}, {MS_sample_preparation, MS_object_attribute}, {MS_matrix_solution, MS_MALDI_matrix_application}, {MS_matrix_solution_concentration, MS_MALDI_matrix_application}, {MS_dried_droplet_MALDI_matrix_preparation, MS_matrix_application_type}, {MS_printed_MALDI_matrix_preparation, MS_matrix_application_type}, {MS_sprayed_MALDI_matrix_preparation, MS_matrix_application_type}, {MS_precoated_MALDI_sample_plate, MS_matrix_application_type}, {MS_precoated_MALDI_sample_plate, MS_sample_plate_type}, {MS_wavelength_OBSOLETE, MS_laser_attribute}, {MS_focus_diameter_x, MS_laser_attribute}, {MS_focus_diameter_y, MS_laser_attribute}, {MS_pulse_energy, MS_laser_attribute}, {MS_pulse_duration, MS_laser_attribute}, {MS_attenuation, MS_laser_attribute}, {MS_impact_angle, MS_laser_attribute}, {MS_gas_laser, MS_laser_type}, {MS_solid_state_laser, MS_laser_type}, {MS_dye_laser, MS_laser_type}, {MS_free_electron_laser, MS_laser_type}, {MS_LTQ_XL, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Velos, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Velos_ETD, MS_Thermo_Scientific_instrument_model}, {MS_run_attribute, MS_object_attribute}, {MS_fraction_identifier, MS_run_attribute}, {MS_molecule, MS_molecular_entity}, {MS_peptide, MS_molecule}, {MS_isoelectric_point, MS_molecular_entity_property}, {MS_predicted_isoelectric_point, MS_isoelectric_point}, {MS_chemical_formula, MS_molecular_entity_attribute}, {MS_empirical_formula, MS_chemical_formula}, {MS_molecular_formula, MS_chemical_formula}, {MS_structural_formula, MS_chemical_formula}, {MS_SMILES_formula, MS_chemical_formula}, {MS_collision_gas_pressure, MS_precursor_activation_attribute}, {MS_4000_QTRAP_OBSOLETE, MS_SCIEX_instrument_model}, {MS_SRM_software, MS_software}, {MS_MaRiMba, MS_SRM_software}, {MS_peptide_attribute_calculation_software, MS_software}, {MS_SSRCalc, MS_peptide_attribute_calculation_software}, {MS_declustering_potential, MS_source_attribute}, {MS_cone_voltage, MS_source_attribute}, {MS_tube_lens_voltage, MS_source_attribute}, {MS_external_reference_identifier, MS_external_reference_data}, {MS_PubMed_identifier, MS_external_reference_identifier}, {MS_interchannel_delay, MS_scan_attribute}, {MS_protein, MS_molecule}, {MS_protein_short_name, MS_protein_attribute}, {MS_protein_attribute, MS_quantification_object_attribute}, {MS_protein_accession, MS_protein_attribute}, {MS_protein_accession, MS_peptide_to_protein_mapping_attribute}, {MS_protein_name, MS_protein_attribute}, {MS_stripped_peptide_sequence, MS_peptidoform_attribute}, {MS_peptidoform_sequence, MS_peptidoform_attribute}, {MS_peptidoform_labeling_state, MS_peptidoform_attribute}, {MS_heavy_labeled_peptidoform, MS_peptidoform_labeling_state}, {MS_unlabeled_peptidoform, MS_peptidoform_labeling_state}, {MS_peptidoform_group_label, MS_peptidoform_attribute}, {MS_retention_time, MS_peptidoform_attribute}, {MS_local_retention_time, MS_retention_time}, {MS_normalized_retention_time, MS_retention_time}, {MS_predicted_retention_time, MS_retention_time}, {MS_de_facto_standard, MS_standard}, {MS_minimum_information_standard, MS_standard}, {MS_retention_time_normalization_standard, MS_standard}, {MS_H_PINS_retention_time_normalization_standard, MS_retention_time_normalization_standard}, {MS_product_ion_series_ordinal, MS_product_ion_attribute}, {MS_product_ion_m_z_delta, MS_product_ion_attribute}, {MS_percent_of_base_peak_times_100, MS_intensity_unit}, {MS_peak_intensity_rank, MS_ion_selection_attribute}, {MS_peak_targeting_suitability_rank, MS_ion_selection_attribute}, {MS_transition_optimized_on_specified_instrument, MS_transition_validation_method}, {MS_transition_validated_with_an_MS_MS_spectrum_on_specified_instrument, MS_transition_validation_method}, {MS_transition_purported_from_an_MS_MS_spectrum_on_a_different__specified_instrument, MS_transition_validation_method}, {MS_transition_predicted_by_informatic_analysis, MS_transition_validation_method}, {MS_tab_delimited_text_format, MS_file_format}, {MS_tab_delimited_text_format, MS_intermediate_analysis_format}, {MS_retention_time_window_lower_offset, MS_retention_time_window_attribute}, {MS_retention_time_window_upper_offset, MS_retention_time_window_attribute}, {MS_includes_supersede_excludes, MS_target_inclusion_exclusion_priority}, {MS_excludes_supersede_includes, MS_target_inclusion_exclusion_priority}, {MS_Skyline, MS_SRM_software}, {MS_Skyline, MS_quantitation_software_name}, {MS_TIQAM, MS_SRM_software}, {MS_ATAQS, MS_SRM_software}, {MS_product_interpretation_rank, MS_product_ion_attribute}, {MS_ion_injection_time, MS_scan_attribute}, {MS_calibration_spectrum, MS_spectrum_type}, {MS_Shimadzu_Biotech_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Shimadzu_Biotech_database_entity, MS_mass_spectrometer_file_format}, {MS_QTRAP_5500, MS_SCIEX_instrument_model}, {MS_TripleTOF_5600, MS_SCIEX_instrument_model}, {MS_protein_modifications, MS_protein_attribute}, {MS_gene_name, MS_protein_attribute}, {MS_SEQUEST_CleavesAt, MS_SEQUEST_input_parameter}, {MS_SEQUEST_ViewCV, MS_SEQUEST_input_parameter}, {MS_SEQUEST_OutputLines, MS_SEQUEST_input_parameter}, {MS_SEQUEST_DescriptionLines, MS_SEQUEST_input_parameter}, {MS_de_novo_search, MS_search_type}, {MS_search_database_details, MS_search_input_details}, {MS_database_source, MS_search_database_details}, {MS_database_name, MS_search_database_details}, {MS_database_local_file_path_OBSOLETE, MS_search_database_details}, {MS_database_original_uri, MS_search_database_details}, {MS_database_version, MS_search_database_details}, {MS_database_release_date_OBSOLETE, MS_search_database_details}, {MS_database_type, MS_search_database_details}, {MS_database_filtering, MS_search_database_details}, {MS_DB_filter_taxonomy, MS_Sequence_database_filter_types}, {MS_DB_filter_on_accession_numbers, MS_Sequence_database_filter_types}, {MS_DB_MW_filter, MS_Sequence_database_filter_types}, {MS_DB_PI_filter, MS_Sequence_database_filter_types}, {MS_translation_frame, MS_search_database_details}, {MS_translation_table, MS_search_database_details}, {MS_SEQUEST_NormalizeXCorrValues, MS_SEQUEST_input_parameter}, {MS_DB_filter_on_sequence_pattern, MS_Sequence_database_filter_types}, {MS_SEQUEST_SequenceHeaderFilter, MS_SEQUEST_input_parameter}, {MS_number_of_sequences_searched, MS_search_database_details}, {MS_number_of_peptide_seqs_compared_to_each_spectrum, MS_search_database_details}, {MS_number_of_peptide_seqs_compared_to_each_spectrum, MS_spectrum_identification_result_details}, {MS_spectral_library_search, MS_search_type}, {MS_SEQUEST_SequencePartialFilter, MS_SEQUEST_input_parameter}, {MS_date___time_search_performed_OBSOLETE, MS_search_statistics}, {MS_search_time_taken, MS_search_statistics}, {MS_SEQUEST_ShowFragmentIons, MS_SEQUEST_input_parameter}, {MS_SEQUEST_Consensus, MS_SEQUEST_ViewCV}, {MS_intermediate_analysis_format, MS_file_format}, {MS_SEQUEST_sortCV, MS_SEQUEST_ViewCV}, {MS_SEQUEST_LimitTo, MS_SEQUEST_input_parameter}, {MS_cleavage_agent_details, MS_search_input_details}, {MS_cleavage_agent_name, MS_cleavage_agent_details}, {MS_SEQUEST_sort_by_dCn, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_dM, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_Ions, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_MH_, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_P, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_PreviousAminoAcid, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_Ref, MS_SEQUEST_sortCV}, {MS_modification_specificity_rule, MS_modification_parameters}, {MS_tolerance_on_types_OBSOLETE, MS_modification_parameters}, {MS_quality_estimation_by_manual_validation, MS_quality_estimation_method_details}, {MS_SEQUEST_sort_by_RSp, MS_SEQUEST_sortCV}, {MS_quality_estimation_method_details, MS_search_input_details}, {MS_neutral_loss_OBSOLETE, MS_modification_parameters}, {MS_Mascot_MGF_format, MS_mass_spectrometer_file_format}, {MS_TODOscoring_model_OBSOLETE, MS_search_input_details}, {MS_ions_series_considered_in_search, MS_search_input_details}, {MS_SEQUEST_sort_by_Sp, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_TIC, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_Scan, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_Sequence, MS_SEQUEST_sortCV}, {MS_SEQUEST_sort_by_Sf, MS_SEQUEST_sortCV}, {MS_database_type_amino_acid, MS_database_type}, {MS_database_type_nucleotide, MS_database_type}, {MS_search_type, MS_search_input_details}, {MS_pmf_search, MS_search_type}, {MS_tag_search, MS_search_type}, {MS_ms_ms_search, MS_search_type}, {MS_database_nr, MS_database_name}, {MS_protein_level_identification_attribute, MS_single_identification_result_attribute}, {MS_SEQUEST_sort_by_XCorr, MS_SEQUEST_sortCV}, {MS_SEQUEST_ProcessCV, MS_SEQUEST_input_parameter}, {MS_protein_description, MS_protein_level_identification_attribute}, {MS_protein_description, MS_database_sequence_details}, {MS_molecule_taxonomy, MS_protein_level_identification_attribute}, {MS_molecule_taxonomy, MS_database_sequence_details}, {MS_molecule_taxonomy, MS_Sequence_database_filters}, {MS_taxonomy_nomenclature_OBSOLETE, MS_molecule_taxonomy}, {MS_NoEnzyme_OBSOLETE, MS_cleavage_agent_name}, {MS_peptide_sequence_level_identification_statistic, MS_peptide_sequence_level_identification_attribute}, {MS_sequence_coverage, MS_protein_level_identification_attribute}, {MS_SEQUEST_sort_by_z, MS_SEQUEST_sortCV}, {MS_SEQUEST_ProcessAll, MS_SEQUEST_ProcessCV}, {MS_SEQUEST_TopPercentMostIntense, MS_SEQUEST_ProcessCV}, {MS_distinct_peptide_sequences, MS_protein_level_identification_attribute}, {MS_confident_distinct_peptide_sequences, MS_protein_level_identification_attribute}, {MS_confident_peptide_qualification, MS_protein_level_identification_attribute}, {MS_confident_peptide_sequence_number, MS_protein_level_identification_attribute}, {MS_protein_group_or_subset_relationship, MS_protein_level_identification_attribute}, {MS_SEQUEST_Chromatogram, MS_SEQUEST_ViewCV}, {MS_SEQUEST_InfoAndLog, MS_SEQUEST_ViewCV}, {MS_database_UniProtKB_Swiss_Prot, MS_database_UniProtKB}, {MS_peptide_sequence_level_identification_attribute, MS_single_identification_result_attribute}, {MS_SEQUEST_TopNumber, MS_SEQUEST_ProcessCV}, {MS_data_stored_in_database, MS_intermediate_analysis_format}, {MS_param__a_ion, MS_ion_series_considered_in_search}, {MS_SEQUEST_CullTo, MS_SEQUEST_ProcessCV}, {MS_SEQUEST_modeCV, MS_SEQUEST_input_parameter}, {MS_SEQUEST_Full, MS_SEQUEST_modeCV}, {MS_n_terminal_flanking_residue, MS_peptide_to_protein_mapping_attribute}, {MS_n_terminal_flanking_residue, MS_peptide_sequence_level_identification_attribute}, {MS_c_terminal_flanking_residue, MS_peptide_to_protein_mapping_attribute}, {MS_c_terminal_flanking_residue, MS_peptide_sequence_level_identification_attribute}, {MS_retention_time_s__OBSOLETE, MS_peptide_sequence_level_identification_attribute}, {MS_single_protein_identification_statistic, MS_protein_level_identification_attribute}, {MS_theoretical_mass, MS_peptide_sequence_level_identification_attribute}, {MS_param__b_ion, MS_ion_series_considered_in_search}, {MS_param__c_ion, MS_ion_series_considered_in_search}, {MS_SEQUEST_FormatAndLinks, MS_SEQUEST_modeCV}, {MS_number_of_matched_peaks, MS_peptide_sequence_level_identification_attribute}, {MS_ions_series_considered, MS_peptide_sequence_level_identification_attribute}, {MS_number_of_peaks_used, MS_peptide_sequence_level_identification_attribute}, {MS_number_of_peaks_submitted, MS_peptide_sequence_level_identification_attribute}, {MS_manual_validation, MS_peptide_sequence_level_identification_statistic}, {MS_manual_validation, MS_single_protein_identification_statistic}, {MS_SEQUEST_Fast, MS_SEQUEST_modeCV}, {MS_peptide_sharing_details, MS_peptide_sequence_level_identification_attribute}, {MS_SEQUEST_selectCV, MS_SEQUEST_input_parameter}, {MS_peptide_raw_area_OBSOLETE, MS_peptide_level_quantification_datatype}, {MS_error_on_peptide_area, MS_peptide_level_quantification_datatype}, {MS_peptide_ratio, MS_peptide_level_quantification_datatype}, {MS_error_on_peptide_ratio, MS_peptide_level_quantification_datatype}, {MS_protein_ratio, MS_protein_level_quantification_datatype}, {MS_error_on_protein_ratio, MS_protein_level_quantification_datatype}, {MS_p_value__protein_diff_from_1_randomly__OBSOLETE, MS_protein_level_quantification_datatype}, {MS_absolute_quantity, MS_quantification_datatype}, {MS_error_on_absolute_quantity, MS_quantification_datatype}, {MS_quantitation_software_name, MS_software}, {MS_quantitation_software_name, MS_quantification_information}, {MS_quantitation_software_version_OBSOLETE, MS_quantification_information}, {MS_intensity_of_precursor_ion, MS_quantification_datatype}, {MS_database_IPI_human, MS_database_name}, {MS_PSM_level_search_engine_specific_statistic, MS_PSM_level_identification_statistic}, {MS_SEQUEST_SelectDefault, MS_SEQUEST_selectCV}, {MS_SEQUEST_SelectAdvancedCV, MS_SEQUEST_selectCV}, {MS_param__a_ion_NH3_DEPRECATED, MS_ions_series_considered_in_search}, {MS_protein_ambiguity_group_result_details, MS_protein_level_identification_attribute}, {MS_protein_ambiguity_group_result_details, MS_search_engine_specific_score}, {MS_param__a_ion_H2O_DEPRECATED, MS_ions_series_considered_in_search}, {MS_param__b_ion_NH3_DEPRECATED, MS_ions_series_considered_in_search}, {MS_param__b_ion_H2O_DEPRECATED, MS_ions_series_considered_in_search}, {MS_param__y_ion_NH3_DEPRECATED, MS_ions_series_considered_in_search}, {MS_param__y_ion_H2O_DEPRECATED, MS_ions_series_considered_in_search}, {MS_search_engine_specific_score, MS_single_identification_result_attribute}, {MS_SEQUEST_probability, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_xcorr, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_deltacn, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_sp, MS_search_engine_specific_score_for_proteins}, {MS_SEQUEST_Uniq, MS_search_engine_specific_score_for_proteins}, {MS_SEQUEST_expectation_value, MS_search_engine_specific_score}, {MS_SEQUEST_sf, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_matched_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_total_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_consensus_score, MS_search_engine_specific_score}, {MS_Paragon_unused_protscore, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_unused_protscore, MS_search_engine_specific_score_for_protein_groups}, {MS_Paragon_total_protscore, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_total_protscore, MS_search_engine_specific_score_for_protein_groups}, {MS_Paragon_score, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_confidence, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_expression_error_factor, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_expression_change_p_value, MS_search_engine_specific_score_for_proteins}, {MS_Paragon_contrib, MS_search_engine_specific_score_for_proteins}, {MS_Mascot_score, MS_PSM_level_search_engine_specific_statistic}, {MS_Mascot_expectation_value, MS_PSM_level_search_engine_specific_statistic}, {MS_Mascot_matched_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_Mascot_total_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_peptide_shared_in_multiple_proteins, MS_peptide_sharing_details}, {MS______KR_____P_, MS_Cleavage_agent_regular_expression}, {MS_number_of_molecular_hypothesis_considered, MS_search_statistics}, {MS_database_EST, MS_database_type_nucleotide}, {MS_Cleavage_agent_regular_expression, MS_regular_expression}, {MS_search_statistics, MS_spectrum_identification_result_details}, {MS_modification_specificity_peptide_N_term, MS_modification_specificity_rule}, {MS_modification_specificity_peptide_C_term, MS_modification_specificity_rule}, {MS_p_value_OBSOLETE, MS_peptide_sequence_level_identification_statistic}, {MS_p_value_OBSOLETE, MS_protein_identification_confidence_metric}, {MS_Expect_value, MS_peptide_sequence_level_identification_statistic}, {MS_Expect_value, MS_single_protein_identification_statistic}, {MS_confidence_score, MS_peptide_sequence_level_identification_statistic}, {MS_confidence_score, MS_single_protein_identification_statistic}, {MS_quality_estimation_with_decoy_database, MS_quality_estimation_method_details}, {MS_decoy_DB_type_reverse, MS_decoy_DB_details}, {MS_decoy_DB_type_randomized, MS_decoy_DB_details}, {MS_DB_composition_target_decoy, MS_decoy_DB_details}, {MS_protein_identification_confidence_metric, MS_single_protein_identification_statistic}, {MS_Mascot_DAT_format, MS_intermediate_analysis_format}, {MS_SEQUEST_out_file_format, MS_intermediate_analysis_format}, {MS_DB_MW_filter_maximum, MS_Sequence_database_filters}, {MS_DB_MW_filter_minimum, MS_Sequence_database_filters}, {MS_DB_PI_filter_maximum, MS_Sequence_database_filters}, {MS_DB_PI_filter_minimum, MS_Sequence_database_filters}, {MS_Mascot, MS_analysis_software}, {MS_SEQUEST, MS_analysis_software}, {MS_Phenyx, MS_analysis_software}, {MS_mass_type_settings, MS_search_input_details}, {MS_parent_mass_type_mono, MS_mass_type_settings}, {MS_parent_mass_type_average, MS_mass_type_settings}, {MS_protein_level_global_FDR, MS_protein_level_result_list_statistic}, {MS_SEQUEST_PeptideSp, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_PeptideRankSp, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_PeptideNumber, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_PeptideIdnumber, MS_PSM_level_search_engine_specific_statistic}, {MS_frag__y_ion, MS_fragmentation_ion_type}, {MS_product_ion_attribute, MS_single_identification_result_attribute}, {MS_frag__b_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__y_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__b_ion, MS_fragmentation_ion_type}, {MS_product_ion_m_z, MS_product_ion_attribute}, {MS_product_ion_intensity, MS_product_ion_attribute}, {MS_product_ion_m_z_error, MS_product_ion_attribute}, {MS_frag__x_ion, MS_fragmentation_ion_type}, {MS_frag__a_ion, MS_fragmentation_ion_type}, {MS_frag__z_ion, MS_fragmentation_ion_type}, {MS_frag__c_ion, MS_fragmentation_ion_type}, {MS_frag__b_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__y_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__a_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__a_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__d_ion, MS_fragmentation_ion_type}, {MS_frag__v_ion, MS_fragmentation_ion_type}, {MS_frag__w_ion, MS_fragmentation_ion_type}, {MS_frag__immonium_ion, MS_fragmentation_ion_type}, {MS_non_identified_ion, MS_product_ion_attribute}, {MS_co_eluting_ion, MS_product_ion_attribute}, {MS_SEQUEST_out_folder, MS_intermediate_analysis_format}, {MS_SEQUEST_summary, MS_intermediate_analysis_format}, {MS_PerSeptive_PKS_format, MS_mass_spectrometer_file_format}, {MS_SCIEX_API_III_format, MS_mass_spectrometer_file_format}, {MS_Bruker_XML_format, MS_mass_spectrometer_file_format}, {MS_local_FDR, MS_peptide_sequence_level_identification_statistic}, {MS_local_FDR, MS_single_protein_identification_statistic}, {MS_Trypsin, MS_cleavage_agent_name}, {MS_DB_source_EBI, MS_database_source}, {MS_DB_source_NCBI, MS_database_source}, {MS_DB_source_UniProt, MS_database_source}, {MS_fragment_mass_type_average, MS_mass_type_settings}, {MS_fragment_mass_type_mono, MS_mass_type_settings}, {MS_param__v_ion, MS_ion_series_considered_in_search}, {MS_param__d_ion, MS_ion_series_considered_in_search}, {MS_param__immonium_ion, MS_ion_series_considered_in_search}, {MS_param__w_ion, MS_ion_series_considered_in_search}, {MS_param__x_ion, MS_ion_series_considered_in_search}, {MS_param__y_ion, MS_ion_series_considered_in_search}, {MS_param__z_ion, MS_ion_series_considered_in_search}, {MS_role_type, MS_contact_attribute}, {MS_software_vendor, MS_role_type}, {MS_programmer, MS_role_type}, {MS_instrument_vendor, MS_role_type}, {MS_lab_personnel, MS_role_type}, {MS_researcher, MS_role_type}, {MS_____R____P_, MS_Cleavage_agent_regular_expression}, {MS_____BD__, MS_Cleavage_agent_regular_expression}, {MS_____DE__, MS_Cleavage_agent_regular_expression}, {MS_ProteinScape_SearchEvent, MS_intermediate_analysis_format}, {MS_ProteinScape_Gel, MS_intermediate_analysis_format}, {MS_decoy_DB_accession_regexp, MS_decoy_DB_details}, {MS_decoy_DB_derived_from_OBSOLETE, MS_decoy_DB_details}, {MS_database_IPI_mouse, MS_database_name}, {MS_database_IPI_rat, MS_database_name}, {MS_database_IPI_zebrafish, MS_database_name}, {MS_database_IPI_chicken, MS_database_name}, {MS_database_IPI_cow, MS_database_name}, {MS_database_IPI_arabidopsis, MS_database_name}, {MS_protein_rank, MS_protein_level_identification_attribute}, {MS_search_engine_specific_input_parameter, MS_search_engine_input_parameter}, {MS_Arg_C, MS_cleavage_agent_name}, {MS_Asp_N, MS_cleavage_agent_name}, {MS_Asp_N_ambic, MS_cleavage_agent_name}, {MS_Chymotrypsin, MS_cleavage_agent_name}, {MS_CNBr, MS_cleavage_agent_name}, {MS_Formic_acid, MS_cleavage_agent_name}, {MS_Lys_C, MS_cleavage_agent_name}, {MS_Lys_C_P, MS_cleavage_agent_name}, {MS_PepsinA, MS_cleavage_agent_name}, {MS_TrypChymo, MS_cleavage_agent_name}, {MS_Trypsin_P, MS_cleavage_agent_name}, {MS_V8_DE, MS_cleavage_agent_name}, {MS_V8_E, MS_cleavage_agent_name}, {MS_Mascot_SigThreshold, MS_Mascot_input_parameter}, {MS_Mascot_MaxProteinHits, MS_Mascot_input_parameter}, {MS_Mascot_ProteinScoringMethod, MS_Mascot_input_parameter}, {MS_Mascot_MinMSMSThreshold, MS_Mascot_input_parameter}, {MS_Mascot_ShowHomologousProteinsWithSamePeptides, MS_Mascot_input_parameter}, {MS_Mascot_ShowHomologousProteinsWithSubsetOfPeptides, MS_Mascot_input_parameter}, {MS_Mascot_RequireBoldRed, MS_Mascot_input_parameter}, {MS_Mascot_UseUnigeneClustering, MS_Mascot_input_parameter}, {MS_Mascot_IncludeErrorTolerantMatches, MS_Mascot_input_parameter}, {MS_Mascot_ShowDecoyMatches, MS_Mascot_input_parameter}, {MS_OMSSA_evalue, MS_PSM_level_search_engine_specific_statistic}, {MS_OMSSA_pvalue, MS_PSM_level_search_engine_specific_statistic}, {MS_X_Tandem_expect, MS_PSM_level_search_engine_specific_statistic}, {MS_X_Tandem_hyperscore, MS_PSM_level_search_engine_specific_statistic}, {MS______FYWL_____P_, MS_Cleavage_agent_regular_expression}, {MS_____M_, MS_Cleavage_agent_regular_expression}, {MS______D_______D__, MS_Cleavage_agent_regular_expression}, {MS_____K____P_, MS_Cleavage_agent_regular_expression}, {MS_____K_, MS_Cleavage_agent_regular_expression}, {MS______FL__, MS_Cleavage_agent_regular_expression}, {MS______FYWLKR_____P_, MS_Cleavage_agent_regular_expression}, {MS______KR__, MS_Cleavage_agent_regular_expression}, {MS______BDEZ_____P_, MS_Cleavage_agent_regular_expression}, {MS______EZ_____P_, MS_Cleavage_agent_regular_expression}, {MS_database_sequence_details, MS_search_database_details}, {MS_NA_sequence, MS_database_sequence_details}, {MS_AA_sequence, MS_database_sequence_details}, {MS_mass_table_source, MS_mass_table_options}, {MS_AAIndex_mass_table, MS_mass_table_source}, {MS_database_file_formats, MS_search_database_details}, {MS_FASTA_format, MS_database_file_formats}, {MS_ASN_1, MS_database_file_formats}, {MS_NCBI___p_, MS_database_file_formats}, {MS_clustal_aln, MS_database_file_formats}, {MS_embl_em, MS_database_file_formats}, {MS_NBRF_PIR, MS_database_file_formats}, {MS_peptide_descriptions, MS_peptide_sequence_level_identification_attribute}, {MS_spectrum_descriptions, MS_search_input_details}, {MS_spectrum_quality_descriptions, MS_spectrum_descriptions}, {MS_msmsEval_quality, MS_spectrum_quality_descriptions}, {MS_alternate_single_letter_codes, MS_ambiguous_residues}, {MS_alternate_mass, MS_ambiguous_residues}, {MS_number_of_unmatched_peaks, MS_PSM_level_attribute}, {MS_peptide_unique_to_one_protein, MS_peptide_sharing_details}, {MS_peptide_sequence_level_global_FDR, MS_peptide_sequence_level_result_list_statistic}, {MS_frag__internal_yb_ion, MS_fragmentation_ion_type}, {MS_frag__internal_ya_ion, MS_fragmentation_ion_type}, {MS_frag__z_1_ion, MS_fragmentation_ion_type}, {MS_frag__z_2_ion, MS_fragmentation_ion_type}, {MS_text_format, MS_mass_spectrometer_file_format}, {MS_Mascot_homology_threshold, MS_PSM_level_search_engine_specific_statistic}, {MS_Mascot_identity_threshold, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_Sequences, MS_search_engine_specific_score_for_proteins}, {MS_SEQUEST_TIC, MS_search_engine_specific_score_for_proteins}, {MS_SEQUEST_Sum, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Instrument_Type, MS_Phenyx_input_parameter}, {MS_Phenyx_Scoring_Model, MS_Phenyx_input_parameter}, {MS_Phenyx_Default_Parent_Charge, MS_Phenyx_input_parameter}, {MS_Phenyx_Trust_Parent_Charge, MS_Phenyx_input_parameter}, {MS_Phenyx_Turbo, MS_Phenyx_input_parameter}, {MS_Phenyx_Turbo_ErrorTol, MS_Phenyx_input_parameter}, {MS_Phenyx_Turbo_Coverage, MS_Phenyx_input_parameter}, {MS_Phenyx_Turbo_Series, MS_Phenyx_input_parameter}, {MS_Phenyx_MinPepLength, MS_Phenyx_input_parameter}, {MS_Phenyx_MinPepzscore, MS_Phenyx_input_parameter}, {MS_Phenyx_MaxPepPvalue, MS_Phenyx_input_parameter}, {MS_Phenyx_AC_Score, MS_Phenyx_input_parameter}, {MS_Phenyx_Conflict_Resolution, MS_Phenyx_input_parameter}, {MS_Phenyx_AC, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_ID, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Score, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Peptides1, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Peptides2, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Auto, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_User, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_User, MS_search_engine_specific_score_for_proteins}, {MS_Phenyx_Pepzscore, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_PepPvalue, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_PepPvalue, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_Phenyx_NumberOfMC, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_Modif, MS_PSM_level_search_engine_specific_statistic}, {MS_Phenyx_Modif, MS_search_engine_specific_score_for_proteins}, {MS_OMSSA_csv_format, MS_intermediate_analysis_format}, {MS_OMSSA_xml_format, MS_intermediate_analysis_format}, {MS_X_Tandem_xml_format, MS_intermediate_analysis_format}, {MS_param__internal_yb_ion, MS_ion_series_considered_in_search}, {MS_param__internal_ya_ion, MS_ion_series_considered_in_search}, {MS_param__z_1_ion, MS_ion_series_considered_in_search}, {MS_param__z_2_ion, MS_ion_series_considered_in_search}, {MS_translation_start_codons, MS_search_database_details}, {MS_search_tolerance_specification, MS_search_input_details}, {MS_search_tolerance_plus_value, MS_search_tolerance_specification}, {MS_search_tolerance_minus_value, MS_search_tolerance_specification}, {MS_MGF_scans_OBSOLETE, MS_spectrum_identification_result_details}, {MS_MGF_raw_scans_OBSOLETE, MS_spectrum_identification_result_details}, {MS_spectrum_title_OBSOLETE, MS_spectrum_identification_result_details}, {MS_SpectraST_dot, MS_PSM_level_search_engine_specific_statistic}, {MS_SpectraST_dot_bias, MS_PSM_level_search_engine_specific_statistic}, {MS_SpectraST_discriminant_score_F, MS_PSM_level_search_engine_specific_statistic}, {MS_SpectraST_delta, MS_PSM_level_search_engine_specific_statistic}, {MS_pepXML_format, MS_intermediate_analysis_format}, {MS_protXML_format, MS_intermediate_analysis_format}, {MS_translation_table_description, MS_search_database_details}, {MS_ProteinExtractor_Methodname, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_GenerateNonRedundant, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_IncludeIdentified, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MaxNumberOfProteins, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MaxProteinMass, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MinNumberOfPeptides, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_UseMascot, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MascotPeptideScoreThreshold, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MascotUniqueScore, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MascotUseIdentityScore, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_MascotWeighting, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_UseSequest, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_SequestPeptideScoreThreshold, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_SequestUniqueScore, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_SequestWeighting, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_UseProteinSolver, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_ProteinSolverPeptideScoreThreshold, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_ProteinSolverUniqueScore, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_ProteinSolverWeighting, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_UsePhenyx, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_PhenyxPeptideScoreThreshold, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_PhenyxUniqueScore, MS_ProteinExtractor_input_parameter}, {MS_ProteinExtractor_PhenyxWeighting, MS_ProteinExtractor_input_parameter}, {MS_prot_FDR_threshold, MS_protein_level_statistical_threshold}, {MS_pep_FDR_threshold, MS_peptide_level_statistical_threshold}, {MS_OMSSA_e_value_threshold, MS_OMSSA_input_parameter}, {MS_decoy_DB_details, MS_search_database_details}, {MS_decoy_DB_generation_algorithm, MS_decoy_DB_details}, {MS_decoy_DB_type_shuffle, MS_decoy_DB_details}, {MS_DB_composition_only_decoy, MS_decoy_DB_details}, {MS_quality_estimation_with_implicite_decoy_sequences, MS_quality_estimation_method_details}, {MS_acquisition_software, MS_software}, {MS_analysis_software, MS_software}, {MS_data_processing_software, MS_software}, {MS_unknown_modification, MS_peptide_modification_details}, {MS_greylag, MS_analysis_software}, {MS_PEFF_format, MS_database_file_formats}, {MS_Phenyx_XML_format, MS_mass_spectrometer_file_format}, {MS_Phenyx_XML_format, MS_intermediate_analysis_format}, {MS_DTASelect_format, MS_intermediate_analysis_format}, {MS_MS2_format, MS_mass_spectrometer_file_format}, {MS_taxonomy__NCBI_TaxID, MS_molecule_taxonomy}, {MS_taxonomy__common_name, MS_molecule_taxonomy}, {MS_taxonomy__scientific_name, MS_molecule_taxonomy}, {MS_taxonomy__Swiss_Prot_ID, MS_molecule_taxonomy}, {MS_selected_ion_monitoring_chromatogram, MS_ion_current_chromatogram}, {MS_selected_reaction_monitoring_chromatogram, MS_ion_current_chromatogram}, {MS_consecutive_reaction_monitoring_chromatogram_OBSOLETE, MS_ion_current_chromatogram}, {MS_OMSSA, MS_analysis_software}, {MS_X_Tandem, MS_analysis_software}, {MS_SpectraST, MS_analysis_software}, {MS_Mascot_Parser, MS_analysis_software}, {MS_null_terminated_ASCII_string, MS_binary_data_type}, {MS_SCIEX_TOF_TOF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_SCIEX_TOF_TOF_database, MS_mass_spectrometer_file_format}, {MS_5800_TOF_TOF, MS_SCIEX_instrument_model}, {MS_SCIEX_TOF_TOF_Series_Explorer_Software, MS_SCIEX_software}, {MS_SCIEX_TOF_TOF_Series_Explorer_Software, MS_acquisition_software}, {MS_SCIEX_TOF_TOF_Series_Explorer_Software, MS_analysis_software}, {MS_SCIEX_TOF_TOF_Series_Explorer_Software, MS_data_processing_software}, {MS_intensity_normalization, MS_data_processing_action}, {MS_m_z_calibration, MS_data_processing_action}, {MS_data_filtering, MS_data_processing_action}, {MS_ProteinExtractor, MS_Bruker_software}, {MS_ProteinExtractor, MS_analysis_software}, {MS_Mascot_Distiller, MS_quantitation_software_name}, {MS_Mascot_Distiller, MS_analysis_software}, {MS_Mascot_Integra, MS_analysis_software}, {MS_Percolator, MS_analysis_software}, {MS_percolator_Q_value, MS_PSM_level_search_engine_specific_statistic}, {MS_percolator_score, MS_PSM_level_search_engine_specific_statistic}, {MS_percolator_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_no_threshold, MS_statistical_threshold}, {MS_ProteinScape_SearchResultId, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_SearchEventId, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_ProfoundProbability, MS_PSM_level_search_engine_specific_statistic}, {MS_Profound_z_value, MS_PSM_level_search_engine_specific_statistic}, {MS_Profound_Cluster, MS_PSM_level_search_engine_specific_statistic}, {MS_Profound_ClusterRank, MS_PSM_level_search_engine_specific_statistic}, {MS_MSFit_Mowse_score, MS_PSM_level_search_engine_specific_statistic}, {MS_Sonar_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_PFFSolverExp, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_PFFSolverScore, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_IntensityCoverage, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinScape_SequestMetaScore, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinExtractor_Score, MS_search_engine_specific_score_for_proteins}, {MS_Agilent_MassHunter_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Agilent_MassHunter_format, MS_mass_spectrometer_file_format}, {MS_TSQ_Vantage, MS_Thermo_Scientific_instrument_model}, {MS_Sequence_database_filter_types, MS_database_filtering}, {MS_Sequence_database_filters, MS_database_filtering}, {MS_DB_sequence_filter_pattern, MS_Sequence_database_filters}, {MS_DB_accession_filter_string, MS_Sequence_database_filters}, {MS_frag__c_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__c_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__z_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__z_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__x_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__x_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__precursor_ion___H2O, MS_fragmentation_ion_type}, {MS_frag__precursor_ion___NH3, MS_fragmentation_ion_type}, {MS_frag__precursor_ion, MS_fragmentation_ion_type}, {MS_fragment_neutral_loss, MS_peptide_modification_details}, {MS_precursor_neutral_loss, MS_peptide_modification_details}, {MS_spectrum_from_database_integer_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Proteinscape_spectra, MS_mass_spectrometer_file_format}, {MS_Mascot_query_number, MS_native_spectrum_identifier_format}, {MS_Mascot_query_number, MS_spectrum_identification_result_details}, {MS_spectra_data_details, MS_search_input_details}, {MS_mzML_unique_identifier, MS_spectra_data_details}, {MS_spectrum_from_ProteinScape_database_nativeID_format, MS_native_spectrum_identifier_format}, {MS_spectrum_from_ProteinScape_database_nativeID_format, MS_spectra_data_details}, {MS_spectrum_from_database_string_nativeID_format, MS_native_spectrum_identifier_format}, {MS_spectrum_from_database_string_nativeID_format, MS_spectra_data_details}, {MS_Bruker_Daltonics_esquire_series, MS_Bruker_Daltonics_instrument_model}, {MS_Bruker_Daltonics_flex_series, MS_Bruker_Daltonics_instrument_model}, {MS_Bruker_Daltonics_BioTOF_series, MS_Bruker_Daltonics_instrument_model}, {MS_Bruker_Daltonics_micrOTOF_series, MS_Bruker_Daltonics_instrument_model}, {MS_BioTOF, MS_Bruker_Daltonics_BioTOF_series}, {MS_BioTOF_III, MS_Bruker_Daltonics_BioTOF_series}, {MS_UltroTOF_Q, MS_Bruker_Daltonics_BioTOF_series}, {MS_micrOTOF_II, MS_Bruker_Daltonics_micrOTOF_series}, {MS_maXis, MS_Bruker_Daltonics_maXis_series}, {MS_amaZon_ETD, MS_Bruker_Daltonics_amaZon_series}, {MS_microflex_LRF, MS_Bruker_Daltonics_flex_series}, {MS_ultrafleXtreme, MS_Bruker_Daltonics_flex_series}, {MS_Bruker_Daltonics_amaZon_series, MS_Bruker_Daltonics_instrument_model}, {MS_amaZon_X, MS_Bruker_Daltonics_amaZon_series}, {MS_Bruker_Daltonics_maXis_series, MS_Bruker_Daltonics_instrument_model}, {MS_Bruker_Daltonics_solarix_series, MS_Bruker_Daltonics_instrument_model}, {MS_solariX, MS_Bruker_Daltonics_solarix_series}, {MS_microflex_II, MS_Bruker_Daltonics_flex_series}, {MS_autoflex_II_TOF_TOF, MS_Bruker_Daltonics_flex_series}, {MS_autoflex_III_TOF_TOF_smartbeam, MS_Bruker_Daltonics_flex_series}, {MS_autoflex, MS_Bruker_Daltonics_flex_series}, {MS_Bruker_Daltonics_apex_series, MS_Bruker_Daltonics_instrument_model}, {MS_Shimadzu_Corporation_software, MS_software}, {MS_MALDI_Solutions, MS_acquisition_software}, {MS_MALDI_Solutions, MS_analysis_software}, {MS_MALDI_Solutions, MS_data_processing_software}, {MS_MALDI_Solutions, MS_Shimadzu_Corporation_software}, {MS_SCIEX_TOF_TOF_T2D_nativeID_format, MS_native_spectrum_identifier_format}, {MS_SCIEX_TOF_TOF_T2D_format, MS_mass_spectrometer_file_format}, {MS_Scaffold, MS_analysis_software}, {MS_Scaffold_nativeID_format, MS_native_spectrum_identifier_format}, {MS_SEQUEST_SQT_format, MS_intermediate_analysis_format}, {MS_Discoverer_MSF_format, MS_intermediate_analysis_format}, {MS_IdentityE_XML_format, MS_intermediate_analysis_format}, {MS_ProteinLynx_XML_format, MS_intermediate_analysis_format}, {MS_SpectrumMill_directories, MS_intermediate_analysis_format}, {MS_Scaffold_Peptide_Probability, MS_PSM_level_search_engine_specific_statistic}, {MS_IdentityE_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinLynx_Log_Likelihood, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinLynx_Ladder_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_SpectrumMill_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_SpectrumMill_SPI, MS_PSM_level_search_engine_specific_statistic}, {MS_report_only_spectra_assigned_to_identified_proteins, MS_quality_estimation_method_details}, {MS_Scaffold__Minimum_Peptide_Count, MS_Scaffold_input_parameter}, {MS_Scaffold__Minimum_Protein_Probability, MS_Scaffold_input_parameter}, {MS_Scaffold__Minimum_Peptide_Probability, MS_Scaffold_input_parameter}, {MS_minimum_number_of_enzymatic_termini, MS_common_search_engine_input_parameter}, {MS_Scaffold_Protein_Probability, MS_search_engine_specific_score_for_proteins}, {MS_SpectrumMill_Discriminant_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_FAIMS_compensation_voltage, MS_ion_mobility_attribute}, {MS_XCMS, MS_analysis_software}, {MS_XCMS, MS_data_processing_software}, {MS_MaxQuant, MS_quantitation_software_name}, {MS_MaxQuant, MS_analysis_software}, {MS_combined_pmf___ms_ms_search, MS_search_type}, {MS_MyriMatch, MS_analysis_software}, {MS_DirecTag, MS_analysis_software}, {MS_TagRecon, MS_analysis_software}, {MS_Pepitome, MS_analysis_software}, {MS_MyriMatch_MVH, MS_PSM_level_search_engine_specific_statistic}, {MS_MyriMatch_mzFidelity, MS_PSM_level_search_engine_specific_statistic}, {MS_anchor_protein, MS_protein_group_or_subset_relationship}, {MS_family_member_protein, MS_protein_group_or_subset_relationship}, {MS_group_member_with_undefined_relationship_OR_ortholog_protein, MS_protein_group_or_subset_relationship}, {MS_sequence_same_set_protein, MS_protein_group_or_subset_relationship}, {MS_spectrum_same_set_protein, MS_protein_group_or_subset_relationship}, {MS_sequence_sub_set_protein, MS_protein_group_or_subset_relationship}, {MS_spectrum_sub_set_protein, MS_protein_group_or_subset_relationship}, {MS_sequence_subsumable_protein, MS_protein_group_or_subset_relationship}, {MS_spectrum_subsumable_protein, MS_protein_group_or_subset_relationship}, {MS_protein_inference_confidence_category, MS_protein_group_or_subset_relationship}, {MS_ProteomeDiscoverer_Spectrum_Files_Raw_File_names_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SRF_File_Selector_SRF_File_Path_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Ionization_Source_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Activation_Type_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Lower_RT_Limit, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mass_Analyzer_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Max_Precursor_Mass, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Min_Precursor_Mass, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Minimum_Peak_Count, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_MS_Order_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Polarity_Mode_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Selection, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SN_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Scan_Type_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Total_Intensity_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Activation_Type_Replacements, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Charge_Replacements, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Mass_Analyzer_Replacements, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_MS_Order_Replacements, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Polarity_Replacements, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Upper_RT_Limit, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Mass_Window_Offset, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Maximum_Neutral_Loss_Mass, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Charge_Reduced_Precursor, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Neutral_Loss_Peaks, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Only_Known_Masses, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Overtones, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Peak, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_Mass_Analyzer_Mismatch, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_MS_Order_Mismatch, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Max_RT_Difference_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Grouper_Precursor_Mass_Criterion, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Highest_Charge, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Highest_MZ_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Lowest_Charge, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Lowest_MZ_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Monoisotopic_Mass_Only, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Overlapping_Remainder, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Required_Fitting_Accuracy, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Xtract_Resolution_At_400, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Lowest_Charge_State, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Highest_Charge_State, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Score_Filter_Let_Pass_Above_Scores, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Dynamic_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Static_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Decoy_Search_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Error_tolerant_Search, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Max_MGF_File_Size, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Mascot_Server_URL, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Number_of_attempts_to_submit_the_search, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_X_Static_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_User_Name_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Time_interval_between_attempts_to_submit_a_search, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Enzyme_Name_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Fragment_Mass_Tolerance_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_Mascot_Instrument, MS_Mascot_input_parameter}, {MS_ProteomeDiscoverer_Maximum_Missed_Cleavage_Sites, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Peptide_CutOff_Score, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Precursor_Mass_Tolerance_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Protein_CutOff_Score, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Protein_Database_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Protein_Relevance_Factor, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Target_FDR_Relaxed, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Target_FDR_Strict, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Taxonomy_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Use_Average_Precursor_Mass_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_Mascot_use_MudPIT_scoring_OBSOLETE, MS_Mascot_input_parameter}, {MS_ProteomeDiscoverer_Absolute_XCorr_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Calculate_Probability_Score, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_CTerminal_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Fragment_Ion_Cutoff_Percentage, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Max_Identical_Modifications_Per_Peptide, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Max_Modifications_Per_Peptide, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Maximum_Peptides_Considered, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Maximum_Peptides_Output, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Maximum_Protein_References_Per_Peptide, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_NTerminal_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Peptide_CTerminus, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Peptide_NTerminus, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Peptide_Relevance_Factor, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Protein_Relevance_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Search_Against_Decoy_Database_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Use_Average_Fragment_Masses, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_a_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_b_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_y_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Use_Neutral_Loss_z_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_a_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_b_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_c_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_d_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_v_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_w_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_x_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_y_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Weight_of_z_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_ZCore_Protein_Score_Cutoff, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Method, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Window_Tolerance, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Quantitation_Method, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Exporter_Export_Format_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Exporter_File_name, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Search_Modifications_Only_For_Identified_Proteins, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge1, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge2, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge3, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge4, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge1, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge2, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge3, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge4, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge1, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge2, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge3, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge4, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge1, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge2, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge3, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge4, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_1__Dynamic_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_2__Dynamic_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_3__Dynamic_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_4__Dynamic_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Static_Modification_for_X, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Initial_minimal_peptide_probability, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Minimal_peptide_probability, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Minimal_peptide_weight, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_input1_spectra, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_input2_spectra, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_input3_spectra, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_input4_spectra, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_input5_spectra, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Number_of_predicted_correct_proteins, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Organism_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Reference_Database_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Residue_substitution_list, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Source_file_extension_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Source_Files_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Source_Files_old_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_WinCyg_reference_database, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_WinCyg_source_files, MS_ProteomeDiscoverer_input_parameter}, {MS_LTQ_Orbitrap_Velos, MS_Thermo_Scientific_instrument_model}, {MS_ProteomeDiscoverer_Mascot_Weight_of_A_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_B_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_C_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_D_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_V_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_W_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_X_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_Y_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Weight_of_Z_Ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Use_New_Precursor_Reevaluation, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_SN_Threshold_FTonly, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Please_Do_not_Touch_this, MS_ProteomeDiscoverer_input_parameter}, {MS_contact_phone_number, MS_contact_attribute}, {MS_contact_fax_number, MS_contact_attribute}, {MS_contact_toll_free_phone_number, MS_contact_attribute}, {MS_Mascot_SigThresholdType, MS_Mascot_input_parameter}, {MS_Mascot_ProteinGrouping, MS_Mascot_input_parameter}, {MS_Percolator_features, MS_Percolator_input_parameter}, {MS_ACQUITY_UPLC, MS_Waters_instrument_model}, {MS_ACQUITY_UPLC_H_Class, MS_Waters_instrument_model}, {MS_ACQUITY_UPLC_H_Class_Bio, MS_Waters_instrument_model}, {MS_ACQUITY_UPLC_I_Class, MS_Waters_instrument_model}, {MS_ACQUITY_UPLC_Systems_with_2D_Technology, MS_Waters_instrument_model}, {MS_nanoACQUITY_UPLC, MS_Waters_instrument_model}, {MS_nanoACQUITY_UPLC_System_with_1D_Technology, MS_Waters_instrument_model}, {MS_nanoACQUITY_UPLC_with_HDX_Technology, MS_Waters_instrument_model}, {MS_TRIZAIC_UPLC_nanoTile, MS_Waters_instrument_model}, {MS_GCT_Premier, MS_Waters_instrument_model}, {MS_MALDI_Synapt_G2_HDMS, MS_Waters_instrument_model}, {MS_MALDI_Synapt_G2_MS, MS_Waters_instrument_model}, {MS_MALDI_Synapt_G2_S_HDMS, MS_Waters_instrument_model}, {MS_MALDI_Synapt_G2_S_MS, MS_Waters_instrument_model}, {MS_MALDI_Synapt_HDMS, MS_Waters_instrument_model}, {MS_MALDI_Synapt_MS, MS_Waters_instrument_model}, {MS_Synapt_G2_HDMS, MS_Waters_instrument_model}, {MS_Synapt_G2_MS, MS_Waters_instrument_model}, {MS_Synapt_G2_S_HDMS, MS_Waters_instrument_model}, {MS_Synapt_G2_S_MS, MS_Waters_instrument_model}, {MS_Synapt_HDMS, MS_Waters_instrument_model}, {MS_Synapt_MS, MS_Waters_instrument_model}, {MS_Xevo_G2_Q_Tof, MS_Waters_instrument_model}, {MS_Xevo_G2_Tof, MS_Waters_instrument_model}, {MS_Xevo_Q_Tof, MS_Waters_instrument_model}, {MS_3100, MS_Waters_instrument_model}, {MS_Acquity_SQD, MS_Waters_instrument_model}, {MS_Acquity_TQD, MS_Waters_instrument_model}, {MS_Quattro_micro_GC, MS_Waters_instrument_model}, {MS_Xevo_TQ_MS, MS_Waters_instrument_model}, {MS_Xevo_TQD, MS_Waters_instrument_model}, {MS_Xevo_TQ_S, MS_Waters_instrument_model}, {MS_Mascot_PreferredTaxonomy, MS_Mascot_input_parameter}, {MS_Empower, MS_Waters_software}, {MS_Empower, MS_analysis_software}, {MS_Empower, MS_data_processing_software}, {MS_UNIFY, MS_Waters_software}, {MS_UNIFY, MS_analysis_software}, {MS_UNIFY, MS_data_processing_software}, {MS_LECO_software, MS_software}, {MS_ChromaTOF_software, MS_acquisition_software}, {MS_ChromaTOF_software, MS_analysis_software}, {MS_ChromaTOF_software, MS_data_processing_software}, {MS_ChromaTOF_software, MS_LECO_software}, {MS_LECO_instrument_model, MS_instrument_model}, {MS_Pegasus_HRT, MS_LECO_instrument_model}, {MS_Citius_HRT, MS_LECO_instrument_model}, {MS_Pegasus, MS_LECO_instrument_model}, {MS_TruTOF, MS_LECO_instrument_model}, {MS_quantification_datatype, MS_quantification_information}, {MS_quantification_object_attribute, MS_quantification_information}, {MS_study_variable_attribute, MS_quantification_object_attribute}, {MS_technical_replicate, MS_study_variable_attribute}, {MS_biological_replicate, MS_study_variable_attribute}, {MS_experimental_condition__case_, MS_study_variable_attribute}, {MS_experimental_condition__control_, MS_study_variable_attribute}, {MS_experimental_condition__disease_, MS_study_variable_attribute}, {MS_experimental_condition__healthy_, MS_study_variable_attribute}, {MS_generic_experimental_condition, MS_study_variable_attribute}, {MS_time_series__time_point_X, MS_study_variable_attribute}, {MS_dilution_series__concentration_X, MS_study_variable_attribute}, {MS_raw_file_attribute, MS_quantification_object_attribute}, {MS_one_sample_run, MS_raw_file_attribute}, {MS_two_sample_run, MS_raw_file_attribute}, {MS_three_sample_run, MS_raw_file_attribute}, {MS_four_sample_run, MS_raw_file_attribute}, {MS_eight_sample_run, MS_raw_file_attribute}, {MS_raw_files_group_attribute, MS_quantification_object_attribute}, {MS_merge_of_runs_of_1D_gel_bands, MS_raw_files_group_attribute}, {MS_feature_list_attribute, MS_quantification_object_attribute}, {MS_mass_trace_reporting__rectangles, MS_feature_list_attribute}, {MS_mass_trace_reporting__polygons, MS_feature_list_attribute}, {MS_feature_attribute, MS_quantification_object_attribute}, {MS_SRM_transition_ID, MS_feature_attribute}, {MS_Progenesis_LC_MS, MS_quantitation_software_name}, {MS_SILACAnalyzer, MS_quantitation_software_name}, {MS_SILACAnalyzer, MS_TOPP_software}, {MS_quantitation_software_comment_or_customizations, MS_quantification_information}, {MS_quantitation_analysis_summary, MS_quantification_information}, {MS_LC_MS_label_free_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_SILAC_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_spectral_counting_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_iTRAQ_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_SRM_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_metabolic_labeling_14N___15N_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_LC_MS_feature_intensity, MS_feature_level_quantification_datatype}, {MS_LC_MS_feature_volume, MS_feature_level_quantification_datatype}, {MS_sequence_level_spectral_count, MS_peptide_level_quantification_datatype}, {MS_MS1_feature_maximum_intensity, MS_feature_level_quantification_datatype}, {MS_MS1_feature_area, MS_feature_level_quantification_datatype}, {MS_peak_area_OBSOLETE, MS_quantification_datatype}, {MS_isotopic_pattern_area, MS_quantification_datatype}, {MS_reporter_ion_intensity, MS_quantification_datatype}, {MS_simple_ratio_of_two_values, MS_ratio_calculation_method}, {MS_sum_of_MatchedFeature_values_OBSOLETE, MS_feature_level_quantification_datatype}, {MS_normalized_peptide_value, MS_peptide_level_quantification_datatype}, {MS_protein_value__sum_of_peptide_values, MS_protein_level_quantification_datatype}, {MS_normalized_protein_value, MS_protein_level_quantification_datatype}, {MS_max_fold_change, MS_quantification_datatype}, {MS_ANOVA_p_value, MS_p_value}, {MS_t_test_p_value, MS_p_value}, {MS_reporter_ion_raw_value, MS_quantification_datatype}, {MS_reporter_ion_normalized_value, MS_quantification_datatype}, {MS_XIC_area, MS_quantification_datatype}, {MS_normalized_XIC_area, MS_quantification_datatype}, {MS_protein_value__mean_of_peptide_ratios, MS_protein_level_quantification_datatype}, {MS_normalization_to_mean_of_sum_of_all_proteins, MS_quantification_data_processing}, {MS_quantile_normalization__proteins, MS_quantification_data_processing}, {MS_quantile_normalization__peptides, MS_quantification_data_processing}, {MS_Progenesis_automatic_alignment, MS_quantification_data_processing}, {MS_Progenesis_manual_alignment, MS_quantification_data_processing}, {MS_Progenesis_normalization, MS_quantification_data_processing}, {MS_distinct_peptide_level_q_value, MS_peptide_level_statistical_threshold}, {MS_protein_level_q_value, MS_single_protein_identification_statistic}, {MS_peptide_sequence_level_p_value, MS_peptide_sequence_level_identification_statistic}, {MS_protein_level_p_value, MS_single_protein_identification_statistic}, {MS_peptide_sequence_level_e_value, MS_peptide_sequence_level_identification_statistic}, {MS_protein_level_e_value, MS_single_protein_identification_statistic}, {MS_FDRScore_OBSOLETE, MS_PSM_level_search_engine_specific_statistic}, {MS_FDRScore_OBSOLETE, MS_search_engine_specific_score}, {MS_modification_motif, MS_modification_specificity_rule}, {MS_modification_probability, MS_modification_specificity_rule}, {MS_ChromaTOF_HRT_software, MS_acquisition_software}, {MS_ChromaTOF_HRT_software, MS_analysis_software}, {MS_ChromaTOF_HRT_software, MS_data_processing_software}, {MS_ChromaTOF_HRT_software, MS_LECO_software}, {MS_MALDI_Solutions_Microbial_Identification, MS_MALDI_Solutions}, {MS_offset_voltage, MS_source_attribute}, {MS_in_source_collision_induced_dissociation, MS_dissociation_method}, {MS_mz5_format, MS_mass_spectrometer_file_format}, {MS_coefficient_of_variation, MS_transition_validation_attribute}, {MS_signal_to_noise_ratio, MS_transition_validation_attribute}, {MS_command_line_parameters, MS_data_processing_parameter}, {MS_SQID, MS_analysis_software}, {MS_SQID, MS_data_processing_software}, {MS_SQID_score, MS_PSM_level_search_engine_specific_statistic}, {MS_SQID_deltaScore, MS_PSM_level_search_engine_specific_statistic}, {MS_SQID_protein_score, MS_search_engine_specific_score_for_proteins}, {MS_Progenesis_protein_normalised_abundance, MS_protein_level_quantification_datatype}, {MS_Progenesis_peptide_normalised_abundance, MS_peptide_level_quantification_datatype}, {MS_Progenesis_protein_raw_abundance, MS_protein_level_quantification_datatype}, {MS_Progenesis_peptide_raw_abundance, MS_peptide_level_quantification_datatype}, {MS_Progenesis_confidence_score, MS_quantification_datatype}, {MS_Progenesis_peptide_count, MS_peptide_level_quantification_datatype}, {MS_Progenesis_feature_intensity, MS_feature_level_quantification_datatype}, {MS_MaxQuant_peptide_counts__unique_, MS_peptide_level_quantification_datatype}, {MS_MaxQuant_peptide_counts__all_, MS_peptide_level_quantification_datatype}, {MS_MaxQuant_peptide_counts__razor_unique_, MS_peptide_level_quantification_datatype}, {MS_MaxQuant_sequence_length, MS_peptide_level_quantification_datatype}, {MS_MaxQuant_PEP, MS_quantification_datatype}, {MS_MaxQuant_LFQ_intensity, MS_quantification_datatype}, {MS_MaxQuant_feature_intensity, MS_feature_level_quantification_datatype}, {MS_MaxQuant_MS_MS_count, MS_quantification_datatype}, {MS_emPAI_value, MS_protein_level_quantification_datatype}, {MS_APEX_value, MS_protein_level_quantification_datatype}, {MS_retention_time_window_width, MS_retention_time_window_attribute}, {MS_ISQ, MS_Thermo_Scientific_instrument_model}, {MS_Velos_Plus, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Orbitrap_Elite, MS_Thermo_Scientific_instrument_model}, {MS_Q_Exactive, MS_Thermo_Scientific_instrument_model}, {MS_PinPoint, MS_Thermo_Finnigan_software}, {MS_PinPoint, MS_analysis_software}, {MS_PinPoint, MS_data_processing_software}, {MS_S_lens_voltage, MS_source_attribute}, {MS_pymzML, MS_data_processing_software}, {MS_leukocyte_elastase, MS_cleavage_agent_name}, {MS_proline_endopeptidase, MS_cleavage_agent_name}, {MS_glutamyl_endopeptidase, MS_cleavage_agent_name}, {MS_2_iodobenzoate, MS_cleavage_agent_name}, {MS_ProteomeXchange_accession_number, MS_external_reference_identifier}, {MS_ProteomeXchange_accession_number_version_number, MS_external_reference_identifier}, {MS_Digital_Object_Identifier__DOI_, MS_external_reference_identifier}, {MS_external_reference_keyword, MS_external_reference_data}, {MS_journal_article_keyword, MS_external_reference_keyword}, {MS_submitter_keyword, MS_external_reference_keyword}, {MS_curator_keyword, MS_external_reference_keyword}, {MS_Tranche_file_hash, MS_external_reference_identifier}, {MS_Tranche_project_hash, MS_external_reference_identifier}, {MS_PRIDE_experiment_URI, MS_external_reference_identifier}, {MS_PRIDE_project_URI, MS_external_reference_identifier}, {MS_stainless_steel_plate, MS_sample_plate_type}, {MS_coated_glass_plate, MS_sample_plate_type}, {MS_static_supply_electrospray, MS_electrospray_supply_type}, {MS_fed_supply_electrospray, MS_electrospray_supply_type}, {MS_Collision_cell_exit_potential, MS_precursor_activation_attribute}, {MS_Pegasus_4D, MS_LECO_instrument_model}, {MS_PEAKS_Studio, MS_quantitation_software_name}, {MS_PEAKS_Studio, MS_analysis_software}, {MS_PEAKS_Studio, MS_data_processing_software}, {MS_PEAKS_Online, MS_quantitation_software_name}, {MS_PEAKS_Online, MS_analysis_software}, {MS_PEAKS_Online, MS_data_processing_software}, {MS_PEAKS_Node, MS_quantitation_software_name}, {MS_PEAKS_Node, MS_analysis_software}, {MS_PEAKS_Node, MS_data_processing_software}, {MS_BSI_software, MS_software}, {MS_PEAKS_peptideScore, MS_PSM_level_search_engine_specific_statistic}, {MS_PEAKS_proteinScore, MS_search_engine_specific_score_for_proteins}, {MS_ZCore_probScore, MS_PSM_level_search_engine_specific_statistic}, {MS_no_cleavage, MS_cleavage_agent_name}, {MS_unspecific_cleavage, MS_cleavage_agent_name}, {MS______ALIV_____P_, MS_Cleavage_agent_regular_expression}, {MS______HKR_P____P_, MS_Cleavage_agent_regular_expression}, {MS_______E_E_, MS_Cleavage_agent_regular_expression}, {MS_____W_, MS_Cleavage_agent_regular_expression}, {MS_Mascot_C13_counts, MS_Mascot_input_parameter}, {MS_ProteinExtractor_Weighting, MS_ProteinExtractor_input_parameter}, {MS_ProteinScape_second_round_Mascot, MS_ProteinScape_input_parameter}, {MS_ProteinScape_second_round_Phenyx, MS_ProteinScape_input_parameter}, {MS_product_ion_mobility, MS_product_ion_attribute}, {MS_product_ion_drift_time_OBSOLETE, MS_SRM_transition_attribute}, {MS_PTM_localization_PSM_level_statistic, MS_PTM_localization_single_result_statistic}, {MS_phosphoRS_score, MS_PTM_localization_PSM_level_statistic}, {MS_phosphoRS_sequence_probability, MS_PTM_localization_PSM_level_statistic}, {MS_phosphoRS_site_probability, MS_PTM_localization_PSM_level_statistic}, {MS_PTM_scoring_algorithm_version, MS_peptide_modification_details}, {MS_DeBunker, MS_analysis_software}, {MS_DeBunker_score, MS_PTM_localization_PSM_level_statistic}, {MS_DeBunker_score, MS_PSM_level_search_engine_specific_statistic}, {MS_delta_m_z, MS_spectrum_identification_result_details}, {MS_delta_M, MS_spectrum_identification_result_details}, {MS_MSQuant, MS_analysis_software}, {MS_MSQuant_PTM_score, MS_PTM_localization_PSM_level_statistic}, {MS_MaxQuant_PTM_Score, MS_PTM_localization_PSM_level_statistic}, {MS_MaxQuant_Phospho__STY__Probabilities, MS_PTM_localization_PSM_level_statistic}, {MS_MaxQuant_Phospho__STY__Score_Diffs, MS_PTM_localization_PSM_level_statistic}, {MS_MaxQuant_P_site_localization_probability, MS_PTM_localization_PSM_level_statistic}, {MS_MaxQuant_PTM_Delta_Score, MS_PTM_localization_PSM_level_statistic}, {MS_Ascore_software, MS_analysis_software}, {MS_Ascore, MS_PTM_localization_PSM_level_statistic}, {MS_H_Score, MS_PTM_localization_PSM_level_statistic}, {MS_vacuum_drying_MALDI_sample_preparation, MS_matrix_application_type}, {MS_crushed_crystal_MALDI_sample_preparation, MS_matrix_application_type}, {MS_fast_evaporation_MALDI_sample_preparation, MS_matrix_application_type}, {MS_overlayer_MALDI_sample_preparation, MS_matrix_application_type}, {MS_sandwich_MALDI_sample_preparation, MS_matrix_application_type}, {MS_spin_coating_MALDI_sample_preparation, MS_matrix_application_type}, {MS_quick_and_dirty_MALDI_sample_preparation, MS_matrix_application_type}, {MS_top_hat_baseline_reduction, MS_baseline_reduction}, {MS_convex_hull_baseline_reduction, MS_baseline_reduction}, {MS_median_baseline_reduction, MS_baseline_reduction}, {MS_wavelet_transformation_smoothing, MS_smoothing}, {MS_sophisticated_numerical_annotation_procedure, MS_area_peak_picking}, {MS_area_normalization, MS_intensity_normalization}, {MS_LIFT, MS_dissociation_method}, {MS_MS1_label_based_raw_feature_quantitation, MS_MS1_label_based_analysis}, {MS_MS1_label_based_peptide_level_quantitation, MS_MS1_label_based_analysis}, {MS_MS1_label_based_protein_level_quantitation, MS_MS1_label_based_analysis}, {MS_MS1_label_based_proteingroup_level_quantitation, MS_MS1_label_based_analysis}, {MS_iRT_retention_time_normalization_standard, MS_retention_time_normalization_standard}, {MS_target_SRM_transition, MS_SRM_transition_type}, {MS_decoy_SRM_transition, MS_SRM_transition_type}, {MS_isobaric_label_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_TMT_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_desorption_electrospray_ionization, MS_atmospheric_pressure_ionization}, {MS_Mascot_PTM_site_assignment_confidence, MS_PTM_localization_PSM_level_statistic}, {MS_collision_energy_ramp_start, MS_collision_energy}, {MS_collision_energy_ramp_end, MS_collision_energy}, {MS_spectral_count_peptide_level_quantitation, MS_spectral_counting_quantitation_analysis}, {MS_spectral_count_protein_level_quantitation, MS_spectral_counting_quantitation_analysis}, {MS_spectral_count_proteingroup_level_quantitation, MS_spectral_counting_quantitation_analysis}, {MS_MS1_label_based_analysis, MS_quantitation_analysis_summary}, {MS_label_free_raw_feature_quantitation, MS_LC_MS_label_free_quantitation_analysis}, {MS_label_free_peptide_level_quantitation, MS_LC_MS_label_free_quantitation_analysis}, {MS_label_free_protein_level_quantitation, MS_LC_MS_label_free_quantitation_analysis}, {MS_label_free_proteingroup_level_quantitation, MS_LC_MS_label_free_quantitation_analysis}, {MS_MS2_tag_based_analysis, MS_quantitation_analysis_summary}, {MS_MS2_tag_based_feature_level_quantitation, MS_MS2_tag_based_analysis}, {MS_MS2_tag_based_peptide_level_quantitation, MS_MS2_tag_based_analysis}, {MS_MS2_tag_based_protein_level_quantitation, MS_MS2_tag_based_analysis}, {MS_MS2_tag_based_proteingroup_level_quantitation, MS_MS2_tag_based_analysis}, {MS_nucleic_acid_base_modification, MS_peptide_modification_details}, {MS_original_nucleic_acid_sequence, MS_peptide_modification_details}, {MS_modified_nucleic_acid_sequence, MS_peptide_modification_details}, {MS_PASSEL_transition_group_browser_URI, MS_external_reference_identifier}, {MS_PeptideAtlas_dataset_URI, MS_external_reference_identifier}, {MS_contact_role, MS_contact_attribute}, {MS_first_author, MS_contact_role}, {MS_senior_author, MS_contact_role}, {MS_co_author, MS_contact_role}, {MS_dataset_submitter, MS_contact_role}, {MS_label_free_sample, MS_sample_attribute}, {MS_inlet_attribute, MS_object_attribute}, {MS_inlet_temperature, MS_source_attribute}, {MS_inlet_temperature, MS_inlet_attribute}, {MS_source_temperature, MS_source_attribute}, {MS_modulation_time, MS_run_attribute}, {MS_ProteinProspector, MS_analysis_software}, {MS_ProteinProspector_score, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteinProspector_expectation_value, MS_PSM_level_search_engine_specific_statistic}, {MS_native_source_path, MS_spectrum_generation_information}, {MS_MS_GF, MS_analysis_software}, {MS_MS_GF_, MS_analysis_software}, {MS_MS_GF_RawScore, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_DeNovoScore, MS_search_engine_specific_score_for_proteins}, {MS_MS_GF_Energy, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_SpecEValue, MS_PSM_level_e_value}, {MS_MS_GF_SpecEValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_EValue, MS_PSM_level_e_value}, {MS_MS_GF_EValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_QValue, MS_PSM_level_q_value}, {MS_MS_GF_QValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_PepQValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_GF_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_modification_specificity_protein_N_term, MS_modification_specificity_rule}, {MS_modification_specificity_protein_C_term, MS_modification_specificity_rule}, {MS_Microsoft_Excel, MS_quantitation_software_name}, {MS_database_UniProtKB_TrEMBL, MS_database_UniProtKB}, {MS_metabolic_labelling__natural_N__mainly_14N_, MS_modification_parameters}, {MS_FindPairs, MS_quantitation_software_name}, {MS_peptide_consensus_RT, MS_peptide_level_quantification_datatype}, {MS_peptide_consensus_m_z, MS_peptide_level_quantification_datatype}, {MS_ratio_calculation_method, MS_quantification_datatype}, {MS_protein_value__median_of_peptide_ratios, MS_protein_level_quantification_datatype}, {MS_metabolic_labelling__heavy_N__mainly_15N_, MS_modification_parameters}, {MS_metabolic_labelling_purity, MS_modification_parameters}, {MS_t_test, MS_quantification_data_processing}, {MS_ANOVA_test, MS_quantification_data_processing}, {MS_p_value, MS_quantification_datatype}, {MS_mzIdentML_format, MS_intermediate_analysis_format}, {MS_quantification_file_format, MS_file_format}, {MS_mzQuantML_format, MS_quantification_file_format}, {MS_PAnalyzer, MS_analysis_software}, {MS_impact, MS_Bruker_Daltonics_micrOTOF_series}, {MS_ProteomeDiscoverer_1__Static_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_2__Static_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_Before, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_After, MS_ProteomeDiscoverer_input_parameter}, {MS_first_column_elution_time, MS_scan_attribute}, {MS_second_column_elution_time, MS_scan_attribute}, {MS_multidimensional_chromatography_modulation_description, MS_run_attribute}, {MS_two_dimensional_gas_chromatography_with_fixed_modulation_time, MS_multidimensional_chromatography_modulation_description}, {MS_two_dimensional_gas_chromatography_with_discrete_modulation_time_steps, MS_multidimensional_chromatography_modulation_description}, {MS_two_dimensional_liquid_chromatography_with_fixed_modulation_time, MS_multidimensional_chromatography_modulation_description}, {MS_two_dimensional_liquid_chromatography_with_discrete_modulation_time_steps, MS_multidimensional_chromatography_modulation_description}, {MS_ProteomeDiscoverer_Peptide_Without_Protein_XCorr_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_Calculate_Probability_Scores, MS_common_search_engine_input_parameter}, {MS_ProteomeDiscoverer_Maximum_Delta_Cn, MS_ProteomeDiscoverer_input_parameter}, {MS_Percolator_Validation_based_on, MS_Percolator_input_parameter}, {MS_search_engine_input_parameter, MS_search_input_details}, {MS_common_search_engine_input_parameter, MS_search_engine_input_parameter}, {MS_Mascot_input_parameter, MS_search_engine_specific_input_parameter}, {MS_SEQUEST_input_parameter, MS_search_engine_specific_input_parameter}, {MS_Phenyx_input_parameter, MS_search_engine_specific_input_parameter}, {MS_ProteinExtractor_input_parameter, MS_search_engine_specific_input_parameter}, {MS_OMSSA_input_parameter, MS_search_engine_specific_input_parameter}, {MS_ProteinScape_input_parameter, MS_search_engine_specific_input_parameter}, {MS_ProteomeDiscoverer_input_parameter, MS_search_engine_specific_input_parameter}, {MS_software_input_parameter, MS_search_input_details}, {MS_common_software_input_parameter, MS_software_input_parameter}, {MS_software_specific_input_parameter, MS_software_input_parameter}, {MS_Scaffold_input_parameter, MS_software_specific_input_parameter}, {MS_Percolator_input_parameter, MS_software_specific_input_parameter}, {MS_assay_attribute, MS_quantification_object_attribute}, {MS_assay_label_attribute, MS_quantification_object_attribute}, {MS_protein_group_list_attribute, MS_quantification_object_attribute}, {MS_protein_group_attribute, MS_quantification_object_attribute}, {MS_protein_list_attribute, MS_quantification_object_attribute}, {MS_peptide_consensus_list_attribute, MS_quantification_object_attribute}, {MS_peptide_consensus_attribute, MS_quantification_object_attribute}, {MS_small_molecule_list_attribute, MS_quantification_object_attribute}, {MS_small_molecule_attribute, MS_quantification_object_attribute}, {MS_small_molecule_modification_attribute, MS_quantification_object_attribute}, {MS_experiment_name, MS_quantification_object_attribute}, {MS_spectral_count_feature, MS_feature_attribute}, {MS_counts_reporting, MS_feature_list_attribute}, {MS_x_Tracker, MS_quantitation_software_name}, {MS_ProteoSuite, MS_quantitation_software_name}, {MS_combined_FDRScore_OBSOLETE, MS_PSM_level_search_engine_specific_statistic}, {MS_combined_FDRScore_OBSOLETE, MS_search_engine_specific_score}, {MS_database_UniProtKB, MS_database_name}, {MS_identification_file_attribute, MS_quantification_object_attribute}, {MS_method_file_format, MS_file_format}, {MS_ITRAQAnalyzer, MS_quantitation_software_name}, {MS_ITRAQAnalyzer, MS_TOPP_software}, {MS_identification_file_format, MS_file_format}, {MS_TOPP_noise_filter, MS_TOPP_software}, {MS_TOPP_NoiseFilterGaussian, MS_TOPP_noise_filter}, {MS_TOPP_NoiseFilterSGolay, MS_TOPP_noise_filter}, {MS_TOPP_peak_picker, MS_TOPP_software}, {MS_TOPP_PeakPickerHiRes, MS_TOPP_peak_picker}, {MS_TOPP_PeakPickerWavelet, MS_TOPP_peak_picker}, {MS_TOPP_spectra_filter, MS_TOPP_software}, {MS_TOPP_SpectraFilterBernNorm, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterMarkerMower, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterNLargest, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterNormalizer, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterParentPeakMower, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterScaler, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterSqrtMower, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterThresholdMower, MS_TOPP_spectra_filter}, {MS_TOPP_SpectraFilterWindowMower, MS_TOPP_spectra_filter}, {MS_TOPP_map_aligner, MS_TOPP_software}, {MS_TOPP_MapAlignerIdentification, MS_TOPP_map_aligner}, {MS_TOPP_MapAlignerPoseClustering, MS_TOPP_map_aligner}, {MS_TOPP_MapAlignerSpectrum, MS_TOPP_map_aligner}, {MS_numerator_data_type_attribute, MS_quantification_object_attribute}, {MS_denominator_data_type_attribute, MS_quantification_object_attribute}, {MS_protein_level_PSM_counts, MS_protein_level_quantification_datatype}, {MS_TOPP_DTAExtractor, MS_TOPP_software}, {MS_TOPP_IDMerger, MS_TOPP_software}, {MS_TOPP_IDFileConverter, MS_TOPP_software}, {MS_TOPP_SpectraMerger, MS_TOPP_software}, {MS_TOPP_MzTabExporter, MS_TOPP_software}, {MS_TOPP_MassTraceExtractor, MS_TOPP_software}, {MS_TOPP_PrecursorMassCorrector, MS_TOPP_software}, {MS_TOPP_HighResPrecursorMassCorrector, MS_TOPP_software}, {MS_TOPP_AdditiveSeries, MS_TOPP_software}, {MS_TOPP_Decharger, MS_TOPP_software}, {MS_TOPP_EICExtractor, MS_TOPP_software}, {MS_TOPP_feature_finder, MS_TOPP_software}, {MS_TOPP_FeatureFinderCentroided, MS_TOPP_feature_finder}, {MS_TOPP_FeatureFinderRaw, MS_TOPP_feature_finder}, {MS_TOPP_FeatureFinderIsotopeWavelet, MS_TOPP_feature_finder}, {MS_TOPP_FeatureFinderMetabo, MS_TOPP_feature_finder}, {MS_TOPP_FeatureFinderMRM, MS_TOPP_feature_finder}, {MS_TOPP_ProteinQuantifier, MS_TOPP_software}, {MS_TOPP_ConsensusMapNormalizer, MS_TOPP_software}, {MS_TOPP_MapRTTransformer, MS_TOPP_software}, {MS_TOPP_feature_linker, MS_TOPP_software}, {MS_TOPP_FeatureLinkerLabeled, MS_TOPP_feature_linker}, {MS_TOPP_FeatureLinkerUnlabeled, MS_TOPP_feature_linker}, {MS_TOPP_FeatureLinkerUnlabeledQT, MS_TOPP_feature_linker}, {MS_TOPP_CompNovo, MS_TOPP_software}, {MS_TOPP_CompNovoCID, MS_TOPP_software}, {MS_TOPP_software_adaptor, MS_TOPP_software}, {MS_TOPP_InspectAdapter, MS_TOPP_software_adaptor}, {MS_TOPP_MascotAdapter, MS_TOPP_software_adaptor}, {MS_TOPP_MascotAdapterOnline, MS_TOPP_software_adaptor}, {MS_TOPP_OMSSAAdapter, MS_TOPP_software_adaptor}, {MS_TOPP_PepNovoAdapter, MS_TOPP_software_adaptor}, {MS_TOPP_XTandemAdapter, MS_TOPP_software_adaptor}, {MS_TOPP_SpecLibSearcher, MS_TOPP_software}, {MS_TOPP_ConsensusID, MS_TOPP_software}, {MS_TOPP_IDConflictResolver, MS_TOPP_software}, {MS_TOPP_IDFilter, MS_TOPP_software}, {MS_TOPP_IDMapper, MS_TOPP_software}, {MS_TOPP_IDPosteriorErrorProbability, MS_TOPP_software}, {MS_TOPP_IDRTCalibration, MS_TOPP_software}, {MS_TOPP_PeptideIndexer, MS_TOPP_software}, {MS_TOPP_PrecursorIonSelector, MS_TOPP_software}, {MS_TOPP_MRMMapper, MS_TOPP_software}, {MS_TOPP_OpenSwath_component, MS_TOPP_software}, {MS_TOPP_OpenSwathAnalyzer, MS_TOPP_OpenSwath_component}, {MS_TOPP_OpenSwathChromatogramExtractor, MS_TOPP_OpenSwath_component}, {MS_TOPP_OpenSwathDecoyGenerator, MS_TOPP_OpenSwath_component}, {MS_TOPP_OpenSwathFeatureXMLToTSV, MS_TOPP_OpenSwath_component}, {MS_TOPP_OpenSwathRTNormalizer, MS_TOPP_OpenSwath_component}, {MS_TOPP_ProteinInference, MS_TOPP_software}, {MS_TOPP_FalseDiscoveryRate, MS_TOPP_software}, {MS_ProteoWizard_msconvert, MS_ProteoWizard_software}, {MS_ProteoWizard_idconvert, MS_ProteoWizard_software}, {MS_ProteoWizard_chainsaw, MS_ProteoWizard_software}, {MS_ProteoWizard_msaccess, MS_ProteoWizard_software}, {MS_ProteoWizard_SeeMS, MS_ProteoWizard_software}, {MS_IsobariQ, MS_quantitation_software_name}, {MS_IsobariQ, MS_analysis_software}, {MS_Variance_stabilizing_normalization, MS_quantification_data_processing}, {MS_IPTL_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_PAnalyzer_conclusive_protein, MS_protein_inference_confidence_category}, {MS_PAnalyzer_indistinguishable_protein, MS_protein_inference_confidence_category}, {MS_PAnalyzer_non_conclusive_protein, MS_protein_inference_confidence_category}, {MS_PAnalyzer_ambiguous_group_member, MS_protein_inference_confidence_category}, {MS_decoy_peptide, MS_peptide_sequence_level_identification_attribute}, {MS_percent_collision_energy_ramp_start, MS_normalized_collision_energy}, {MS_percent_collision_energy_ramp_end, MS_normalized_collision_energy}, {MS_MRMaid, MS_SRM_software}, {MS_MRMaid_peptide_score, MS_peptide_sequence_level_identification_attribute}, {MS_MRMaid_peptide_score, MS_search_engine_specific_score_for_proteins}, {MS_SRM_transition_attribute, MS_ion_selection_attribute}, {MS_precursor_ion_detection_probability, MS_SRM_transition_attribute}, {MS_product_ion_detection_probability, MS_SRM_transition_attribute}, {MS_average_product_ion_intensity, MS_product_ion_intensity}, {MS_product_ion_intensity_standard_deviation, MS_product_ion_intensity}, {MS_number_of_product_ion_observations, MS_SRM_transition_attribute}, {MS_number_of_precursor_ion_observations, MS_SRM_transition_attribute}, {MS_ProteomeDiscoverer_Mascot_Significance_Middle, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Mascot_Significance_High, MS_ProteomeDiscoverer_input_parameter}, {MS_regular_expressions_for_a_GUID, MS_regular_expression}, {MS_ProteomeDiscoverer_Default_FDR_calculator, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_SEQUEST_Low_resolution_spectra_contained, MS_ProteomeDiscoverer_input_parameter}, {MS_selected_precursor_m_z, MS_ion_selection_attribute}, {MS_ProteoGrouper_PDH_score, MS_search_engine_specific_score_for_proteins}, {MS_ProteoGrouper_PAG_score, MS_search_engine_specific_score_for_protein_groups}, {MS_mzidLib, MS_analysis_software}, {MS_mzidLib_Omssa2Mzid, MS_mzidLib}, {MS_mzidLib_Tandem2Mzid, MS_mzidLib}, {MS_mzidLib_Csv2Mzid, MS_mzidLib}, {MS_mzidLib_ProteoGrouper, MS_mzidLib}, {MS_mzidLib_Thresholder, MS_mzidLib}, {MS_mzidLib_Perform_emPAI_on_mzid, MS_mzidLib}, {MS_mzidLib_FalseDiscoveryRate, MS_mzidLib}, {MS_mzidLib_Mzidentml2Csv, MS_mzidLib}, {MS_mzidLib_CombineSearchEngines, MS_mzidLib}, {MS_mzidLib_InsertMetaDataFromFasta, MS_mzidLib}, {MS_SEQUEST_spscore, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_sprank, MS_PSM_level_search_engine_specific_statistic}, {MS_SEQUEST_deltacnstar, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet, MS_analysis_software}, {MS_Comet_xcorr, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_deltacn, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_deltacnstar, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_spscore, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_sprank, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_expectation_value, MS_search_engine_specific_score}, {MS_Comet_matched_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_Comet_total_ions, MS_PSM_level_search_engine_specific_statistic}, {MS_PSM_FDR_threshold, MS_PSM_level_statistical_threshold}, {MS_Byonic, MS_analysis_software}, {MS_Byonic_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic_Delta_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic_DeltaMod_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic_Peptide_LogProb, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic_Protein_LogProb, MS_search_engine_specific_score_for_proteins}, {MS_Byonic_Protein_LogProb, MS_search_engine_specific_score_for_proteins}, {MS_Byonic_Best_LogProb, MS_single_protein_identification_statistic}, {MS_Byonic_Best_LogProb, MS_search_engine_specific_score}, {MS_Byonic_Best_Score, MS_search_engine_specific_score_for_proteins}, {MS_chromatography_separation, MS_run_attribute}, {MS_liquid_chromatography_separation, MS_chromatography_separation}, {MS_gas_chromatography_separation, MS_chromatography_separation}, {MS_detector_potential, MS_detector_attribute}, {MS_SQ_Detector_2, MS_Waters_instrument_model}, {MS_Xevo_G2_S_Tof, MS_Waters_instrument_model}, {MS_Xevo_G2_S_QTof, MS_Waters_instrument_model}, {MS_AutoSpec_Premier, MS_Waters_instrument_model}, {MS_Pegasus_III, MS_LECO_instrument_model}, {MS_maXis_4G, MS_Bruker_Daltonics_maXis_series}, {MS_compact, MS_Bruker_Daltonics_micrOTOF_series}, {MS_SRM_feature_level_quantitation, MS_SRM_quantitation_analysis}, {MS_SRM_peptide_level_quantitation, MS_SRM_quantitation_analysis}, {MS_SRM_protein_level_quantitation, MS_SRM_quantitation_analysis}, {MS_SRM_proteingroup_level_quantitation, MS_SRM_quantitation_analysis}, {MS_Trans_Proteomic_Pipeline, MS_analysis_software}, {MS_Trans_Proteomic_Pipeline_software, MS_analysis_software}, {MS_PeptideProphet, MS_Trans_Proteomic_Pipeline_software}, {MS_iProphet, MS_Trans_Proteomic_Pipeline_software}, {MS_ProteinProphet, MS_Trans_Proteomic_Pipeline_software}, {MS_XPRESS, MS_Trans_Proteomic_Pipeline_software}, {MS_Libra, MS_Trans_Proteomic_Pipeline_software}, {MS_PTMProphet, MS_Trans_Proteomic_Pipeline_software}, {MS_Bruker_Daltonics_SCION_series, MS_Bruker_Daltonics_instrument_model}, {MS_Bruker_Daltonics_EVOQ_series, MS_Bruker_Daltonics_instrument_model}, {MS_SCION_SQ, MS_Bruker_Daltonics_SCION_series}, {MS_SCION_TQ, MS_Bruker_Daltonics_SCION_series}, {MS_EVOQ_Elite, MS_Bruker_Daltonics_EVOQ_series}, {MS_EVOQ_Qube, MS_Bruker_Daltonics_EVOQ_series}, {MS_micrOTOF_Q_III, MS_Bruker_Daltonics_micrOTOF_series}, {MS_amaZon_Speed_ETD, MS_Bruker_Daltonics_amaZon_series}, {MS_amaZon_Speed, MS_Bruker_Daltonics_amaZon_series}, {MS_Bruker_Container_format, MS_mass_spectrometer_file_format}, {MS_Bruker_Container_nativeID_format, MS_native_spectrum_identifier_format}, {MS_value_between_0_and_1_inclusive, MS_domain_range}, {MS_value_greater_than_zero, MS_domain_range}, {MS_fragmentation_ion_type, MS_product_ion_attribute}, {MS_fluorescence_detector, MS_detector_type}, {MS_Byonic__Peptide_AbsLogProb, MS_PSM_level_search_engine_specific_statistic}, {MS_Byonic__Protein_AbsLogProb, MS_search_engine_specific_score_for_proteins}, {MS_Byonic__Peptide_AbsLogProb2D, MS_PSM_level_search_engine_specific_statistic}, {MS_MS_Numpress_linear_prediction_compression, MS_binary_data_compression_type}, {MS_MS_Numpress_positive_integer_compression, MS_binary_data_compression_type}, {MS_MS_Numpress_short_logged_float_compression, MS_binary_data_compression_type}, {MS_consensus_result, MS_spectrum_identification_result_details}, {MS_ProteomeDiscoverer_Amanda_high_confidence_threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Amanda_middle_confidence_threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_automatic_workload, MS_ProteomeDiscoverer_input_parameter}, {MS_Amanda_AmandaScore, MS_PSM_level_search_engine_specific_statistic}, {MS_ProteomeDiscoverer_max_differential_modifications, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_max_equal_modifications, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_min_peptide_length, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_max_peptide_length, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_max_number_neutral_loss, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_max_number_neutral_loss_modifications, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_use_flanking_ions, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_max_number_of_same_modifs, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_perform_deisotoping, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_ion_settings, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_3__Static_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_5__Dynamic_Modification_OBSOLETE, MS_ProteomeDiscoverer_input_parameter}, {MS_lab_head, MS_contact_role}, {MS_conversion_software, MS_data_processing_software}, {MS_ProCon, MS_conversion_software}, {MS_PRIDE_Converter2, MS_conversion_software}, {MS_Amanda, MS_analysis_software}, {MS_Andromeda, MS_analysis_software}, {MS_Andromeda_score, MS_PSM_level_search_engine_specific_statistic}, {MS_site_global_FDR, MS_spectrum_identification_result_details}, {MS_ProteomeXchange_project_tag, MS_external_reference_identifier}, {MS_second_pass_peptide_identification, MS_peptide_sequence_level_identification_attribute}, {MS_MZmine, MS_analysis_software}, {MS_MZmine, MS_data_processing_software}, {MS_Maltcms, MS_analysis_software}, {MS_Maltcms, MS_data_processing_software}, {MS_PSM_level_attribute, MS_single_identification_result_attribute}, {MS_protein_group_level_identification_attribute, MS_single_identification_result_attribute}, {MS_PSM_level_identification_statistic, MS_PSM_level_attribute}, {MS_protein_group_level_identification_statistic, MS_protein_group_level_identification_attribute}, {MS_value_greater_than_zero_but_less_than_or_equal_to_one, MS_domain_range}, {MS_PSM_level_global_FDR, MS_PSM_level_result_list_statistic}, {MS_PSM_level_local_FDR, MS_PSM_level_identification_statistic}, {MS_PSM_level_p_value, MS_PSM_level_identification_statistic}, {MS_PSM_level_e_value, MS_PSM_level_identification_statistic}, {MS_PSM_level_q_value, MS_PSM_level_identification_statistic}, {MS_PSM_level_FDRScore, MS_PSM_level_search_engine_specific_statistic}, {MS_PSM_level_FDRScore, MS_search_engine_specific_score_for_proteins}, {MS_PSM_level_combined_FDRScore, MS_PSM_level_search_engine_specific_statistic}, {MS_PSM_level_combined_FDRScore, MS_search_engine_specific_score_for_proteins}, {MS_PSM_level_probability, MS_PSM_level_identification_statistic}, {MS_search_engine_specific_peptide_sequence_level_identification_statistic, MS_peptide_sequence_level_identification_statistic}, {MS_peptide_sequence_level_local_FDR, MS_peptide_sequence_level_identification_statistic}, {MS_distinct_peptide_level_FDRScore, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_distinct_peptide_level_FDRScore, MS_search_engine_specific_score_for_proteins}, {MS_distinct_peptide_level_combined_FDRScore, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_distinct_peptide_level_combined_FDRScore, MS_search_engine_specific_score_for_proteins}, {MS_peptide_sequence_level_probability, MS_peptide_sequence_level_identification_statistic}, {MS_search_engine_specific_score_for_proteins, MS_single_protein_identification_statistic}, {MS_protein_level_local_FDR, MS_single_protein_identification_statistic}, {MS_FDRScore_for_proteins, MS_search_engine_specific_score_for_proteins}, {MS_combined_FDRScore_for_proteins, MS_search_engine_specific_score_for_proteins}, {MS_probability_for_proteins, MS_single_protein_identification_statistic}, {MS_search_engine_specific_score_for_protein_groups, MS_protein_group_level_identification_statistic}, {MS_protein_group_level_global_FDR, MS_protein_group_level_result_list_statistic}, {MS_protein_group_level_local_FDR, MS_protein_group_level_identification_statistic}, {MS_protein_group_level_p_value, MS_protein_group_level_identification_statistic}, {MS_protein_group_level_e_value, MS_protein_group_level_identification_statistic}, {MS_protein_group_level_q_value, MS_protein_group_level_identification_statistic}, {MS_protein_group_level_FDRScore, MS_search_engine_specific_score_for_protein_groups}, {MS_protein_group_level_combined_FDRScore, MS_search_engine_specific_score_for_protein_groups}, {MS_protein_group_level_probability, MS_protein_group_level_identification_statistic}, {MS_ProteomeDiscoverer_Relaxed_Score_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Strict_Score_Threshold, MS_ProteomeDiscoverer_input_parameter}, {MS_ProteomeDiscoverer_Peptide_Without_Protein_Cut_Off_Score, MS_ProteomeDiscoverer_input_parameter}, {MS_false_localization_rate, MS_spectrum_identification_result_details}, {MS_MALDI_Solutions_LC_MALDI, MS_acquisition_software}, {MS_MALDI_Solutions_LC_MALDI, MS_analysis_software}, {MS_MALDI_Solutions_LC_MALDI, MS_data_processing_software}, {MS_MALDI_Solutions_LC_MALDI, MS_Shimadzu_Corporation_software}, {MS_Shimadzu_MALDI_7090, MS_Shimadzu_MALDI_TOF_instrument_model}, {MS_SCiLS_software, MS_software}, {MS_SCiLS_Lab, MS_SCiLS_software}, {MS_SCiLS_Lab, MS_analysis_software}, {MS_SCiLS_Lab, MS_data_processing_software}, {MS_SCiLS_Lab_format, MS_mass_spectrometer_file_format}, {MS_preprocessing_software, MS_data_processing_software}, {MS_PIA, MS_postprocessing_software}, {MS_PIA, MS_analysis_software}, {MS_PIA_XML_format, MS_intermediate_analysis_format}, {MS_PIA_workflow_parameter, MS_software_specific_input_parameter}, {MS_PIA_workflow_parameter, MS_search_engine_specific_input_parameter}, {MS_PIA_FDRScore_calculated, MS_PIA_workflow_parameter}, {MS_PIA_Combined_FDRScore_calculated, MS_PIA_workflow_parameter}, {MS_PIA_PSM_sets_created, MS_PIA_workflow_parameter}, {MS_PIA_used_top_identifications_for_FDR, MS_PIA_workflow_parameter}, {MS_PIA_protein_score, MS_search_engine_specific_score_for_proteins}, {MS_PIA_protein_inference, MS_PIA_workflow_parameter}, {MS_PIA_protein_inference_filter, MS_PIA_workflow_parameter}, {MS_PIA_protein_inference_scoring, MS_PIA_workflow_parameter}, {MS_PIA_protein_inference_used_score, MS_PIA_workflow_parameter}, {MS_PIA_protein_inference_used_PSMs, MS_PIA_workflow_parameter}, {MS_PIA_filter, MS_PIA_workflow_parameter}, {MS_leading_protein, MS_protein_group_or_subset_relationship}, {MS_non_leading_protein, MS_protein_group_or_subset_relationship}, {MS_group_representative, MS_protein_group_or_subset_relationship}, {MS_count_of_identified_proteins, MS_protein_level_result_list_attribute}, {MS_protein_group_level_result_list_attribute, MS_result_list_attribute}, {MS_count_of_identified_clusters, MS_protein_group_level_result_list_attribute}, {MS_cluster_identifier, MS_protein_cluster_identification_attribute}, {MS_number_of_distinct_protein_sequences, MS_protein_group_level_result_list_attribute}, {MS_marginally_distinguished_protein, MS_protein_group_or_subset_relationship}, {MS_Anubis, MS_SRM_software}, {MS_Anubis, MS_quantitation_software_name}, {MS_TraML_format, MS_method_file_format}, {MS_total_XIC_area, MS_peptide_level_quantification_datatype}, {MS_product_background, MS_quantification_datatype}, {MS_postprocessing_software, MS_data_processing_software}, {MS_protein_group_passes_threshold, MS_protein_group_level_identification_attribute}, {MS_Orbitrap_Fusion, MS_Thermo_Scientific_instrument_model}, {MS_Orbitrap_Fusion_ETD, MS_Thermo_Scientific_instrument_model}, {MS_TSQ_Quantiva, MS_Thermo_Scientific_instrument_model}, {MS_TSQ_Endura, MS_Thermo_Scientific_instrument_model}, {MS_PASSEL_experiment_URI, MS_external_reference_identifier}, {MS_Paragon_input_parameter, MS_search_engine_specific_input_parameter}, {MS_Paragon__sample_type, MS_Paragon_input_parameter}, {MS_Paragon__cysteine_alkylation, MS_Paragon_input_parameter}, {MS_Paragon__instrument_setting, MS_Paragon_input_parameter}, {MS_Paragon__search_effort, MS_Paragon_input_parameter}, {MS_Paragon__ID_focus, MS_Paragon_input_parameter}, {MS_Paragon__FDR_analysis, MS_Paragon_input_parameter}, {MS_Paragon__quantitation, MS_Paragon_input_parameter}, {MS_Paragon__background_correction, MS_Paragon_input_parameter}, {MS_Paragon__bias_correction, MS_Paragon_input_parameter}, {MS_Paragon__channel_to_use_as_denominator_in_ratios, MS_Paragon_input_parameter}, {MS_search_engine_specific_input_metadata, MS_search_input_details}, {MS_Paragon__modified_data_dictionary_or_parameter_translation, MS_search_engine_specific_input_metadata}, {MS_number_of_spectra_searched, MS_search_input_details}, {MS_data_processing_start_time, MS_data_processing_parameter}, {MS_Paragon__digestion, MS_search_input_details}, {MS_number_of_decoy_sequences, MS_search_database_details}, {MS_final_PSM_list, MS_spectrum_identification_list_result_details}, {MS_intermediate_PSM_list, MS_spectrum_identification_list_result_details}, {MS_Andi_MS_format, MS_mass_spectrometer_file_format}, {MS_chromatograph_file_format, MS_file_format}, {MS_Andi_CHROM_format, MS_chromatograph_file_format}, {MS_6420_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6460_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6490_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_Paragon_special_factor, MS_Paragon_input_parameter}, {MS_PEAKS_inChorusPeptideScore, MS_PSM_level_search_engine_specific_statistic}, {MS_PEAKS_inChorusProteinScore, MS_search_engine_specific_score_for_proteins}, {MS_param__b_ion_H3PO4_DEPRECATED, MS_ions_series_considered_in_search}, {MS_param__y_ion_H3PO4_DEPRECATED, MS_ions_series_considered_in_search}, {MS_Maui, MS_analysis_software}, {MS_Maui, MS_data_processing_software}, {MS_No_fixed_modifications_searched, MS_common_search_engine_input_parameter}, {MS_No_variable_modifications_searched, MS_common_search_engine_input_parameter}, {MS_H2O_neutral_loss_OBSOLETE, MS_neutral_loss}, {MS_H2O_neutral_loss_OBSOLETE, MS_ion_series_considered_in_search}, {MS_NH3_neutral_loss_OBSOLETE, MS_neutral_loss}, {MS_NH3_neutral_loss_OBSOLETE, MS_ion_series_considered_in_search}, {MS_H3PO4_neutral_loss_OBSOLETE, MS_neutral_loss}, {MS_H3PO4_neutral_loss_OBSOLETE, MS_ion_series_considered_in_search}, {MS_PeptideShaker, MS_analysis_software}, {MS_MS_Amanda_csv_format, MS_intermediate_analysis_format}, {MS_protein_group_level_global_FNR, MS_protein_group_level_result_list_statistic}, {MS_protein_group_level_confidence, MS_protein_group_level_identification_statistic}, {MS_peptide_sequence_level_global_FNR, MS_peptide_sequence_level_result_list_statistic}, {MS_peptide_sequence_level_global_confidence, MS_peptide_sequence_level_result_list_statistic}, {MS_PSM_level_global_FNR, MS_PSM_level_result_list_statistic}, {MS_PSM_level_global_confidence, MS_PSM_level_result_list_statistic}, {MS_PeptideShaker_PSM_score, MS_PSM_level_search_engine_specific_statistic}, {MS_PeptideShaker_PSM_confidence, MS_PSM_level_search_engine_specific_statistic}, {MS_PeptideShaker_peptide_score, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_PeptideShaker_peptide_score, MS_search_engine_specific_score_for_proteins}, {MS_PeptideShaker_peptide_confidence, MS_search_engine_specific_score_for_proteins}, {MS_PeptideShaker_protein_group_score, MS_search_engine_specific_score_for_proteins}, {MS_PeptideShaker_protein_group_score, MS_search_engine_specific_score_for_protein_groups}, {MS_PeptideShaker_protein_group_confidence, MS_search_engine_specific_score_for_proteins}, {MS_trap_type_collision_induced_dissociation, MS_collision_induced_dissociation}, {MS_ion_series_considered_in_search, MS_search_input_details}, {MS_ProteoAnnotator_non_canonical_gene_model_score, MS_search_engine_specific_score_for_protein_groups}, {MS_ProteoAnnotator_count_alternative_peptides, MS_search_engine_specific_score_for_protein_groups}, {MS_ion_mobility_drift_time, MS_ion_selection_attribute}, {MS_ion_mobility_drift_time, MS_ion_mobility_attribute}, {MS_mean_ion_mobility_drift_time_array, MS_ion_mobility_array}, {MS_mean_charge_array, MS_binary_data_array}, {MS_regular_expression_for_a_digital_object_identifier__DOI_, MS_regular_expression}, {MS_higher_energy_beam_type_collision_induced_dissociation, MS_beam_type_collision_induced_dissociation}, {MS_statistical_threshold, MS_quality_estimation_method_details}, {MS_PSM_level_statistical_threshold, MS_spectrum_identification_statistical_threshold}, {MS_peptide_level_statistical_threshold, MS_spectrum_identification_statistical_threshold}, {MS_protein_level_statistical_threshold, MS_protein_detection_statistical_threshold}, {MS_protein_group_level_statistical_threshold, MS_protein_detection_statistical_threshold}, {MS_MassIVE_dataset_identifier, MS_external_reference_identifier}, {MS_MassIVE_dataset_URI, MS_external_reference_identifier}, {MS_special_processing, MS_search_type}, {MS_peptide_level_scoring, MS_special_processing}, {MS_modification_localization_scoring, MS_special_processing}, {MS_consensus_scoring, MS_special_processing}, {MS_sample_pre_fractionation, MS_special_processing}, {MS_cross_linking_search, MS_special_processing}, {MS_no_special_processing, MS_special_processing}, {MS_group_PSMs_by_sequence, MS_identification_parameter}, {MS_group_PSMs_by_sequence_with_modifications, MS_identification_parameter}, {MS_group_PSMs_by_sequence_with_modifications_and_charge, MS_identification_parameter}, {MS_peptide_level_score_OBSOLETE, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_peptide_passes_threshold, MS_peptide_sequence_level_identification_attribute}, {MS_no_PSM_threshold, MS_PSM_level_result_list_statistic}, {MS_no_peptide_level_threshold, MS_peptide_sequence_level_identification_attribute}, {MS_PSM_is_used_for_peptide_level_scoring, MS_peptide_sequence_level_identification_attribute}, {MS_modification_index, MS_modification_parameters}, {MS_regular_expression_for_modification_localization_scoring, MS_regular_expression}, {MS_modification_position_score, MS_modification_parameters}, {MS_modification_rescoring_false_localization_rate, MS_modification_position_score}, {MS_cross_linking_attribute, MS_single_identification_result_attribute}, {MS_cross_link_donor, MS_cross_linking_attribute}, {MS_cross_link_acceptor, MS_cross_linking_attribute}, {MS_cross_link_spectrum_identification_item, MS_cross_linking_attribute}, {MS_cross_linking_score, MS_search_engine_specific_score_for_proteins}, {MS_molecules_per_cell, MS_quantification_datatype}, {MS_absolute_quantitation_analysis, MS_quantitation_analysis_summary}, {MS_internal_peptide_reference_used, MS_quantitation_software_comment_or_customizations}, {MS_internal_protein_reference_used, MS_quantitation_software_comment_or_customizations}, {MS_internal_reference_abundance, MS_quantification_datatype}, {MS_Progenesis_protein_group_normalised_abundance, MS_protein_group_level_quantification_datatype}, {MS_Progenesis_protein_group_raw_abundance, MS_protein_group_level_quantification_datatype}, {MS_peptide_group_ID, MS_peptide_sequence_level_identification_attribute}, {MS_mass_spectrometry_imaging, MS_run_attribute}, {MS_ProteomeDiscoverer_1__Static_Terminal_Modification, MS_ProteomeDiscoverer_input_parameter}, {MS_Q_Exactive_HF, MS_Thermo_Scientific_instrument_model}, {MS_PepFinder, MS_data_processing_software}, {MS_TSQ_8000_Evo, MS_Thermo_Scientific_instrument_model}, {MS_Exactive_Plus, MS_Thermo_Scientific_instrument_model}, {MS_instrument_specific_scan_attribute, MS_scan_attribute}, {MS_synchronous_prefilter_selection, MS_instrument_specific_scan_attribute}, {MS_resolution_array, MS_binary_data_array}, {MS_baseline_array, MS_binary_data_array}, {MS_UIMF_format, MS_mass_spectrometer_file_format}, {MS_UIMF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_TripleTOF_6600, MS_SCIEX_instrument_model}, {MS_ProLuCID_xcorr, MS_PSM_level_search_engine_specific_statistic}, {MS_ProLuCID_deltacn, MS_PSM_level_search_engine_specific_statistic}, {MS_D_Score, MS_PTM_localization_PSM_level_statistic}, {MS_MD_Score, MS_PTM_localization_PSM_level_statistic}, {MS_PTM_localization_confidence_metric, MS_spectrum_identification_result_details}, {MS_PeptideShaker_PTM_confidence_type, MS_PTM_localization_confidence_metric}, {MS_PeptideShaker_PSM_confidence_type, MS_PSM_level_identification_statistic}, {MS_PeptideShaker_peptide_confidence_type, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_PeptideShaker_protein_confidence_type, MS_single_protein_identification_statistic}, {MS_xiFDR, MS_analysis_software}, {MS_xi, MS_analysis_software}, {MS_xi_score, MS_PSM_level_search_engine_specific_statistic}, {MS_Skyline_mzQuantML_converter, MS_quantitation_software_name}, {MS_Skyline_mzQuantML_converter, MS_analysis_software}, {MS_normalized_spectral_abundance_factor, MS_quantification_datatype}, {MS_distributed_normalized_spectral_abundance_factor, MS_quantification_datatype}, {MS_PTM_localization_distinct_peptide_level_statistic, MS_PTM_localization_single_result_statistic}, {MS_peptide_phosphoRS_score, MS_PTM_localization_distinct_peptide_level_statistic}, {MS_peptide_Ascore, MS_PTM_localization_distinct_peptide_level_statistic}, {MS_peptide_H_Score, MS_PTM_localization_distinct_peptide_level_statistic}, {MS_peptide_D_Score, MS_PTM_localization_distinct_peptide_level_statistic}, {MS_peptide_MD_Score, MS_PTM_localization_distinct_peptide_level_statistic}, {MS_PTM_localization_score_threshold, MS_spectrum_identification_result_details}, {MS_Ascore_threshold, MS_PTM_localization_score_threshold}, {MS_D_Score_threshold, MS_PTM_localization_score_threshold}, {MS_MD_Score_threshold, MS_PTM_localization_score_threshold}, {MS_H_Score_threshold, MS_PTM_localization_score_threshold}, {MS_DeBunker_score_threshold, MS_PTM_localization_score_threshold}, {MS_Mascot_PTM_site_assignment_confidence_threshold, MS_PTM_localization_score_threshold}, {MS_MSQuant_PTM_score_threshold, MS_PTM_localization_score_threshold}, {MS_MaxQuant_PTM_Score_threshold, MS_PTM_localization_score_threshold}, {MS_MaxQuant_P_site_localization_probability_threshold, MS_PTM_localization_score_threshold}, {MS_MaxQuant_PTM_Delta_Score_threshold, MS_PTM_localization_score_threshold}, {MS_MaxQuant_Phospho__STY__Probabilities_threshold, MS_PTM_localization_score_threshold}, {MS_phosphoRS_score_threshold, MS_PTM_localization_score_threshold}, {MS_phosphoRS_site_probability_threshold, MS_PTM_localization_score_threshold}, {MS_ProteomeDiscoverer_Number_of_Spectra_Processed_At_Once, MS_ProteomeDiscoverer_input_parameter}, {MS_sequence_multiply_subsumable_protein, MS_protein_group_or_subset_relationship}, {MS_spectrum_multiply_subsumable_protein, MS_protein_group_or_subset_relationship}, {MS_protein_detection_statistical_threshold, MS_statistical_threshold}, {MS_spectrum_identification_statistical_threshold, MS_statistical_threshold}, {MS_ASAPRatio, MS_Trans_Proteomic_Pipeline_software}, {MS_Tide, MS_analysis_software}, {MS_Andromeda_result_format, MS_intermediate_analysis_format}, {MS_2000_QTRAP, MS_SCIEX_instrument_model}, {MS_2500_QTRAP, MS_SCIEX_instrument_model}, {MS_3500_QTRAP, MS_SCIEX_instrument_model}, {MS_QTRAP_4500, MS_SCIEX_instrument_model}, {MS_QTRAP_6500, MS_SCIEX_instrument_model}, {MS_QTRAP_6500_, MS_SCIEX_instrument_model}, {MS_TripleTOF_4600, MS_SCIEX_instrument_model}, {MS_TripleTOF_5600_, MS_SCIEX_instrument_model}, {MS_API_100, MS_SCIEX_instrument_model}, {MS_API_100LC, MS_SCIEX_instrument_model}, {MS_API_165, MS_SCIEX_instrument_model}, {MS_API_300, MS_SCIEX_instrument_model}, {MS_API_350, MS_SCIEX_instrument_model}, {MS_API_365, MS_SCIEX_instrument_model}, {MS_Triple_Quad_3500, MS_SCIEX_instrument_model}, {MS_Triple_Quad_4500, MS_SCIEX_instrument_model}, {MS_Triple_Quad_5500, MS_SCIEX_instrument_model}, {MS_Triple_Quad_6500, MS_SCIEX_instrument_model}, {MS_Triple_Quad_6500_, MS_SCIEX_instrument_model}, {MS_ProLuCID, MS_analysis_software}, {MS_MS1_format, MS_mass_spectrometer_file_format}, {MS_DTASelect, MS_analysis_software}, {MS_splash_key, MS_spectrum_identification_result_details}, {MS_PRIDE_XML, MS_identification_file_format}, {MS_PRIDE_XML, MS_spectrum_identification_result_details}, {MS_mzTab, MS_tab_delimited_text_format}, {MS_sample_label, MS_assay_label_attribute}, {MS_sample_label, MS_sample_attribute}, {MS_ICAT_reagent, MS_sample_label}, {MS_ICAT_heavy_reagent, MS_ICAT_reagent}, {MS_ICAT_light_reagent, MS_ICAT_reagent}, {MS_ICPL_reagent, MS_sample_label}, {MS_ICPL_reagent_0, MS_ICPL_reagent}, {MS_ICPL_reagent_4, MS_ICPL_reagent}, {MS_ICPL_reagent_6, MS_ICPL_reagent}, {MS_ICPL_reagent_10, MS_ICPL_reagent}, {MS_SILAC_reagent, MS_sample_label}, {MS_SILAC_heavy_reagent, MS_SILAC_reagent}, {MS_SILAC_medium_reagent, MS_SILAC_reagent}, {MS_SILAC_light_reagent, MS_SILAC_reagent}, {MS_TMT_reagent, MS_sample_label}, {MS_TMT_reagent_126, MS_TMT_reagent}, {MS_TMT_reagent_127, MS_TMT_reagent}, {MS_TMT_reagent_128, MS_TMT_reagent}, {MS_TMT_reagent_129, MS_TMT_reagent}, {MS_TMT_reagent_130, MS_TMT_reagent}, {MS_TMT_reagent_131, MS_TMT_reagent}, {MS_iTRAQ_reagent, MS_sample_label}, {MS_iTRAQ_reagent_113, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_114, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_115, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_116, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_117, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_118, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_119, MS_iTRAQ_reagent}, {MS_iTRAQ_reagent_121, MS_iTRAQ_reagent}, {MS_Electron_Transfer_Higher_Energy_Collision_Dissociation__EThcD_, MS_dissociation_method}, {MS_jPOST_dataset_identifier, MS_external_reference_identifier}, {MS_jPOST_dataset_URI, MS_external_reference_identifier}, {MS_Q_Exactive_Plus, MS_Thermo_Scientific_instrument_model}, {MS_proteogenomics_search, MS_special_processing}, {MS_proteogenomics_attribute, MS_peptide_sequence_level_identification_attribute}, {MS_chromosome_name, MS_proteogenomics_attribute}, {MS_chromosome_strand, MS_proteogenomics_attribute}, {MS_peptide_start_on_chromosome_OBSOLETE, MS_proteogenomics_attribute}, {MS_peptide_end_on_chromosome, MS_proteogenomics_attribute}, {MS_peptide_exon_count, MS_proteogenomics_attribute}, {MS_peptide_exon_nucleotide_sizes, MS_proteogenomics_attribute}, {MS_peptide_start_positions_on_chromosome, MS_proteogenomics_attribute}, {MS_genome_reference_version, MS_proteogenomics_attribute}, {MS_MSDK, MS_analysis_software}, {MS_MSDK, MS_data_processing_software}, {MS_Thermo_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_Waters_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_WIFF_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_Bruker_Agilent_YEP_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_Bruker_BAF_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_Bruker_FID_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_multiple_peak_list_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_single_peak_list_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_scan_number_only_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_spectrum_identifier_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_mzML_unique_identifier__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_UniProtKB_text_sequence_format, MS_database_file_formats}, {MS_UniProtKB_XML_sequence_format, MS_database_file_formats}, {MS_Morpheus, MS_analysis_software}, {MS_Morpheus_Morpheus_score, MS_PSM_level_search_engine_specific_statistic}, {MS_Morpheus_summed_Morpheus_score, MS_search_engine_specific_score_for_protein_groups}, {MS_interaction_score_derived_from_cross_linking, MS_cross_linking_result_details}, {MS_regular_expression_for_interaction_scores_derived_from_cross_linking, MS_regular_expression}, {MS_impact_II, MS_Bruker_Daltonics_micrOTOF_series}, {MS_impact_HD, MS_Bruker_Daltonics_micrOTOF_series}, {MS_frag__iTRAQ_4plex_reporter_ion, MS_fragmentation_ion_type}, {MS_frag__iTRAQ_8plex_reporter_ion, MS_fragmentation_ion_type}, {MS_frag__TMT_reporter_ion, MS_fragmentation_ion_type}, {MS_frag__TMT_ETD_reporter_ion, MS_fragmentation_ion_type}, {MS_no_modification_threshold, MS_PTM_localization_score_threshold}, {MS_OpenXQuest, MS_TOPP_software}, {MS_X500R_QTOF, MS_SCIEX_instrument_model}, {MS_protein_pair_level_global_FDR, MS_interaction_score_derived_from_cross_linking}, {MS_residue_pair_level_global_FDR, MS_interaction_score_derived_from_cross_linking}, {MS_supplemental_beam_type_collision_induced_dissociation, MS_beam_type_collision_induced_dissociation}, {MS_supplemental_collision_induced_dissociation, MS_collision_induced_dissociation}, {MS_supplemental_collision_energy, MS_precursor_activation_attribute}, {MS_OpenXQuest_combined_score, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_combined_score, MS_search_engine_specific_score}, {MS_OpenXQuest_xcorr_xlink, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_xcorr_xlink, MS_search_engine_specific_score}, {MS_OpenXQuest_xcorr_common, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_xcorr_common, MS_search_engine_specific_score}, {MS_OpenXQuest_match_odds, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_match_odds, MS_search_engine_specific_score}, {MS_OpenXQuest_intsum, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_intsum, MS_search_engine_specific_score}, {MS_OpenXQuest_wTIC, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenXQuest_wTIC, MS_search_engine_specific_score}, {MS_analysis_attribute, MS_spectrum_identification_result_details}, {MS_PTM_localization_attribute, MS_analysis_attribute}, {MS_PTM_localization_single_result_statistic, MS_PTM_localization_attribute}, {MS_PTM_localization_result_list_statistic, MS_PTM_localization_attribute}, {MS_global_FLR, MS_PTM_localization_result_list_statistic}, {MS_local_FLR_at_threshold, MS_PTM_localization_result_list_statistic}, {MS_identification_attribute, MS_analysis_attribute}, {MS_single_identification_result_attribute, MS_identification_attribute}, {MS_frag__isobaric_label_ion, MS_fragmentation_ion_type}, {MS_secondary_isotope_peak, MS_fragmentation_ion_type}, {MS_protein_cluster_identification_attribute, MS_single_identification_result_attribute}, {MS_result_list_attribute, MS_identification_attribute}, {MS_PSM_level_result_list_attribute, MS_result_list_attribute}, {MS_PSM_level_result_list_statistic, MS_PSM_level_result_list_attribute}, {MS_peptide_sequence_level_result_list_attribute, MS_result_list_attribute}, {MS_peptide_sequence_level_result_list_statistic, MS_peptide_sequence_level_result_list_attribute}, {MS_protein_level_result_list_attribute, MS_result_list_attribute}, {MS_protein_level_result_list_statistic, MS_protein_level_result_list_attribute}, {MS_protein_group_level_result_list_statistic, MS_protein_group_level_result_list_attribute}, {MS_____KR__, MS_Cleavage_agent_regular_expression}, {MS_LysargiNase, MS_cleavage_agent_name}, {MS_Pegasus_BT, MS_LECO_instrument_model}, {MS_MSPathFinder, MS_analysis_software}, {MS_MSPathFinder_SpecEValue, MS_PSM_level_e_value}, {MS_MSPathFinder_SpecEValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MSPathFinder_EValue, MS_PSM_level_e_value}, {MS_MSPathFinder_EValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MSPathFinder_QValue, MS_PSM_level_q_value}, {MS_MSPathFinder_QValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MSPathFinder_PepQValue, MS_PSM_level_search_engine_specific_statistic}, {MS_MSPathFinder_RawScore, MS_PSM_level_search_engine_specific_statistic}, {MS_SYNAPT_G2_Si, MS_Waters_instrument_model}, {MS_MALDI_SYNAPT_G2_Si, MS_Waters_instrument_model}, {MS_Vion_IMS_QTof, MS_Waters_instrument_model}, {MS_Xevo_G2_XS_Tof, MS_Waters_instrument_model}, {MS_Xevo_TQ_XS, MS_Waters_instrument_model}, {MS_Xevo_TQ_S_micro, MS_Waters_instrument_model}, {MS_Orbitrap_Fusion_Lumos, MS_Thermo_Scientific_instrument_model}, {MS_peptide_level_spectral_count, MS_peptide_level_quantification_datatype}, {MS_peptide_ion_level_spectral_count, MS_peptide_level_quantification_datatype}, {MS_feature_level_quantification_datatype, MS_quantification_datatype}, {MS_PSM_level_quantification_datatype, MS_quantification_datatype}, {MS_peptide_level_quantification_datatype, MS_quantification_datatype}, {MS_protein_level_quantification_datatype, MS_quantification_datatype}, {MS_protein_group_level_quantification_datatype, MS_quantification_datatype}, {MS_unmapped_peptide, MS_proteogenomics_attribute}, {MS_unmapped_protein, MS_proteogenomics_attribute}, {MS_noise_array, MS_binary_data_array}, {MS_sampled_noise_m_z_array, MS_binary_data_array}, {MS_sampled_noise_intensity_array, MS_binary_data_array}, {MS_sampled_noise_baseline_array, MS_binary_data_array}, {MS_MS_Numpress_linear_prediction_compression_followed_by_zlib_compression, MS_binary_data_compression_type}, {MS_MS_Numpress_positive_integer_compression_followed_by_zlib_compression, MS_binary_data_compression_type}, {MS_MS_Numpress_short_logged_float_compression_followed_by_zlib_compression, MS_binary_data_compression_type}, {MS_Mascot_IntegratedSpectralLibrarySearch, MS_Mascot_input_parameter}, {MS_NIST_MSPepSearch, MS_analysis_software}, {MS_NIST_MSP_format, MS_database_file_formats}, {MS_database_type_spectral_library, MS_database_type_amino_acid}, {MS_value_between_0_and_1000_inclusive, MS_domain_range}, {MS_MSPepSearch_score, MS_PSM_level_search_engine_specific_statistic}, {MS_combined_ms_ms___spectral_library_search, MS_search_type}, {MS_iodoTMT_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_glyco_TMT_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_aminoxyTMT_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_hydrazideTMT_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_iTRAQH_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_DiART_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_DiLeu_quantitation_analysis, MS_isobaric_label_quantitation_analysis}, {MS_TMT_reagent_127N, MS_TMT_reagent}, {MS_TMT_reagent_127C, MS_TMT_reagent}, {MS_TMT_reagent_128N, MS_TMT_reagent}, {MS_TMT_reagent_128C, MS_TMT_reagent}, {MS_TMT_reagent_129N, MS_TMT_reagent}, {MS_TMT_reagent_129C, MS_TMT_reagent}, {MS_TMT_reagent_130N, MS_TMT_reagent}, {MS_TMT_reagent_130C, MS_TMT_reagent}, {MS_DiART_reagent, MS_sample_label}, {MS_DiART_reagent_114, MS_DiART_reagent}, {MS_DiART_reagent_115, MS_DiART_reagent}, {MS_DiART_reagent_116, MS_DiART_reagent}, {MS_DiART_reagent_117, MS_DiART_reagent}, {MS_DiART_reagent_118, MS_DiART_reagent}, {MS_DiART_reagent_119, MS_DiART_reagent}, {MS_DiLeu_reagent, MS_sample_label}, {MS_DiLeu_reagent_115, MS_DiLeu_reagent}, {MS_DiLeu_reagent_116, MS_DiLeu_reagent}, {MS_DiLeu_reagent_117, MS_DiLeu_reagent}, {MS_DiLeu_reagent_118, MS_DiLeu_reagent}, {MS_6550_iFunnel_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6550A_iFunnel_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6520B_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6530A_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6530B_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6538_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6540_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6542_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6545_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6560_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6570_Q_TOF_LC_MS, MS_Agilent_instrument_model}, {MS_6120B_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6150_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6224_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6230A_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6230B_Time_of_Flight_LC_MS, MS_Agilent_instrument_model}, {MS_6430_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6495A_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_6495B_Triple_Quadrupole_LC_MS, MS_Agilent_instrument_model}, {MS_7000A_Triple_Quadrupole_GC_MS, MS_Agilent_instrument_model}, {MS_7000B_Triple_Quadrupole_GC_MS, MS_Agilent_instrument_model}, {MS_7800_Quadrupole_ICP_MS, MS_Agilent_instrument_model}, {MS_8800_Triple_Quadrupole_ICP_MS, MS_Agilent_instrument_model}, {MS_ion, MS_molecular_entity}, {MS_positive_mode_adduct_ion, MS_adduct_ion}, {MS_negative_mode_adduct_ion, MS_adduct_ion}, {MS_adduct_ion_X_m_z, MS_adduct_ion_property}, {MS_adduct_ion_isotope, MS_adduct_ion_property}, {MS_Regular_expression_for_adduct_ion_formula, MS_regular_expression}, {MS_adduct_ion_formula, MS_adduct_ion_attribute}, {MS_inverse_reduced_ion_mobility, MS_ion_selection_attribute}, {MS_inverse_reduced_ion_mobility, MS_ion_mobility_attribute}, {MS_mean_ion_mobility_array, MS_ion_mobility_array}, {MS_Bruker_TDF_format, MS_mass_spectrometer_file_format}, {MS_Bruker_TDF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_Bruker_TDF_nativeID_format__combined_spectra, MS_native_spectrum_identifier_format__combined_spectra}, {MS_M_H_ion_1002820, MS_positive_mode_adduct_ion}, {MS_M_H_ion_1002821, MS_negative_mode_adduct_ion}, {MS_OpenMS_file_format, MS_file_format}, {MS_idXML, MS_OpenMS_file_format}, {MS_featureXML, MS_OpenMS_file_format}, {MS_consensusXML, MS_OpenMS_file_format}, {MS_MetaMorpheus, MS_analysis_software}, {MS_MetaMorpheus_score, MS_PSM_level_search_engine_specific_statistic}, {MS_MetaMorpheus_protein_score, MS_search_engine_specific_score_for_protein_groups}, {MS_XCMS_into, MS_feature_level_quantification_datatype}, {MS_XCMS_intf, MS_feature_level_quantification_datatype}, {MS_XCMS_maxo, MS_feature_level_quantification_datatype}, {MS_XCMS_area, MS_feature_level_quantification_datatype}, {MS_alternating_polarity_mode, MS_run_attribute}, {MS_ProteomeDiscoverer_Delta_Score, MS_PSM_level_search_engine_specific_statistic}, {MS_LTQ_Orbitrap_Classic, MS_Thermo_Scientific_instrument_model}, {MS_iProX_dataset_identifier, MS_external_reference_identifier}, {MS_iProX_dataset_URI, MS_external_reference_identifier}, {MS_mzMLb_format, MS_mass_spectrometer_file_format}, {MS_Conversion_to_mzMLb, MS_file_format_conversion}, {MS_external_HDF5_dataset, MS_external_reference_data}, {MS_external_offset, MS_external_reference_data}, {MS_external_array_length, MS_external_reference_data}, {MS_Experiment_additional_parameter, MS_spectrum_generation_information}, {MS_Associated_file_URI, MS_Experiment_additional_parameter}, {MS_Associated_raw_file_URI, MS_Associated_file_URI}, {MS_ProteomeCentral_dataset_URI, MS_Experiment_additional_parameter}, {MS_Result_file_URI, MS_Associated_file_URI}, {MS_Search_engine_output_file_URI, MS_Associated_file_URI}, {MS_Peak_list_file_URI, MS_Associated_file_URI}, {MS_Other_type_file_URI, MS_Associated_file_URI}, {MS_Dataset_FTP_location, MS_Experiment_additional_parameter}, {MS_Dataset_with_no_associated_published_manuscript, MS_Experiment_additional_parameter}, {MS_Peer_reviewed_dataset, MS_Experiment_additional_parameter}, {MS_Non_peer_reviewed_dataset, MS_Experiment_additional_parameter}, {MS_Supported_dataset_by_repository, MS_Experiment_additional_parameter}, {MS_Unsupported_dataset_by_repository, MS_Experiment_additional_parameter}, {MS_Dataset_with_its_publication_pending, MS_Experiment_additional_parameter}, {MS_Additional_associated_raw_file_URI, MS_Associated_file_URI}, {MS_Gel_image_file_URI, MS_Associated_file_URI}, {MS_Reprocessed_complete_dataset, MS_Experiment_additional_parameter}, {MS_Reprocessed_subset_dataset, MS_Experiment_additional_parameter}, {MS_Data_derived_from_previous_dataset, MS_Experiment_additional_parameter}, {MS_No_PTMs_are_included_in_the_dataset, MS_Experiment_additional_parameter}, {MS_Accepted_manuscript, MS_Experiment_additional_parameter}, {MS_Reference, MS_Experiment_additional_parameter}, {MS_Experimental_information_has_been_refined_since_this_experiment_was_originally_made_publicly_available, MS_Experiment_additional_parameter}, {MS_Original_data, MS_Experiment_additional_parameter}, {MS_mzR, MS_analysis_software}, {MS_mzR, MS_data_processing_software}, {MS_MSnbase, MS_analysis_software}, {MS_MSnbase, MS_data_processing_software}, {MS_CAMERA, MS_analysis_software}, {MS_CAMERA, MS_data_processing_software}, {MS_Panorama_Public_dataset_identifier, MS_external_reference_identifier}, {MS_Panorama_Public_dataset_URI, MS_external_reference_identifier}, {MS_TSQ_Altis, MS_Thermo_Scientific_instrument_model}, {MS_TSQ_Quantis, MS_Thermo_Scientific_instrument_model}, {MS_TSQ_9000, MS_Thermo_Scientific_instrument_model}, {MS_Q_Exactive_HF_X, MS_Thermo_Scientific_instrument_model}, {MS_small_molecule_analysis_software, MS_analysis_software}, {MS_Progenesis_QI, MS_small_molecule_analysis_software}, {MS_Compound_Discoverer, MS_small_molecule_analysis_software}, {MS_MyCompoundID, MS_small_molecule_analysis_software}, {MS_study_variable_average_function, MS_search_statistics}, {MS_median, MS_study_variable_average_function}, {MS_study_variable_variation_function, MS_search_statistics}, {MS_standard_error, MS_study_variable_variation_function}, {MS_small_molecule_quantification_datatype, MS_quantification_datatype}, {MS_Progenesis_QI_normalised_abundance, MS_small_molecule_quantification_datatype}, {MS_small_molecule_confidence_measure, MS_single_identification_result_attribute}, {MS_Progenesis_MetaScope_score, MS_small_molecule_confidence_measure}, {MS_fragmentation_score, MS_small_molecule_confidence_measure}, {MS_isotopic_fit_score, MS_small_molecule_confidence_measure}, {MS_ion_mobility_attribute, MS_scan_attribute}, {MS_ion_mobility_attribute, MS_PSM_level_attribute}, {MS_ion_mobility_array, MS_binary_data_array}, {MS_InChIKey, MS_spectrum_identification_result_details}, {MS_small_molecule_identification_attribute, MS_single_identification_result_attribute}, {MS_compound_identification_confidence_level, MS_small_molecule_identification_attribute}, {MS_isotopomer_peak_OBSOLETE, MS_peak}, {MS_Shimadzu_Biotech_QTOF_nativeID_format, MS_native_spectrum_identifier_format}, {MS_msalign_format, MS_mass_spectrometer_file_format}, {MS_feature_format, MS_mass_spectrometer_file_format}, {MS_TopPIC, MS_analysis_software}, {MS_TopFD, MS_analysis_software}, {MS_TopMG, MS_analysis_software}, {MS_proteoform_level_identification_attribute, MS_single_identification_result_attribute}, {MS_proteoform_level_identification_statistic, MS_proteoform_level_identification_attribute}, {MS_search_engine_specific_score_for_proteoforms, MS_proteoform_level_identification_statistic}, {MS_proteoform_level_global_FDR, MS_proteoform_level_identification_statistic}, {MS_proteoform_level_local_FDR, MS_proteoform_level_identification_statistic}, {MS_proteoform_level_statistical_threshold, MS_spectrum_identification_statistical_threshold}, {MS_proteoform_level_global_FDR_threshold, MS_proteoform_level_statistical_threshold}, {MS_proteoform_level_local_FDR_threshold, MS_proteoform_level_statistical_threshold}, {MS_TopPIC_input_parameter, MS_search_engine_specific_input_parameter}, {MS_TopPIC_fixed_modification, MS_TopPIC_input_parameter}, {MS_TopPIC_N_term_form, MS_TopPIC_input_parameter}, {MS_TopPIC_error_tolerance, MS_TopPIC_input_parameter}, {MS_TopPIC_max_shift, MS_TopPIC_input_parameter}, {MS_TopPIC_min_shift, MS_TopPIC_input_parameter}, {MS_TopPIC_shift_num, MS_TopPIC_input_parameter}, {MS_TopPIC_spectral_cutoff_type, MS_TopPIC_input_parameter}, {MS_TopPIC_spectral_cutoff_value, MS_TopPIC_input_parameter}, {MS_TopPIC_proteoform_level_cutoff_type, MS_TopPIC_input_parameter}, {MS_TopPIC_proteoform_level_cutoff_value, MS_TopPIC_input_parameter}, {MS_TopPIC_generating_function, MS_TopPIC_input_parameter}, {MS_TopPIC_combined_spectrum_number, MS_TopPIC_input_parameter}, {MS_TopPIC_mod_file, MS_TopPIC_input_parameter}, {MS_TopPIC_thread_number, MS_TopPIC_input_parameter}, {MS_TopPIC_use_TopFD_feature, MS_TopPIC_input_parameter}, {MS_TopPIC_spectral_E_value, MS_PSM_level_search_engine_specific_statistic}, {MS_TopPIC_spectral_E_value, MS_PSM_level_e_value}, {MS_TopPIC_spectral_FDR, MS_PSM_level_search_engine_specific_statistic}, {MS_TopPIC_spectral_FDR, MS_PSM_level_local_FDR}, {MS_TopPIC_proteoform_level_FDR, MS_proteoform_level_local_FDR}, {MS_TopPIC_proteoform_level_FDR, MS_search_engine_specific_score_for_proteoforms}, {MS_TopPIC_spectral_p_value, MS_PSM_level_search_engine_specific_statistic}, {MS_TopPIC_spectral_p_value, MS_PSM_level_p_value}, {MS_TopPIC_MIScore, MS_PTM_localization_PSM_level_statistic}, {MS_TopPIC_MIScore_threshold, MS_PTM_localization_score_threshold}, {MS_TopMG_input_parameter, MS_search_engine_specific_input_parameter}, {MS_TopMG_fixed_modification, MS_TopMG_input_parameter}, {MS_TopMG_N_term_form, MS_TopMG_input_parameter}, {MS_TopMG_error_tolerance, MS_TopMG_input_parameter}, {MS_TopMG_max_shift, MS_TopMG_input_parameter}, {MS_TopMG_spectral_cutoff_type, MS_TopMG_input_parameter}, {MS_TopMG_spectral_cutoff_value, MS_TopMG_input_parameter}, {MS_TopMG_proteoform_level_cutoff_type, MS_TopMG_input_parameter}, {MS_TopMG_proteoform_level_cutoff_value, MS_TopMG_input_parameter}, {MS_TopMG_mod_file, MS_TopMG_input_parameter}, {MS_TopMG_thread_number, MS_TopMG_input_parameter}, {MS_TopMG_use_TopFD_feature, MS_TopMG_input_parameter}, {MS_TopMG_proteoform_graph_gap_size, MS_TopMG_input_parameter}, {MS_TopMG_variable_PTM_number, MS_TopMG_input_parameter}, {MS_TopMG_variable_PTM_number_in_proteoform_graph_gap, MS_TopMG_input_parameter}, {MS_TopMG_use_ASF_DIAGONAL, MS_TopMG_input_parameter}, {MS_TopMG_spectral_E_value, MS_PSM_level_e_value}, {MS_TopMG_spectral_E_value, MS_PSM_level_search_engine_specific_statistic}, {MS_TopMG_spectral_FDR, MS_PSM_level_local_FDR}, {MS_TopMG_spectral_FDR, MS_PSM_level_search_engine_specific_statistic}, {MS_TopMG_proteoform_level_FDR, MS_proteoform_level_local_FDR}, {MS_TopMG_proteoform_level_FDR, MS_search_engine_specific_score_for_proteoforms}, {MS_TopMG_spectral_p_value, MS_PSM_level_p_value}, {MS_TopMG_spectral_p_value, MS_PSM_level_search_engine_specific_statistic}, {MS_collisional_cross_sectional_area, MS_molecular_entity_property}, {MS_hr_ms_compound_identification_confidence_level, MS_small_molecule_identification_attribute}, {MS_isotopic_ion_MS_peak, MS_peak}, {MS_isotopomer_MS_peak, MS_isotopic_ion_MS_peak}, {MS_isotopologue_MS_peak, MS_isotopic_ion_MS_peak}, {MS_isomer, MS_molecule}, {MS_isotopomer, MS_isomer}, {MS_isotopologue, MS_isomer}, {MS_mean, MS_study_variable_average_function}, {MS_variation_coefficient, MS_study_variable_variation_function}, {MS_lipidomics_analysis_software, MS_small_molecule_analysis_software}, {MS_Lipid_Data_Analyzer, MS_lipidomics_analysis_software}, {MS_Lipid_Data_Analyzer, MS_data_processing_software}, {MS_chrom_format, MS_mass_spectrometer_file_format}, {MS_LipidHunter, MS_lipidomics_analysis_software}, {MS_LipidHunter, MS_data_processing_software}, {MS_LipidXplorer, MS_lipidomics_analysis_software}, {MS_LipidXplorer, MS_data_processing_software}, {MS_LipidMatch, MS_lipidomics_analysis_software}, {MS_LipidMatch, MS_data_processing_software}, {MS_Greazy, MS_lipidomics_analysis_software}, {MS_Greazy, MS_data_processing_software}, {MS_LipidBlast, MS_lipidomics_analysis_software}, {MS_LipidBlast, MS_data_processing_software}, {MS_Lipid_Pro, MS_lipidomics_analysis_software}, {MS_Lipid_Pro, MS_data_processing_software}, {MS_LipidFinder, MS_lipidomics_analysis_software}, {MS_LipidFinder, MS_data_processing_software}, {MS_LipiDex, MS_lipidomics_analysis_software}, {MS_LipiDex, MS_data_processing_software}, {MS_LIQUID, MS_lipidomics_analysis_software}, {MS_LIQUID, MS_data_processing_software}, {MS_ALEX, MS_lipidomics_analysis_software}, {MS_ALEX, MS_data_processing_software}, {MS_ALEX123, MS_lipidomics_analysis_software}, {MS_ALEX123, MS_data_processing_software}, {MS_LIMSA, MS_lipidomics_analysis_software}, {MS_LIMSA, MS_data_processing_software}, {MS_LOBSTAHS, MS_lipidomics_analysis_software}, {MS_LOBSTAHS, MS_data_processing_software}, {MS_LipidQA, MS_lipidomics_analysis_software}, {MS_LipidQA, MS_data_processing_software}, {MS_Proline, MS_analysis_software}, {MS_PepNovo, MS_analysis_software}, {MS_pNovo, MS_analysis_software}, {MS_Novor, MS_analysis_software}, {MS_in_gel_digestion, MS_sample_preparation}, {MS_in_solution_digestion, MS_sample_preparation}, {MS_IdentiPy, MS_analysis_software}, {MS_IdentiPy_RHNS, MS_search_engine_specific_score}, {MS_IdentiPy_hyperscore, MS_search_engine_specific_score}, {MS_ms_deisotope, MS_data_processing_software}, {MS_python_psims, MS_conversion_software}, {MS_Andromeda_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_Andromeda_apl_file_format, MS_mass_spectrometer_file_format}, {MS_ProteomeXchange_dataset_identifier_reanalysis_number, MS_external_reference_identifier}, {MS_LCMS_9030, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_8060, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_8050, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_8045, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_8040, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_LCMS_2020, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_maXis_II, MS_Bruker_Daltonics_maXis_series}, {MS_timsTOF_Pro, MS_Bruker_Daltonics_timsTOF_series}, {MS_mean_inverse_reduced_ion_mobility_array, MS_ion_mobility_array}, {MS_raw_ion_mobility_array, MS_ion_mobility_array}, {MS_raw_inverse_reduced_ion_mobility_array, MS_ion_mobility_array}, {MS_Shimadzu_Biotech_LCD_format, MS_mass_spectrometer_file_format}, {MS_LPPtiger, MS_lipidomics_analysis_software}, {MS_LPPtiger, MS_data_processing_software}, {MS_pFind, MS_analysis_software}, {MS_KSDP_score, MS_PSM_level_search_engine_specific_statistic}, {MS_i3tms, MS_analysis_software}, {MS_MSFragger, MS_analysis_software}, {MS_razor_peptide, MS_peptide}, {MS_ProteinProphet_peptide_weight, MS_peptide_level_scoring}, {MS_ProteinProphet_peptide_weight, MS_search_engine_specific_score}, {MS_ProteinProphet_peptide_group_weight, MS_peptide_level_scoring}, {MS_ProteinProphet_peptide_group_weight, MS_search_engine_specific_score}, {MS_Philosopher, MS_analysis_software}, {MS_pressure_chromatogram, MS_chromatogram_type}, {MS_flow_rate_chromatogram, MS_chromatogram_type}, {MS_Fixed_modification, MS_modification_parameters}, {MS_Fixed_modification, MS_named_element_in_mzIdentML}, {MS_Variable_modification, MS_modification_parameters}, {MS_Variable_modification, MS_named_element_in_mzIdentML}, {MS_OpenPepXL, MS_TOPP_software}, {MS_OpenPepXL_score, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenPepXL_score, MS_search_engine_specific_score}, {MS_named_element_in_mzIdentML, MS_named_element}, {MS_named_element_in_mzML, MS_named_element}, {MS_Orbitrap_Exploris_480, MS_Thermo_Scientific_instrument_model}, {MS_Orbitrap_Eclipse, MS_Thermo_Scientific_instrument_model}, {MS_Mascot_MinNumSigUniqueSeqs, MS_Mascot_input_parameter}, {MS_CPTAC_accession_number, MS_external_reference_identifier}, {MS_compound_identification_confidence_code_in_MS_DIAL, MS_small_molecule_identification_attribute}, {MS_atom, MS_molecular_entity}, {MS_small_molecule, MS_molecule}, {MS_metabolite, MS_small_molecule}, {MS_ribonucleotide, MS_small_molecule}, {MS_deoxyribonucleotide, MS_small_molecule}, {MS_amino_acid, MS_small_molecule}, {MS_monosaccharide, MS_small_molecule}, {MS_nucleic_acid, MS_molecule}, {MS_polysaccharide, MS_molecule}, {MS_number_of_residues, MS_peptide_attribute}, {MS_number_of_missed_cleavages, MS_peptide_attribute}, {MS_peptide_to_protein_mapping, MS_peptide_attribute}, {MS_peptide_to_protein_mapping_attribute, MS_peptide_to_protein_mapping}, {MS_protein_sequence_offset, MS_peptide_to_protein_mapping_attribute}, {MS_number_of_enzymatic_termini, MS_peptide_to_protein_mapping_attribute}, {MS_peptidoform, MS_peptide}, {MS_peptidoform_ion, MS_peptidoform}, {MS_theoretical_monoisotopic_m_z, MS_peptidoform_ion_property}, {MS_theoretical_average_m_z, MS_peptidoform_ion_property}, {MS_adduct, MS_molecule}, {MS_scan_number, MS_scan_attribute}, {MS_number_of_peaks, MS_spectrum_property}, {MS_number_of_data_points, MS_spectrum_property}, {MS_spectrum_name, MS_spectrum_attribute}, {MS_spectrum_index, MS_spectrum_attribute}, {MS_universal_spectrum_identifier, MS_spectrum_attribute}, {MS_spectrum_aggregation_attribute, MS_spectrum_attribute}, {MS_spectrum_aggregation_type, MS_spectrum_aggregation_attribute}, {MS_singleton_spectrum, MS_spectrum_aggregation_type}, {MS_consensus_spectrum, MS_spectrum_aggregation_type}, {MS_best_replicate_spectrum, MS_spectrum_aggregation_type}, {MS_number_of_replicate_spectra_available, MS_spectrum_aggregation_attribute}, {MS_number_of_replicate_spectra_used, MS_spectrum_aggregation_attribute}, {MS_spectrum_origin_attribute, MS_spectrum_attribute}, {MS_spectrum_origin_type, MS_spectrum_origin_attribute}, {MS_observed_spectrum, MS_spectrum_origin_type}, {MS_predicted_spectrum, MS_spectrum_origin_type}, {MS_demultiplexed_spectrum, MS_spectrum_origin_type}, {MS_uninterpreted_spectrum, MS_spectrum}, {MS_interpreted_spectrum, MS_spectrum}, {MS_total_unassigned_intensity_fraction, MS_interpreted_spectrum_attribute}, {MS_top_20_peak_unassigned_intensity_fraction, MS_interpreted_spectrum_attribute}, {MS_unidentified_modification_monoisotopic_mass_delta, MS_peptide_modification_details}, {MS_MS_DIAL, MS_small_molecule_analysis_software}, {MS_MS_DIAL, MS_data_processing_software}, {MS_raw_data_file, MS_source_data_file}, {MS_processed_data_file, MS_source_data_file}, {MS_previous_MSn_1_scan_precursor_intensity, MS_intensity_of_precursor_ion}, {MS_previous_MSn_1_scan_precursor_intensity, MS_spectrum_attribute}, {MS_precursor_apex_intensity, MS_intensity_of_precursor_ion}, {MS_precursor_apex_intensity, MS_spectrum_attribute}, {MS_supported_by_repository_but_incomplete_data_and_or_metadata, MS_Experiment_additional_parameter}, {MS_truncation_and_zlib_compression, MS_binary_data_compression_type}, {MS_truncation__delta_prediction_and_zlib_compression, MS_binary_data_compression_type}, {MS_truncation__linear_prediction_and_zlib_compression, MS_binary_data_compression_type}, {MS_number_of_mantissa_bits_truncated, MS_binary_data_compression_parameter}, {MS_Lys_N, MS_cleavage_agent_name}, {MS_Orbitrap_Exploris_240, MS_Thermo_Scientific_instrument_model}, {MS_Orbitrap_Exploris_120, MS_Thermo_Scientific_instrument_model}, {MS_LTQ_Orbitrap_Velos_Pro, MS_Thermo_Scientific_instrument_model}, {MS_MaxQuant_protein_group_level_score, MS_search_engine_specific_score_for_protein_groups}, {MS_Andromeda_peptide_PEP, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_MaxQuant_DIA_peptide_PEP, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_MaxQuant_DIA_score, MS_PSM_level_search_engine_specific_statistic}, {MS_MaxQuant_DIA_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_NIST_msp_comment, MS_spectrum_attribute}, {MS_ion_interpretation_format, MS_interpreted_spectrum_attribute}, {MS_peptide_ion_interpretation_format, MS_ion_interpretation_format}, {MS_cross_linked_peptide_ion_interpretation_format, MS_ion_interpretation_format}, {MS_glycan_ion_interpretation_format, MS_ion_interpretation_format}, {MS_lipid_ion_interpretation_format, MS_ion_interpretation_format}, {MS_PatternLab, MS_quantitation_software_name}, {MS_PatternLab, MS_analysis_software}, {MS_SIM_XL, MS_analysis_software}, {MS_SIM_XL_score, MS_PSM_level_search_engine_specific_statistic}, {MS_QUIN_XL, MS_quantitation_software_name}, {MS_Orbitrap_ID_X, MS_Thermo_Scientific_instrument_model}, {MS_OpenMS_ConsensusID_PEP, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenMS_Best_PSM_Score, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_OpenMS_Target_decoy_PSM_q_value, MS_PSM_level_search_engine_specific_statistic}, {MS_OpenMS_Target_decoy_peptide_q_value, MS_search_engine_specific_peptide_sequence_level_identification_statistic}, {MS_OpenMS_Target_decoy_protein_q_value, MS_search_engine_specific_score_for_proteins}, {MS_EPIFANY, MS_analysis_software}, {MS_EPIFANY, MS_TOPP_software}, {MS_EPIFANY_Protein_posterior_probability, MS_search_engine_specific_score_for_proteins}, {MS_OpenMS_LFQ_intensity, MS_quantification_datatype}, {MS_OpenMS_LFQ_spectral_count, MS_quantification_datatype}, {MS_rapifleX, MS_Bruker_Daltonics_flex_series}, {MS_Bruker_Daltonics_timsTOF_series, MS_Bruker_Daltonics_instrument_model}, {MS_timsTOF_fleX, MS_Bruker_Daltonics_timsTOF_series}, {MS_ProSight_spectral_Q_value, MS_PSM_level_q_value}, {MS_ProSight_spectral_Q_value, MS_PSM_level_search_engine_specific_statistic}, {MS_ProSight_spectral_P_score, MS_PSM_level_search_engine_specific_statistic}, {MS_ProSight_spectral_E_value, MS_PSM_level_e_value}, {MS_ProSight_spectral_E_value, MS_PSM_level_search_engine_specific_statistic}, {MS_ProSight_spectral_C_score, MS_PSM_level_search_engine_specific_statistic}, {MS_proteoform_level_Q_value, MS_proteoform_level_identification_statistic}, {MS_ProSight_proteoform_Q_value, MS_proteoform_level_Q_value}, {MS_isoform_level_identification_attribute, MS_single_identification_result_attribute}, {MS_isoform_level_identification_statistic, MS_isoform_level_identification_attribute}, {MS_isoform_level_Q_value, MS_isoform_level_identification_statistic}, {MS_ProSight_isoform_Q_value, MS_isoform_level_Q_value}, {MS_ProSight_protein_Q_value, MS_protein_level_q_value}, {MS_ProSight_input_parameter, MS_search_engine_specific_input_parameter}, {MS_TDPortal_input_parameter, MS_search_engine_specific_input_parameter}, {MS_ProSight_Run_delta_m_mode, MS_ProSight_input_parameter}, {MS_ProSight_Run_delta_m_mode, MS_TDPortal_input_parameter}, {MS_ProSight_Run_Subsequence_Search_mode, MS_ProSight_input_parameter}, {MS_ProSight_Run_Subsequence_Search_mode, MS_TDPortal_input_parameter}, {MS_ProSight_Run_Annotated_Proteoform_Search_mode, MS_ProSight_input_parameter}, {MS_ProSight_Run_Annotated_Proteoform_Search_mode, MS_TDPortal_input_parameter}, {MS_ProSight, MS_analysis_software}, {MS_TDPortal, MS_analysis_software}, {MS_mass_array, MS_binary_data_array}, {MS_Triple_Quad_7500, MS_SCIEX_instrument_model}, {MS_ThermoRawFileParser, MS_data_processing_software}, {MS_pyteomics, MS_analysis_software}, {MS_PTMProphet_probability, MS_PTM_localization_PSM_level_statistic}, {MS_PTMProphet_mean_best_probability, MS_PTM_localization_PSM_level_statistic}, {MS_PTMProphet_normalized_information_content, MS_PTM_localization_PSM_level_statistic}, {MS_PTMProphet_information_content, MS_PTM_localization_PSM_level_statistic}, {MS_SHA_256, MS_data_file_checksum_type}, {MS_GCMS_QP2010SE, MS_Shimadzu_Scientific_Instruments_instrument_model}, {MS_raw_ion_mobility_drift_time_array, MS_ion_mobility_array}, {MS_deconvoluted_ion_mobility_array, MS_ion_mobility_array}, {MS_deconvoluted_inverse_reduced_ion_mobility_array, MS_ion_mobility_array}, {MS_deconvoluted_ion_mobility_drift_time_array, MS_ion_mobility_array}, {MS_scanning_quadrupole_position_lower_bound_m_z_array, MS_binary_data_array}, {MS_scanning_quadrupole_position_upper_bound_m_z_array, MS_binary_data_array}, {MS_isolation_window_full_range, MS_isolation_window_attribute}, {MS_mzQC_format, MS_quality_control_data_format}, {MS_quality_control_data_format, MS_file_format}, {MS_PTX_QC, MS_analysis_software}, {UNIMOD_Acetyl, UNIMOD_unimod_root_node}, {UNIMOD_Amidated, UNIMOD_unimod_root_node}, {UNIMOD_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_Carbamidomethyl, UNIMOD_unimod_root_node}, {UNIMOD_Carbamyl, UNIMOD_unimod_root_node}, {UNIMOD_Carboxymethyl, UNIMOD_unimod_root_node}, {UNIMOD_Deamidated, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_G, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_G_2H_8_, UNIMOD_unimod_root_node}, {UNIMOD_Met__Hse, UNIMOD_unimod_root_node}, {UNIMOD_Met__Hsl, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_D_2H_8_, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_D, UNIMOD_unimod_root_node}, {UNIMOD_NIPCAM, UNIMOD_unimod_root_node}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_Phospho, UNIMOD_unimod_root_node}, {UNIMOD_Dehydrated, UNIMOD_unimod_root_node}, {UNIMOD_Propionamide, UNIMOD_unimod_root_node}, {UNIMOD_Pyridylacetyl, UNIMOD_unimod_root_node}, {UNIMOD_Pyro_carbamidomethyl, UNIMOD_unimod_root_node}, {UNIMOD_Glu__pyro_Glu, UNIMOD_unimod_root_node}, {UNIMOD_Gln__pyro_Glu, UNIMOD_unimod_root_node}, {UNIMOD_SMA, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Na, UNIMOD_unimod_root_node}, {UNIMOD_Pyridylethyl, UNIMOD_unimod_root_node}, {UNIMOD_Methyl, UNIMOD_unimod_root_node}, {UNIMOD_Oxidation, UNIMOD_unimod_root_node}, {UNIMOD_Dimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Trimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Methylthio, UNIMOD_unimod_root_node}, {UNIMOD_Sulfo, UNIMOD_unimod_root_node}, {UNIMOD_Hex, UNIMOD_unimod_root_node}, {UNIMOD_Lipoyl, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc, UNIMOD_unimod_root_node}, {UNIMOD_Farnesyl, UNIMOD_unimod_root_node}, {UNIMOD_Myristoyl, UNIMOD_unimod_root_node}, {UNIMOD_PyridoxalPhosphate, UNIMOD_unimod_root_node}, {UNIMOD_Palmitoyl, UNIMOD_unimod_root_node}, {UNIMOD_GeranylGeranyl, UNIMOD_unimod_root_node}, {UNIMOD_Phosphopantetheine, UNIMOD_unimod_root_node}, {UNIMOD_FAD, UNIMOD_unimod_root_node}, {UNIMOD_Tripalmitate, UNIMOD_unimod_root_node}, {UNIMOD_Guanidinyl, UNIMOD_unimod_root_node}, {UNIMOD_HNE, UNIMOD_unimod_root_node}, {UNIMOD_Glucuronyl, UNIMOD_unimod_root_node}, {UNIMOD_Glutathione, UNIMOD_unimod_root_node}, {UNIMOD_Acetyl_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_Propionyl, UNIMOD_unimod_root_node}, {UNIMOD_Propionyl_13C_3_, UNIMOD_unimod_root_node}, {UNIMOD_GIST_Quat, UNIMOD_unimod_root_node}, {UNIMOD_GIST_Quat_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_GIST_Quat_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_GIST_Quat_2H_9_, UNIMOD_unimod_root_node}, {UNIMOD_Succinyl, UNIMOD_unimod_root_node}, {UNIMOD_Succinyl_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_Succinyl_13C_4_, UNIMOD_unimod_root_node}, {UNIMOD_Iminobiotin, UNIMOD_unimod_root_node}, {UNIMOD_ESP, UNIMOD_unimod_root_node}, {UNIMOD_ESP_2H_10_, UNIMOD_unimod_root_node}, {UNIMOD_NHS_LC_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_EDT_maleimide_PEO_biotin, UNIMOD_unimod_root_node}, {UNIMOD_IMID, UNIMOD_unimod_root_node}, {UNIMOD_IMID_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_Propionamide_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_C, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_C_13C_9_, UNIMOD_unimod_root_node}, {UNIMOD_FormylMet, UNIMOD_unimod_root_node}, {UNIMOD_Nethylmaleimide, UNIMOD_unimod_root_node}, {UNIMOD_OxLysBiotinRed, UNIMOD_unimod_root_node}, {UNIMOD_OxLysBiotin, UNIMOD_unimod_root_node}, {UNIMOD_OxProBiotinRed, UNIMOD_unimod_root_node}, {UNIMOD_OxProBiotin, UNIMOD_unimod_root_node}, {UNIMOD_OxArgBiotin, UNIMOD_unimod_root_node}, {UNIMOD_OxArgBiotinRed, UNIMOD_unimod_root_node}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, UNIMOD_unimod_root_node}, {UNIMOD_IBTP, UNIMOD_unimod_root_node}, {UNIMOD_GG, UNIMOD_unimod_root_node}, {UNIMOD_Formyl, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_H, UNIMOD_unimod_root_node}, {UNIMOD_ICAT_H_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DTSSP_88_, UNIMOD_unimod_root_node}, {UNIMOD_Fluoro, UNIMOD_unimod_root_node}, {UNIMOD_Fluorescein, UNIMOD_unimod_root_node}, {UNIMOD_Iodo, UNIMOD_unimod_root_node}, {UNIMOD_Diiodo, UNIMOD_unimod_root_node}, {UNIMOD_Triiodo, UNIMOD_unimod_root_node}, {UNIMOD_Myristoleyl, UNIMOD_unimod_root_node}, {UNIMOD_Myristoyl_Delta_H__4_, UNIMOD_unimod_root_node}, {UNIMOD_Benzoyl, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Dansyl, UNIMOD_unimod_root_node}, {UNIMOD_a_type_ion, UNIMOD_unimod_root_node}, {UNIMOD_Amidine, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_dHex_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_dHex_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_dHex_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_dHex_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_S__1_Se_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_1_N__1_18O_1_, UNIMOD_unimod_root_node}, {UNIMOD_NBS_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_NBS, UNIMOD_unimod_root_node}, {UNIMOD_BHT, UNIMOD_unimod_root_node}, {UNIMOD_DAET, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_9_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_9__Phospho, UNIMOD_unimod_root_node}, {UNIMOD_HPG, UNIMOD_unimod_root_node}, {UNIMOD_2HPG, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_Label_18O_2_, UNIMOD_unimod_root_node}, {UNIMOD_AccQTag, UNIMOD_unimod_root_node}, {UNIMOD_QAT, UNIMOD_unimod_root_node}, {UNIMOD_QAT_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_EQAT, UNIMOD_unimod_root_node}, {UNIMOD_EQAT_2H_5_, UNIMOD_unimod_root_node}, {UNIMOD_Dimethyl_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_Ethanedithiol, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_6_C_6_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_3_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_2_C_3_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_6_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_8_C_6_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_NEIAA, UNIMOD_unimod_root_node}, {UNIMOD_NEIAA_2H_5_, UNIMOD_unimod_root_node}, {UNIMOD_ADP_Ribosyl, UNIMOD_unimod_root_node}, {UNIMOD_iTRAQ4plex, UNIMOD_unimod_root_node}, {UNIMOD_IGBP, UNIMOD_unimod_root_node}, {UNIMOD_Crotonaldehyde, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_2_C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_3_, UNIMOD_unimod_root_node}, {UNIMOD_Label_18O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_Thiophospho, UNIMOD_unimod_root_node}, {UNIMOD_SPITC, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_PET, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_4_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_5_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_9_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Cytopiloyne, UNIMOD_unimod_root_node}, {UNIMOD_Cytopiloyne_water, UNIMOD_unimod_root_node}, {UNIMOD_CAF, UNIMOD_unimod_root_node}, {UNIMOD_Nitrosyl, UNIMOD_unimod_root_node}, {UNIMOD_AEBS, UNIMOD_unimod_root_node}, {UNIMOD_Ethanolyl, UNIMOD_unimod_root_node}, {UNIMOD_Ethyl, UNIMOD_unimod_root_node}, {UNIMOD_CoenzymeA, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_2H_2_, UNIMOD_unimod_root_node}, {UNIMOD_SulfanilicAcid, UNIMOD_unimod_root_node}, {UNIMOD_SulfanilicAcid_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Oxolactone, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_PEO_Amine, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_HPDP, UNIMOD_unimod_root_node}, {UNIMOD_Delta_Hg_1_, UNIMOD_unimod_root_node}, {UNIMOD_IodoU_AMP, UNIMOD_unimod_root_node}, {UNIMOD_CAMthiopropanoyl, UNIMOD_unimod_root_node}, {UNIMOD_IED_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_dHex, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_Carboxy, UNIMOD_unimod_root_node}, {UNIMOD_Bromobimane, UNIMOD_unimod_root_node}, {UNIMOD_Menadione, UNIMOD_unimod_root_node}, {UNIMOD_DeStreak, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Cysteinyl, UNIMOD_unimod_root_node}, {UNIMOD_Lys_loss, UNIMOD_unimod_root_node}, {UNIMOD_Nmethylmaleimide, UNIMOD_unimod_root_node}, {UNIMOD_DimethylpyrroleAdduct, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_2_C_5_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_2_C_3_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Nethylmaleimide_water, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_B10621, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DTBP_87_, UNIMOD_unimod_root_node}, {UNIMOD_FP_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_2H_3_13C_1_, UNIMOD_unimod_root_node}, {UNIMOD_Dimethyl_2H_6_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Thiophos_S_S_biotin, UNIMOD_unimod_root_node}, {UNIMOD_Can_FP_biotin, UNIMOD_unimod_root_node}, {UNIMOD_HNE_Delta_H_2_, UNIMOD_unimod_root_node}, {UNIMOD_Methylamine, UNIMOD_unimod_root_node}, {UNIMOD_Bromo, UNIMOD_unimod_root_node}, {UNIMOD_Amino, UNIMOD_unimod_root_node}, {UNIMOD_Argbiotinhydrazide, UNIMOD_unimod_root_node}, {UNIMOD_Arg__GluSA, UNIMOD_unimod_root_node}, {UNIMOD_Trioxidation, UNIMOD_unimod_root_node}, {UNIMOD_His__Asn, UNIMOD_unimod_root_node}, {UNIMOD_His__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Hydroxykynurenin, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Kynurenin, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Allysine, UNIMOD_unimod_root_node}, {UNIMOD_Lysbiotinhydrazide, UNIMOD_unimod_root_node}, {UNIMOD_Nitro, UNIMOD_unimod_root_node}, {UNIMOD_probiotinhydrazide, UNIMOD_unimod_root_node}, {UNIMOD_Pro__pyro_Glu, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Pyrrolidinone, UNIMOD_unimod_root_node}, {UNIMOD_Thrbiotinhydrazide, UNIMOD_unimod_root_node}, {UNIMOD_Diisopropylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_Isopropylphospho, UNIMOD_unimod_root_node}, {UNIMOD_ICPL_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_ICPL, UNIMOD_unimod_root_node}, {UNIMOD_Deamidated_18O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Dha, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Pyrrolidone, UNIMOD_unimod_root_node}, {UNIMOD_HMVK, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Orn, UNIMOD_unimod_root_node}, {UNIMOD_Dehydro, UNIMOD_unimod_root_node}, {UNIMOD_Diphthamide, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxyfarnesyl, UNIMOD_unimod_root_node}, {UNIMOD_Diacylglycerol, UNIMOD_unimod_root_node}, {UNIMOD_Carboxyethyl, UNIMOD_unimod_root_node}, {UNIMOD_Hypusine, UNIMOD_unimod_root_node}, {UNIMOD_Retinylidene, UNIMOD_unimod_root_node}, {UNIMOD_Lys__AminoadipicAcid, UNIMOD_unimod_root_node}, {UNIMOD_Cys__PyruvicAcid, UNIMOD_unimod_root_node}, {UNIMOD_Ammonia_loss, UNIMOD_unimod_root_node}, {UNIMOD_Phycocyanobilin, UNIMOD_unimod_root_node}, {UNIMOD_Phycoerythrobilin, UNIMOD_unimod_root_node}, {UNIMOD_Phytochromobilin, UNIMOD_unimod_root_node}, {UNIMOD_Heme, UNIMOD_unimod_root_node}, {UNIMOD_Molybdopterin, UNIMOD_unimod_root_node}, {UNIMOD_Quinone, UNIMOD_unimod_root_node}, {UNIMOD_Glucosylgalactosyl, UNIMOD_unimod_root_node}, {UNIMOD_GPIanchor, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoribosyldephosphoCoA, UNIMOD_unimod_root_node}, {UNIMOD_GlycerylPE, UNIMOD_unimod_root_node}, {UNIMOD_Triiodothyronine, UNIMOD_unimod_root_node}, {UNIMOD_Thyroxine, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Dha, UNIMOD_unimod_root_node}, {UNIMOD_Didehydro, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Oxoalanine, UNIMOD_unimod_root_node}, {UNIMOD_Ser__LacticAcid, UNIMOD_unimod_root_node}, {UNIMOD_Phosphoadenosine, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxycinnamyl, UNIMOD_unimod_root_node}, {UNIMOD_Glycosyl, UNIMOD_unimod_root_node}, {UNIMOD_FMNH, UNIMOD_unimod_root_node}, {UNIMOD_Archaeol, UNIMOD_unimod_root_node}, {UNIMOD_Phenylisocyanate, UNIMOD_unimod_root_node}, {UNIMOD_Phenylisocyanate_2H_5_, UNIMOD_unimod_root_node}, {UNIMOD_Phosphoguanosine, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxymethyl, UNIMOD_unimod_root_node}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, UNIMOD_unimod_root_node}, {UNIMOD_Dipyrrolylmethanemethyl, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoUridine, UNIMOD_unimod_root_node}, {UNIMOD_Glycerophospho, UNIMOD_unimod_root_node}, {UNIMOD_Carboxy__Thiocarboxy, UNIMOD_unimod_root_node}, {UNIMOD_Sulfide, UNIMOD_unimod_root_node}, {UNIMOD_PyruvicAcidIminyl, UNIMOD_unimod_root_node}, {UNIMOD_Delta_Se_1_, UNIMOD_unimod_root_node}, {UNIMOD_MolybdopterinGD, UNIMOD_unimod_root_node}, {UNIMOD_Dioxidation, UNIMOD_unimod_root_node}, {UNIMOD_Octanoyl, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoHexNAc, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoHex, UNIMOD_unimod_root_node}, {UNIMOD_Palmitoleyl, UNIMOD_unimod_root_node}, {UNIMOD_Cholesterol, UNIMOD_unimod_root_node}, {UNIMOD_Didehydroretinylidene, UNIMOD_unimod_root_node}, {UNIMOD_CHDH, UNIMOD_unimod_root_node}, {UNIMOD_Methylpyrroline, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxyheme, UNIMOD_unimod_root_node}, {UNIMOD_MicrocinC7, UNIMOD_unimod_root_node}, {UNIMOD_Cyano, UNIMOD_unimod_root_node}, {UNIMOD_Diironsubcluster, UNIMOD_unimod_root_node}, {UNIMOD_Amidino, UNIMOD_unimod_root_node}, {UNIMOD_FMN, UNIMOD_unimod_root_node}, {UNIMOD_FMNC, UNIMOD_unimod_root_node}, {UNIMOD_CuSMo, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxytrimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Deoxy, UNIMOD_unimod_root_node}, {UNIMOD_Microcin, UNIMOD_unimod_root_node}, {UNIMOD_Decanoyl, UNIMOD_unimod_root_node}, {UNIMOD_Glu, UNIMOD_unimod_root_node}, {UNIMOD_GluGlu, UNIMOD_unimod_root_node}, {UNIMOD_GluGluGlu, UNIMOD_unimod_root_node}, {UNIMOD_GluGluGluGlu, UNIMOD_unimod_root_node}, {UNIMOD_HexN, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DMP_154_, UNIMOD_unimod_root_node}, {UNIMOD_NDA, UNIMOD_unimod_root_node}, {UNIMOD_SPITC_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_AEC_MAEC, UNIMOD_unimod_root_node}, {UNIMOD_TMAB, UNIMOD_unimod_root_node}, {UNIMOD_TMAB_2H_9_, UNIMOD_unimod_root_node}, {UNIMOD_FTC, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_DHP, UNIMOD_unimod_root_node}, {UNIMOD_Hep, UNIMOD_unimod_root_node}, {UNIMOD_BADGE, UNIMOD_unimod_root_node}, {UNIMOD_CyDye_Cy3, UNIMOD_unimod_root_node}, {UNIMOD_CyDye_Cy5, UNIMOD_unimod_root_node}, {UNIMOD_BHTOH, UNIMOD_unimod_root_node}, {UNIMOD_IGBP_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Nmethylmaleimide_water, UNIMOD_unimod_root_node}, {UNIMOD_PyMIC, UNIMOD_unimod_root_node}, {UNIMOD_LG_lactam_K, UNIMOD_unimod_root_node}, {UNIMOD_LG_Hlactam_K, UNIMOD_unimod_root_node}, {UNIMOD_LG_lactam_R, UNIMOD_unimod_root_node}, {UNIMOD_LG_Hlactam_R, UNIMOD_unimod_root_node}, {UNIMOD_Dimethyl_2H_4_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_, UNIMOD_unimod_root_node}, {UNIMOD_C8_QAT, UNIMOD_unimod_root_node}, {UNIMOD_PropylNAGthiazoline, UNIMOD_unimod_root_node}, {UNIMOD_FNEM, UNIMOD_unimod_root_node}, {UNIMOD_Diethyl, UNIMOD_unimod_root_node}, {UNIMOD_BisANS, UNIMOD_unimod_root_node}, {UNIMOD_Piperidine, UNIMOD_unimod_root_node}, {UNIMOD_Maleimide_PEO2_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, UNIMOD_unimod_root_node}, {UNIMOD_CLIP_TRAQ_2, UNIMOD_unimod_root_node}, {UNIMOD_Dethiomethyl, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_Deamidated, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_5_C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_K, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Cu_I_, UNIMOD_unimod_root_node}, {UNIMOD_iTRAQ4plex114, UNIMOD_unimod_root_node}, {UNIMOD_iTRAQ4plex115, UNIMOD_unimod_root_node}, {UNIMOD_Dibromo, UNIMOD_unimod_root_node}, {UNIMOD_LRGG, UNIMOD_unimod_root_node}, {UNIMOD_CLIP_TRAQ_3, UNIMOD_unimod_root_node}, {UNIMOD_CLIP_TRAQ_4, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Cayman_10141, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Cayman_10013, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Val, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Asp__His, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Val, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Val, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Val, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Val, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Arg, UNIMOD_unimod_root_node}, {UNIMOD_His__Pro, UNIMOD_unimod_root_node}, {UNIMOD_His__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_His__Gln, UNIMOD_unimod_root_node}, {UNIMOD_His__Arg, UNIMOD_unimod_root_node}, {UNIMOD_His__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Met, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Val, UNIMOD_unimod_root_node}, {UNIMOD_Xle__His, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Met, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Met__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Met__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Met__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Met__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Met__Val, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Asn__His, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Pro__His, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Gln__His, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Arg__His, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Met, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Met, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Val__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Val__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Val__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Val__Met, UNIMOD_unimod_root_node}, {UNIMOD_Val__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Val__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Val__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__His, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Cys, UNIMOD_unimod_root_node}, {UNIMOD_BDMAPP, UNIMOD_unimod_root_node}, {UNIMOD_NA_LNO2, UNIMOD_unimod_root_node}, {UNIMOD_NA_OA_NO2, UNIMOD_unimod_root_node}, {UNIMOD_ICPL_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_9_13C_6_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_NIC, UNIMOD_unimod_root_node}, {UNIMOD_dNIC, UNIMOD_unimod_root_node}, {UNIMOD_HNE_Delta_H_2_O, UNIMOD_unimod_root_node}, {UNIMOD_4_ONE, UNIMOD_unimod_root_node}, {UNIMOD_O_Dimethylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_O_Methylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_Diethylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_Ethylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_O_pinacolylmethylphosphonate, UNIMOD_unimod_root_node}, {UNIMOD_Methylphosphonate, UNIMOD_unimod_root_node}, {UNIMOD_O_Isopropylmethylphosphonate, UNIMOD_unimod_root_node}, {UNIMOD_iTRAQ8plex, UNIMOD_unimod_root_node}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_Ethanolamine, UNIMOD_unimod_root_node}, {UNIMOD_BEMAD_ST, UNIMOD_unimod_root_node}, {UNIMOD_BEMAD_C, UNIMOD_unimod_root_node}, {UNIMOD_TMT6plex, UNIMOD_unimod_root_node}, {UNIMOD_TMT2plex, UNIMOD_unimod_root_node}, {UNIMOD_TMT, UNIMOD_unimod_root_node}, {UNIMOD_ExacTagThiol, UNIMOD_unimod_root_node}, {UNIMOD_ExacTagAmine, UNIMOD_unimod_root_node}, {UNIMOD_4_ONE_Delta_H__2_O__1_, UNIMOD_unimod_root_node}, {UNIMOD_NO_SMX_SEMD, UNIMOD_unimod_root_node}, {UNIMOD_NO_SMX_SMCT, UNIMOD_unimod_root_node}, {UNIMOD_NO_SMX_SIMD, UNIMOD_unimod_root_node}, {UNIMOD_Malonyl, UNIMOD_unimod_root_node}, {UNIMOD_3sulfo, UNIMOD_unimod_root_node}, {UNIMOD_trifluoro, UNIMOD_unimod_root_node}, {UNIMOD_TNBS, UNIMOD_unimod_root_node}, {UNIMOD_IDEnT, UNIMOD_unimod_root_node}, {UNIMOD_BEMAD_ST_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_BEMAD_C_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_Met_loss, UNIMOD_unimod_root_node}, {UNIMOD_Met_loss_Acetyl, UNIMOD_unimod_root_node}, {UNIMOD_Menadione_HQ, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_Acetyl_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_lapachenole, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_5_, UNIMOD_unimod_root_node}, {UNIMOD_maleimide, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_phenacyl, UNIMOD_unimod_root_node}, {UNIMOD_Carboxymethyl_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_NEM_2H_5_, UNIMOD_unimod_root_node}, {UNIMOD_AEC_MAEC_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6__GG, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21345, UNIMOD_unimod_root_node}, {UNIMOD_Pentylamine, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21360, UNIMOD_unimod_root_node}, {UNIMOD_Cy3b_maleimide, UNIMOD_unimod_root_node}, {UNIMOD_Gly_loss_Amide, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BMOE, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DFDNB, UNIMOD_unimod_root_node}, {UNIMOD_TMPP_Ac, UNIMOD_unimod_root_node}, {UNIMOD_Dihydroxyimidazolidine, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_4__Acetyl, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6__Acetyl, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_2__Acetyl, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Npo, UNIMOD_unimod_root_node}, {UNIMOD_EQIGG, UNIMOD_unimod_root_node}, {UNIMOD_Arg2PG, UNIMOD_unimod_root_node}, {UNIMOD_cGMP, UNIMOD_unimod_root_node}, {UNIMOD_cGMP_RMP_loss, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_4__GG, UNIMOD_unimod_root_node}, {UNIMOD_MG_H1, UNIMOD_unimod_root_node}, {UNIMOD_G_H1, UNIMOD_unimod_root_node}, {UNIMOD_ZGB, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_1_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_2__GG, UNIMOD_unimod_root_node}, {UNIMOD_ICPL_13C_6_2H_4_, UNIMOD_unimod_root_node}, {UNIMOD_QEQTGG, UNIMOD_unimod_root_node}, {UNIMOD_QQQTGG, UNIMOD_unimod_root_node}, {UNIMOD_Bodipy, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21325, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_1_2H_3__Oxidation, UNIMOD_unimod_root_node}, {UNIMOD_HydroxymethylOP, UNIMOD_unimod_root_node}, {UNIMOD_MDCC, UNIMOD_unimod_root_node}, {UNIMOD_mTRAQ, UNIMOD_unimod_root_node}, {UNIMOD_mTRAQ_13C_3_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_DyLight_maleimide, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_PEO12_Maleimide, UNIMOD_unimod_root_node}, {UNIMOD_CarbamidomethylDTT, UNIMOD_unimod_root_node}, {UNIMOD_CarboxymethylDTT, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_PEG_PRA, UNIMOD_unimod_root_node}, {UNIMOD_Met__Aha, UNIMOD_unimod_root_node}, {UNIMOD_Label_15N_4_, UNIMOD_unimod_root_node}, {UNIMOD_pyrophospho, UNIMOD_unimod_root_node}, {UNIMOD_Met__Hpg, UNIMOD_unimod_root_node}, {UNIMOD_4AcAllylGal, UNIMOD_unimod_root_node}, {UNIMOD_DimethylArsino, UNIMOD_unimod_root_node}, {UNIMOD_Lys__CamCys, UNIMOD_unimod_root_node}, {UNIMOD_Phe__CamCys, UNIMOD_unimod_root_node}, {UNIMOD_Leu__MetOx, UNIMOD_unimod_root_node}, {UNIMOD_Lys__MetOx, UNIMOD_unimod_root_node}, {UNIMOD_Galactosyl, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_SMCC_321_, UNIMOD_unimod_root_node}, {UNIMOD_Bacillosamine, UNIMOD_unimod_root_node}, {UNIMOD_MTSL, UNIMOD_unimod_root_node}, {UNIMOD_HNE_BAHAH, UNIMOD_unimod_root_node}, {UNIMOD_Methylmalonylation, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_4_15N_2__GG, UNIMOD_unimod_root_node}, {UNIMOD_ethylamino, UNIMOD_unimod_root_node}, {UNIMOD_MercaptoEthanol, UNIMOD_unimod_root_node}, {UNIMOD_Ethyl_Deamidated, UNIMOD_unimod_root_node}, {UNIMOD_VFQQQTGG, UNIMOD_unimod_root_node}, {UNIMOD_VIEVYQEQTGG, UNIMOD_unimod_root_node}, {UNIMOD_AMTzHexNAc2, UNIMOD_unimod_root_node}, {UNIMOD_Atto495Maleimide, UNIMOD_unimod_root_node}, {UNIMOD_Chlorination, UNIMOD_unimod_root_node}, {UNIMOD_dichlorination, UNIMOD_unimod_root_node}, {UNIMOD_AROD, UNIMOD_unimod_root_node}, {UNIMOD_Cys__methylaminoAla, UNIMOD_unimod_root_node}, {UNIMOD_Cys__ethylaminoAla, UNIMOD_unimod_root_node}, {UNIMOD_DNPS, UNIMOD_unimod_root_node}, {UNIMOD_SulfoGMBS, UNIMOD_unimod_root_node}, {UNIMOD_DimethylamineGMBS, UNIMOD_unimod_root_node}, {UNIMOD_Label_15N_2_2H_9_, UNIMOD_unimod_root_node}, {UNIMOD_LG_anhydrolactam, UNIMOD_unimod_root_node}, {UNIMOD_LG_pyrrole, UNIMOD_unimod_root_node}, {UNIMOD_LG_anhyropyrrole, UNIMOD_unimod_root_node}, {UNIMOD_3_deoxyglucosone, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Li, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Ca_II_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Fe_II_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Ni_II_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Zn_II_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Ag, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Mg_II_, UNIMOD_unimod_root_node}, {UNIMOD_2_succinyl, UNIMOD_unimod_root_node}, {UNIMOD_Propargylamine, UNIMOD_unimod_root_node}, {UNIMOD_Phosphopropargyl, UNIMOD_unimod_root_node}, {UNIMOD_SUMO2135, UNIMOD_unimod_root_node}, {UNIMOD_SUMO3549, UNIMOD_unimod_root_node}, {UNIMOD_thioacylPA, UNIMOD_unimod_root_node}, {UNIMOD_maleimide3, UNIMOD_unimod_root_node}, {UNIMOD_maleimide5, UNIMOD_unimod_root_node}, {UNIMOD_Puromycin, UNIMOD_unimod_root_node}, {UNIMOD_Carbofuran, UNIMOD_unimod_root_node}, {UNIMOD_BITC, UNIMOD_unimod_root_node}, {UNIMOD_PEITC, UNIMOD_unimod_root_node}, {UNIMOD_glucosone, UNIMOD_unimod_root_node}, {UNIMOD_cysTMT, UNIMOD_unimod_root_node}, {UNIMOD_cysTMT6plex, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6__Dimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Ammonium, UNIMOD_unimod_root_node}, {UNIMOD_ISD_z_2_ion, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Sigma_B1267, UNIMOD_unimod_root_node}, {UNIMOD_Label_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_Label_15N_3_, UNIMOD_unimod_root_node}, {UNIMOD_sulfo_amino, UNIMOD_unimod_root_node}, {UNIMOD_AHA_Alkyne, UNIMOD_unimod_root_node}, {UNIMOD_AHA_Alkyne_KDDDD, UNIMOD_unimod_root_node}, {UNIMOD_EGCG1, UNIMOD_unimod_root_node}, {UNIMOD_EGCG2, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_4__Methyl, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_Cys__CamSec, UNIMOD_unimod_root_node}, {UNIMOD_Thiazolidine, UNIMOD_unimod_root_node}, {UNIMOD_DEDGFLYMVYASQETFG, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Invitrogen_M1602, UNIMOD_unimod_root_node}, {UNIMOD_glycidamide, UNIMOD_unimod_root_node}, {UNIMOD_Ahx2_Hsl, UNIMOD_unimod_root_node}, {UNIMOD_DMPO, UNIMOD_unimod_root_node}, {UNIMOD_ICDID, UNIMOD_unimod_root_node}, {UNIMOD_ICDID_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSS_156_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_EGS_244_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DST_132_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DTSSP_192_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_SMCC_237_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DMP_140_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_EGS_115_, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_88310, UNIMOD_unimod_root_node}, {UNIMOD_2_nitrobenzyl, UNIMOD_unimod_root_node}, {UNIMOD_Cys__SecNEM, UNIMOD_unimod_root_node}, {UNIMOD_Cys__SecNEM_2H_5_, UNIMOD_unimod_root_node}, {UNIMOD_Thiadiazole, UNIMOD_unimod_root_node}, {UNIMOD_Withaferin, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_88317, UNIMOD_unimod_root_node}, {UNIMOD_TAMRA_FP, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21901_H2O, UNIMOD_unimod_root_node}, {UNIMOD_Deoxyhypusine, UNIMOD_unimod_root_node}, {UNIMOD_Acetyldeoxyhypusine, UNIMOD_unimod_root_node}, {UNIMOD_Acetylhypusine, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Ala__His, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Met, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Ala__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Cys__His, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Met, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Cys__Val, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Met, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Asp__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Glu__His, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Met, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Glu__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Phe__His, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Met, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Phe__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Gly__His, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Xle, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Met, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Gly__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_His__Ala, UNIMOD_unimod_root_node}, {UNIMOD_His__Cys, UNIMOD_unimod_root_node}, {UNIMOD_His__Glu, UNIMOD_unimod_root_node}, {UNIMOD_His__Phe, UNIMOD_unimod_root_node}, {UNIMOD_His__Gly, UNIMOD_unimod_root_node}, {UNIMOD_His__Lys, UNIMOD_unimod_root_node}, {UNIMOD_His__Met, UNIMOD_unimod_root_node}, {UNIMOD_His__Ser, UNIMOD_unimod_root_node}, {UNIMOD_His__Thr, UNIMOD_unimod_root_node}, {UNIMOD_His__Val, UNIMOD_unimod_root_node}, {UNIMOD_His__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Xle__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Lys__His, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Val, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Lys__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Met__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Met__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Met__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Met__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Met__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Met__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Met__His, UNIMOD_unimod_root_node}, {UNIMOD_Met__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Met__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Met__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Met__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Met__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Met__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Met, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Val, UNIMOD_unimod_root_node}, {UNIMOD_Asn__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Met, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Val, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Pro__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Met, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Val, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Gln__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Val, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Arg__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Ser__His, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Met, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Ser__Val, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Thr__His, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Val, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Thr__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Val__Cys, UNIMOD_unimod_root_node}, {UNIMOD_Val__His, UNIMOD_unimod_root_node}, {UNIMOD_Val__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Val__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Val__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Val__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Val__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Val__Ser, UNIMOD_unimod_root_node}, {UNIMOD_Val__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Val__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Val__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Asp, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Phe, UNIMOD_unimod_root_node}, {UNIMOD_Trp__His, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Met, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Asn, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Val, UNIMOD_unimod_root_node}, {UNIMOD_Trp__Tyr, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Ala, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Glu, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Gly, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Lys, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Met, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Pro, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Gln, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Arg, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Thr, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Val, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Trp, UNIMOD_unimod_root_node}, {UNIMOD_Tyr__Xle, UNIMOD_unimod_root_node}, {UNIMOD_AHA_SS, UNIMOD_unimod_root_node}, {UNIMOD_AHA_SS_CAM, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_33033, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_33033_H, UNIMOD_unimod_root_node}, {UNIMOD_2_monomethylsuccinyl, UNIMOD_unimod_root_node}, {UNIMOD_Saligenin, UNIMOD_unimod_root_node}, {UNIMOD_Cresylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_CresylSaligeninPhosphate, UNIMOD_unimod_root_node}, {UNIMOD_Ub_Br2, UNIMOD_unimod_root_node}, {UNIMOD_Ub_VME, UNIMOD_unimod_root_node}, {UNIMOD_Ub_amide, UNIMOD_unimod_root_node}, {UNIMOD_Ub_fluorescein, UNIMOD_unimod_root_node}, {UNIMOD_2_dimethylsuccinyl, UNIMOD_unimod_root_node}, {UNIMOD_Gly, UNIMOD_unimod_root_node}, {UNIMOD_pupylation, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_4_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_4__Oxidation, UNIMOD_unimod_root_node}, {UNIMOD_HCysThiolactone, UNIMOD_unimod_root_node}, {UNIMOD_HCysteinyl, UNIMOD_unimod_root_node}, {UNIMOD_UgiJoullie, UNIMOD_unimod_root_node}, {UNIMOD_Dipyridyl, UNIMOD_unimod_root_node}, {UNIMOD_Furan, UNIMOD_unimod_root_node}, {UNIMOD_Difuran, UNIMOD_unimod_root_node}, {UNIMOD_BMP_piperidinol, UNIMOD_unimod_root_node}, {UNIMOD_UgiJoullieProGly, UNIMOD_unimod_root_node}, {UNIMOD_UgiJoullieProGlyProGly, UNIMOD_unimod_root_node}, {UNIMOD_IMEHex_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Arg_loss, UNIMOD_unimod_root_node}, {UNIMOD_Arg, UNIMOD_unimod_root_node}, {UNIMOD_Butyryl, UNIMOD_unimod_root_node}, {UNIMOD_Dicarbamidomethyl, UNIMOD_unimod_root_node}, {UNIMOD_Dimethyl_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_GGQ, UNIMOD_unimod_root_node}, {UNIMOD_QTGG, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_3_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_3_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_4_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_10_, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_4_13C_1_, UNIMOD_unimod_root_node}, {UNIMOD_Lys, UNIMOD_unimod_root_node}, {UNIMOD_mTRAQ_13C_6_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_NeuAc, UNIMOD_unimod_root_node}, {UNIMOD_NeuGc, UNIMOD_unimod_root_node}, {UNIMOD_Propyl, UNIMOD_unimod_root_node}, {UNIMOD_Propyl_2H_6_, UNIMOD_unimod_root_node}, {UNIMOD_Propiophenone, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_6_C_3_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_8_C_6_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_biotinAcrolein298, UNIMOD_unimod_root_node}, {UNIMOD_MM_diphenylpentanone, UNIMOD_unimod_root_node}, {UNIMOD_EHD_diphenylpentanone, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21901_2H2O, UNIMOD_unimod_root_node}, {UNIMOD_DiLeu4plex115, UNIMOD_unimod_root_node}, {UNIMOD_DiLeu4plex, UNIMOD_unimod_root_node}, {UNIMOD_DiLeu4plex117, UNIMOD_unimod_root_node}, {UNIMOD_DiLeu4plex118, UNIMOD_unimod_root_node}, {UNIMOD_NEMsulfur, UNIMOD_unimod_root_node}, {UNIMOD_SulfurDioxide, UNIMOD_unimod_root_node}, {UNIMOD_NEMsulfurWater, UNIMOD_unimod_root_node}, {UNIMOD_bisANS_sulfonates, UNIMOD_unimod_root_node}, {UNIMOD_DNCB_hapten, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21911, UNIMOD_unimod_root_node}, {UNIMOD_iodoTMT, UNIMOD_unimod_root_node}, {UNIMOD_iodoTMT6plex, UNIMOD_unimod_root_node}, {UNIMOD_Phosphogluconoylation, UNIMOD_unimod_root_node}, {UNIMOD_PS_Hapten, UNIMOD_unimod_root_node}, {UNIMOD_Cy3_maleimide, UNIMOD_unimod_root_node}, {UNIMOD_benzylguanidine, UNIMOD_unimod_root_node}, {UNIMOD_CarboxymethylDMAP, UNIMOD_unimod_root_node}, {UNIMOD_azole, UNIMOD_unimod_root_node}, {UNIMOD_phosphoRibosyl, UNIMOD_unimod_root_node}, {UNIMOD_NEM_2H_5__H2O, UNIMOD_unimod_root_node}, {UNIMOD_Crotonyl, UNIMOD_unimod_root_node}, {UNIMOD_O_Et_N_diMePhospho, UNIMOD_unimod_root_node}, {UNIMOD_N_dimethylphosphate, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_, UNIMOD_unimod_root_node}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_3__Oxidation, UNIMOD_unimod_root_node}, {UNIMOD_Trimethyl_2H_9_, UNIMOD_unimod_root_node}, {UNIMOD_Acetyl_13C_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_6_, UNIMOD_unimod_root_node}, {UNIMOD_methylsulfonylethyl, UNIMOD_unimod_root_node}, {UNIMOD_ethylsulfonylethyl, UNIMOD_unimod_root_node}, {UNIMOD_phenylsulfonylethyl, UNIMOD_unimod_root_node}, {UNIMOD_PyridoxalPhosphateH2, UNIMOD_unimod_root_node}, {UNIMOD_Homocysteic_acid, UNIMOD_unimod_root_node}, {UNIMOD_Hydroxamic_acid, UNIMOD_unimod_root_node}, {UNIMOD_3_phosphoglyceryl, UNIMOD_unimod_root_node}, {UNIMOD_HN2_mustard, UNIMOD_unimod_root_node}, {UNIMOD_HN3_mustard, UNIMOD_unimod_root_node}, {UNIMOD_Oxidation_NEM, UNIMOD_unimod_root_node}, {UNIMOD_NHS_fluorescein, UNIMOD_unimod_root_node}, {UNIMOD_DiART6plex, UNIMOD_unimod_root_node}, {UNIMOD_DiART6plex115, UNIMOD_unimod_root_node}, {UNIMOD_DiART6plex116_119, UNIMOD_unimod_root_node}, {UNIMOD_DiART6plex117, UNIMOD_unimod_root_node}, {UNIMOD_DiART6plex118, UNIMOD_unimod_root_node}, {UNIMOD_Iodoacetanilide, UNIMOD_unimod_root_node}, {UNIMOD_Iodoacetanilide_13C_6_, UNIMOD_unimod_root_node}, {UNIMOD_Dap_DSP, UNIMOD_unimod_root_node}, {UNIMOD_MurNAc, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_7_15N_4_, UNIMOD_unimod_root_node}, {UNIMOD_Label_2H_6_15N_1_, UNIMOD_unimod_root_node}, {UNIMOD_EEEDVIEVYQEQTGG, UNIMOD_unimod_root_node}, {UNIMOD_EDEDTIDVFQQQTGG, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_s_GlcNAc, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoHex_2_, UNIMOD_unimod_root_node}, {UNIMOD_Trimethyl_13C_3_2H_9_, UNIMOD_unimod_root_node}, {UNIMOD_15N_oxobutanoic, UNIMOD_unimod_root_node}, {UNIMOD_spermine, UNIMOD_unimod_root_node}, {UNIMOD_spermidine, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21330, UNIMOD_unimod_root_node}, {UNIMOD_Pentose, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_Pent_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_8_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_8_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_9_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_6_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_7_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_Kdn_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_1_NeuGc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_Phos_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_8_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_9_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_HexNAc_7_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_10_Phos_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_6_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, UNIMOD_unimod_root_node}, {UNIMOD_Label_13C_2_15N_2_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSS_155_, UNIMOD_unimod_root_node}, {UNIMOD_NQIGG, UNIMOD_unimod_root_node}, {UNIMOD_Carboxyethylpyrrole, UNIMOD_unimod_root_node}, {UNIMOD_Fluorescein_tyramine, UNIMOD_unimod_root_node}, {UNIMOD_GEE, UNIMOD_unimod_root_node}, {UNIMOD_RNPXL, UNIMOD_unimod_root_node}, {UNIMOD_Glu__pyro_Glu_Methyl, UNIMOD_unimod_root_node}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, UNIMOD_unimod_root_node}, {UNIMOD_LRGG_methyl, UNIMOD_unimod_root_node}, {UNIMOD_LRGG_dimethyl, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_tyramide, UNIMOD_unimod_root_node}, {UNIMOD_Tris, UNIMOD_unimod_root_node}, {UNIMOD_IASD, UNIMOD_unimod_root_node}, {UNIMOD_NP40, UNIMOD_unimod_root_node}, {UNIMOD_Tween20, UNIMOD_unimod_root_node}, {UNIMOD_Tween80, UNIMOD_unimod_root_node}, {UNIMOD_Triton, UNIMOD_unimod_root_node}, {UNIMOD_Brij35, UNIMOD_unimod_root_node}, {UNIMOD_Brij58, UNIMOD_unimod_root_node}, {UNIMOD_betaFNA, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, UNIMOD_unimod_root_node}, {UNIMOD_Biotin_Thermo_21328, UNIMOD_unimod_root_node}, {UNIMOD_PhosphoCytidine, UNIMOD_unimod_root_node}, {UNIMOD_AzidoF, UNIMOD_unimod_root_node}, {UNIMOD_Dimethylaminoethyl, UNIMOD_unimod_root_node}, {UNIMOD_Gluratylation, UNIMOD_unimod_root_node}, {UNIMOD_hydroxyisobutyryl, UNIMOD_unimod_root_node}, {UNIMOD_MeMePhosphorothioate, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Fe_III_, UNIMOD_unimod_root_node}, {UNIMOD_DTT, UNIMOD_unimod_root_node}, {UNIMOD_DYn_2, UNIMOD_unimod_root_node}, {UNIMOD_MesitylOxide, UNIMOD_unimod_root_node}, {UNIMOD_methylol, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSS_259_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_176_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_175_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_279_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_54_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_86_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_104_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_111_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_85_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_213_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_214_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_317_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSSO_158_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_EGS_226_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DSS_138_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BuUrBu_196_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DTBP_172_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DST_114_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DTSSP_174_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_SMCC_219_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BS2G_96_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BS2G_113_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BS2G_114_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_BS2G_217_, UNIMOD_unimod_root_node}, {UNIMOD_Cation_Al_III_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DMP_139_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DMP_122_, UNIMOD_unimod_root_node}, {UNIMOD_glyoxalAGE, UNIMOD_unimod_root_node}, {UNIMOD_Met__AspSA, UNIMOD_unimod_root_node}, {UNIMOD_Decarboxylation, UNIMOD_unimod_root_node}, {UNIMOD_Aspartylurea, UNIMOD_unimod_root_node}, {UNIMOD_Formylasparagine, UNIMOD_unimod_root_node}, {UNIMOD_Carbonyl, UNIMOD_unimod_root_node}, {UNIMOD_AFB1_Dialdehyde, UNIMOD_unimod_root_node}, {UNIMOD_Pro__HAVA, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H__4_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H__4_O_3_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_O_4_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_3_C_3_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_4_C_5_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_10_C_8_O_1_, UNIMOD_unimod_root_node}, {UNIMOD_Delta_H_6_C_7_O_4_, UNIMOD_unimod_root_node}, {UNIMOD_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_Pent_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_Pent_2_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexNAc_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_Pent_3_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_Pent_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_Pent_2_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_HexA_2_HexNAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_4_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexA_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_9_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_9_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_10_HexNAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, UNIMOD_unimod_root_node}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_162, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_177, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_210, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_216, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_234, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_248, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_250, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_302, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_306, UNIMOD_unimod_root_node}, {UNIMOD_Unknown_420, UNIMOD_unimod_root_node}, {UNIMOD_Diethylphosphothione, UNIMOD_unimod_root_node}, {UNIMOD_Dimethylphosphothione, UNIMOD_unimod_root_node}, {UNIMOD_monomethylphosphothione, UNIMOD_unimod_root_node}, {UNIMOD_CIGG, UNIMOD_unimod_root_node}, {UNIMOD_GNLLFLACYCIGG, UNIMOD_unimod_root_node}, {UNIMOD_serotonylation, UNIMOD_unimod_root_node}, {UNIMOD_TMPP_Ac_13C_9_, UNIMOD_unimod_root_node}, {UNIMOD_Xlink_DST_56_, UNIMOD_unimod_root_node}, {UNIMOD_ZQG, UNIMOD_unimod_root_node}, {UNIMOD_Haloxon, UNIMOD_unimod_root_node}, {UNIMOD_Methamidophos_S, UNIMOD_unimod_root_node}, {UNIMOD_Methamidophos_O, UNIMOD_unimod_root_node}, {UNIMOD_Nitrene, UNIMOD_unimod_root_node}, {UNIMOD_shTMT, UNIMOD_unimod_root_node}, {UNIMOD_TMTpro, UNIMOD_unimod_root_node}, {UNIMOD_TMTpro_zero, UNIMOD_unimod_root_node}, {UNIMOD_Kdo, UNIMOD_unimod_root_node}, {UNIMOD_Andro_H2O, UNIMOD_unimod_root_node}, {UNIMOD_His_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, UNIMOD_unimod_root_node}, {UNIMOD_Hex_7_HexNAc_6_, UNIMOD_unimod_root_node}, {UNIMOD_Met_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Gly_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Pro_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Lys_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_Glu_O_2_, UNIMOD_unimod_root_node}, {UNIMOD_LTX_Lophotoxin, UNIMOD_unimod_root_node}, {UNIMOD_MBS_peptide, UNIMOD_unimod_root_node}, {UNIMOD_3_hydroxybenzyl_phosphate, UNIMOD_unimod_root_node}, {UNIMOD_phenyl_phosphate, UNIMOD_unimod_root_node}, {UO_length_unit, UO_unit}, {UO_mass_unit, UO_unit}, {UO_time_unit, UO_unit}, {UO_electric_current_unit, UO_unit}, {UO_temperature_unit, UO_unit}, {UO_substance_unit, UO_unit}, {UO_luminous_intensity_unit, UO_light_unit}, {UO_meter, UO_length_unit}, {UO_meter, UO_base_unit}, {UO_kilogram, UO_mass_unit}, {UO_kilogram, UO_base_unit}, {UO_second, UO_time_unit}, {UO_second, UO_base_unit}, {UO_ampere, UO_electric_current_unit}, {UO_ampere, UO_base_unit}, {UO_kelvin, UO_temperature_unit}, {UO_kelvin, UO_base_unit}, {UO_mole, UO_substance_unit}, {UO_mole, UO_base_unit}, {UO_candela, UO_luminous_intensity_unit}, {UO_candela, UO_base_unit}, {UO_centimeter, UO_length_unit}, {UO_millimeter, UO_length_unit}, {UO_micrometer, UO_length_unit}, {UO_nanometer, UO_length_unit}, {UO_angstrom, UO_length_unit}, {UO_picometer, UO_length_unit}, {UO_gram, UO_mass_unit}, {UO_milligram, UO_mass_unit}, {UO_microgram, UO_mass_unit}, {UO_nanogram, UO_mass_unit}, {UO_picogram, UO_mass_unit}, {UO_femtogram, UO_mass_unit}, {UO_degree_Celsius, UO_temperature_unit}, {UO_millisecond, UO_time_unit}, {UO_microsecond, UO_time_unit}, {UO_picosecond, UO_time_unit}, {UO_minute, UO_time_unit}, {UO_hour, UO_time_unit}, {UO_day, UO_time_unit}, {UO_week, UO_time_unit}, {UO_month, UO_time_unit}, {UO_year, UO_time_unit}, {UO_milliampere, UO_electric_current_unit}, {UO_microampere, UO_electric_current_unit}, {UO_micromole_300000039, UO_substance_unit}, {UO_millimole, UO_substance_unit}, {UO_nanomole, UO_substance_unit}, {UO_picomole, UO_substance_unit}, {UO_femtomole, UO_substance_unit}, {UO_attomole, UO_substance_unit}, {UO_base_unit, UO_unit}, {UO_area_unit, UO_unit}, {UO_acceleration_unit, UO_unit}, {UO_angular_velocity_unit, UO_unit}, {UO_angular_acceleration_unit, UO_unit}, {UO_concentration_unit, UO_unit}, {UO_mass_density_unit, UO_density_unit}, {UO_luminance_unit, UO_light_unit}, {UO_area_density_unit, UO_density_unit}, {UO_molar_mass_unit, UO_mass_unit}, {UO_molar_volume_unit, UO_volume_unit}, {UO_momentum_unit, UO_unit}, {UO_rotational_frequency_unit, UO_frequency_unit}, {UO_specific_volume_unit, UO_volume_unit}, {UO_speed_velocity_unit, UO_unit}, {UO_unit_of_molarity, UO_concentration_unit}, {UO_molar, UO_unit_of_molarity}, {UO_millimolar, UO_unit_of_molarity}, {UO_micromolar, UO_unit_of_molarity}, {UO_nanomolar, UO_unit_of_molarity}, {UO_picomolar, UO_unit_of_molarity}, {UO_unit_of_molality, UO_concentration_unit}, {UO_molal, UO_unit_of_molality}, {UO_millimolal, UO_unit_of_molality}, {UO_micromolal, UO_unit_of_molality}, {UO_nanomolal, UO_unit_of_molality}, {UO_picomolal, UO_unit_of_molality}, {UO_femtomolar, UO_unit_of_molarity}, {UO_unit_of_normality, UO_concentration_unit}, {UO_normal, UO_unit_of_normality}, {UO_mole_fraction, UO_concentration_unit}, {UO_mole_fraction, UO_fraction}, {UO_meter_per_second_per_second, UO_acceleration_unit}, {UO_radian_per_second_per_second, UO_angular_acceleration_unit}, {UO_radian_per_second, UO_angular_velocity_unit}, {UO_square_meter, UO_area_unit}, {UO_square_centimeter, UO_area_unit}, {UO_square_millimeter, UO_area_unit}, {UO_kilogram_per_cubic_meter, UO_mass_density_unit}, {UO_gram_per_cubic_centimeter, UO_mass_density_unit}, {UO_candela_per_square_meter, UO_luminance_unit}, {UO_kilogram_per_square_meter, UO_area_density_unit}, {UO_kilogram_per_mole, UO_molar_mass_unit}, {UO_gram_per_mole, UO_molar_mass_unit}, {UO_cubic_meter_per_mole, UO_molar_volume_unit}, {UO_cubic_centimeter_per_mole, UO_molar_volume_unit}, {UO_kilogram_meter_per_second, UO_momentum_unit}, {UO_turns_per_second, UO_rotational_frequency_unit}, {UO_cubic_meter_per_kilogram, UO_specific_volume_unit}, {UO_meter_per_second, UO_speed_velocity_unit}, {UO_volume_unit, UO_unit}, {UO_cubic_meter, UO_volume_unit}, {UO_cubic_centimeter, UO_volume_unit}, {UO_milliliter, UO_volume_unit}, {UO_liter, UO_volume_unit}, {UO_cubic_decimeter, UO_volume_unit}, {UO_microliter, UO_volume_unit}, {UO_nanoliter, UO_volume_unit}, {UO_picoliter, UO_volume_unit}, {UO_femtoliter, UO_volume_unit}, {UO_frequency_unit, UO_unit}, {UO_hertz, UO_frequency_unit}, {UO_force_unit, UO_unit}, {UO_newton, UO_force_unit}, {UO_pressure_unit, UO_unit}, {UO_pascal, UO_pressure_unit}, {UO_energy_unit, UO_unit}, {UO_joule, UO_energy_unit}, {UO_power_unit, UO_unit}, {UO_watt, UO_power_unit}, {UO_illuminance_unit, UO_light_unit}, {UO_lux, UO_illuminance_unit}, {UO_luminous_flux_unit, UO_light_unit}, {UO_lumen, UO_luminous_flux_unit}, {UO_catalytic_activity_unit, UO_unit}, {UO_katal, UO_catalytic_activity_unit}, {UO_angle_unit, UO_unit}, {UO_plane_angle_unit, UO_angle_unit}, {UO_radian, UO_plane_angle_unit}, {UO_solid_angle_unit, UO_angle_unit}, {UO_steradian, UO_solid_angle_unit}, {UO_radiation_unit, UO_unit}, {UO_activity__of_a_radionuclide__unit, UO_radiation_unit}, {UO_absorbed_dose_unit, UO_radiation_unit}, {UO_dose_equivalent_unit, UO_radiation_unit}, {UO_exposure_unit, UO_radiation_unit}, {UO_becquerel, UO_activity__of_a_radionuclide__unit}, {UO_curie, UO_activity__of_a_radionuclide__unit}, {UO_gray, UO_absorbed_dose_unit}, {UO_rad, UO_absorbed_dose_unit}, {UO_roentgen, UO_exposure_unit}, {UO_sievert, UO_dose_equivalent_unit}, {UO_millisievert, UO_dose_equivalent_unit}, {UO_microsievert, UO_dose_equivalent_unit}, {UO_Roentgen_equivalent_man, UO_dose_equivalent_unit}, {UO_microgray, UO_absorbed_dose_unit}, {UO_milligray, UO_absorbed_dose_unit}, {UO_nanogray, UO_absorbed_dose_unit}, {UO_nanosievert, UO_dose_equivalent_unit}, {UO_millicurie, UO_activity__of_a_radionuclide__unit}, {UO_microcurie, UO_activity__of_a_radionuclide__unit}, {UO_disintegrations_per_minute, UO_activity__of_a_radionuclide__unit}, {UO_counts_per_minute, UO_activity__of_a_radionuclide__unit}, {UO_nanosecond, UO_time_unit}, {UO_century, UO_time_unit}, {UO_half_life, UO_time_unit}, {UO_foot_candle, UO_illuminance_unit}, {UO_irradiance_unit, UO_light_unit}, {UO_watt_per_square_meter, UO_irradiance_unit}, {UO_einstein_per_square_meter_per_second, UO_irradiance_unit}, {UO_light_unit, UO_unit}, {UO_watt_per_steradian_per_square_meter, UO_radiance_unit}, {UO_radiant_intensity_unit, UO_light_unit}, {UO_microeinstein_per_square_meter_per_second, UO_irradiance_unit}, {UO_radiance_unit, UO_light_unit}, {UO_watt_per_steradian, UO_radiant_intensity_unit}, {UO_mass_percentage, UO_concentration_unit}, {UO_mass_percentage, UO_percent}, {UO_mass_volume_percentage, UO_concentration_unit}, {UO_mass_volume_percentage, UO_percent}, {UO_volume_percentage, UO_percent}, {UO_volume_percentage, UO_volume_per_unit_volume}, {UO_parts_per_notation_unit, UO_dimensionless_unit}, {UO_parts_per_hundred, UO_parts_per_notation_unit}, {UO_parts_per_thousand, UO_parts_per_notation_unit}, {UO_parts_per_million, UO_parts_per_notation_unit}, {UO_parts_per_billion, UO_parts_per_notation_unit}, {UO_parts_per_trillion, UO_parts_per_notation_unit}, {UO_parts_per_quadrillion, UO_parts_per_notation_unit}, {UO_gram_per_milliliter, UO_mass_density_unit}, {UO_kilogram_per_liter, UO_mass_density_unit}, {UO_gram_per_liter, UO_mass_density_unit}, {UO_milligram_per_milliliter, UO_mass_density_unit}, {UO_unit_per_volume_unit, UO_concentration_unit}, {UO_unit_per_milliliter, UO_unit_per_volume_unit}, {UO_unit_per_liter, UO_unit_per_volume_unit}, {UO_mass_per_unit_volume, UO_concentration_unit}, {UO_enzyme_unit, UO_catalytic_activity_unit}, {UO_density_unit, UO_unit}, {UO_linear_density_unit, UO_density_unit}, {UO_kilogram_per_meter, UO_linear_density_unit}, {UO_degree, UO_plane_angle_unit}, {UO_dimensionless_unit, UO_unit}, {UO_percent, UO_ratio_300000190}, {UO_pi, UO_dimensionless_unit}, {UO_count_unit, UO_dimensionless_unit}, {UO_ratio_300000190, UO_dimensionless_unit}, {UO_fraction, UO_ratio_300000190}, {UO_molecule_count, UO_count_unit}, {UO_purity_percentage, UO_percent}, {UO_confluence_percentage, UO_percent}, {UO_degree_Fahrenheit, UO_temperature_unit}, {UO_pH, UO_concentration_unit}, {UO_pH, UO_dimensionless_unit}, {UO_liter_per_kilogram, UO_specific_volume_unit}, {UO_milliliter_per_kilogram, UO_specific_volume_unit}, {UO_microliter_per_kilogram, UO_specific_volume_unit}, {UO_cell_concentration_unit, UO_concentration_unit}, {UO_cells_per_milliliter, UO_cell_concentration_unit}, {UO_catalytic__activity__concentration_unit, UO_concentration_unit}, {UO_katal_per_cubic_meter, UO_catalytic__activity__concentration_unit}, {UO_katal_per_liter, UO_catalytic__activity__concentration_unit}, {UO_volume_per_unit_volume, UO_concentration_unit}, {UO_milliliter_per_cubic_meter, UO_volume_per_unit_volume}, {UO_milliliter_per_liter, UO_volume_per_unit_volume}, {UO_gram_per_deciliter, UO_mass_density_unit}, {UO_deciliter, UO_volume_unit}, {UO_colony_forming_unit, UO_count_unit}, {UO_plaque_forming_unit, UO_count_unit}, {UO_colony_forming_unit_per_volume, UO_concentration_unit}, {UO_colony_forming_unit_per_milliliter, UO_colony_forming_unit_per_volume}, {UO_plaque_forming_unit_per_volume, UO_concentration_unit}, {UO_plaque_forming_unit_per_milliliter, UO_plaque_forming_unit_per_volume}, {UO_disintegrations_per_second, UO_activity__of_a_radionuclide__unit}, {UO_electric_potential_difference_unit, UO_unit}, {UO_volt, UO_electric_potential_difference_unit}, {UO_electric_charge, UO_unit}, {UO_coulomb, UO_electric_charge}, {UO_dalton, UO_mass_unit}, {UO_kilodalton, UO_mass_unit}, {UO_watt_hour, UO_energy_unit}, {UO_kilowatt_hour, UO_energy_unit}, {UO_magnetic_flux_unit, UO_unit}, {UO_weber, UO_magnetic_flux_unit}, {UO_magnetic_flux_density_unit, UO_unit}, {UO_tesla, UO_magnetic_flux_density_unit}, {UO_volt_hour, UO_magnetic_flux_unit}, {UO_kilovolt_hour, UO_magnetic_flux_unit}, {UO_information_unit, UO_unit}, {UO_bit, UO_information_unit}, {UO_byte, UO_information_unit}, {UO_kilobyte, UO_information_unit}, {UO_megabyte, UO_information_unit}, {UO_image_resolution_unit, UO_information_unit}, {UO_chroma_sampling_unit, UO_image_resolution_unit}, {UO_dynamic_range_unit, UO_image_resolution_unit}, {UO_spatial_resolution_unit, UO_image_resolution_unit}, {UO_dots_per_inch, UO_spatial_resolution_unit}, {UO_micron_pixel, UO_spatial_resolution_unit}, {UO_pixels_per_inch, UO_spatial_resolution_unit}, {UO_pixels_per_millimeter, UO_spatial_resolution_unit}, {UO_base_pair, UO_count_unit}, {UO_kibibyte, UO_information_unit}, {UO_mebibyte, UO_information_unit}, {UO_millivolt, UO_electric_potential_difference_unit}, {UO_kilovolt, UO_electric_potential_difference_unit}, {UO_microvolt, UO_electric_potential_difference_unit}, {UO_nanovolt, UO_electric_potential_difference_unit}, {UO_picovolt, UO_electric_potential_difference_unit}, {UO_megavolt, UO_electric_potential_difference_unit}, {UO_surface_tension_unit, UO_unit}, {UO_newton_per_meter, UO_surface_tension_unit}, {UO_dyne_per_cm, UO_surface_tension_unit}, {UO_viscosity_unit, UO_unit}, {UO_pascal_second, UO_viscosity_unit}, {UO_poise, UO_viscosity_unit}, {UO_decibel, UO_ratio_300000190}, {UO_effective_dose_unit, UO_radiation_unit}, {UO_conduction_unit, UO_unit}, {UO_electrical_conduction_unit, UO_conduction_unit}, {UO_heat_conduction_unit, UO_conduction_unit}, {UO_siemens, UO_electrical_conduction_unit}, {UO_watt_per_meter_kelvin, UO_heat_conduction_unit}, {UO_electronvolt, UO_energy_unit}, {UO_electric_field_strength_unit, UO_unit}, {UO_volt_per_meter, UO_electric_field_strength_unit}, {UO_absorbance_unit, UO_dimensionless_unit}, {UO_volumetric_flow_rate_unit, UO_unit}, {UO_microliters_per_minute, UO_volumetric_flow_rate_unit}, {UO_millimetres_of_mercury, UO_pressure_unit}, {UO_milligram_per_liter, UO_mass_density_unit}, {UO_microgram_per_milliliter, UO_mass_density_unit}, {UO_nanogram_per_milliliter, UO_mass_density_unit}, {UO_amount_per_container, UO_concentration_unit}, {UO_ug_disk, UO_amount_per_container}, {UO_nmole_disk, UO_amount_per_container}, {UO_milliunits_per_milliliter, UO_unit_per_volume_unit}, {UO_rate_unit, UO_unit}, {UO_count_per_nanomolar_second, UO_rate_unit}, {UO_count_per_molar_second, UO_rate_unit}, {UO_kilogram_per_hectare, UO_area_density_unit}, {UO_count_per_nanomolar, UO_rate_unit}, {UO_count_per_molar, UO_rate_unit}, {UO_yotta, UO_prefix}, {UO_hecto, UO_prefix}, {UO_zetta, UO_prefix}, {UO_exa, UO_prefix}, {UO_peta, UO_prefix}, {UO_tera, UO_prefix}, {UO_giga, UO_prefix}, {UO_mega, UO_prefix}, {UO_kilo, UO_prefix}, {UO_deca, UO_prefix}, {UO_deci, UO_prefix}, {UO_milli_300000297, UO_prefix}, {UO_centi, UO_prefix}, {UO_micro, UO_prefix}, {UO_nano, UO_prefix}, {UO_microgram_per_liter, UO_mass_density_unit}, {UO_pico, UO_prefix}, {UO_femto, UO_prefix}, {UO_atto, UO_prefix}, {UO_zepto, UO_prefix}, {UO_yocto, UO_prefix}, {UO_dose_unit, UO_concentration_unit}, {UO_milligram_per_kilogram, UO_dose_unit}, {UO_milligram_per_square_meter, UO_dose_unit}, {UO_dosage_unit, UO_concentration_unit}, {UO_milligram_per_kilogram_per_day, UO_dosage_unit}, {UO_relative_light_unit, UO_light_unit}, {UO_relative_luminescence_unit, UO_relative_light_unit}, {UO_relative_fluorescence_unit, UO_relative_light_unit}, {UO_turbidity_unit, UO_unit}, {UO_cells_per_microliter, UO_cell_concentration_unit}, {UO_cells_per_well, UO_cell_concentration_unit}, {UO_formazin_nephelometric_unit, UO_turbidity_unit}, {UO_radioactivity_concentration, UO_concentration_unit}, {UO_curie_per_liter, UO_radioactivity_concentration}, {UO_microcurie_per_milliliter, UO_radioactivity_concentration}, {UO_fold_dilution, UO_dimensionless_unit}, {UO_ton_per_hectare, UO_area_density_unit}, {UO_square_angstrom, UO_area_unit}, {UO_megaHertz, UO_frequency_unit}, {UO_centiMorgan, UO_length_unit}, {UO_centiRay, UO_length_unit}, {UO_kilo_base_pair, UO_base_pair}, {UO_mega_base_pair, UO_base_pair}, {UO_giga_base_pair, UO_base_pair}, {UO_gigabyte, UO_information_unit}, {UO_terabyte, UO_information_unit}, {UO_square_micrometer, UO_area_unit}, {UO_millisiemens, UO_electrical_conduction_unit}, {UO_micromole_per_litre, UO_unit_of_molality}, {UO_micromole_per_kilogram, UO_unit_of_molality}, {UO_millimeters_per_day, UO_speed_velocity_unit}, {UO_ratio_300010006, UO_ratio_300000190}, {UO_volt_second_per_square_centimeter, UO_electrical_conduction_unit}, {UO_kilometer_per_hour, UO_speed_velocity_unit}, {UO_milli_300010009, UO_mass_unit}, {UO_hectare, UO_area_unit}, {UO_inch, UO_length_unit}, {UO_inch, UO_base_unit}, {UO_thou, UO_length_unit}, {UO_thou, UO_base_unit}, {UO_foot, UO_length_unit}, {UO_foot, UO_base_unit}, {UO_yard, UO_length_unit}, {UO_yard, UO_base_unit}, {UO_chain, UO_length_unit}, {UO_chain, UO_base_unit}, {UO_furlong, UO_length_unit}, {UO_furlong, UO_base_unit}, {UO_mile, UO_length_unit}, {UO_mile, UO_base_unit}, {UO_league, UO_length_unit}, {UO_league, UO_base_unit}, {UO_maritime_length_unit, UO_length_unit}, {UO_fathom, UO_maritime_length_unit}, {UO_cable, UO_maritime_length_unit}, {UO_nautical_mile, UO_maritime_length_unit}, {UO_perch, UO_area_unit}, {UO_rood, UO_area_unit}, {UO_acre, UO_area_unit}, {UO_fluid_ounce, UO_volume_unit}, {UO_gill, UO_volume_unit}, {UO_pint, UO_volume_unit}, {UO_quart, UO_volume_unit}, {UO_gallon, UO_volume_unit}, {UO_grain, UO_mass_unit}, {UO_drachm, UO_mass_unit}, {UO_ounce, UO_mass_unit}, {UO_pound, UO_mass_unit}, {UO_stone, UO_mass_unit}, {UO_quarter, UO_mass_unit}, {UO_hundredweight, UO_mass_unit}, {UO_ton, UO_mass_unit}, {UO_slug, UO_energy_unit}, {UO_teaspoon, UO_volume_unit}, {UO_united_states_customary_teaspoon, UO_volume_unit}, {UO_tablespoon, UO_volume_unit}, {UO_australian_metric_tablespoon, UO_volume_unit}, {UO_united_states_customary_tablespoon, UO_volume_unit}, {UO_metric_cup, UO_volume_unit}, {UO_united_states_customary_cup, UO_volume_unit}, {UO_united_states_fda_cup, UO_volume_unit}, {UO_micromole_300010048, UO_substance_unit}, {UO_gram_per_square_meter, UO_area_density_unit}, {UO_nanogram_per_microliter, UO_mass_density_unit}, {UO_large_calorie, UO_energy_unit}, {UO_pounds_per_square_inch, UO_pressure_unit}, {UO_micrograms_per_wheaton_bottle, UO_mass_density_unit}, {UO_picoampere, UO_electric_current_unit}, {UO_centigray, UO_absorbed_dose_unit}, {UO_gigaelectronvolt, UO_energy_unit}, {UO_gigaelectronvolt_per_nucleon, UO_energy_unit}, {UO_megaelectronvolt_per_nucleon, UO_energy_unit}, {UO_kiloelectronvolt_per_micron, UO_energy_unit}, {UO_gray_per_minute, UO_absorbed_dose_unit}, {UO_centigray_per_minute, UO_absorbed_dose_unit}, {UO_milligray_per_minute, UO_absorbed_dose_unit}, {UO_milligray_per_day, UO_absorbed_dose_unit}, }; // relationsIsA_ const size_t relationsIsASize_ = sizeof(relationsIsA_)/sizeof(CVIDPair); CVIDPair relationsPartOf_[] = { {MS_inlet_type, MS_source}, {MS_ionization_type, MS_source}, {MS_scan_direction, MS_scan}, {MS_scan_law, MS_scan}, {MS_detector_type, MS_detector}, {MS_detector_acquisition_mode, MS_detector}, {MS_instrument_model, MS_instrument}, {MS_peak_intensity, MS_peak}, {MS_dissociation_method, MS_precursor_activation}, {MS_peak, MS_spectrum}, {MS_scan, MS_spectrum_generation_information}, {MS_spectrum, MS_spectrum_generation_information}, {MS_mass_analyzer_type, MS_mass_analyzer}, {MS_mass_analyzer, MS_instrument}, {MS_data_transformation, MS_spectrum_generation_information}, {MS_detector, MS_instrument}, {MS_ion_selection_attribute, MS_spectrum}, {MS_precursor_activation, MS_spectrum}, {MS_sample, MS_spectrum_generation_information}, {MS_source, MS_instrument}, {MS_unit_OBSOLETE, MS_spectrum_generation_information}, {MS_ion_optics, MS_instrument}, {MS_instrument, MS_spectrum_generation_information}, {MS_scan_polarity, MS_scan}, {MS_mass_analyzer_attribute, MS_mass_analyzer}, {MS_detector_attribute, MS_detector}, {MS_source_attribute, MS_source}, {MS_instrument_attribute, MS_instrument}, {MS_spectrum_attribute, MS_spectrum}, {MS_scan_attribute, MS_scan}, {MS_ion_property, MS_ion}, {MS_precursor_activation_attribute, MS_precursor_activation}, {MS_binary_data_array, MS_spectrum}, {MS_binary_data_array, MS_chromatogram}, {MS_binary_data_type, MS_spectrum}, {MS_binary_data_type, MS_chromatogram}, {MS_data_file_content, MS_source_data_file}, {MS_spectrum_representation, MS_spectrum}, {MS_software, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_object_attribute, MS_spectrum_generation_information}, {MS_sample_attribute, MS_sample}, {MS_selection_window_attribute, MS_scan}, {MS_spectrum_type, MS_spectrum}, {MS_data_file_checksum_type, MS_source_data_file}, {MS_spectra_combination, MS_spectrum}, {MS_binary_data_compression_type, MS_spectrum}, {MS_binary_data_compression_type, MS_chromatogram}, {MS_source_data_file, MS_spectrum_generation_information}, {MS_contact_attribute, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_measurement_method, MS_spectrum_generation_information}, {MS_chromatogram, MS_spectrum_generation_information}, {MS_chromatogram_type, MS_chromatogram}, {MS_data_processing_parameter, MS_spectrum_generation_information}, {MS_native_spectrum_identifier_format, MS_source_data_file}, {MS_isolation_window_attribute, MS_scan}, {MS_chromatogram_attribute, MS_chromatogram}, {MS_sample_preparation, MS_sample_attribute}, {MS_MALDI_matrix_application, MS_sample_preparation}, {MS_matrix_application_type, MS_MALDI_matrix_application}, {MS_laser, MS_source_attribute}, {MS_laser_attribute, MS_laser}, {MS_laser_type, MS_laser}, {MS_molecular_entity_property, MS_molecular_entity}, {MS_molecular_entity, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_protein_attribute, MS_protein}, {MS_peptide_attribute, MS_peptide}, {MS_standard, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_peak_intensity_rank, MS_peak}, {MS_peak_targeting_suitability_rank, MS_peak}, {MS_transition, MS_spectrum_generation_information}, {MS_transition_validation_method, MS_transition}, {MS_retention_time_window_attribute, MS_retention_time}, {MS_target_list, MS_spectrum_generation_information}, {MS_target_inclusion_exclusion_priority, MS_target_list}, {MS_spectrum_interpretation, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_modification_parameters, MS_spectrum_interpretation}, {MS_quantification_information, MS_spectrum_interpretation}, {MS_Cleavage_agent_regular_expression, MS_cleavage_agent_details}, {MS_search_input_details, MS_spectrum_interpretation}, {MS_mass_table_options, MS_spectrum_interpretation}, {MS_ambiguous_residues, MS_spectrum_interpretation}, {MS_spectrum_identification_result_details, MS_spectrum_interpretation}, {MS_spectrum_generation_information, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_file_format, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_peptide_modification_details, MS_spectrum_interpretation}, {MS_quantification_data_processing, MS_spectrum_interpretation}, {MS_transition_validation_attribute, MS_transition}, {MS_source_interface, MS_source}, {MS_source_interface_model, MS_source_interface}, {MS_source_sprayer, MS_source}, {MS_source_sprayer_type, MS_source_sprayer}, {MS_source_sprayer_manufacturer, MS_source_sprayer}, {MS_source_sprayer_model, MS_source_sprayer}, {MS_sample_plate, MS_source}, {MS_sample_plate_type, MS_sample_plate}, {MS_electrospray_supply_type, MS_source}, {MS_source_interface_manufacturer, MS_source_interface}, {MS_acquisition_parameter, MS_spectrum_generation_information}, {MS_peptide_spectrum_match_scoring_algorithm, MS_spectrum_generation_information}, {MS_SRM_transition_type, MS_transition}, {MS_inlet_attribute, MS_source}, {MS_higher_score_better, MS_search_engine_specific_score}, {MS_lower_score_better, MS_search_engine_specific_score}, {MS_SRM_transition_attribute, MS_transition}, {MS_Trans_Proteomic_Pipeline_software, MS_Trans_Proteomic_Pipeline}, {MS_domain_range, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_spectrum_identification_list_result_details, MS_spectrum_interpretation}, {MS_regular_expression, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_special_processing, MS_spectrum_interpretation}, {MS_native_spectrum_identifier_format__combined_spectra, MS_source_data_file}, {MS_identification_parameter, MS_spectrum_interpretation}, {MS_cross_linking_result_details, MS_spectrum_interpretation}, {MS_adduct_ion_attribute, MS_adduct_ion}, {MS_external_reference_data, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_named_element, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, {MS_molecular_entity_attribute, MS_molecular_entity}, {MS_peptidoform_attribute, MS_peptidoform}, {MS_peptidoform_ion_property, MS_peptidoform_ion}, {MS_adduct_ion_property, MS_adduct_ion}, {MS_spectrum_property, MS_spectrum}, {MS_interpreted_spectrum_attribute, MS_interpreted_spectrum}, {MS_binary_data_compression_parameter, MS_spectrum}, {MS_binary_data_compression_parameter, MS_chromatogram}, }; // relationsPartOf_ const size_t relationsPartOfSize_ = sizeof(relationsPartOf_)/sizeof(CVIDPair); struct OtherRelationPair { CVID subject; const char* relation; CVID object; }; OtherRelationPair relationsOther_[] = { {CVID_Unknown, "Unknown", CVID_Unknown}, {PEFF_SequenceType, "has_regexp", MS_MS1_label_based_peptide_level_quantitation}, {PEFF_Processed, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_Variant_OBSOLETE, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_ModResPsi, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_ModRes, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_SeqStatus, "has_regexp", MS_MS1_label_based_protein_level_quantitation}, {PEFF_mature_protein, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_signal_peptide, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_transit_peptide, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_Conflict, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_ModResUnimod, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_VariantSimple, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_VariantComplex, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_propeptide, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {PEFF_initiator_methionine, "has_regexp", MS_MS1_label_based_raw_feature_quantitation}, {MS_sample_mass, "has_units", UO_gram}, {MS_sample_volume, "has_units", UO_milliliter}, {MS_sample_concentration, "has_units", UO_gram_per_liter}, {MS_accuracy, "has_units", MS_m_z}, {MS_accuracy, "has_units", UO_parts_per_million}, {MS_scan_rate, "has_units", MS_Th_s}, {MS_scan_start_time, "has_units", UO_second}, {MS_scan_start_time, "has_units", UO_minute}, {MS_TOF_Total_Path_Length, "has_units", UO_meter}, {MS_isolation_width_OBSOLETE, "has_units", MS_m_z}, {MS_magnetic_field_strength, "has_units", UO_tesla}, {MS_sampling_frequency, "has_units", UO_hertz}, {MS_peak_intensity, "has_units", MS_number_of_detector_counts}, {MS_peak_intensity, "has_units", MS_percent_of_base_peak}, {MS_peak_intensity, "has_units", MS_counts_per_second}, {MS_peak_intensity, "has_units", MS_percent_of_base_peak_times_100}, {MS_peak_intensity, "has_units", UO_absorbance_unit}, {MS_collision_energy, "has_units", UO_electronvolt}, {MS_normalized_collision_energy, "has_units", UO_percent}, {MS_accurate_mass_OBSOLETE, "has_units", UO_mass_unit}, {MS_average_mass_OBSOLETE, "has_units", UO_mass_unit}, {MS_appearance_energy_OBSOLETE, "has_units", UO_electronvolt}, {MS_exact_mass_OBSOLETE, "has_units", UO_mass_unit}, {MS_ionization_energy_OBSOLETE, "has_units", UO_electronvolt}, {MS_mass_defect_OBSOLETE, "has_units", UO_mass_unit}, {MS_molecular_mass, "has_units", UO_mass_unit}, {MS_monoisotopic_mass_OBSOLETE, "has_units", UO_mass_unit}, {MS_nominal_mass_OBSOLETE, "has_units", UO_mass_unit}, {MS_accelerating_voltage, "has_units", UO_volt}, {MS_electric_field_strength, "has_units", UO_volt_per_meter}, {MS_source_potential, "has_units", UO_volt}, {MS_scan_window_upper_limit, "has_units", MS_m_z}, {MS_scan_window_lower_limit, "has_units", MS_m_z}, {MS_dwell_time, "has_units", UO_second}, {MS_dwell_time, "has_units", UO_minute}, {MS_base_peak_m_z, "has_units", MS_m_z}, {MS_base_peak_intensity, "has_units", MS_number_of_detector_counts}, {MS_base_peak_intensity, "has_units", MS_percent_of_base_peak}, {MS_base_peak_intensity, "has_units", MS_counts_per_second}, {MS_base_peak_intensity, "has_units", MS_percent_of_base_peak_times_100}, {MS_base_peak_intensity, "has_units", UO_absorbance_unit}, {MS_activation_energy, "has_units", UO_electronvolt}, {MS_m_z_array, "has_units", MS_m_z}, {MS_intensity_array, "has_units", MS_number_of_detector_counts}, {MS_intensity_array, "has_units", MS_percent_of_base_peak}, {MS_intensity_array, "has_units", MS_counts_per_second}, {MS_intensity_array, "has_units", MS_percent_of_base_peak_times_100}, {MS_intensity_array, "has_units", UO_absorbance_unit}, {MS_highest_observed_m_z, "has_units", MS_m_z}, {MS_lowest_observed_m_z, "has_units", MS_m_z}, {MS_time_array, "has_units", UO_second}, {MS_time_array, "has_units", UO_minute}, {MS_wavelength_array, "has_units", UO_nanometer}, {MS_highest_observed_wavelength, "has_units", UO_nanometer}, {MS_lowest_observed_wavelength, "has_units", UO_nanometer}, {MS_low_intensity_threshold, "has_units", MS_number_of_detector_counts}, {MS_low_intensity_threshold, "has_units", MS_percent_of_base_peak}, {MS_low_intensity_threshold, "has_units", MS_counts_per_second}, {MS_low_intensity_threshold, "has_units", MS_percent_of_base_peak_times_100}, {MS_low_intensity_threshold, "has_units", UO_absorbance_unit}, {MS_high_intensity_threshold, "has_units", MS_number_of_detector_counts}, {MS_high_intensity_threshold, "has_units", MS_percent_of_base_peak}, {MS_high_intensity_threshold, "has_units", MS_counts_per_second}, {MS_high_intensity_threshold, "has_units", MS_percent_of_base_peak_times_100}, {MS_high_intensity_threshold, "has_units", UO_absorbance_unit}, {MS_selected_ion_m_z, "has_units", MS_m_z}, {MS_inclusive_low_intensity_threshold, "has_units", MS_number_of_detector_counts}, {MS_inclusive_low_intensity_threshold, "has_units", MS_percent_of_base_peak}, {MS_inclusive_low_intensity_threshold, "has_units", MS_counts_per_second}, {MS_inclusive_low_intensity_threshold, "has_units", MS_percent_of_base_peak_times_100}, {MS_inclusive_low_intensity_threshold, "has_units", UO_absorbance_unit}, {MS_inclusive_high_intensity_threshold, "has_units", MS_number_of_detector_counts}, {MS_inclusive_high_intensity_threshold, "has_units", MS_percent_of_base_peak}, {MS_inclusive_high_intensity_threshold, "has_units", MS_counts_per_second}, {MS_inclusive_high_intensity_threshold, "has_units", MS_percent_of_base_peak_times_100}, {MS_inclusive_high_intensity_threshold, "has_units", UO_absorbance_unit}, {MS_isolation_window_upper_limit_OBSOLETE, "has_units", MS_m_z}, {MS_isolation_window_lower_limit_OBSOLETE, "has_units", MS_m_z}, {MS_analyzer_scan_offset, "has_units", MS_m_z}, {MS_flow_rate_array, "has_units", UO_microliters_per_minute}, {MS_pressure_array, "has_units", UO_pascal}, {MS_temperature_array, "has_units", UO_kelvin}, {MS_elution_time, "has_units", UO_second}, {MS_elution_time, "has_units", UO_minute}, {MS_isolation_window_target_m_z, "has_units", MS_m_z}, {MS_isolation_window_lower_offset, "has_units", MS_m_z}, {MS_isolation_window_upper_offset, "has_units", MS_m_z}, {MS_matrix_solution_concentration, "has_units", UO_gram_per_liter}, {MS_wavelength_OBSOLETE, "has_units", UO_nanometer}, {MS_focus_diameter_x, "has_units", UO_micrometer}, {MS_focus_diameter_y, "has_units", UO_micrometer}, {MS_pulse_energy, "has_units", UO_joule}, {MS_pulse_duration, "has_units", UO_nanosecond}, {MS_attenuation, "has_units", UO_percent}, {MS_impact_angle, "has_units", UO_degree}, {MS_collision_gas_pressure, "has_units", UO_pascal}, {MS_declustering_potential, "has_units", UO_volt}, {MS_cone_voltage, "has_units", UO_volt}, {MS_tube_lens_voltage, "has_units", UO_volt}, {MS_interchannel_delay, "has_units", UO_second}, {MS_retention_time, "has_units", UO_second}, {MS_retention_time, "has_units", UO_minute}, {MS_local_retention_time, "has_units", UO_second}, {MS_local_retention_time, "has_units", UO_minute}, {MS_normalized_retention_time, "has_units", UO_second}, {MS_normalized_retention_time, "has_units", UO_minute}, {MS_predicted_retention_time, "has_units", UO_second}, {MS_predicted_retention_time, "has_units", UO_minute}, {MS_product_ion_m_z_delta, "has_units", MS_m_z}, {MS_retention_time_window_lower_offset, "has_units", UO_second}, {MS_retention_time_window_lower_offset, "has_units", UO_minute}, {MS_retention_time_window_upper_offset, "has_units", UO_second}, {MS_retention_time_window_upper_offset, "has_units", UO_minute}, {MS_ion_injection_time, "has_units", UO_millisecond}, {MS_retention_time_s__OBSOLETE, "has_units", UO_second}, {MS_retention_time_s__OBSOLETE, "has_units", UO_minute}, {MS_theoretical_mass, "has_units", UO_dalton}, {MS_SEQUEST_xcorr, "has_order", MS_higher_score_better}, {MS_DB_MW_filter_maximum, "has_units", UO_dalton}, {MS_DB_MW_filter_maximum, "has_units", UO_kilodalton}, {MS_DB_MW_filter_minimum, "has_units", UO_dalton}, {MS_DB_MW_filter_minimum, "has_units", UO_kilodalton}, {MS_protein_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_product_ion_m_z, "has_units", MS_m_z}, {MS_product_ion_intensity, "has_units", MS_number_of_detector_counts}, {MS_product_ion_intensity, "has_units", MS_percent_of_base_peak}, {MS_product_ion_intensity, "has_units", MS_counts_per_second}, {MS_product_ion_intensity, "has_units", MS_percent_of_base_peak_times_100}, {MS_product_ion_m_z_error, "has_units", MS_m_z}, {MS_product_ion_m_z_error, "has_units", UO_parts_per_notation_unit}, {MS_Trypsin, "has_regexp", MS______KR_____P_}, {MS_Arg_C, "has_regexp", MS_____R____P_}, {MS_Asp_N, "has_regexp", MS_____BD__}, {MS_Asp_N_ambic, "has_regexp", MS_____DE__}, {MS_Chymotrypsin, "has_regexp", MS______FYWL_____P_}, {MS_CNBr, "has_regexp", MS_____M_}, {MS_Formic_acid, "has_regexp", MS______D_______D__}, {MS_Lys_C, "has_regexp", MS_____K____P_}, {MS_Lys_C_P, "has_regexp", MS_____K_}, {MS_PepsinA, "has_regexp", MS______FL__}, {MS_TrypChymo, "has_regexp", MS______FYWLKR_____P_}, {MS_Trypsin_P, "has_regexp", MS______KR__}, {MS_V8_DE, "has_regexp", MS______BDEZ_____P_}, {MS_V8_E, "has_regexp", MS______EZ_____P_}, {MS_alternate_mass, "has_units", UO_dalton}, {MS_peptide_sequence_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_search_tolerance_plus_value, "has_units", UO_parts_per_notation_unit}, {MS_search_tolerance_plus_value, "has_units", UO_parts_per_million}, {MS_search_tolerance_plus_value, "has_units", UO_percent}, {MS_search_tolerance_plus_value, "has_units", UO_dalton}, {MS_search_tolerance_minus_value, "has_units", UO_parts_per_notation_unit}, {MS_search_tolerance_minus_value, "has_units", UO_parts_per_million}, {MS_search_tolerance_minus_value, "has_units", UO_percent}, {MS_search_tolerance_minus_value, "has_units", UO_dalton}, {MS_fragment_neutral_loss, "has_units", UO_dalton}, {MS_precursor_neutral_loss, "has_units", UO_dalton}, {MS_FAIMS_compensation_voltage, "has_units", UO_volt}, {MS_distinct_peptide_level_q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_level_q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_peptide_sequence_level_p_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_level_p_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_peptide_sequence_level_e_value, "has_domain", MS_value_greater_than_zero}, {MS_protein_level_e_value, "has_domain", MS_value_greater_than_zero}, {MS_offset_voltage, "has_units", UO_volt}, {MS_retention_time_window_width, "has_units", UO_second}, {MS_retention_time_window_width, "has_units", UO_minute}, {MS_S_lens_voltage, "has_units", UO_volt}, {MS_leukocyte_elastase, "has_regexp", MS______ALIV_____P_}, {MS_proline_endopeptidase, "has_regexp", MS______HKR_P____P_}, {MS_glutamyl_endopeptidase, "has_regexp", MS_______E_E_}, {MS_2_iodobenzoate, "has_regexp", MS_____W_}, {MS_Digital_Object_Identifier__DOI_, "has_regexp", MS_regular_expression_for_a_digital_object_identifier__DOI_}, {MS_Collision_cell_exit_potential, "has_units", UO_volt}, {MS_product_ion_drift_time_OBSOLETE, "has_units", UO_millisecond}, {MS_phosphoRS_score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_phosphoRS_sequence_probability, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_phosphoRS_site_probability, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_DeBunker_score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_delta_m_z, "has_units", UO_parts_per_notation_unit}, {MS_delta_m_z, "has_units", UO_percent}, {MS_delta_m_z, "has_units", UO_dalton}, {MS_delta_M, "has_units", UO_parts_per_notation_unit}, {MS_delta_M, "has_units", UO_percent}, {MS_delta_M, "has_units", UO_dalton}, {MS_MSQuant_PTM_score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_MaxQuant_PTM_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_MaxQuant_Phospho__STY__Probabilities, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_MaxQuant_P_site_localization_probability, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_MaxQuant_PTM_Delta_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_Ascore, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_H_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_Mascot_PTM_site_assignment_confidence, "has_units", UO_percent}, {MS_collision_energy_ramp_start, "has_units", UO_electronvolt}, {MS_collision_energy_ramp_end, "has_units", UO_electronvolt}, {MS_inlet_temperature, "has_units", UO_kelvin}, {MS_inlet_temperature, "has_units", UO_degree_Celsius}, {MS_source_temperature, "has_units", UO_kelvin}, {MS_source_temperature, "has_units", UO_degree_Celsius}, {MS_modulation_time, "has_units", UO_second}, {MS_modulation_time, "has_units", UO_minute}, {MS_MS_GF_SpecEValue, "has_order", MS_lower_score_better}, {MS_MS_GF_EValue, "has_order", MS_lower_score_better}, {MS_p_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_Before, "has_units", UO_dalton}, {MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_After, "has_units", UO_dalton}, {MS_first_column_elution_time, "has_units", UO_second}, {MS_first_column_elution_time, "has_units", UO_minute}, {MS_second_column_elution_time, "has_units", UO_second}, {MS_second_column_elution_time, "has_units", UO_minute}, {MS_percent_collision_energy_ramp_start, "has_units", UO_percent}, {MS_percent_collision_energy_ramp_end, "has_units", UO_percent}, {MS_average_product_ion_intensity, "has_units", MS_number_of_detector_counts}, {MS_average_product_ion_intensity, "has_units", MS_percent_of_base_peak}, {MS_average_product_ion_intensity, "has_units", MS_counts_per_second}, {MS_average_product_ion_intensity, "has_units", MS_percent_of_base_peak_times_100}, {MS_product_ion_intensity_standard_deviation, "has_units", MS_number_of_detector_counts}, {MS_product_ion_intensity_standard_deviation, "has_units", MS_percent_of_base_peak}, {MS_product_ion_intensity_standard_deviation, "has_units", MS_counts_per_second}, {MS_product_ion_intensity_standard_deviation, "has_units", MS_percent_of_base_peak_times_100}, {MS_ProteomeDiscoverer_Default_FDR_calculator, "has_regexp", MS_regular_expressions_for_a_GUID}, {MS_selected_precursor_m_z, "has_units", MS_m_z}, {MS_Comet_xcorr, "has_order", MS_higher_score_better}, {MS_Byonic_Score, "has_order", MS_higher_score_better}, {MS_Byonic_Delta_Score, "has_order", MS_higher_score_better}, {MS_Byonic_DeltaMod_Score, "has_order", MS_higher_score_better}, {MS_Byonic_PEP, "has_order", MS_lower_score_better}, {MS_Byonic_Peptide_LogProb, "has_order", MS_lower_score_better}, {MS_Byonic_Protein_LogProb, "has_order", MS_lower_score_better}, {MS_Byonic_Best_LogProb, "has_order", MS_lower_score_better}, {MS_Byonic_Best_Score, "has_order", MS_higher_score_better}, {MS_detector_potential, "has_units", UO_volt}, {MS_Byonic__Peptide_AbsLogProb, "has_order", MS_higher_score_better}, {MS_Byonic__Protein_AbsLogProb, "has_order", MS_higher_score_better}, {MS_Byonic__Peptide_AbsLogProb2D, "has_order", MS_higher_score_better}, {MS_Andromeda_score, "has_order", MS_higher_score_better}, {MS_PSM_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PSM_level_local_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PSM_level_p_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PSM_level_e_value, "has_domain", MS_value_greater_than_zero}, {MS_PSM_level_q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PSM_level_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_PSM_level_combined_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_PSM_level_probability, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_peptide_sequence_level_local_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_distinct_peptide_level_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_distinct_peptide_level_combined_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_peptide_sequence_level_probability, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_FDRScore_for_proteins, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_combined_FDRScore_for_proteins, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_probability_for_proteins, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_group_level_p_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_group_level_e_value, "has_domain", MS_value_greater_than_zero}, {MS_protein_group_level_q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_group_level_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_protein_group_level_combined_FDRScore, "has_domain", MS_value_greater_than_zero_but_less_than_or_equal_to_one}, {MS_protein_group_level_probability, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PIA_protein_score, "has_order", MS_higher_score_better}, {MS_protein_group_level_global_FNR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_peptide_sequence_level_global_FNR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PSM_level_global_FNR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_PeptideShaker_PSM_score, "has_order", MS_higher_score_better}, {MS_PeptideShaker_PSM_confidence, "has_order", MS_higher_score_better}, {MS_PeptideShaker_peptide_score, "has_order", MS_higher_score_better}, {MS_PeptideShaker_peptide_confidence, "has_order", MS_higher_score_better}, {MS_PeptideShaker_protein_group_score, "has_order", MS_higher_score_better}, {MS_PeptideShaker_protein_group_confidence, "has_order", MS_higher_score_better}, {MS_ProteoAnnotator_non_canonical_gene_model_score, "has_order", MS_higher_score_better}, {MS_ion_mobility_drift_time, "has_units", UO_millisecond}, {MS_mean_ion_mobility_drift_time_array, "has_units", UO_millisecond}, {MS_mean_ion_mobility_drift_time_array, "has_units", UO_second}, {MS_modification_rescoring_false_localization_rate, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_ProLuCID_xcorr, "has_order", MS_higher_score_better}, {MS_D_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_MD_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_xi_score, "has_order", MS_higher_score_better}, {MS_peptide_phosphoRS_score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_peptide_Ascore, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_peptide_H_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_peptide_D_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_peptide_MD_Score, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_Morpheus_Morpheus_score, "has_order", MS_higher_score_better}, {MS_Morpheus_summed_Morpheus_score, "has_order", MS_higher_score_better}, {MS_interaction_score_derived_from_cross_linking, "has_regexp", MS_regular_expression_for_interaction_scores_derived_from_cross_linking}, {MS_protein_pair_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_protein_pair_level_global_FDR, "has_regexp", MS_regular_expression_for_interaction_scores_derived_from_cross_linking}, {MS_residue_pair_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_residue_pair_level_global_FDR, "has_regexp", MS_regular_expression_for_interaction_scores_derived_from_cross_linking}, {MS_supplemental_collision_energy, "has_units", UO_electronvolt}, {MS_OpenXQuest_combined_score, "has_order", MS_higher_score_better}, {MS_OpenXQuest_xcorr_xlink, "has_order", MS_higher_score_better}, {MS_OpenXQuest_xcorr_common, "has_order", MS_higher_score_better}, {MS_OpenXQuest_match_odds, "has_domain", MS_value_greater_than_zero}, {MS_OpenXQuest_match_odds, "has_order", MS_higher_score_better}, {MS_OpenXQuest_intsum, "has_domain", MS_value_greater_than_zero}, {MS_OpenXQuest_intsum, "has_order", MS_higher_score_better}, {MS_OpenXQuest_wTIC, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_OpenXQuest_wTIC, "has_order", MS_higher_score_better}, {MS_LysargiNase, "has_regexp", MS_____KR__}, {MS_MSPathFinder_SpecEValue, "has_order", MS_lower_score_better}, {MS_MSPathFinder_EValue, "has_order", MS_lower_score_better}, {MS_sampled_noise_m_z_array, "has_units", MS_m_z}, {MS_sampled_noise_intensity_array, "has_units", MS_number_of_detector_counts}, {MS_MSPepSearch_score, "has_domain", MS_value_between_0_and_1000_inclusive}, {MS_MSPepSearch_score, "has_order", MS_higher_score_better}, {MS_adduct_ion_formula, "has_regexp", MS_Regular_expression_for_adduct_ion_formula}, {MS_inverse_reduced_ion_mobility, "has_units", MS_volt_second_per_square_centimeter}, {MS_mean_ion_mobility_array, "has_units", UO_millisecond}, {MS_mean_ion_mobility_array, "has_units", UO_second}, {MS_MetaMorpheus_score, "has_order", MS_higher_score_better}, {MS_MetaMorpheus_protein_score, "has_order", MS_higher_score_better}, {MS_external_offset, "has_units", UO_count_unit}, {MS_external_array_length, "has_units", UO_count_unit}, {MS_proteoform_level_global_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_proteoform_level_local_FDR, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_TopPIC_spectral_E_value, "has_order", MS_lower_score_better}, {MS_TopMG_spectral_E_value, "has_order", MS_lower_score_better}, {MS_collisional_cross_sectional_area, "has_units", UO_square_angstrom}, {MS_IdentiPy_RHNS, "has_order", MS_higher_score_better}, {MS_IdentiPy_hyperscore, "has_order", MS_higher_score_better}, {MS_Andromeda_PEP, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_Andromeda_PEP, "has_order", MS_higher_score_better}, {MS_mean_inverse_reduced_ion_mobility_array, "has_units", MS_volt_second_per_square_centimeter}, {MS_raw_ion_mobility_array, "has_units", UO_millisecond}, {MS_raw_ion_mobility_array, "has_units", UO_second}, {MS_raw_inverse_reduced_ion_mobility_array, "has_units", MS_volt_second_per_square_centimeter}, {MS_KSDP_score, "has_order", MS_higher_score_better}, {MS_ProteinProphet_peptide_weight, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_ProteinProphet_peptide_weight, "has_order", MS_higher_score_better}, {MS_ProteinProphet_peptide_group_weight, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_ProteinProphet_peptide_group_weight, "has_order", MS_higher_score_better}, {MS_OpenPepXL_score, "has_order", MS_higher_score_better}, {MS_unidentified_modification_monoisotopic_mass_delta, "has_units", UO_dalton}, {MS_Lys_N, "has_regexp", MS_____K____P_}, {MS_SIM_XL_score, "has_order", MS_higher_score_better}, {MS_ProSight_spectral_Q_value, "has_order", MS_lower_score_better}, {MS_ProSight_spectral_P_score, "has_order", MS_lower_score_better}, {MS_ProSight_spectral_E_value, "has_order", MS_lower_score_better}, {MS_ProSight_spectral_C_score, "has_order", MS_higher_score_better}, {MS_proteoform_level_Q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_proteoform_level_Q_value, "has_order", MS_lower_score_better}, {MS_ProSight_proteoform_Q_value, "has_order", MS_lower_score_better}, {MS_isoform_level_Q_value, "has_domain", MS_value_between_0_and_1_inclusive}, {MS_ProSight_isoform_Q_value, "has_order", MS_lower_score_better}, {MS_ProSight_protein_Q_value, "has_order", MS_lower_score_better}, {MS_mass_array, "has_units", UO_dalton}, {MS_PTMProphet_probability, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_PTMProphet_mean_best_probability, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_PTMProphet_normalized_information_content, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_PTMProphet_information_content, "has_regexp", MS_regular_expression_for_modification_localization_scoring}, {MS_raw_ion_mobility_drift_time_array, "has_units", UO_millisecond}, {MS_raw_ion_mobility_drift_time_array, "has_units", UO_second}, {MS_deconvoluted_ion_mobility_array, "has_units", UO_millisecond}, {MS_deconvoluted_ion_mobility_array, "has_units", UO_second}, {MS_deconvoluted_inverse_reduced_ion_mobility_array, "has_units", MS_volt_second_per_square_centimeter}, {MS_deconvoluted_ion_mobility_drift_time_array, "has_units", UO_millisecond}, {MS_deconvoluted_ion_mobility_drift_time_array, "has_units", UO_second}, {MS_scanning_quadrupole_position_lower_bound_m_z_array, "has_units", MS_m_z}, {MS_scanning_quadrupole_position_upper_bound_m_z_array, "has_units", MS_m_z}, }; // relationsOther_ const size_t relationsOtherSize_ = sizeof(relationsOther_)/sizeof(OtherRelationPair); struct CVIDStringPair { CVID first; const char* second; }; CVIDStringPair relationsExactSynonym_[] = { {CVID_Unknown, "Unknown"}, {MS_magnetic_field_strength, "B"}, {MS_m_z, "mass-to-charge ratio"}, {MS_m_z, "Th"}, {MS_m_z, "thomson"}, {MS_charge_state, "z"}, {MS_continuous_flow_fast_atom_bombardment, "CF-FAB"}, {MS_atmospheric_pressure_chemical_ionization, "APCI"}, {MS_chemical_ionization, "CI"}, {MS_Electronic_Ionization_OBSOLETE, "EI"}, {MS_electrospray_ionization, "ESI"}, {MS_fast_atom_bombardment_ionization, "FAB"}, {MS_matrix_assisted_laser_desorption_ionization, "MALDI"}, {MS_fourier_transform_ion_cyclotron_resonance_mass_spectrometer, "FT_ICR"}, {MS_quadrupole_ion_trap, "Paul Ion trap"}, {MS_quadrupole_ion_trap, "QIT"}, {MS_quadrupole_ion_trap, "Quistor"}, {MS_time_of_flight, "TOF"}, {MS_full_width_at_half_maximum, "FWHM"}, {MS_multiple_reaction_monitoring_OBSOLETE, "MRM"}, {MS_channeltron, "Channeltron Detector"}, {MS_daly_detector, "Daly"}, {MS_electron_multiplier_tube, "EMT"}, {MS_microchannel_plate_detector, "multichannel plate"}, {MS_photomultiplier, "PMT"}, {MS_analog_digital_converter, "ADC"}, {MS_time_digital_converter, "TDC"}, {MS_centroid_spectrum, "Discrete Mass Spectrum"}, {MS_profile_spectrum, "continuous mass spectrum"}, {MS_profile_spectrum, "Continuum Mass Spectrum"}, {MS_collision_induced_dissociation, "CID"}, {MS_collision_induced_dissociation, "CAD"}, {MS_collision_induced_dissociation, "collisionally activated dissociation"}, {MS_plasma_desorption, "PD"}, {MS_post_source_decay, "PSD"}, {MS_surface_induced_dissociation, "SID"}, {MS_selected_ion_monitoring, "Multiple Ion Monitoring"}, {MS_selected_ion_monitoring, "SIM"}, {MS_selected_reaction_monitoring, "SRM"}, {MS_appearance_energy_OBSOLETE, "AE"}, {MS_base_peak, "BP"}, {MS_electron_affinity_OBSOLETE, "EA"}, {MS_field_free_region, "FFR"}, {MS_ionization_energy_OBSOLETE, "IE"}, {MS_isotope_dilution_mass_spectrometry_OBSOLETE, "IDMS"}, {MS_molecular_beam_mass_spectrometry_OBSOLETE, "MBMS"}, {MS_multiphoton_ionization, "MPI"}, {MS_proton_affinity_OBSOLETE, "PA"}, {MS_total_ion_current_chromatogram, "TIC chromatogram"}, {MS_unified_atomic_mass_unit_OBSOLETE, "u"}, {MS_accelerator_mass_spectrometry_OBSOLETE, "AMS"}, {MS_atmospheric_pressure_matrix_assisted_laser_desorption_ionization, "AP MALDI"}, {MS_atmospheric_pressure_ionization, "API"}, {MS_Atmostpheric_Pressure_Photoionization_OBSOLETE, "APPI"}, {MS_blackbody_infrared_radiative_dissociation, "BIRD"}, {MS_charge_remote_fragmentation_OBSOLETE, "CRF"}, {MS_consecutive_reaction_monitoring_OBSOLETE_1000244, "CRM"}, {MS_charge_stripping, "CS"}, {MS_delayed_extraction, "DE"}, {MS_desorption_ionization, "DI"}, {MS_direct_insertion_probe, "DIP"}, {MS_direct_liquid_introduction, "DLI"}, {MS_electron_capture_dissociation, "ECD"}, {MS_even_electron_ion_OBSOLETE, "EE"}, {MS_electron_induced_excitation_in_organics_OBSOLETE, "EIEIO"}, {MS_electron_multiplier, "EM"}, {MS_electrostatic_energy_analyzer, "ESA"}, {MS_flowing_afterglow, "FA"}, {MS_high_field_asymmetric_waveform_ion_mobility_spectrometry_OBSOLETE, "FAIMS"}, {MS_field_desorption, "FD"}, {MS_field_ionization, "FI"}, {MS_glow_discharge_ionization, "GD-MS"}, {MS_ion_kinetic_energy_spectrometry_OBSOLETE, "IKES"}, {MS_ion_mobility_spectrometry_OBSOLETE, "IMS"}, {MS_infrared_multiphoton_dissociation, "IRMPD"}, {MS_isotope_ratio_mass_spectrometry_OBSOLETE, "IRMS"}, {MS_ion_trap, "IT"}, {MS_kinetic_energy_release_distribution_OBSOLETE, "KERD"}, {MS_Laser_Desorption_OBSOLETE, "Laser Ionization MERGE"}, {MS_Laser_Desorption_OBSOLETE, "LD"}, {MS_mass_analyzed_ion_kinetic_energy_spectrometry_OBSOLETE, "MIKES"}, {MS_mass_spectrometry_OBSOLETE, "MS"}, {MS_mass_spectrometry_mass_spectrometry_OBSOLETE, "MS/MS"}, {MS_multiple_stage_mass_spectrometry_OBSOLETE, "MSn"}, {MS_Negative_Ion_chemical_ionization, "NICI"}, {MS_neutralization_reionization_mass_spectrometry, "NRMS"}, {MS_photoionization, "PI"}, {MS_pyrolysis_mass_spectrometry, "PyMS"}, {MS_collision_quadrupole, "q"}, {MS_resonance_enhanced_multiphoton_ionization, "REMPI"}, {MS_residual_gas_analyzer_OBSOLETE, "RGA"}, {MS_surface_enhanced_laser_desorption_ionization, "SELDI"}, {MS_surface_enhanced_neat_desorption, "SEND"}, {MS_suface_ionization_OBSOLETE, "SI"}, {MS_selected_ion_flow_tube, "SIFT"}, {MS_sustained_off_resonance_irradiation, "SORI"}, {MS_Spark_Source_Mass_Spectrometry_OBSOLETE, "SSMS"}, {MS_stored_waveform_inverse_fourier_transform, "SWIFT"}, {MS_total_ion_current, "TIC"}, {MS_time_lag_focusing, "TLF"}, {MS_time_of_flight_mass_spectrometer_OBSOLETE, "TOF-MS"}, {MS_constant_neutral_gain_scan_OBSOLETE, "Constant Neutral Mass Gain Scan"}, {MS_constant_neutral_gain_spectrum, "constant neutral mass gain spectrum"}, {MS_constant_neutral_loss_spectrum, "constant neutral mass loss spectrum"}, {MS_progeny_ion_OBSOLETE, "Progeny Fragment Ion"}, {MS_nanoelectrospray, "nanospray"}, {MS_beam_type_collision_induced_dissociation, "HCD"}, {MS_photodissociation, "multiphoton dissociation"}, {MS_photodissociation, "MPD"}, {MS_fast_ion_bombardment, "FIB"}, {MS_mass_analyzer, "analyzer"}, {MS_data_transformation, "data processing"}, {MS_precursor_activation, "activation"}, {MS_instrument, "instrument configuration"}, {MS_6410_Triple_Quadrupole_LC_MS, "6410 Triple Quad LC/MS"}, {MS_Applied_Biosystems_instrument_model, "ABI"}, {MS_zoom_scan, "enhanced resolution scan"}, {MS_massWolf, "wolf"}, {MS_source_data_file, "source file"}, {MS_MS1_spectrum, "full spectrum"}, {MS_MS1_spectrum, "Q1 spectrum"}, {MS_MS1_spectrum, "Q3 spectrum"}, {MS_MS1_spectrum, "Single-Stage Mass Spectrometry"}, {MS_MSn_spectrum, "multiple-stage mass spectrometry spectrum"}, {MS_MSn_spectrum, "nth generation product ion spectrum"}, {MS_MSn_spectrum, "product ion spectrum"}, {MS_SIM_spectrum, "MIM spectrum"}, {MS_SIM_spectrum, "multiple ion monitoring spectrum"}, {MS_SIM_spectrum, "selected ion monitoring spectrum"}, {MS_SRM_spectrum, "MRM spectrum"}, {MS_SRM_spectrum, "multiple reaction monitoring spectrum"}, {MS_SRM_spectrum, "selected reaction monitoring spectrum"}, {MS_low_intensity_data_point_removal, "thresholding"}, {MS_electron_transfer_dissociation, "ETD"}, {MS_pulsed_q_dissociation, "PQD"}, {MS_ProteoWizard_software, "pwiz"}, {MS_photodiode_array_detector, "PDA"}, {MS_inductive_detector, "image current detector"}, {MS_selected_ion_current_chromatogram, "SIC chromatogram"}, {MS_native_spectrum_identifier_format, "nativeID format"}, {MS_Gaussian_smoothing, "binomial smoothing"}, {MS_Gaussian_smoothing, "Weierstrass transform"}, {MS_moving_average_smoothing, "box smoothing"}, {MS_moving_average_smoothing, "boxcar smoothing"}, {MS_moving_average_smoothing, "sliding average smoothing"}, {MS_area_peak_picking, "sum peak picking"}, {MS_height_peak_picking, "max peak picking"}, {MS_electromagnetic_radiation_spectrum, "EMR spectrum"}, {MS_electromagnetic_radiation_chromatogram, "EMR radiation chromatogram"}, {MS_isoelectric_point, "pI"}, {MS_predicted_isoelectric_point, "predicted pI"}, {MS_unlabeled_peptidoform, "light labeled peptide"}, {MS_transition, "reaction"}, {MS_product_ion_m_z, "fragment ion m/z"}, {MS_product_ion_intensity, "fragment ion intensity"}, {MS_Arg_C, "Trypsin/R"}, {MS_Arg_C, "Clostripain"}, {MS_Lys_C, "Trypsin/K"}, {MS_selected_ion_monitoring_chromatogram, "SIM chromatogram"}, {MS_selected_reaction_monitoring_chromatogram, "SRM chromatogram"}, {MS_consecutive_reaction_monitoring_chromatogram_OBSOLETE, "CRM chromatogram"}, {MS_FAIMS_compensation_voltage, "FAIMS CV"}, {MS_MyriMatch_MVH, "Pepitome:MVH"}, {MS_MyriMatch_MVH, "TagRecon:MVH"}, {MS_MyriMatch_mzFidelity, "Pepitome:mzFidelity"}, {MS_MyriMatch_mzFidelity, "TagRecon:mzFidelity"}, {MS_travelling_wave_ion_mobility_mass_spectrometer_OBSOLETE, "TWIMS"}, {MS_glutamyl_endopeptidase, "staphylococcal protease"}, {MS_glutamyl_endopeptidase, "Glu-C"}, {MS_Digital_Object_Identifier__DOI_, "doi"}, {MS_Collision_cell_exit_potential, "CXP"}, {MS_delta_m_z, "m/z difference"}, {MS_delta_M, "mass difference"}, {MS_sophisticated_numerical_annotation_procedure, "SNAP"}, {MS_SRM_transition_type, "MRM transition type"}, {MS_target_SRM_transition, "target MRM transition"}, {MS_decoy_SRM_transition, "decoy MRM transition"}, {MS_desorption_electrospray_ionization, "DESI"}, {MS_label_free_sample, "light sample"}, {MS_MS_GF_, "MS-GFDB"}, {MS_Trans_Proteomic_Pipeline, "TPP"}, {MS_iProphet, "InterProphet"}, {MS_synchronous_prefilter_selection, "SPS"}, {MS_Electron_Transfer_Higher_Energy_Collision_Dissociation__EThcD_, "EThcD"}, {MS_native_spectrum_identifier_format__combined_spectra, "nativeID format, combined spectra"}, {MS_LysargiNase, "Tryp-N"}, {MS_volt_second_per_square_centimeter, "Vs/cm^2"}, {MS_PTX_QC, "PTXQC"}, {UO_time_unit, "time derived unit"}, {UO_temperature_unit, "temperature derived unit"}, {UO_meter, "m"}, {UO_meter, "metre"}, {UO_kilogram, "kg"}, {UO_second, "s"}, {UO_ampere, "A"}, {UO_kelvin, "K"}, {UO_mole, "mol"}, {UO_candela, "cd"}, {UO_centimeter, "centimetre"}, {UO_centimeter, "cm"}, {UO_millimeter, "micrometre"}, {UO_millimeter, "mm"}, {UO_micrometer, "micrometre"}, {UO_micrometer, "micron"}, {UO_micrometer, "um"}, {UO_nanometer, "nanometre"}, {UO_nanometer, "nm"}, {UO_angstrom, "Ã…"}, {UO_picometer, "picometre"}, {UO_picometer, "pm"}, {UO_gram, "g"}, {UO_milligram, "mg"}, {UO_microgram, "ug"}, {UO_nanogram, "ng"}, {UO_picogram, "pg"}, {UO_femtogram, "fg"}, {UO_degree_Celsius, "C"}, {UO_millisecond, "ms"}, {UO_microsecond, "us"}, {UO_picosecond, "ps"}, {UO_minute, "min"}, {UO_hour, "h"}, {UO_milliampere, "mA"}, {UO_microampere, "uA"}, {UO_micromole_300000039, "umol"}, {UO_millimole, "mmol"}, {UO_nanomole, "nmol"}, {UO_picomole, "pmol"}, {UO_femtomole, "fmol"}, {UO_attomole, "amol"}, {UO_mass_density_unit, "mass per unit volume"}, {UO_area_density_unit, "mass per unit area unit"}, {UO_molar, "M"}, {UO_millimolar, "mM"}, {UO_micromolar, "uM"}, {UO_nanomolar, "nM"}, {UO_picomolar, "pM"}, {UO_molal, "m"}, {UO_millimolal, "mm"}, {UO_micromolal, "um"}, {UO_nanomolal, "nm"}, {UO_picomolal, "pm"}, {UO_femtomolar, "fM"}, {UO_normal, "N"}, {UO_mole_fraction, "(x)"}, {UO_mole_fraction, "chi"}, {UO_meter_per_second_per_second, "m/s^[2]"}, {UO_meter_per_second_per_second, "metre per second per second"}, {UO_radian_per_second_per_second, "alpha"}, {UO_radian_per_second_per_second, "rad/s^[2]"}, {UO_radian_per_second, "rad/s"}, {UO_square_meter, "m^[2]"}, {UO_square_centimeter, "cm^[2]"}, {UO_square_centimeter, "square centimetre"}, {UO_square_millimeter, "mm^[2]"}, {UO_square_millimeter, "square millimetre"}, {UO_kilogram_per_cubic_meter, "kg/m^[3]"}, {UO_kilogram_per_cubic_meter, "kilogram per cubic metre"}, {UO_gram_per_cubic_centimeter, "g/cm^[3]"}, {UO_gram_per_cubic_centimeter, "gram per cubic centimetre"}, {UO_candela_per_square_meter, "candela per square metre"}, {UO_candela_per_square_meter, "cd/m^[2]"}, {UO_kilogram_per_square_meter, "Body Mass Index (BMI)"}, {UO_kilogram_per_square_meter, "kg/m^[2]"}, {UO_kilogram_per_square_meter, "kilogram per square metre"}, {UO_kilogram_per_mole, "kg/mol"}, {UO_gram_per_mole, "g/mol"}, {UO_cubic_meter_per_mole, "cubic metre per mole"}, {UO_cubic_meter_per_mole, "m^[3]/mol"}, {UO_cubic_centimeter_per_mole, "cm^[3]/mol"}, {UO_cubic_centimeter_per_mole, "cubic centimetre per mole"}, {UO_kilogram_meter_per_second, "kg.m/s"}, {UO_kilogram_meter_per_second, "kilogram metre per second"}, {UO_turns_per_second, "1/s"}, {UO_cubic_meter_per_kilogram, "cubic metre per kilogram"}, {UO_cubic_meter_per_kilogram, "m^[3]/kg"}, {UO_meter_per_second, "m/s"}, {UO_meter_per_second, "metre per second"}, {UO_cubic_meter, "cubic metre"}, {UO_cubic_meter, "m^[3]"}, {UO_cubic_centimeter, "cc"}, {UO_cubic_centimeter, "cm^3"}, {UO_cubic_centimeter, "cubic centimetre"}, {UO_milliliter, "millilitre"}, {UO_milliliter, "ml"}, {UO_liter, "l"}, {UO_liter, "L"}, {UO_liter, "litre"}, {UO_cubic_decimeter, "cubic decimetre"}, {UO_cubic_decimeter, "dm^[3]"}, {UO_microliter, "microlitre"}, {UO_microliter, "ul"}, {UO_nanoliter, "nanolitre"}, {UO_nanoliter, "nl"}, {UO_picoliter, "picolitre"}, {UO_picoliter, "pl"}, {UO_femtoliter, "femtolitre"}, {UO_femtoliter, "fl"}, {UO_hertz, "Hz"}, {UO_hertz, "s^1"}, {UO_newton, "N"}, {UO_pascal, "Pa"}, {UO_joule, "J"}, {UO_watt, "W"}, {UO_lux, "lx"}, {UO_lumen, "lm"}, {UO_katal, "kat"}, {UO_radian, "rad"}, {UO_steradian, "sr"}, {UO_becquerel, "Bq"}, {UO_curie, "Ci"}, {UO_gray, "Gy"}, {UO_roentgen, "R"}, {UO_sievert, "Sv"}, {UO_millisievert, "mSv"}, {UO_microsievert, "uSv"}, {UO_Roentgen_equivalent_man, "rem"}, {UO_microgray, "uGy"}, {UO_milligray, "mGy"}, {UO_nanogray, "nGy"}, {UO_nanosievert, "nSv"}, {UO_millicurie, "mCi"}, {UO_microcurie, "uCi"}, {UO_disintegrations_per_minute, "dpm"}, {UO_counts_per_minute, "cpm"}, {UO_nanosecond, "ns"}, {UO_foot_candle, "ft-c"}, {UO_watt_per_square_meter, "W/m^[2]"}, {UO_watt_per_square_meter, "watt per square metre"}, {UO_einstein_per_square_meter_per_second, "einstein per square metre per second"}, {UO_einstein_per_square_meter_per_second, "einstein/sm^[2]"}, {UO_einstein_per_square_meter_per_second, "mole per second and square meter mol/sm^2"}, {UO_watt_per_steradian_per_square_meter, "W/sr m^[2]"}, {UO_watt_per_steradian_per_square_meter, "watt per steradian per square metre"}, {UO_microeinstein_per_square_meter_per_second, "microeinstein per square metre per second"}, {UO_microeinstein_per_square_meter_per_second, "micromole per second and square meter mmol/sm^2"}, {UO_microeinstein_per_square_meter_per_second, "umicroeinstein/sm^[2]"}, {UO_watt_per_steradian, "W/sr"}, {UO_mass_percentage, "w/w"}, {UO_mass_percentage, "weight-weight percentage"}, {UO_mass_volume_percentage, "(w/v)"}, {UO_mass_volume_percentage, "weight-volume percentage"}, {UO_volume_percentage, "% (v/v)"}, {UO_parts_per_hundred, "10^[-2]"}, {UO_parts_per_hundred, "pph"}, {UO_parts_per_thousand, "10^[-3]"}, {UO_parts_per_thousand, "ppth"}, {UO_parts_per_million, "10^[-6]"}, {UO_parts_per_million, "ppm"}, {UO_parts_per_billion, "10^[-9]"}, {UO_parts_per_billion, "ppb"}, {UO_parts_per_trillion, "10^[-12]"}, {UO_parts_per_trillion, "ppt"}, {UO_parts_per_quadrillion, "10^[-15]"}, {UO_parts_per_quadrillion, "ppq"}, {UO_gram_per_milliliter, "g/ml"}, {UO_gram_per_milliliter, "gram per millilitre"}, {UO_kilogram_per_liter, "kg/L"}, {UO_kilogram_per_liter, "kilogram per litre"}, {UO_gram_per_liter, "g/L"}, {UO_gram_per_liter, "gram per litre"}, {UO_milligram_per_milliliter, "mg/ml"}, {UO_milligram_per_milliliter, "milligram per millilitre"}, {UO_unit_per_milliliter, "U/ml"}, {UO_unit_per_milliliter, "unit per millilitre"}, {UO_unit_per_liter, "U/l"}, {UO_unit_per_liter, "unit per litre"}, {UO_enzyme_unit, "U"}, {UO_kilogram_per_meter, "kg/m"}, {UO_kilogram_per_meter, "kilogram per metre"}, {UO_percent, "%"}, {UO_count_unit, "count"}, {UO_degree_Fahrenheit, "F"}, {UO_liter_per_kilogram, "l/kg"}, {UO_liter_per_kilogram, "litre per kilogram"}, {UO_milliliter_per_kilogram, "millilitre per kilogram"}, {UO_milliliter_per_kilogram, "ml/kg"}, {UO_microliter_per_kilogram, "microlitre per kilogram"}, {UO_microliter_per_kilogram, "ul/kg"}, {UO_cells_per_milliliter, "cells per millilitre"}, {UO_cells_per_milliliter, "cells per ml"}, {UO_katal_per_cubic_meter, "kat/m^[3]"}, {UO_katal_per_cubic_meter, "katal per cubic metre"}, {UO_katal_per_liter, "kat/l"}, {UO_katal_per_liter, "katal per litre"}, {UO_milliliter_per_cubic_meter, "millilitre per cubic metre"}, {UO_milliliter_per_cubic_meter, "ml/m^[3]"}, {UO_milliliter_per_liter, "millilitre per litre"}, {UO_milliliter_per_liter, "ml/l"}, {UO_gram_per_deciliter, "g/dl"}, {UO_gram_per_deciliter, "gram per decilitre"}, {UO_deciliter, "decilitre"}, {UO_deciliter, "dl"}, {UO_colony_forming_unit, "cfu"}, {UO_plaque_forming_unit, "pfu"}, {UO_colony_forming_unit_per_milliliter, "cfu/ml"}, {UO_colony_forming_unit_per_milliliter, "colony forming unit per millilitre"}, {UO_plaque_forming_unit_per_milliliter, "pfu/ml"}, {UO_plaque_forming_unit_per_milliliter, "plaque forming unit per millilitre"}, {UO_disintegrations_per_second, "dps"}, {UO_volt, "V"}, {UO_coulomb, "C"}, {UO_dalton, "amu"}, {UO_dalton, "Da"}, {UO_dalton, "u"}, {UO_dalton, "unified atomic mass unit"}, {UO_kilodalton, "kDa"}, {UO_watt_hour, "Wh"}, {UO_weber, "V s"}, {UO_weber, "Wb"}, {UO_magnetic_flux_density_unit, "B"}, {UO_tesla, "T"}, {UO_tesla, "Wb/m2"}, {UO_volt_hour, "Vh"}, {UO_kilovolt_hour, "kVh"}, {UO_byte, "B"}, {UO_kilobyte, "kB"}, {UO_megabyte, "MB"}, {UO_dots_per_inch, "dpi"}, {UO_micron_pixel, "micrometer pixel"}, {UO_pixels_per_inch, "pixel density"}, {UO_pixels_per_inch, "ppi"}, {UO_pixels_per_millimeter, "pixels per millimetre"}, {UO_base_pair, "bp"}, {UO_base_pair, "basepair"}, {UO_kibibyte, "KiB"}, {UO_mebibyte, "MiB"}, {UO_millivolt, "mV"}, {UO_kilovolt, "kV"}, {UO_microvolt, "uV"}, {UO_nanovolt, "nV"}, {UO_picovolt, "pV"}, {UO_megavolt, "MV"}, {UO_newton_per_meter, "N/m"}, {UO_newton_per_meter, "newton per metre"}, {UO_dyne_per_cm, "dyn/cm"}, {UO_pascal_second, "Pa s"}, {UO_poise, "dyne s/cm^2"}, {UO_poise, "P"}, {UO_decibel, "dB"}, {UO_siemens, "A V^-1"}, {UO_watt_per_meter_kelvin, "W/m K"}, {UO_electronvolt, "electron volt"}, {UO_electronvolt, "eV"}, {UO_electric_field_strength_unit, "E-field strength "}, {UO_volt_per_meter, "V/m"}, {UO_volt_per_meter, "volt per metre"}, {UO_absorbance_unit, "AU"}, {UO_microliters_per_minute, "microlitres per minute"}, {UO_microliters_per_minute, "uL/min"}, {UO_millimetres_of_mercury, "millimeters of mercury"}, {UO_millimetres_of_mercury, "mmHg"}, {UO_milligram_per_liter, "mg/L"}, {UO_milligram_per_liter, "milligram per litre"}, {UO_microgram_per_milliliter, "ug/ml"}, {UO_nanogram_per_milliliter, "nanogram per millilitre"}, {UO_nanogram_per_milliliter, "ng/ml"}, {UO_milliunits_per_milliliter, "milliunits per millilitre"}, {UO_milliunits_per_milliliter, "mU/ml"}, {UO_count_per_nanomolar_second, "nM^-1 s^-1"}, {UO_count_per_molar_second, "M^-1 s^-1"}, {UO_count_per_nanomolar, "1/nM"}, {UO_count_per_nanomolar, "nM^-1"}, {UO_count_per_molar, "1/M"}, {UO_count_per_molar, "M^-1"}, {UO_yotta, "10^[24]"}, {UO_yotta, "Y"}, {UO_hecto, "10^[2]"}, {UO_hecto, "h"}, {UO_zetta, "10^[21]"}, {UO_zetta, "Z"}, {UO_exa, "10^[18]"}, {UO_exa, "E"}, {UO_peta, "10^[15]"}, {UO_peta, "P"}, {UO_tera, "T"}, {UO_giga, "10^[9]"}, {UO_giga, "G"}, {UO_mega, "10^[6]"}, {UO_mega, "M"}, {UO_kilo, "10^[3]"}, {UO_kilo, "k"}, {UO_deca, "10^[1]"}, {UO_deca, "da"}, {UO_deci, "10^[-1]"}, {UO_deci, "d"}, {UO_milli_300000297, "10^[-3]"}, {UO_milli_300000297, "m"}, {UO_centi, "10^[-2]"}, {UO_centi, "c"}, {UO_micro, "10^[-6]"}, {UO_nano, "10^[-9]"}, {UO_nano, "n"}, {UO_microgram_per_liter, "microgram per litre"}, {UO_microgram_per_liter, "ug/L"}, {UO_pico, "10^[-12]"}, {UO_pico, "n"}, {UO_femto, "10^[-15]"}, {UO_femto, "f"}, {UO_atto, "a"}, {UO_zepto, "z"}, {UO_yocto, "y"}, {UO_cells_per_microliter, "cells per microlitre"}, {UO_cells_per_microliter, "cells per ul"}, {UO_formazin_nephelometric_unit, "FNU"}, {UO_curie_per_liter, "curie per litre"}, {UO_microcurie_per_milliliter, "microcurie per millilitre"}, {UO_centiMorgan, "cM"}, {UO_centiRay, "cR"}, {UO_kilo_base_pair, "kbp"}, {UO_kilo_base_pair, "kilobasepair"}, {UO_mega_base_pair, "Mb"}, {UO_mega_base_pair, "megabasepair"}, {UO_giga_base_pair, "Gb"}, {UO_giga_base_pair, "gigabasepair"}, {UO_gigabyte, "GB"}, {UO_terabyte, "TB"}, {UO_millimeters_per_day, "mm/day"}, {UO_volt_second_per_square_centimeter, "volt-second per square centimetre"}, {UO_volt_second_per_square_centimeter, "Vs/cm^2"}, {UO_kilometer_per_hour, "km/h"}, {UO_kilometer_per_hour, "kilometre per hour"}, {UO_milli_300010009, "millidalton"}, {UO_milli_300010009, "mDa"}, {UO_milli_300010009, "mmu"}, {UO_milli_300010009, "milli unified atomic mass unit"}, {UO_hectare, "HA"}, {UO_inch, "in"}, {UO_thou, "mil"}, {UO_thou, "th"}, {UO_foot, "ft"}, {UO_yard, "yd"}, {UO_chain, "ch"}, {UO_furlong, "fur"}, {UO_mile, "mi"}, {UO_league, "lea"}, {UO_fathom, "ftm"}, {UO_fluid_ounce, "fl oz"}, {UO_gill, "gi"}, {UO_pint, "pt"}, {UO_quart, "qt"}, {UO_gallon, "gal"}, {UO_grain, "gr"}, {UO_drachm, "dr"}, {UO_ounce, "oz"}, {UO_pound, "lb"}, {UO_stone, "st"}, {UO_quarter, "qr"}, {UO_quarter, "qtr"}, {UO_hundredweight, "cwt"}, {UO_ton, "t"}, {UO_teaspoon, "metric teaspoon"}, {UO_teaspoon, "tsp"}, {UO_united_states_customary_teaspoon, "us customary teaspoon"}, {UO_tablespoon, "metric tablespoon"}, {UO_tablespoon, "tbsp"}, {UO_united_states_customary_tablespoon, "us customary tablespoon"}, {UO_metric_cup, "C"}, {UO_united_states_customary_cup, "us customary cup"}, {UO_united_states_fda_cup, "us fda cup"}, {UO_micromole_300010048, "mmol"}, {UO_gram_per_square_meter, "g/m^[2]"}, {UO_gram_per_square_meter, "gram per square metre"}, {UO_nanogram_per_microliter, "nanogram per microlitre"}, {UO_nanogram_per_microliter, "ng/ul"}, {UO_large_calorie, "food calorie"}, {UO_large_calorie, "kilocalorie"}, {UO_large_calorie, "big calorie"}, {UO_large_calorie, "cal"}, {UO_large_calorie, "calorie"}, {UO_large_calorie, "kcal"}, {UO_pounds_per_square_inch, "psi"}, {UO_pounds_per_square_inch, "lbf/in^[2]"}, {UO_picoampere, "pA"}, {UO_centigray, "cGy"}, {UO_gigaelectronvolt, "GeV"}, {UO_gigaelectronvolt_per_nucleon, "GeV/nucleon"}, {UO_megaelectronvolt_per_nucleon, "MeV/nucleon"}, {UO_kiloelectronvolt_per_micron, "keV/micron"}, {UO_gray_per_minute, "Gy/min"}, {UO_centigray_per_minute, "cGy/min"}, {UO_milligray_per_minute, "mGy/min"}, {UO_milligray_per_day, "mGy/min"}, }; // relationsExactSynonym_ const size_t relationsExactSynonymSize_ = sizeof(relationsExactSynonym_)/sizeof(CVIDStringPair); struct PropertyValuePair { CVID term; const char* name; const char* value; }; PropertyValuePair propertyValue_[] = { {CVID_Unknown, "Unknown", "Unknown"}, {UNIMOD_Acetyl, "approved", "1"}, {UNIMOD_Acetyl, "delta_composition", "H(2) C(2) O"}, {UNIMOD_Acetyl, "spec_1_classification", "Multiple"}, {UNIMOD_Acetyl, "spec_1_hidden", "0"}, {UNIMOD_Acetyl, "spec_1_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_1_site", "K"}, {UNIMOD_Acetyl, "spec_2_classification", "Multiple"}, {UNIMOD_Acetyl, "spec_2_hidden", "0"}, {UNIMOD_Acetyl, "spec_2_position", "Any N-term"}, {UNIMOD_Acetyl, "spec_2_site", "N-term"}, {UNIMOD_Acetyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Acetyl, "spec_3_hidden", "1"}, {UNIMOD_Acetyl, "spec_3_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_3_site", "C"}, {UNIMOD_Acetyl, "spec_4_classification", "Post-translational"}, {UNIMOD_Acetyl, "spec_4_hidden", "1"}, {UNIMOD_Acetyl, "spec_4_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_4_site", "S"}, {UNIMOD_Acetyl, "spec_5_classification", "Post-translational"}, {UNIMOD_Acetyl, "spec_5_hidden", "0"}, {UNIMOD_Acetyl, "spec_5_position", "Protein N-term"}, {UNIMOD_Acetyl, "spec_5_site", "N-term"}, {UNIMOD_Acetyl, "spec_6_classification", "Post-translational"}, {UNIMOD_Acetyl, "spec_6_hidden", "1"}, {UNIMOD_Acetyl, "spec_6_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_6_site", "T"}, {UNIMOD_Acetyl, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Acetyl, "spec_7_hidden", "1"}, {UNIMOD_Acetyl, "spec_7_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_7_site", "Y"}, {UNIMOD_Acetyl, "spec_8_classification", "Chemical derivative"}, {UNIMOD_Acetyl, "spec_8_hidden", "1"}, {UNIMOD_Acetyl, "spec_8_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_8_site", "H"}, {UNIMOD_Acetyl, "spec_9_classification", "Artefact"}, {UNIMOD_Acetyl, "spec_9_hidden", "1"}, {UNIMOD_Acetyl, "spec_9_position", "Anywhere"}, {UNIMOD_Acetyl, "spec_9_site", "R"}, {UNIMOD_Amidated, "approved", "1"}, {UNIMOD_Amidated, "delta_composition", "H N O(-1)"}, {UNIMOD_Amidated, "spec_1_classification", "Post-translational"}, {UNIMOD_Amidated, "spec_1_hidden", "0"}, {UNIMOD_Amidated, "spec_1_position", "Protein C-term"}, {UNIMOD_Amidated, "spec_1_site", "C-term"}, {UNIMOD_Amidated, "spec_2_classification", "Artefact"}, {UNIMOD_Amidated, "spec_2_hidden", "0"}, {UNIMOD_Amidated, "spec_2_position", "Any C-term"}, {UNIMOD_Amidated, "spec_2_site", "C-term"}, {UNIMOD_Biotin, "approved", "1"}, {UNIMOD_Biotin, "delta_composition", "H(14) C(10) N(2) O(2) S"}, {UNIMOD_Biotin, "spec_1_classification", "Post-translational"}, {UNIMOD_Biotin, "spec_1_hidden", "1"}, {UNIMOD_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin, "spec_1_site", "K"}, {UNIMOD_Biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin, "spec_2_hidden", "1"}, {UNIMOD_Biotin, "spec_2_position", "Any N-term"}, {UNIMOD_Biotin, "spec_2_site", "N-term"}, {UNIMOD_Carbamidomethyl, "approved", "1"}, {UNIMOD_Carbamidomethyl, "delta_composition", "H(3) C(2) N O"}, {UNIMOD_Carbamidomethyl, "spec_10_classification", "Chemical derivative"}, {UNIMOD_Carbamidomethyl, "spec_10_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_10_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_10_site", "U"}, {UNIMOD_Carbamidomethyl, "spec_11_classification", "Chemical derivative"}, {UNIMOD_Carbamidomethyl, "spec_11_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_11_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_11_site", "M"}, {UNIMOD_Carbamidomethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carbamidomethyl, "spec_1_hidden", "0"}, {UNIMOD_Carbamidomethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_1_site", "C"}, {UNIMOD_Carbamidomethyl, "spec_2_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_2_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_2_site", "K"}, {UNIMOD_Carbamidomethyl, "spec_3_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_3_hidden", "0"}, {UNIMOD_Carbamidomethyl, "spec_3_position", "Any N-term"}, {UNIMOD_Carbamidomethyl, "spec_3_site", "N-term"}, {UNIMOD_Carbamidomethyl, "spec_4_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_4_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_4_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_4_site", "H"}, {UNIMOD_Carbamidomethyl, "spec_5_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_5_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_5_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_5_site", "D"}, {UNIMOD_Carbamidomethyl, "spec_6_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_6_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_6_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_6_site", "E"}, {UNIMOD_Carbamidomethyl, "spec_7_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_7_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_7_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_7_site", "S"}, {UNIMOD_Carbamidomethyl, "spec_8_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_8_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_8_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_8_site", "T"}, {UNIMOD_Carbamidomethyl, "spec_9_classification", "Artefact"}, {UNIMOD_Carbamidomethyl, "spec_9_hidden", "1"}, {UNIMOD_Carbamidomethyl, "spec_9_position", "Anywhere"}, {UNIMOD_Carbamidomethyl, "spec_9_site", "Y"}, {UNIMOD_Carbamyl, "approved", "0"}, {UNIMOD_Carbamyl, "delta_composition", "H C N O"}, {UNIMOD_Carbamyl, "spec_1_classification", "Multiple"}, {UNIMOD_Carbamyl, "spec_1_hidden", "0"}, {UNIMOD_Carbamyl, "spec_1_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_1_site", "K"}, {UNIMOD_Carbamyl, "spec_2_classification", "Multiple"}, {UNIMOD_Carbamyl, "spec_2_hidden", "0"}, {UNIMOD_Carbamyl, "spec_2_position", "Any N-term"}, {UNIMOD_Carbamyl, "spec_2_site", "N-term"}, {UNIMOD_Carbamyl, "spec_3_classification", "Artefact"}, {UNIMOD_Carbamyl, "spec_3_hidden", "1"}, {UNIMOD_Carbamyl, "spec_3_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_3_site", "R"}, {UNIMOD_Carbamyl, "spec_4_classification", "Artefact"}, {UNIMOD_Carbamyl, "spec_4_hidden", "1"}, {UNIMOD_Carbamyl, "spec_4_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_4_site", "C"}, {UNIMOD_Carbamyl, "spec_5_classification", "Artefact"}, {UNIMOD_Carbamyl, "spec_5_hidden", "1"}, {UNIMOD_Carbamyl, "spec_5_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_5_site", "M"}, {UNIMOD_Carbamyl, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Carbamyl, "spec_6_hidden", "1"}, {UNIMOD_Carbamyl, "spec_6_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_6_site", "S"}, {UNIMOD_Carbamyl, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Carbamyl, "spec_7_hidden", "1"}, {UNIMOD_Carbamyl, "spec_7_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_7_site", "T"}, {UNIMOD_Carbamyl, "spec_8_classification", "Chemical derivative"}, {UNIMOD_Carbamyl, "spec_8_hidden", "1"}, {UNIMOD_Carbamyl, "spec_8_position", "Anywhere"}, {UNIMOD_Carbamyl, "spec_8_site", "Y"}, {UNIMOD_Carbamyl, "spec_9_classification", "Post-translational"}, {UNIMOD_Carbamyl, "spec_9_hidden", "1"}, {UNIMOD_Carbamyl, "spec_9_position", "Protein N-term"}, {UNIMOD_Carbamyl, "spec_9_site", "N-term"}, {UNIMOD_Carboxymethyl, "approved", "1"}, {UNIMOD_Carboxymethyl, "delta_composition", "H(2) C(2) O(2)"}, {UNIMOD_Carboxymethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carboxymethyl, "spec_1_hidden", "0"}, {UNIMOD_Carboxymethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Carboxymethyl, "spec_1_site", "C"}, {UNIMOD_Carboxymethyl, "spec_2_classification", "Artefact"}, {UNIMOD_Carboxymethyl, "spec_2_hidden", "1"}, {UNIMOD_Carboxymethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Carboxymethyl, "spec_2_site", "K"}, {UNIMOD_Carboxymethyl, "spec_3_classification", "Artefact"}, {UNIMOD_Carboxymethyl, "spec_3_hidden", "1"}, {UNIMOD_Carboxymethyl, "spec_3_position", "Any N-term"}, {UNIMOD_Carboxymethyl, "spec_3_site", "N-term"}, {UNIMOD_Carboxymethyl, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Carboxymethyl, "spec_4_hidden", "1"}, {UNIMOD_Carboxymethyl, "spec_4_position", "Anywhere"}, {UNIMOD_Carboxymethyl, "spec_4_site", "W"}, {UNIMOD_Carboxymethyl, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Carboxymethyl, "spec_5_hidden", "1"}, {UNIMOD_Carboxymethyl, "spec_5_position", "Anywhere"}, {UNIMOD_Carboxymethyl, "spec_5_site", "U"}, {UNIMOD_Deamidated, "approved", "0"}, {UNIMOD_Deamidated, "delta_composition", "H(-1) N(-1) O"}, {UNIMOD_Deamidated, "spec_1_classification", "Artefact"}, {UNIMOD_Deamidated, "spec_1_classification", "Artefact"}, {UNIMOD_Deamidated, "spec_1_hidden", "0"}, {UNIMOD_Deamidated, "spec_1_hidden", "0"}, {UNIMOD_Deamidated, "spec_1_position", "Anywhere"}, {UNIMOD_Deamidated, "spec_1_position", "Anywhere"}, {UNIMOD_Deamidated, "spec_1_site", "Q"}, {UNIMOD_Deamidated, "spec_1_site", "N"}, {UNIMOD_Deamidated, "spec_2_classification", "Post-translational"}, {UNIMOD_Deamidated, "spec_2_hidden", "1"}, {UNIMOD_Deamidated, "spec_2_position", "Anywhere"}, {UNIMOD_Deamidated, "spec_2_site", "R"}, {UNIMOD_Deamidated, "spec_3_classification", "Post-translational"}, {UNIMOD_Deamidated, "spec_3_hidden", "1"}, {UNIMOD_Deamidated, "spec_3_position", "Protein N-term"}, {UNIMOD_Deamidated, "spec_3_site", "F"}, {UNIMOD_ICAT_G, "approved", "1"}, {UNIMOD_ICAT_G, "delta_composition", "H(38) C(22) N(4) O(6) S"}, {UNIMOD_ICAT_G, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_G, "spec_1_hidden", "1"}, {UNIMOD_ICAT_G, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_G, "spec_1_site", "C"}, {UNIMOD_ICAT_G_2H_8_, "approved", "1"}, {UNIMOD_ICAT_G_2H_8_, "delta_composition", "H(30) 2H(8) C(22) N(4) O(6) S"}, {UNIMOD_ICAT_G_2H_8_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_G_2H_8_, "spec_1_hidden", "1"}, {UNIMOD_ICAT_G_2H_8_, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_G_2H_8_, "spec_1_site", "C"}, {UNIMOD_Met__Hse, "approved", "1"}, {UNIMOD_Met__Hse, "delta_composition", "H(-2) C(-1) O S(-1)"}, {UNIMOD_Met__Hse, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Met__Hse, "spec_1_hidden", "0"}, {UNIMOD_Met__Hse, "spec_1_position", "Any C-term"}, {UNIMOD_Met__Hse, "spec_1_site", "M"}, {UNIMOD_Met__Hsl, "approved", "0"}, {UNIMOD_Met__Hsl, "delta_composition", "H(-4) C(-1) S(-1)"}, {UNIMOD_Met__Hsl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Met__Hsl, "spec_1_hidden", "0"}, {UNIMOD_Met__Hsl, "spec_1_position", "Any C-term"}, {UNIMOD_Met__Hsl, "spec_1_site", "M"}, {UNIMOD_ICAT_D_2H_8_, "approved", "1"}, {UNIMOD_ICAT_D_2H_8_, "delta_composition", "H(26) 2H(8) C(20) N(4) O(5) S"}, {UNIMOD_ICAT_D_2H_8_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_D_2H_8_, "spec_1_hidden", "1"}, {UNIMOD_ICAT_D_2H_8_, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_D_2H_8_, "spec_1_site", "C"}, {UNIMOD_ICAT_D, "approved", "1"}, {UNIMOD_ICAT_D, "delta_composition", "H(34) C(20) N(4) O(5) S"}, {UNIMOD_ICAT_D, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_D, "spec_1_hidden", "1"}, {UNIMOD_ICAT_D, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_D, "spec_1_site", "C"}, {UNIMOD_NIPCAM, "approved", "1"}, {UNIMOD_NIPCAM, "delta_composition", "H(9) C(5) N O"}, {UNIMOD_NIPCAM, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NIPCAM, "spec_1_hidden", "0"}, {UNIMOD_NIPCAM, "spec_1_position", "Anywhere"}, {UNIMOD_NIPCAM, "spec_1_site", "C"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "approved", "0"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "delta_composition", "H(30) C(18) N(4) O(5) S"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "spec_1_hidden", "1"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_PEO_Iodoacetyl_LC_Biotin, "spec_1_site", "C"}, {UNIMOD_Phospho, "approved", "1"}, {UNIMOD_Phospho, "delta_composition", "H O(3) P"}, {UNIMOD_Phospho, "spec_1_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_1_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_1_hidden", "0"}, {UNIMOD_Phospho, "spec_1_hidden", "0"}, {UNIMOD_Phospho, "spec_1_position", "Anywhere"}, {UNIMOD_Phospho, "spec_1_position", "Anywhere"}, {UNIMOD_Phospho, "spec_1_site", "T"}, {UNIMOD_Phospho, "spec_1_site", "S"}, {UNIMOD_Phospho, "spec_2_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_2_hidden", "0"}, {UNIMOD_Phospho, "spec_2_position", "Anywhere"}, {UNIMOD_Phospho, "spec_2_site", "Y"}, {UNIMOD_Phospho, "spec_3_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_3_hidden", "1"}, {UNIMOD_Phospho, "spec_3_position", "Anywhere"}, {UNIMOD_Phospho, "spec_3_site", "D"}, {UNIMOD_Phospho, "spec_4_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_4_hidden", "1"}, {UNIMOD_Phospho, "spec_4_position", "Anywhere"}, {UNIMOD_Phospho, "spec_4_site", "H"}, {UNIMOD_Phospho, "spec_5_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_5_hidden", "1"}, {UNIMOD_Phospho, "spec_5_position", "Anywhere"}, {UNIMOD_Phospho, "spec_5_site", "C"}, {UNIMOD_Phospho, "spec_6_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_6_hidden", "1"}, {UNIMOD_Phospho, "spec_6_position", "Anywhere"}, {UNIMOD_Phospho, "spec_6_site", "R"}, {UNIMOD_Phospho, "spec_7_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_7_hidden", "1"}, {UNIMOD_Phospho, "spec_7_position", "Anywhere"}, {UNIMOD_Phospho, "spec_7_site", "K"}, {UNIMOD_Phospho, "spec_8_classification", "Post-translational"}, {UNIMOD_Phospho, "spec_8_hidden", "1"}, {UNIMOD_Phospho, "spec_8_position", "Anywhere"}, {UNIMOD_Phospho, "spec_8_site", "E"}, {UNIMOD_Dehydrated, "approved", "0"}, {UNIMOD_Dehydrated, "delta_composition", "H(-2) O(-1)"}, {UNIMOD_Dehydrated, "spec_1_classification", "Post-translational"}, {UNIMOD_Dehydrated, "spec_1_hidden", "1"}, {UNIMOD_Dehydrated, "spec_1_position", "Protein C-term"}, {UNIMOD_Dehydrated, "spec_1_site", "N"}, {UNIMOD_Dehydrated, "spec_2_classification", "Post-translational"}, {UNIMOD_Dehydrated, "spec_2_hidden", "1"}, {UNIMOD_Dehydrated, "spec_2_position", "Protein C-term"}, {UNIMOD_Dehydrated, "spec_2_site", "Q"}, {UNIMOD_Dehydrated, "spec_3_classification", "Post-translational"}, {UNIMOD_Dehydrated, "spec_3_hidden", "1"}, {UNIMOD_Dehydrated, "spec_3_position", "Anywhere"}, {UNIMOD_Dehydrated, "spec_3_site", "S"}, {UNIMOD_Dehydrated, "spec_4_classification", "Post-translational"}, {UNIMOD_Dehydrated, "spec_4_hidden", "1"}, {UNIMOD_Dehydrated, "spec_4_position", "Anywhere"}, {UNIMOD_Dehydrated, "spec_4_site", "T"}, {UNIMOD_Dehydrated, "spec_5_classification", "Post-translational"}, {UNIMOD_Dehydrated, "spec_5_hidden", "1"}, {UNIMOD_Dehydrated, "spec_5_position", "Anywhere"}, {UNIMOD_Dehydrated, "spec_5_site", "Y"}, {UNIMOD_Dehydrated, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Dehydrated, "spec_6_hidden", "1"}, {UNIMOD_Dehydrated, "spec_6_position", "Anywhere"}, {UNIMOD_Dehydrated, "spec_6_site", "D"}, {UNIMOD_Dehydrated, "spec_7_classification", "Artefact"}, {UNIMOD_Dehydrated, "spec_7_hidden", "0"}, {UNIMOD_Dehydrated, "spec_7_position", "Any N-term"}, {UNIMOD_Dehydrated, "spec_7_site", "C"}, {UNIMOD_Propionamide, "approved", "1"}, {UNIMOD_Propionamide, "delta_composition", "H(5) C(3) N O"}, {UNIMOD_Propionamide, "spec_1_classification", "Artefact"}, {UNIMOD_Propionamide, "spec_1_hidden", "0"}, {UNIMOD_Propionamide, "spec_1_position", "Anywhere"}, {UNIMOD_Propionamide, "spec_1_site", "C"}, {UNIMOD_Propionamide, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Propionamide, "spec_2_hidden", "1"}, {UNIMOD_Propionamide, "spec_2_position", "Anywhere"}, {UNIMOD_Propionamide, "spec_2_site", "K"}, {UNIMOD_Propionamide, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Propionamide, "spec_3_hidden", "1"}, {UNIMOD_Propionamide, "spec_3_position", "Any N-term"}, {UNIMOD_Propionamide, "spec_3_site", "N-term"}, {UNIMOD_Pyridylacetyl, "approved", "1"}, {UNIMOD_Pyridylacetyl, "delta_composition", "H(5) C(7) N O"}, {UNIMOD_Pyridylacetyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pyridylacetyl, "spec_1_hidden", "1"}, {UNIMOD_Pyridylacetyl, "spec_1_position", "Anywhere"}, {UNIMOD_Pyridylacetyl, "spec_1_site", "K"}, {UNIMOD_Pyridylacetyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Pyridylacetyl, "spec_2_hidden", "1"}, {UNIMOD_Pyridylacetyl, "spec_2_position", "Any N-term"}, {UNIMOD_Pyridylacetyl, "spec_2_site", "N-term"}, {UNIMOD_Pyro_carbamidomethyl, "approved", "0"}, {UNIMOD_Pyro_carbamidomethyl, "delta_composition", "C(2) O"}, {UNIMOD_Pyro_carbamidomethyl, "spec_1_classification", "Artefact"}, {UNIMOD_Pyro_carbamidomethyl, "spec_1_hidden", "0"}, {UNIMOD_Pyro_carbamidomethyl, "spec_1_position", "Any N-term"}, {UNIMOD_Pyro_carbamidomethyl, "spec_1_site", "C"}, {UNIMOD_Glu__pyro_Glu, "approved", "1"}, {UNIMOD_Glu__pyro_Glu, "delta_composition", "H(-2) O(-1)"}, {UNIMOD_Glu__pyro_Glu, "spec_1_classification", "Artefact"}, {UNIMOD_Glu__pyro_Glu, "spec_1_hidden", "0"}, {UNIMOD_Glu__pyro_Glu, "spec_1_position", "Any N-term"}, {UNIMOD_Glu__pyro_Glu, "spec_1_site", "E"}, {UNIMOD_Gln__pyro_Glu, "approved", "1"}, {UNIMOD_Gln__pyro_Glu, "delta_composition", "H(-3) N(-1)"}, {UNIMOD_Gln__pyro_Glu, "spec_1_classification", "Artefact"}, {UNIMOD_Gln__pyro_Glu, "spec_1_hidden", "0"}, {UNIMOD_Gln__pyro_Glu, "spec_1_position", "Any N-term"}, {UNIMOD_Gln__pyro_Glu, "spec_1_site", "Q"}, {UNIMOD_SMA, "approved", "1"}, {UNIMOD_SMA, "delta_composition", "H(9) C(6) N O(2)"}, {UNIMOD_SMA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_SMA, "spec_1_hidden", "1"}, {UNIMOD_SMA, "spec_1_position", "Anywhere"}, {UNIMOD_SMA, "spec_1_site", "K"}, {UNIMOD_SMA, "spec_2_classification", "Chemical derivative"}, {UNIMOD_SMA, "spec_2_hidden", "1"}, {UNIMOD_SMA, "spec_2_position", "Any N-term"}, {UNIMOD_SMA, "spec_2_site", "N-term"}, {UNIMOD_Cation_Na, "approved", "1"}, {UNIMOD_Cation_Na, "delta_composition", "H(-1) Na"}, {UNIMOD_Cation_Na, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Na, "spec_1_hidden", "0"}, {UNIMOD_Cation_Na, "spec_1_position", "Any C-term"}, {UNIMOD_Cation_Na, "spec_1_site", "C-term"}, {UNIMOD_Cation_Na, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Na, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Na, "spec_2_hidden", "0"}, {UNIMOD_Cation_Na, "spec_2_hidden", "0"}, {UNIMOD_Cation_Na, "spec_2_position", "Anywhere"}, {UNIMOD_Cation_Na, "spec_2_position", "Anywhere"}, {UNIMOD_Cation_Na, "spec_2_site", "D"}, {UNIMOD_Cation_Na, "spec_2_site", "E"}, {UNIMOD_Pyridylethyl, "approved", "1"}, {UNIMOD_Pyridylethyl, "delta_composition", "H(7) C(7) N"}, {UNIMOD_Pyridylethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pyridylethyl, "spec_1_hidden", "0"}, {UNIMOD_Pyridylethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Pyridylethyl, "spec_1_site", "C"}, {UNIMOD_Methyl, "approved", "1"}, {UNIMOD_Methyl, "delta_composition", "H(2) C"}, {UNIMOD_Methyl, "spec_10_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_10_hidden", "1"}, {UNIMOD_Methyl, "spec_10_position", "Protein N-term"}, {UNIMOD_Methyl, "spec_10_site", "N-term"}, {UNIMOD_Methyl, "spec_11_classification", "Multiple"}, {UNIMOD_Methyl, "spec_11_hidden", "0"}, {UNIMOD_Methyl, "spec_11_position", "Any C-term"}, {UNIMOD_Methyl, "spec_11_site", "C-term"}, {UNIMOD_Methyl, "spec_12_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_12_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_12_hidden", "0"}, {UNIMOD_Methyl, "spec_12_hidden", "0"}, {UNIMOD_Methyl, "spec_12_position", "Anywhere"}, {UNIMOD_Methyl, "spec_12_position", "Anywhere"}, {UNIMOD_Methyl, "spec_12_site", "E"}, {UNIMOD_Methyl, "spec_12_site", "D"}, {UNIMOD_Methyl, "spec_13_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_13_hidden", "1"}, {UNIMOD_Methyl, "spec_13_position", "Anywhere"}, {UNIMOD_Methyl, "spec_13_site", "S"}, {UNIMOD_Methyl, "spec_14_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_14_hidden", "1"}, {UNIMOD_Methyl, "spec_14_position", "Anywhere"}, {UNIMOD_Methyl, "spec_14_site", "T"}, {UNIMOD_Methyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_1_hidden", "1"}, {UNIMOD_Methyl, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl, "spec_1_site", "C"}, {UNIMOD_Methyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_2_hidden", "1"}, {UNIMOD_Methyl, "spec_2_position", "Anywhere"}, {UNIMOD_Methyl, "spec_2_site", "H"}, {UNIMOD_Methyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_3_hidden", "1"}, {UNIMOD_Methyl, "spec_3_position", "Anywhere"}, {UNIMOD_Methyl, "spec_3_site", "K"}, {UNIMOD_Methyl, "spec_4_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_4_hidden", "1"}, {UNIMOD_Methyl, "spec_4_position", "Anywhere"}, {UNIMOD_Methyl, "spec_4_site", "N"}, {UNIMOD_Methyl, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Methyl, "spec_5_hidden", "1"}, {UNIMOD_Methyl, "spec_5_position", "Any N-term"}, {UNIMOD_Methyl, "spec_5_site", "N-term"}, {UNIMOD_Methyl, "spec_6_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_6_hidden", "1"}, {UNIMOD_Methyl, "spec_6_position", "Anywhere"}, {UNIMOD_Methyl, "spec_6_site", "Q"}, {UNIMOD_Methyl, "spec_7_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_7_hidden", "1"}, {UNIMOD_Methyl, "spec_7_position", "Anywhere"}, {UNIMOD_Methyl, "spec_7_site", "R"}, {UNIMOD_Methyl, "spec_8_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_8_hidden", "1"}, {UNIMOD_Methyl, "spec_8_position", "Anywhere"}, {UNIMOD_Methyl, "spec_8_site", "I"}, {UNIMOD_Methyl, "spec_9_classification", "Post-translational"}, {UNIMOD_Methyl, "spec_9_hidden", "1"}, {UNIMOD_Methyl, "spec_9_position", "Anywhere"}, {UNIMOD_Methyl, "spec_9_site", "L"}, {UNIMOD_Oxidation, "approved", "0"}, {UNIMOD_Oxidation, "delta_composition", "O"}, {UNIMOD_Oxidation, "spec_10_classification", "Artefact"}, {UNIMOD_Oxidation, "spec_10_classification", "Artefact"}, {UNIMOD_Oxidation, "spec_10_hidden", "0"}, {UNIMOD_Oxidation, "spec_10_hidden", "0"}, {UNIMOD_Oxidation, "spec_10_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_10_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_10_site", "W"}, {UNIMOD_Oxidation, "spec_10_site", "H"}, {UNIMOD_Oxidation, "spec_11_classification", "Pre-translational"}, {UNIMOD_Oxidation, "spec_11_hidden", "1"}, {UNIMOD_Oxidation, "spec_11_position", "Any C-term"}, {UNIMOD_Oxidation, "spec_11_site", "G"}, {UNIMOD_Oxidation, "spec_12_classification", "Multiple"}, {UNIMOD_Oxidation, "spec_12_hidden", "1"}, {UNIMOD_Oxidation, "spec_12_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_12_site", "U"}, {UNIMOD_Oxidation, "spec_13_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_13_hidden", "1"}, {UNIMOD_Oxidation, "spec_13_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_13_site", "E"}, {UNIMOD_Oxidation, "spec_14_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_14_hidden", "1"}, {UNIMOD_Oxidation, "spec_14_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_14_site", "I"}, {UNIMOD_Oxidation, "spec_15_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_15_hidden", "1"}, {UNIMOD_Oxidation, "spec_15_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_15_site", "L"}, {UNIMOD_Oxidation, "spec_16_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_16_hidden", "1"}, {UNIMOD_Oxidation, "spec_16_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_16_site", "Q"}, {UNIMOD_Oxidation, "spec_17_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_17_hidden", "1"}, {UNIMOD_Oxidation, "spec_17_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_17_site", "S"}, {UNIMOD_Oxidation, "spec_18_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_18_hidden", "1"}, {UNIMOD_Oxidation, "spec_18_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_18_site", "T"}, {UNIMOD_Oxidation, "spec_19_classification", "Chemical derivative"}, {UNIMOD_Oxidation, "spec_19_hidden", "1"}, {UNIMOD_Oxidation, "spec_19_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_19_site", "V"}, {UNIMOD_Oxidation, "spec_1_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_1_hidden", "1"}, {UNIMOD_Oxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_1_site", "D"}, {UNIMOD_Oxidation, "spec_2_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_2_hidden", "1"}, {UNIMOD_Oxidation, "spec_2_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_2_site", "K"}, {UNIMOD_Oxidation, "spec_3_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_3_hidden", "1"}, {UNIMOD_Oxidation, "spec_3_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_3_site", "N"}, {UNIMOD_Oxidation, "spec_4_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_4_hidden", "1"}, {UNIMOD_Oxidation, "spec_4_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_4_site", "P"}, {UNIMOD_Oxidation, "spec_5_classification", "Artefact"}, {UNIMOD_Oxidation, "spec_5_hidden", "1"}, {UNIMOD_Oxidation, "spec_5_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_5_site", "F"}, {UNIMOD_Oxidation, "spec_6_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_6_hidden", "1"}, {UNIMOD_Oxidation, "spec_6_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_6_site", "Y"}, {UNIMOD_Oxidation, "spec_7_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_7_hidden", "1"}, {UNIMOD_Oxidation, "spec_7_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_7_site", "R"}, {UNIMOD_Oxidation, "spec_8_classification", "Artefact"}, {UNIMOD_Oxidation, "spec_8_hidden", "0"}, {UNIMOD_Oxidation, "spec_8_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_8_site", "M"}, {UNIMOD_Oxidation, "spec_9_classification", "Post-translational"}, {UNIMOD_Oxidation, "spec_9_hidden", "1"}, {UNIMOD_Oxidation, "spec_9_position", "Anywhere"}, {UNIMOD_Oxidation, "spec_9_site", "C"}, {UNIMOD_Dimethyl, "approved", "1"}, {UNIMOD_Dimethyl, "delta_composition", "H(4) C(2)"}, {UNIMOD_Dimethyl, "spec_1_classification", "Multiple"}, {UNIMOD_Dimethyl, "spec_1_hidden", "1"}, {UNIMOD_Dimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethyl, "spec_1_site", "K"}, {UNIMOD_Dimethyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Dimethyl, "spec_2_hidden", "1"}, {UNIMOD_Dimethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Dimethyl, "spec_2_site", "R"}, {UNIMOD_Dimethyl, "spec_3_classification", "Isotopic label"}, {UNIMOD_Dimethyl, "spec_3_hidden", "1"}, {UNIMOD_Dimethyl, "spec_3_position", "Any N-term"}, {UNIMOD_Dimethyl, "spec_3_site", "N-term"}, {UNIMOD_Dimethyl, "spec_4_classification", "Post-translational"}, {UNIMOD_Dimethyl, "spec_4_hidden", "1"}, {UNIMOD_Dimethyl, "spec_4_position", "Anywhere"}, {UNIMOD_Dimethyl, "spec_4_site", "N"}, {UNIMOD_Dimethyl, "spec_5_classification", "Post-translational"}, {UNIMOD_Dimethyl, "spec_5_hidden", "1"}, {UNIMOD_Dimethyl, "spec_5_position", "Protein N-term"}, {UNIMOD_Dimethyl, "spec_5_site", "P"}, {UNIMOD_Dimethyl, "spec_6_classification", "Isotopic label"}, {UNIMOD_Dimethyl, "spec_6_hidden", "1"}, {UNIMOD_Dimethyl, "spec_6_position", "Protein N-term"}, {UNIMOD_Dimethyl, "spec_6_site", "N-term"}, {UNIMOD_Trimethyl, "approved", "1"}, {UNIMOD_Trimethyl, "delta_composition", "H(6) C(3)"}, {UNIMOD_Trimethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Trimethyl, "spec_1_hidden", "1"}, {UNIMOD_Trimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Trimethyl, "spec_1_site", "K"}, {UNIMOD_Trimethyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Trimethyl, "spec_2_hidden", "1"}, {UNIMOD_Trimethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Trimethyl, "spec_2_site", "R"}, {UNIMOD_Trimethyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Trimethyl, "spec_3_hidden", "1"}, {UNIMOD_Trimethyl, "spec_3_position", "Protein N-term"}, {UNIMOD_Trimethyl, "spec_3_site", "A"}, {UNIMOD_Methylthio, "approved", "0"}, {UNIMOD_Methylthio, "delta_composition", "H(2) C S"}, {UNIMOD_Methylthio, "spec_1_classification", "Post-translational"}, {UNIMOD_Methylthio, "spec_1_hidden", "1"}, {UNIMOD_Methylthio, "spec_1_position", "Anywhere"}, {UNIMOD_Methylthio, "spec_1_site", "D"}, {UNIMOD_Methylthio, "spec_2_classification", "Post-translational"}, {UNIMOD_Methylthio, "spec_2_hidden", "1"}, {UNIMOD_Methylthio, "spec_2_position", "Anywhere"}, {UNIMOD_Methylthio, "spec_2_site", "N"}, {UNIMOD_Methylthio, "spec_3_classification", "Multiple"}, {UNIMOD_Methylthio, "spec_3_hidden", "0"}, {UNIMOD_Methylthio, "spec_3_position", "Anywhere"}, {UNIMOD_Methylthio, "spec_3_site", "C"}, {UNIMOD_Methylthio, "spec_4_classification", "Artefact"}, {UNIMOD_Methylthio, "spec_4_hidden", "1"}, {UNIMOD_Methylthio, "spec_4_position", "Any N-term"}, {UNIMOD_Methylthio, "spec_4_site", "N-term"}, {UNIMOD_Methylthio, "spec_5_classification", "Artefact"}, {UNIMOD_Methylthio, "spec_5_hidden", "1"}, {UNIMOD_Methylthio, "spec_5_position", "Anywhere"}, {UNIMOD_Methylthio, "spec_5_site", "K"}, {UNIMOD_Sulfo, "approved", "1"}, {UNIMOD_Sulfo, "delta_composition", "O(3) S"}, {UNIMOD_Sulfo, "spec_1_classification", "Post-translational"}, {UNIMOD_Sulfo, "spec_1_classification", "Post-translational"}, {UNIMOD_Sulfo, "spec_1_classification", "Post-translational"}, {UNIMOD_Sulfo, "spec_1_hidden", "0"}, {UNIMOD_Sulfo, "spec_1_hidden", "0"}, {UNIMOD_Sulfo, "spec_1_hidden", "0"}, {UNIMOD_Sulfo, "spec_1_position", "Anywhere"}, {UNIMOD_Sulfo, "spec_1_position", "Anywhere"}, {UNIMOD_Sulfo, "spec_1_position", "Anywhere"}, {UNIMOD_Sulfo, "spec_1_site", "S"}, {UNIMOD_Sulfo, "spec_1_site", "T"}, {UNIMOD_Sulfo, "spec_1_site", "Y"}, {UNIMOD_Sulfo, "spec_2_classification", "Post-translational"}, {UNIMOD_Sulfo, "spec_2_hidden", "1"}, {UNIMOD_Sulfo, "spec_2_position", "Anywhere"}, {UNIMOD_Sulfo, "spec_2_site", "C"}, {UNIMOD_Hex, "approved", "1"}, {UNIMOD_Hex, "delta_composition", "Hex"}, {UNIMOD_Hex, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Hex, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Hex, "spec_1_hidden", "1"}, {UNIMOD_Hex, "spec_1_hidden", "1"}, {UNIMOD_Hex, "spec_1_position", "Anywhere"}, {UNIMOD_Hex, "spec_1_position", "Anywhere"}, {UNIMOD_Hex, "spec_1_site", "R"}, {UNIMOD_Hex, "spec_1_site", "K"}, {UNIMOD_Hex, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex, "spec_2_hidden", "1"}, {UNIMOD_Hex, "spec_2_position", "Anywhere"}, {UNIMOD_Hex, "spec_2_site", "N"}, {UNIMOD_Hex, "spec_3_classification", "Other glycosylation"}, {UNIMOD_Hex, "spec_3_hidden", "1"}, {UNIMOD_Hex, "spec_3_position", "Any N-term"}, {UNIMOD_Hex, "spec_3_site", "N-term"}, {UNIMOD_Hex, "spec_4_classification", "O-linked glycosylation"}, {UNIMOD_Hex, "spec_4_classification", "O-linked glycosylation"}, {UNIMOD_Hex, "spec_4_hidden", "1"}, {UNIMOD_Hex, "spec_4_hidden", "1"}, {UNIMOD_Hex, "spec_4_position", "Anywhere"}, {UNIMOD_Hex, "spec_4_position", "Anywhere"}, {UNIMOD_Hex, "spec_4_site", "T"}, {UNIMOD_Hex, "spec_4_site", "S"}, {UNIMOD_Hex, "spec_5_classification", "Other glycosylation"}, {UNIMOD_Hex, "spec_5_hidden", "1"}, {UNIMOD_Hex, "spec_5_position", "Anywhere"}, {UNIMOD_Hex, "spec_5_site", "W"}, {UNIMOD_Hex, "spec_6_classification", "Other glycosylation"}, {UNIMOD_Hex, "spec_6_hidden", "1"}, {UNIMOD_Hex, "spec_6_position", "Anywhere"}, {UNIMOD_Hex, "spec_6_site", "C"}, {UNIMOD_Hex, "spec_8_classification", "O-linked glycosylation"}, {UNIMOD_Hex, "spec_8_hidden", "1"}, {UNIMOD_Hex, "spec_8_position", "Anywhere"}, {UNIMOD_Hex, "spec_8_site", "Y"}, {UNIMOD_Lipoyl, "approved", "1"}, {UNIMOD_Lipoyl, "delta_composition", "H(12) C(8) O S(2)"}, {UNIMOD_Lipoyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Lipoyl, "spec_1_hidden", "1"}, {UNIMOD_Lipoyl, "spec_1_position", "Anywhere"}, {UNIMOD_Lipoyl, "spec_1_site", "K"}, {UNIMOD_HexNAc, "approved", "1"}, {UNIMOD_HexNAc, "delta_composition", "HexNAc"}, {UNIMOD_HexNAc, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc, "spec_1_hidden", "1"}, {UNIMOD_HexNAc, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc, "spec_1_site", "N"}, {UNIMOD_HexNAc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc, "spec_2_hidden", "1"}, {UNIMOD_HexNAc, "spec_2_hidden", "1"}, {UNIMOD_HexNAc, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc, "spec_2_site", "T"}, {UNIMOD_HexNAc, "spec_2_site", "S"}, {UNIMOD_HexNAc, "spec_3_classification", "Other glycosylation"}, {UNIMOD_HexNAc, "spec_3_hidden", "1"}, {UNIMOD_HexNAc, "spec_3_position", "Anywhere"}, {UNIMOD_HexNAc, "spec_3_site", "C"}, {UNIMOD_Farnesyl, "approved", "1"}, {UNIMOD_Farnesyl, "delta_composition", "H(24) C(15)"}, {UNIMOD_Farnesyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Farnesyl, "spec_1_hidden", "1"}, {UNIMOD_Farnesyl, "spec_1_position", "Anywhere"}, {UNIMOD_Farnesyl, "spec_1_site", "C"}, {UNIMOD_Myristoyl, "approved", "1"}, {UNIMOD_Myristoyl, "delta_composition", "H(26) C(14) O"}, {UNIMOD_Myristoyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Myristoyl, "spec_1_hidden", "1"}, {UNIMOD_Myristoyl, "spec_1_position", "Any N-term"}, {UNIMOD_Myristoyl, "spec_1_site", "G"}, {UNIMOD_Myristoyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Myristoyl, "spec_2_hidden", "1"}, {UNIMOD_Myristoyl, "spec_2_position", "Anywhere"}, {UNIMOD_Myristoyl, "spec_2_site", "K"}, {UNIMOD_Myristoyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Myristoyl, "spec_3_hidden", "1"}, {UNIMOD_Myristoyl, "spec_3_position", "Anywhere"}, {UNIMOD_Myristoyl, "spec_3_site", "C"}, {UNIMOD_PyridoxalPhosphate, "approved", "1"}, {UNIMOD_PyridoxalPhosphate, "delta_composition", "H(8) C(8) N O(5) P"}, {UNIMOD_PyridoxalPhosphate, "spec_1_classification", "Post-translational"}, {UNIMOD_PyridoxalPhosphate, "spec_1_hidden", "1"}, {UNIMOD_PyridoxalPhosphate, "spec_1_position", "Anywhere"}, {UNIMOD_PyridoxalPhosphate, "spec_1_site", "K"}, {UNIMOD_Palmitoyl, "approved", "1"}, {UNIMOD_Palmitoyl, "delta_composition", "H(30) C(16) O"}, {UNIMOD_Palmitoyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Palmitoyl, "spec_1_hidden", "1"}, {UNIMOD_Palmitoyl, "spec_1_position", "Anywhere"}, {UNIMOD_Palmitoyl, "spec_1_site", "C"}, {UNIMOD_Palmitoyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Palmitoyl, "spec_2_hidden", "1"}, {UNIMOD_Palmitoyl, "spec_2_position", "Anywhere"}, {UNIMOD_Palmitoyl, "spec_2_site", "K"}, {UNIMOD_Palmitoyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Palmitoyl, "spec_3_hidden", "1"}, {UNIMOD_Palmitoyl, "spec_3_position", "Anywhere"}, {UNIMOD_Palmitoyl, "spec_3_site", "S"}, {UNIMOD_Palmitoyl, "spec_4_classification", "Post-translational"}, {UNIMOD_Palmitoyl, "spec_4_hidden", "1"}, {UNIMOD_Palmitoyl, "spec_4_position", "Anywhere"}, {UNIMOD_Palmitoyl, "spec_4_site", "T"}, {UNIMOD_Palmitoyl, "spec_5_classification", "Post-translational"}, {UNIMOD_Palmitoyl, "spec_5_hidden", "1"}, {UNIMOD_Palmitoyl, "spec_5_position", "Protein N-term"}, {UNIMOD_Palmitoyl, "spec_5_site", "N-term"}, {UNIMOD_GeranylGeranyl, "approved", "1"}, {UNIMOD_GeranylGeranyl, "delta_composition", "H(32) C(20)"}, {UNIMOD_GeranylGeranyl, "spec_1_classification", "Post-translational"}, {UNIMOD_GeranylGeranyl, "spec_1_hidden", "1"}, {UNIMOD_GeranylGeranyl, "spec_1_position", "Anywhere"}, {UNIMOD_GeranylGeranyl, "spec_1_site", "C"}, {UNIMOD_Phosphopantetheine, "approved", "1"}, {UNIMOD_Phosphopantetheine, "delta_composition", "H(21) C(11) N(2) O(6) P S"}, {UNIMOD_Phosphopantetheine, "spec_1_classification", "Post-translational"}, {UNIMOD_Phosphopantetheine, "spec_1_hidden", "1"}, {UNIMOD_Phosphopantetheine, "spec_1_position", "Anywhere"}, {UNIMOD_Phosphopantetheine, "spec_1_site", "S"}, {UNIMOD_FAD, "approved", "1"}, {UNIMOD_FAD, "delta_composition", "H(31) C(27) N(9) O(15) P(2)"}, {UNIMOD_FAD, "spec_1_classification", "Post-translational"}, {UNIMOD_FAD, "spec_1_hidden", "1"}, {UNIMOD_FAD, "spec_1_position", "Anywhere"}, {UNIMOD_FAD, "spec_1_site", "C"}, {UNIMOD_FAD, "spec_2_classification", "Post-translational"}, {UNIMOD_FAD, "spec_2_hidden", "1"}, {UNIMOD_FAD, "spec_2_position", "Anywhere"}, {UNIMOD_FAD, "spec_2_site", "H"}, {UNIMOD_FAD, "spec_3_classification", "Post-translational"}, {UNIMOD_FAD, "spec_3_hidden", "1"}, {UNIMOD_FAD, "spec_3_position", "Anywhere"}, {UNIMOD_FAD, "spec_3_site", "Y"}, {UNIMOD_Tripalmitate, "approved", "1"}, {UNIMOD_Tripalmitate, "delta_composition", "H(96) C(51) O(5)"}, {UNIMOD_Tripalmitate, "spec_1_classification", "Post-translational"}, {UNIMOD_Tripalmitate, "spec_1_hidden", "1"}, {UNIMOD_Tripalmitate, "spec_1_position", "Protein N-term"}, {UNIMOD_Tripalmitate, "spec_1_site", "C"}, {UNIMOD_Guanidinyl, "approved", "1"}, {UNIMOD_Guanidinyl, "delta_composition", "H(2) C N(2)"}, {UNIMOD_Guanidinyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Guanidinyl, "spec_1_hidden", "0"}, {UNIMOD_Guanidinyl, "spec_1_position", "Anywhere"}, {UNIMOD_Guanidinyl, "spec_1_site", "K"}, {UNIMOD_Guanidinyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Guanidinyl, "spec_2_hidden", "1"}, {UNIMOD_Guanidinyl, "spec_2_position", "Any N-term"}, {UNIMOD_Guanidinyl, "spec_2_site", "N-term"}, {UNIMOD_HNE, "approved", "1"}, {UNIMOD_HNE, "delta_composition", "H(16) C(9) O(2)"}, {UNIMOD_HNE, "spec_1_classification", "Post-translational"}, {UNIMOD_HNE, "spec_1_hidden", "1"}, {UNIMOD_HNE, "spec_1_position", "Anywhere"}, {UNIMOD_HNE, "spec_1_site", "C"}, {UNIMOD_HNE, "spec_2_classification", "Post-translational"}, {UNIMOD_HNE, "spec_2_hidden", "1"}, {UNIMOD_HNE, "spec_2_position", "Anywhere"}, {UNIMOD_HNE, "spec_2_site", "H"}, {UNIMOD_HNE, "spec_3_classification", "Post-translational"}, {UNIMOD_HNE, "spec_3_hidden", "1"}, {UNIMOD_HNE, "spec_3_position", "Anywhere"}, {UNIMOD_HNE, "spec_3_site", "K"}, {UNIMOD_HNE, "spec_4_classification", "Post-translational"}, {UNIMOD_HNE, "spec_4_hidden", "1"}, {UNIMOD_HNE, "spec_4_position", "Anywhere"}, {UNIMOD_HNE, "spec_4_site", "A"}, {UNIMOD_HNE, "spec_5_classification", "Post-translational"}, {UNIMOD_HNE, "spec_5_hidden", "1"}, {UNIMOD_HNE, "spec_5_position", "Anywhere"}, {UNIMOD_HNE, "spec_5_site", "L"}, {UNIMOD_Glucuronyl, "approved", "1"}, {UNIMOD_Glucuronyl, "delta_composition", "HexA"}, {UNIMOD_Glucuronyl, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Glucuronyl, "spec_1_hidden", "1"}, {UNIMOD_Glucuronyl, "spec_1_position", "Protein N-term"}, {UNIMOD_Glucuronyl, "spec_1_site", "N-term"}, {UNIMOD_Glucuronyl, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Glucuronyl, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Glucuronyl, "spec_2_hidden", "1"}, {UNIMOD_Glucuronyl, "spec_2_hidden", "1"}, {UNIMOD_Glucuronyl, "spec_2_position", "Anywhere"}, {UNIMOD_Glucuronyl, "spec_2_position", "Anywhere"}, {UNIMOD_Glucuronyl, "spec_2_site", "T"}, {UNIMOD_Glucuronyl, "spec_2_site", "S"}, {UNIMOD_Glutathione, "approved", "1"}, {UNIMOD_Glutathione, "delta_composition", "H(15) C(10) N(3) O(6) S"}, {UNIMOD_Glutathione, "spec_1_classification", "Post-translational"}, {UNIMOD_Glutathione, "spec_1_hidden", "1"}, {UNIMOD_Glutathione, "spec_1_position", "Anywhere"}, {UNIMOD_Glutathione, "spec_1_site", "C"}, {UNIMOD_Acetyl_2H_3_, "approved", "1"}, {UNIMOD_Acetyl_2H_3_, "delta_composition", "H(-1) 2H(3) C(2) O"}, {UNIMOD_Acetyl_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Acetyl_2H_3_, "spec_1_site", "K"}, {UNIMOD_Acetyl_2H_3_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_2_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_2_position", "Any N-term"}, {UNIMOD_Acetyl_2H_3_, "spec_2_site", "N-term"}, {UNIMOD_Acetyl_2H_3_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_3_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_3_position", "Anywhere"}, {UNIMOD_Acetyl_2H_3_, "spec_3_site", "H"}, {UNIMOD_Acetyl_2H_3_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_4_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_4_position", "Anywhere"}, {UNIMOD_Acetyl_2H_3_, "spec_4_site", "S"}, {UNIMOD_Acetyl_2H_3_, "spec_5_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_5_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_5_position", "Anywhere"}, {UNIMOD_Acetyl_2H_3_, "spec_5_site", "T"}, {UNIMOD_Acetyl_2H_3_, "spec_6_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_6_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_6_position", "Anywhere"}, {UNIMOD_Acetyl_2H_3_, "spec_6_site", "Y"}, {UNIMOD_Acetyl_2H_3_, "spec_7_classification", "Isotopic label"}, {UNIMOD_Acetyl_2H_3_, "spec_7_hidden", "1"}, {UNIMOD_Acetyl_2H_3_, "spec_7_position", "Protein N-term"}, {UNIMOD_Acetyl_2H_3_, "spec_7_site", "N-term"}, {UNIMOD_Propionyl, "approved", "1"}, {UNIMOD_Propionyl, "delta_composition", "H(4) C(3) O"}, {UNIMOD_Propionyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Propionyl, "spec_1_hidden", "1"}, {UNIMOD_Propionyl, "spec_1_position", "Anywhere"}, {UNIMOD_Propionyl, "spec_1_site", "K"}, {UNIMOD_Propionyl, "spec_2_classification", "Isotopic label"}, {UNIMOD_Propionyl, "spec_2_hidden", "1"}, {UNIMOD_Propionyl, "spec_2_position", "Any N-term"}, {UNIMOD_Propionyl, "spec_2_site", "N-term"}, {UNIMOD_Propionyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Propionyl, "spec_3_hidden", "1"}, {UNIMOD_Propionyl, "spec_3_position", "Anywhere"}, {UNIMOD_Propionyl, "spec_3_site", "S"}, {UNIMOD_Propionyl, "spec_4_classification", "Isotopic label"}, {UNIMOD_Propionyl, "spec_4_hidden", "1"}, {UNIMOD_Propionyl, "spec_4_position", "Anywhere"}, {UNIMOD_Propionyl, "spec_4_site", "T"}, {UNIMOD_Propionyl, "spec_5_classification", "Multiple"}, {UNIMOD_Propionyl, "spec_5_hidden", "1"}, {UNIMOD_Propionyl, "spec_5_position", "Protein N-term"}, {UNIMOD_Propionyl, "spec_5_site", "N-term"}, {UNIMOD_Propionyl_13C_3_, "approved", "1"}, {UNIMOD_Propionyl_13C_3_, "delta_composition", "H(4) 13C(3) O"}, {UNIMOD_Propionyl_13C_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Propionyl_13C_3_, "spec_1_hidden", "1"}, {UNIMOD_Propionyl_13C_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Propionyl_13C_3_, "spec_1_site", "K"}, {UNIMOD_Propionyl_13C_3_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Propionyl_13C_3_, "spec_2_hidden", "1"}, {UNIMOD_Propionyl_13C_3_, "spec_2_position", "Any N-term"}, {UNIMOD_Propionyl_13C_3_, "spec_2_site", "N-term"}, {UNIMOD_GIST_Quat, "approved", "1"}, {UNIMOD_GIST_Quat, "delta_composition", "H(13) C(7) N O"}, {UNIMOD_GIST_Quat, "spec_1_classification", "Isotopic label"}, {UNIMOD_GIST_Quat, "spec_1_hidden", "1"}, {UNIMOD_GIST_Quat, "spec_1_position", "Anywhere"}, {UNIMOD_GIST_Quat, "spec_1_site", "K"}, {UNIMOD_GIST_Quat, "spec_2_classification", "Isotopic label"}, {UNIMOD_GIST_Quat, "spec_2_hidden", "1"}, {UNIMOD_GIST_Quat, "spec_2_position", "Any N-term"}, {UNIMOD_GIST_Quat, "spec_2_site", "N-term"}, {UNIMOD_GIST_Quat_2H_3_, "approved", "1"}, {UNIMOD_GIST_Quat_2H_3_, "delta_composition", "H(10) 2H(3) C(7) N O"}, {UNIMOD_GIST_Quat_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_GIST_Quat_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_GIST_Quat_2H_3_, "spec_1_site", "K"}, {UNIMOD_GIST_Quat_2H_3_, "spec_2_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_3_, "spec_2_hidden", "1"}, {UNIMOD_GIST_Quat_2H_3_, "spec_2_position", "Any N-term"}, {UNIMOD_GIST_Quat_2H_3_, "spec_2_site", "N-term"}, {UNIMOD_GIST_Quat_2H_6_, "approved", "1"}, {UNIMOD_GIST_Quat_2H_6_, "delta_composition", "H(7) 2H(6) C(7) N O"}, {UNIMOD_GIST_Quat_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_GIST_Quat_2H_6_, "spec_1_position", "Anywhere"}, {UNIMOD_GIST_Quat_2H_6_, "spec_1_site", "K"}, {UNIMOD_GIST_Quat_2H_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_6_, "spec_2_hidden", "1"}, {UNIMOD_GIST_Quat_2H_6_, "spec_2_position", "Any N-term"}, {UNIMOD_GIST_Quat_2H_6_, "spec_2_site", "N-term"}, {UNIMOD_GIST_Quat_2H_9_, "approved", "1"}, {UNIMOD_GIST_Quat_2H_9_, "delta_composition", "H(4) 2H(9) C(7) N O"}, {UNIMOD_GIST_Quat_2H_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_9_, "spec_1_hidden", "1"}, {UNIMOD_GIST_Quat_2H_9_, "spec_1_position", "Anywhere"}, {UNIMOD_GIST_Quat_2H_9_, "spec_1_site", "K"}, {UNIMOD_GIST_Quat_2H_9_, "spec_2_classification", "Isotopic label"}, {UNIMOD_GIST_Quat_2H_9_, "spec_2_hidden", "1"}, {UNIMOD_GIST_Quat_2H_9_, "spec_2_position", "Any N-term"}, {UNIMOD_GIST_Quat_2H_9_, "spec_2_site", "N-term"}, {UNIMOD_Succinyl, "approved", "1"}, {UNIMOD_Succinyl, "delta_composition", "H(4) C(4) O(3)"}, {UNIMOD_Succinyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Succinyl, "spec_1_hidden", "1"}, {UNIMOD_Succinyl, "spec_1_position", "Anywhere"}, {UNIMOD_Succinyl, "spec_1_site", "K"}, {UNIMOD_Succinyl, "spec_2_classification", "Isotopic label"}, {UNIMOD_Succinyl, "spec_2_hidden", "1"}, {UNIMOD_Succinyl, "spec_2_position", "Any N-term"}, {UNIMOD_Succinyl, "spec_2_site", "N-term"}, {UNIMOD_Succinyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Succinyl, "spec_3_hidden", "1"}, {UNIMOD_Succinyl, "spec_3_position", "Protein N-term"}, {UNIMOD_Succinyl, "spec_3_site", "N-term"}, {UNIMOD_Succinyl_2H_4_, "approved", "1"}, {UNIMOD_Succinyl_2H_4_, "delta_composition", "2H(4) C(4) O(3)"}, {UNIMOD_Succinyl_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Succinyl_2H_4_, "spec_1_hidden", "1"}, {UNIMOD_Succinyl_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Succinyl_2H_4_, "spec_1_site", "K"}, {UNIMOD_Succinyl_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Succinyl_2H_4_, "spec_2_hidden", "1"}, {UNIMOD_Succinyl_2H_4_, "spec_2_position", "Any N-term"}, {UNIMOD_Succinyl_2H_4_, "spec_2_site", "N-term"}, {UNIMOD_Succinyl_13C_4_, "approved", "1"}, {UNIMOD_Succinyl_13C_4_, "delta_composition", "H(4) 13C(4) O(3)"}, {UNIMOD_Succinyl_13C_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Succinyl_13C_4_, "spec_1_hidden", "1"}, {UNIMOD_Succinyl_13C_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Succinyl_13C_4_, "spec_1_site", "K"}, {UNIMOD_Succinyl_13C_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Succinyl_13C_4_, "spec_2_hidden", "1"}, {UNIMOD_Succinyl_13C_4_, "spec_2_position", "Any N-term"}, {UNIMOD_Succinyl_13C_4_, "spec_2_site", "N-term"}, {UNIMOD_Iminobiotin, "approved", "1"}, {UNIMOD_Iminobiotin, "delta_composition", "H(15) C(10) N(3) O S"}, {UNIMOD_Iminobiotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Iminobiotin, "spec_1_hidden", "1"}, {UNIMOD_Iminobiotin, "spec_1_position", "Anywhere"}, {UNIMOD_Iminobiotin, "spec_1_site", "K"}, {UNIMOD_Iminobiotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Iminobiotin, "spec_2_hidden", "1"}, {UNIMOD_Iminobiotin, "spec_2_position", "Any N-term"}, {UNIMOD_Iminobiotin, "spec_2_site", "N-term"}, {UNIMOD_ESP, "approved", "1"}, {UNIMOD_ESP, "delta_composition", "H(26) C(16) N(4) O(2) S"}, {UNIMOD_ESP, "spec_1_classification", "Isotopic label"}, {UNIMOD_ESP, "spec_1_hidden", "1"}, {UNIMOD_ESP, "spec_1_position", "Anywhere"}, {UNIMOD_ESP, "spec_1_site", "K"}, {UNIMOD_ESP, "spec_2_classification", "Isotopic label"}, {UNIMOD_ESP, "spec_2_hidden", "1"}, {UNIMOD_ESP, "spec_2_position", "Any N-term"}, {UNIMOD_ESP, "spec_2_site", "N-term"}, {UNIMOD_ESP_2H_10_, "approved", "1"}, {UNIMOD_ESP_2H_10_, "delta_composition", "H(16) 2H(10) C(16) N(4) O(2) S"}, {UNIMOD_ESP_2H_10_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ESP_2H_10_, "spec_1_hidden", "1"}, {UNIMOD_ESP_2H_10_, "spec_1_position", "Anywhere"}, {UNIMOD_ESP_2H_10_, "spec_1_site", "K"}, {UNIMOD_ESP_2H_10_, "spec_2_classification", "Isotopic label"}, {UNIMOD_ESP_2H_10_, "spec_2_hidden", "1"}, {UNIMOD_ESP_2H_10_, "spec_2_position", "Any N-term"}, {UNIMOD_ESP_2H_10_, "spec_2_site", "N-term"}, {UNIMOD_NHS_LC_Biotin, "approved", "0"}, {UNIMOD_NHS_LC_Biotin, "delta_composition", "H(25) C(16) N(3) O(3) S"}, {UNIMOD_NHS_LC_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NHS_LC_Biotin, "spec_1_hidden", "1"}, {UNIMOD_NHS_LC_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_NHS_LC_Biotin, "spec_1_site", "K"}, {UNIMOD_NHS_LC_Biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_NHS_LC_Biotin, "spec_2_hidden", "1"}, {UNIMOD_NHS_LC_Biotin, "spec_2_position", "Any N-term"}, {UNIMOD_NHS_LC_Biotin, "spec_2_site", "N-term"}, {UNIMOD_EDT_maleimide_PEO_biotin, "approved", "0"}, {UNIMOD_EDT_maleimide_PEO_biotin, "delta_composition", "H(39) C(25) N(5) O(6) S(3)"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_1_hidden", "1"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_1_position", "Anywhere"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_1_site", "S"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_2_hidden", "1"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_2_position", "Anywhere"}, {UNIMOD_EDT_maleimide_PEO_biotin, "spec_2_site", "T"}, {UNIMOD_IMID, "approved", "1"}, {UNIMOD_IMID, "delta_composition", "H(4) C(3) N(2)"}, {UNIMOD_IMID, "spec_1_classification", "Isotopic label"}, {UNIMOD_IMID, "spec_1_hidden", "1"}, {UNIMOD_IMID, "spec_1_position", "Anywhere"}, {UNIMOD_IMID, "spec_1_site", "K"}, {UNIMOD_IMID_2H_4_, "approved", "1"}, {UNIMOD_IMID_2H_4_, "delta_composition", "2H(4) C(3) N(2)"}, {UNIMOD_IMID_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_IMID_2H_4_, "spec_1_hidden", "1"}, {UNIMOD_IMID_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_IMID_2H_4_, "spec_1_site", "K"}, {UNIMOD_Propionamide_2H_3_, "approved", "1"}, {UNIMOD_Propionamide_2H_3_, "delta_composition", "H(2) 2H(3) C(3) N O"}, {UNIMOD_Propionamide_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Propionamide_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Propionamide_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Propionamide_2H_3_, "spec_1_site", "C"}, {UNIMOD_ICAT_C, "approved", "1"}, {UNIMOD_ICAT_C, "delta_composition", "H(17) C(10) N(3) O(3)"}, {UNIMOD_ICAT_C, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_C, "spec_1_hidden", "0"}, {UNIMOD_ICAT_C, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_C, "spec_1_site", "C"}, {UNIMOD_ICAT_C_13C_9_, "approved", "1"}, {UNIMOD_ICAT_C_13C_9_, "delta_composition", "H(17) C 13C(9) N(3) O(3)"}, {UNIMOD_ICAT_C_13C_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_C_13C_9_, "spec_1_hidden", "0"}, {UNIMOD_ICAT_C_13C_9_, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_C_13C_9_, "spec_1_site", "C"}, {UNIMOD_FormylMet, "approved", "1"}, {UNIMOD_FormylMet, "delta_composition", "H(9) C(6) N O(2) S"}, {UNIMOD_FormylMet, "spec_1_classification", "Pre-translational"}, {UNIMOD_FormylMet, "spec_1_hidden", "1"}, {UNIMOD_FormylMet, "spec_1_position", "Protein N-term"}, {UNIMOD_FormylMet, "spec_1_site", "N-term"}, {UNIMOD_Nethylmaleimide, "approved", "1"}, {UNIMOD_Nethylmaleimide, "delta_composition", "H(7) C(6) N O(2)"}, {UNIMOD_Nethylmaleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Nethylmaleimide, "spec_1_hidden", "1"}, {UNIMOD_Nethylmaleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Nethylmaleimide, "spec_1_site", "C"}, {UNIMOD_OxLysBiotinRed, "approved", "0"}, {UNIMOD_OxLysBiotinRed, "delta_composition", "H(26) C(16) N(4) O(3) S"}, {UNIMOD_OxLysBiotinRed, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxLysBiotinRed, "spec_1_hidden", "1"}, {UNIMOD_OxLysBiotinRed, "spec_1_position", "Anywhere"}, {UNIMOD_OxLysBiotinRed, "spec_1_site", "K"}, {UNIMOD_OxLysBiotin, "approved", "0"}, {UNIMOD_OxLysBiotin, "delta_composition", "H(24) C(16) N(4) O(3) S"}, {UNIMOD_OxLysBiotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxLysBiotin, "spec_1_hidden", "1"}, {UNIMOD_OxLysBiotin, "spec_1_position", "Anywhere"}, {UNIMOD_OxLysBiotin, "spec_1_site", "K"}, {UNIMOD_OxProBiotinRed, "approved", "0"}, {UNIMOD_OxProBiotinRed, "delta_composition", "H(29) C(16) N(5) O(3) S"}, {UNIMOD_OxProBiotinRed, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxProBiotinRed, "spec_1_hidden", "1"}, {UNIMOD_OxProBiotinRed, "spec_1_position", "Anywhere"}, {UNIMOD_OxProBiotinRed, "spec_1_site", "P"}, {UNIMOD_OxProBiotin, "approved", "0"}, {UNIMOD_OxProBiotin, "delta_composition", "H(27) C(16) N(5) O(3) S"}, {UNIMOD_OxProBiotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxProBiotin, "spec_1_hidden", "1"}, {UNIMOD_OxProBiotin, "spec_1_position", "Anywhere"}, {UNIMOD_OxProBiotin, "spec_1_site", "P"}, {UNIMOD_OxArgBiotin, "approved", "0"}, {UNIMOD_OxArgBiotin, "delta_composition", "H(22) C(15) N(2) O(3) S"}, {UNIMOD_OxArgBiotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxArgBiotin, "spec_1_hidden", "1"}, {UNIMOD_OxArgBiotin, "spec_1_position", "Anywhere"}, {UNIMOD_OxArgBiotin, "spec_1_site", "R"}, {UNIMOD_OxArgBiotinRed, "approved", "0"}, {UNIMOD_OxArgBiotinRed, "delta_composition", "H(24) C(15) N(2) O(3) S"}, {UNIMOD_OxArgBiotinRed, "spec_1_classification", "Chemical derivative"}, {UNIMOD_OxArgBiotinRed, "spec_1_hidden", "1"}, {UNIMOD_OxArgBiotinRed, "spec_1_position", "Anywhere"}, {UNIMOD_OxArgBiotinRed, "spec_1_site", "R"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "approved", "1"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "delta_composition", "H(34) C(20) N(4) O(4) S(3)"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_1_hidden", "1"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_1_position", "Anywhere"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_1_site", "S"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_2_hidden", "1"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_2_position", "Anywhere"}, {UNIMOD_EDT_iodoacetyl_PEO_biotin, "spec_2_site", "T"}, {UNIMOD_IBTP, "approved", "1"}, {UNIMOD_IBTP, "delta_composition", "H(21) C(22) P"}, {UNIMOD_IBTP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_IBTP, "spec_1_hidden", "1"}, {UNIMOD_IBTP, "spec_1_position", "Anywhere"}, {UNIMOD_IBTP, "spec_1_site", "C"}, {UNIMOD_GG, "approved", "1"}, {UNIMOD_GG, "delta_composition", "H(6) C(4) N(2) O(2)"}, {UNIMOD_GG, "spec_1_classification", "Other"}, {UNIMOD_GG, "spec_1_hidden", "1"}, {UNIMOD_GG, "spec_1_position", "Anywhere"}, {UNIMOD_GG, "spec_1_site", "K"}, {UNIMOD_GG, "spec_2_classification", "Other"}, {UNIMOD_GG, "spec_2_hidden", "1"}, {UNIMOD_GG, "spec_2_position", "Anywhere"}, {UNIMOD_GG, "spec_2_site", "S"}, {UNIMOD_GG, "spec_3_classification", "Other"}, {UNIMOD_GG, "spec_3_hidden", "1"}, {UNIMOD_GG, "spec_3_position", "Anywhere"}, {UNIMOD_GG, "spec_3_site", "T"}, {UNIMOD_GG, "spec_4_classification", "Other"}, {UNIMOD_GG, "spec_4_hidden", "1"}, {UNIMOD_GG, "spec_4_position", "Anywhere"}, {UNIMOD_GG, "spec_4_site", "C"}, {UNIMOD_GG, "spec_5_classification", "Post-translational"}, {UNIMOD_GG, "spec_5_hidden", "1"}, {UNIMOD_GG, "spec_5_position", "Protein N-term"}, {UNIMOD_GG, "spec_5_site", "N-term"}, {UNIMOD_Formyl, "approved", "1"}, {UNIMOD_Formyl, "delta_composition", "C O"}, {UNIMOD_Formyl, "spec_1_classification", "Artefact"}, {UNIMOD_Formyl, "spec_1_hidden", "1"}, {UNIMOD_Formyl, "spec_1_position", "Anywhere"}, {UNIMOD_Formyl, "spec_1_site", "K"}, {UNIMOD_Formyl, "spec_2_classification", "Artefact"}, {UNIMOD_Formyl, "spec_2_hidden", "0"}, {UNIMOD_Formyl, "spec_2_position", "Any N-term"}, {UNIMOD_Formyl, "spec_2_site", "N-term"}, {UNIMOD_Formyl, "spec_3_classification", "Artefact"}, {UNIMOD_Formyl, "spec_3_hidden", "1"}, {UNIMOD_Formyl, "spec_3_position", "Anywhere"}, {UNIMOD_Formyl, "spec_3_site", "S"}, {UNIMOD_Formyl, "spec_4_classification", "Artefact"}, {UNIMOD_Formyl, "spec_4_hidden", "1"}, {UNIMOD_Formyl, "spec_4_position", "Anywhere"}, {UNIMOD_Formyl, "spec_4_site", "T"}, {UNIMOD_Formyl, "spec_5_classification", "Post-translational"}, {UNIMOD_Formyl, "spec_5_hidden", "0"}, {UNIMOD_Formyl, "spec_5_position", "Protein N-term"}, {UNIMOD_Formyl, "spec_5_site", "N-term"}, {UNIMOD_ICAT_H, "approved", "1"}, {UNIMOD_ICAT_H, "delta_composition", "H(20) C(15) N O(6) Cl"}, {UNIMOD_ICAT_H, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_H, "spec_1_hidden", "1"}, {UNIMOD_ICAT_H, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_H, "spec_1_site", "C"}, {UNIMOD_ICAT_H_13C_6_, "approved", "1"}, {UNIMOD_ICAT_H_13C_6_, "delta_composition", "H(20) C(9) 13C(6) N O(6) Cl"}, {UNIMOD_ICAT_H_13C_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICAT_H_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_ICAT_H_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_ICAT_H_13C_6_, "spec_1_site", "C"}, {UNIMOD_Xlink_DTSSP_88_, "approved", "1"}, {UNIMOD_Xlink_DTSSP_88_, "delta_composition", "H(4) C(3) O S"}, {UNIMOD_Xlink_DTSSP_88_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_88_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DTSSP_88_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DTSSP_88_, "spec_1_site", "K"}, {UNIMOD_Xlink_DTSSP_88_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_88_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DTSSP_88_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DTSSP_88_, "spec_2_site", "N-term"}, {UNIMOD_Fluoro, "approved", "1"}, {UNIMOD_Fluoro, "delta_composition", "H(-1) F"}, {UNIMOD_Fluoro, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Fluoro, "spec_1_hidden", "1"}, {UNIMOD_Fluoro, "spec_1_position", "Anywhere"}, {UNIMOD_Fluoro, "spec_1_site", "F"}, {UNIMOD_Fluoro, "spec_2_classification", "Non-standard residue"}, {UNIMOD_Fluoro, "spec_2_hidden", "1"}, {UNIMOD_Fluoro, "spec_2_position", "Anywhere"}, {UNIMOD_Fluoro, "spec_2_site", "W"}, {UNIMOD_Fluoro, "spec_3_classification", "Non-standard residue"}, {UNIMOD_Fluoro, "spec_3_hidden", "1"}, {UNIMOD_Fluoro, "spec_3_position", "Anywhere"}, {UNIMOD_Fluoro, "spec_3_site", "Y"}, {UNIMOD_Fluoro, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Fluoro, "spec_4_hidden", "1"}, {UNIMOD_Fluoro, "spec_4_position", "Anywhere"}, {UNIMOD_Fluoro, "spec_4_site", "A"}, {UNIMOD_Fluorescein, "approved", "1"}, {UNIMOD_Fluorescein, "delta_composition", "H(13) C(22) N O(6)"}, {UNIMOD_Fluorescein, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Fluorescein, "spec_1_hidden", "1"}, {UNIMOD_Fluorescein, "spec_1_position", "Anywhere"}, {UNIMOD_Fluorescein, "spec_1_site", "C"}, {UNIMOD_Iodo, "approved", "1"}, {UNIMOD_Iodo, "delta_composition", "H(-1) I"}, {UNIMOD_Iodo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Iodo, "spec_1_hidden", "1"}, {UNIMOD_Iodo, "spec_1_position", "Anywhere"}, {UNIMOD_Iodo, "spec_1_site", "Y"}, {UNIMOD_Iodo, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Iodo, "spec_2_hidden", "1"}, {UNIMOD_Iodo, "spec_2_position", "Anywhere"}, {UNIMOD_Iodo, "spec_2_site", "H"}, {UNIMOD_Diiodo, "approved", "1"}, {UNIMOD_Diiodo, "delta_composition", "H(-2) I(2)"}, {UNIMOD_Diiodo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Diiodo, "spec_1_hidden", "1"}, {UNIMOD_Diiodo, "spec_1_position", "Anywhere"}, {UNIMOD_Diiodo, "spec_1_site", "Y"}, {UNIMOD_Diiodo, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Diiodo, "spec_2_hidden", "1"}, {UNIMOD_Diiodo, "spec_2_position", "Anywhere"}, {UNIMOD_Diiodo, "spec_2_site", "H"}, {UNIMOD_Triiodo, "approved", "1"}, {UNIMOD_Triiodo, "delta_composition", "H(-3) I(3)"}, {UNIMOD_Triiodo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Triiodo, "spec_1_hidden", "1"}, {UNIMOD_Triiodo, "spec_1_position", "Anywhere"}, {UNIMOD_Triiodo, "spec_1_site", "Y"}, {UNIMOD_Myristoleyl, "approved", "1"}, {UNIMOD_Myristoleyl, "delta_composition", "H(24) C(14) O"}, {UNIMOD_Myristoleyl, "spec_1_classification", "Co-translational"}, {UNIMOD_Myristoleyl, "spec_1_hidden", "1"}, {UNIMOD_Myristoleyl, "spec_1_position", "Protein N-term"}, {UNIMOD_Myristoleyl, "spec_1_site", "G"}, {UNIMOD_Myristoyl_Delta_H__4_, "approved", "1"}, {UNIMOD_Myristoyl_Delta_H__4_, "delta_composition", "H(22) C(14) O"}, {UNIMOD_Myristoyl_Delta_H__4_, "spec_1_classification", "Co-translational"}, {UNIMOD_Myristoyl_Delta_H__4_, "spec_1_hidden", "1"}, {UNIMOD_Myristoyl_Delta_H__4_, "spec_1_position", "Protein N-term"}, {UNIMOD_Myristoyl_Delta_H__4_, "spec_1_site", "G"}, {UNIMOD_Benzoyl, "approved", "1"}, {UNIMOD_Benzoyl, "delta_composition", "H(4) C(7) O"}, {UNIMOD_Benzoyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Benzoyl, "spec_1_hidden", "1"}, {UNIMOD_Benzoyl, "spec_1_position", "Anywhere"}, {UNIMOD_Benzoyl, "spec_1_site", "K"}, {UNIMOD_Benzoyl, "spec_2_classification", "Isotopic label"}, {UNIMOD_Benzoyl, "spec_2_hidden", "1"}, {UNIMOD_Benzoyl, "spec_2_position", "Any N-term"}, {UNIMOD_Benzoyl, "spec_2_site", "N-term"}, {UNIMOD_Hex_5_HexNAc_2_, "approved", "1"}, {UNIMOD_Hex_5_HexNAc_2_, "delta_composition", "Hex(5) HexNAc(2)"}, {UNIMOD_Hex_5_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Dansyl, "approved", "1"}, {UNIMOD_Dansyl, "delta_composition", "H(11) C(12) N O(2) S"}, {UNIMOD_Dansyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Dansyl, "spec_1_hidden", "1"}, {UNIMOD_Dansyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dansyl, "spec_1_site", "K"}, {UNIMOD_Dansyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Dansyl, "spec_2_hidden", "1"}, {UNIMOD_Dansyl, "spec_2_position", "Any N-term"}, {UNIMOD_Dansyl, "spec_2_site", "N-term"}, {UNIMOD_a_type_ion, "approved", "0"}, {UNIMOD_a_type_ion, "delta_composition", "H(-2) C(-1) O(-2)"}, {UNIMOD_a_type_ion, "spec_1_classification", "Other"}, {UNIMOD_a_type_ion, "spec_1_hidden", "1"}, {UNIMOD_a_type_ion, "spec_1_position", "Any C-term"}, {UNIMOD_a_type_ion, "spec_1_site", "C-term"}, {UNIMOD_Amidine, "approved", "1"}, {UNIMOD_Amidine, "delta_composition", "H(3) C(2) N"}, {UNIMOD_Amidine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Amidine, "spec_1_hidden", "1"}, {UNIMOD_Amidine, "spec_1_position", "Anywhere"}, {UNIMOD_Amidine, "spec_1_site", "K"}, {UNIMOD_Amidine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Amidine, "spec_2_hidden", "1"}, {UNIMOD_Amidine, "spec_2_position", "Any N-term"}, {UNIMOD_Amidine, "spec_2_site", "N-term"}, {UNIMOD_HexNAc_1_dHex_1_, "approved", "1"}, {UNIMOD_HexNAc_1_dHex_1_, "delta_composition", "dHex HexNAc"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_1_site", "N"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_site", "T"}, {UNIMOD_HexNAc_1_dHex_1_, "spec_2_site", "S"}, {UNIMOD_HexNAc_2_, "approved", "1"}, {UNIMOD_HexNAc_2_, "delta_composition", "HexNAc(2)"}, {UNIMOD_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_HexNAc_2_, "spec_2_site", "T"}, {UNIMOD_HexNAc_2_, "spec_2_site", "S"}, {UNIMOD_Hex_3_, "approved", "1"}, {UNIMOD_Hex_3_, "delta_composition", "Hex(3)"}, {UNIMOD_Hex_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_, "spec_1_site", "N"}, {UNIMOD_Hex_3_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_, "spec_2_site", "T"}, {UNIMOD_Hex_3_, "spec_2_site", "S"}, {UNIMOD_HexNAc_1_dHex_2_, "approved", "1"}, {UNIMOD_HexNAc_1_dHex_2_, "delta_composition", "dHex(2) HexNAc"}, {UNIMOD_HexNAc_1_dHex_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc_1_dHex_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_dHex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_dHex_2_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "delta_composition", "dHex Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_, "spec_2_site", "S"}, {UNIMOD_HexNAc_2_dHex_1_, "approved", "1"}, {UNIMOD_HexNAc_2_dHex_1_, "delta_composition", "dHex HexNAc(2)"}, {UNIMOD_HexNAc_2_dHex_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc_2_dHex_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_dHex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_dHex_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_2_, "delta_composition", "Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_, "spec_2_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "delta_composition", "Hex HexNAc NeuAc"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_, "spec_2_site", "S"}, {UNIMOD_HexNAc_2_dHex_2_, "approved", "1"}, {UNIMOD_HexNAc_2_dHex_2_, "delta_composition", "dHex(2) HexNAc(2)"}, {UNIMOD_HexNAc_2_dHex_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_HexNAc_2_dHex_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_dHex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_dHex_2_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "delta_composition", "Pent Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "delta_composition", "dHex Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_, "spec_2_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_, "approved", "1"}, {UNIMOD_Hex_2_HexNAc_2_, "delta_composition", "Hex(2) HexNAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_, "spec_2_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "approved", "1"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "delta_composition", "Pent Hex(3) HexNAc"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "delta_composition", "Pent dHex Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "delta_composition", "dHex(2) Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_, "spec_2_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "approved", "1"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "delta_composition", "Pent Hex(2) HexNAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "approved", "1"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "delta_composition", "dHex Hex(2) HexNAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_1_site", "N"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_dHex_1_, "spec_2_site", "S"}, {UNIMOD_Hex_3_HexNAc_2_, "approved", "1"}, {UNIMOD_Hex_3_HexNAc_2_, "delta_composition", "Hex(3) HexNAc(2)"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_site", "T"}, {UNIMOD_Hex_3_HexNAc_2_, "spec_2_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "approved", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "delta_composition", "Hex HexNAc NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_, "spec_2_site", "S"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "approved", "1"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "delta_composition", "H O(3) P Hex(3) HexNAc(2)"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_Phos_1_, "spec_1_site", "N"}, {UNIMOD_Delta_S__1_Se_1_, "approved", "1"}, {UNIMOD_Delta_S__1_Se_1_, "delta_composition", "S(-1) Se"}, {UNIMOD_Delta_S__1_Se_1_, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Delta_S__1_Se_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_S__1_Se_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_S__1_Se_1_, "spec_1_site", "M"}, {UNIMOD_Delta_S__1_Se_1_, "spec_2_classification", "Non-standard residue"}, {UNIMOD_Delta_S__1_Se_1_, "spec_2_hidden", "1"}, {UNIMOD_Delta_S__1_Se_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_S__1_Se_1_, "spec_2_site", "C"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "approved", "1"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "delta_composition", "H(-1) N(-1) 18O"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_1_N__1_18O_1_, "spec_1_site", "N"}, {UNIMOD_NBS_13C_6_, "approved", "0"}, {UNIMOD_NBS_13C_6_, "delta_composition", "H(3) 13C(6) N O(2) S"}, {UNIMOD_NBS_13C_6_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NBS_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_NBS_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_NBS_13C_6_, "spec_1_site", "W"}, {UNIMOD_NBS, "approved", "0"}, {UNIMOD_NBS, "delta_composition", "H(3) C(6) N O(2) S"}, {UNIMOD_NBS, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NBS, "spec_1_hidden", "1"}, {UNIMOD_NBS, "spec_1_position", "Anywhere"}, {UNIMOD_NBS, "spec_1_site", "W"}, {UNIMOD_BHT, "approved", "1"}, {UNIMOD_BHT, "delta_composition", "H(22) C(15) O"}, {UNIMOD_BHT, "spec_1_classification", "Other"}, {UNIMOD_BHT, "spec_1_hidden", "1"}, {UNIMOD_BHT, "spec_1_position", "Anywhere"}, {UNIMOD_BHT, "spec_1_site", "K"}, {UNIMOD_BHT, "spec_2_classification", "Other"}, {UNIMOD_BHT, "spec_2_hidden", "1"}, {UNIMOD_BHT, "spec_2_position", "Anywhere"}, {UNIMOD_BHT, "spec_2_site", "H"}, {UNIMOD_BHT, "spec_3_classification", "Other"}, {UNIMOD_BHT, "spec_3_hidden", "1"}, {UNIMOD_BHT, "spec_3_position", "Anywhere"}, {UNIMOD_BHT, "spec_3_site", "C"}, {UNIMOD_DAET, "approved", "1"}, {UNIMOD_DAET, "delta_composition", "H(9) C(4) N O(-1) S"}, {UNIMOD_DAET, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DAET, "spec_1_hidden", "1"}, {UNIMOD_DAET, "spec_1_position", "Anywhere"}, {UNIMOD_DAET, "spec_1_site", "S"}, {UNIMOD_DAET, "spec_2_classification", "Chemical derivative"}, {UNIMOD_DAET, "spec_2_hidden", "1"}, {UNIMOD_DAET, "spec_2_position", "Anywhere"}, {UNIMOD_DAET, "spec_2_site", "T"}, {UNIMOD_Label_13C_9_, "approved", "1"}, {UNIMOD_Label_13C_9_, "delta_composition", "C(-9) 13C(9)"}, {UNIMOD_Label_13C_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_9_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_9_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_9_, "spec_1_site", "Y"}, {UNIMOD_Label_13C_9_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_13C_9_, "spec_2_hidden", "1"}, {UNIMOD_Label_13C_9_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_13C_9_, "spec_2_site", "F"}, {UNIMOD_Label_13C_9__Phospho, "approved", "1"}, {UNIMOD_Label_13C_9__Phospho, "delta_composition", "H C(-9) 13C(9) O(3) P"}, {UNIMOD_Label_13C_9__Phospho, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_9__Phospho, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_9__Phospho, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_9__Phospho, "spec_1_site", "Y"}, {UNIMOD_HPG, "approved", "1"}, {UNIMOD_HPG, "delta_composition", "H(4) C(8) O(2)"}, {UNIMOD_HPG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_HPG, "spec_1_hidden", "1"}, {UNIMOD_HPG, "spec_1_position", "Anywhere"}, {UNIMOD_HPG, "spec_1_site", "R"}, {UNIMOD_2HPG, "approved", "1"}, {UNIMOD_2HPG, "delta_composition", "H(10) C(16) O(5)"}, {UNIMOD_2HPG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_2HPG, "spec_1_hidden", "1"}, {UNIMOD_2HPG, "spec_1_position", "Anywhere"}, {UNIMOD_2HPG, "spec_1_site", "R"}, {UNIMOD_Label_13C_6_, "approved", "1"}, {UNIMOD_Label_13C_6_, "delta_composition", "C(-6) 13C(6)"}, {UNIMOD_Label_13C_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_, "spec_1_site", "R"}, {UNIMOD_Label_13C_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_, "spec_2_hidden", "1"}, {UNIMOD_Label_13C_6_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_13C_6_, "spec_2_site", "K"}, {UNIMOD_Label_13C_6_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_, "spec_3_hidden", "1"}, {UNIMOD_Label_13C_6_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_13C_6_, "spec_3_site", "L"}, {UNIMOD_Label_13C_6_, "spec_5_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_, "spec_5_hidden", "1"}, {UNIMOD_Label_13C_6_, "spec_5_position", "Anywhere"}, {UNIMOD_Label_13C_6_, "spec_5_site", "I"}, {UNIMOD_Label_18O_2_, "approved", "1"}, {UNIMOD_Label_18O_2_, "delta_composition", "O(-2) 18O(2)"}, {UNIMOD_Label_18O_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_18O_2_, "spec_1_hidden", "0"}, {UNIMOD_Label_18O_2_, "spec_1_position", "Any C-term"}, {UNIMOD_Label_18O_2_, "spec_1_site", "C-term"}, {UNIMOD_AccQTag, "approved", "1"}, {UNIMOD_AccQTag, "delta_composition", "H(6) C(10) N(2) O"}, {UNIMOD_AccQTag, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AccQTag, "spec_1_hidden", "1"}, {UNIMOD_AccQTag, "spec_1_position", "Anywhere"}, {UNIMOD_AccQTag, "spec_1_site", "K"}, {UNIMOD_AccQTag, "spec_2_classification", "Chemical derivative"}, {UNIMOD_AccQTag, "spec_2_hidden", "1"}, {UNIMOD_AccQTag, "spec_2_position", "Any N-term"}, {UNIMOD_AccQTag, "spec_2_site", "N-term"}, {UNIMOD_QAT, "approved", "1"}, {UNIMOD_QAT, "delta_composition", "H(19) C(9) N(2) O"}, {UNIMOD_QAT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_QAT, "spec_1_hidden", "1"}, {UNIMOD_QAT, "spec_1_position", "Anywhere"}, {UNIMOD_QAT, "spec_1_site", "C"}, {UNIMOD_QAT_2H_3_, "approved", "1"}, {UNIMOD_QAT_2H_3_, "delta_composition", "H(16) 2H(3) C(9) N(2) O"}, {UNIMOD_QAT_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_QAT_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_QAT_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_QAT_2H_3_, "spec_1_site", "C"}, {UNIMOD_EQAT, "approved", "1"}, {UNIMOD_EQAT, "delta_composition", "H(20) C(10) N(2) O"}, {UNIMOD_EQAT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EQAT, "spec_1_hidden", "1"}, {UNIMOD_EQAT, "spec_1_position", "Anywhere"}, {UNIMOD_EQAT, "spec_1_site", "C"}, {UNIMOD_EQAT_2H_5_, "approved", "1"}, {UNIMOD_EQAT_2H_5_, "delta_composition", "H(15) 2H(5) C(10) N(2) O"}, {UNIMOD_EQAT_2H_5_, "spec_1_classification", "Isotopic label"}, {UNIMOD_EQAT_2H_5_, "spec_1_hidden", "1"}, {UNIMOD_EQAT_2H_5_, "spec_1_position", "Anywhere"}, {UNIMOD_EQAT_2H_5_, "spec_1_site", "C"}, {UNIMOD_Dimethyl_2H_4_, "approved", "1"}, {UNIMOD_Dimethyl_2H_4_, "delta_composition", "2H(4) C(2)"}, {UNIMOD_Dimethyl_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_, "spec_1_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_4_, "spec_1_site", "K"}, {UNIMOD_Dimethyl_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_, "spec_2_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_, "spec_2_position", "Any N-term"}, {UNIMOD_Dimethyl_2H_4_, "spec_2_site", "N-term"}, {UNIMOD_Dimethyl_2H_4_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_, "spec_3_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_, "spec_3_position", "Protein N-term"}, {UNIMOD_Dimethyl_2H_4_, "spec_3_site", "N-term"}, {UNIMOD_Dimethyl_2H_4_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_, "spec_4_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_, "spec_4_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_4_, "spec_4_site", "R"}, {UNIMOD_Ethanedithiol, "approved", "1"}, {UNIMOD_Ethanedithiol, "delta_composition", "H(4) C(2) O(-1) S(2)"}, {UNIMOD_Ethanedithiol, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ethanedithiol, "spec_1_hidden", "1"}, {UNIMOD_Ethanedithiol, "spec_1_position", "Anywhere"}, {UNIMOD_Ethanedithiol, "spec_1_site", "S"}, {UNIMOD_Ethanedithiol, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Ethanedithiol, "spec_2_hidden", "1"}, {UNIMOD_Ethanedithiol, "spec_2_position", "Anywhere"}, {UNIMOD_Ethanedithiol, "spec_2_site", "T"}, {UNIMOD_Delta_H_6_C_6_O_1_, "approved", "1"}, {UNIMOD_Delta_H_6_C_6_O_1_, "delta_composition", "H(6) C(6) O"}, {UNIMOD_Delta_H_6_C_6_O_1_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_6_C_6_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_6_C_6_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_6_C_6_O_1_, "spec_1_site", "K"}, {UNIMOD_Delta_H_4_C_3_O_1_, "approved", "1"}, {UNIMOD_Delta_H_4_C_3_O_1_, "delta_composition", "H(4) C(3) O"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_1_site", "C"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_2_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_2_site", "H"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_3_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_3_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_3_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_3_site", "K"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_4_classification", "Artefact"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_4_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_4_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_O_1_, "spec_4_site", "R"}, {UNIMOD_Delta_H_2_C_3_, "approved", "1"}, {UNIMOD_Delta_H_2_C_3_, "delta_composition", "H(2) C(3)"}, {UNIMOD_Delta_H_2_C_3_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_2_C_3_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_2_C_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_3_, "spec_1_site", "K"}, {UNIMOD_Delta_H_4_C_6_, "approved", "1"}, {UNIMOD_Delta_H_4_C_6_, "delta_composition", "H(4) C(6)"}, {UNIMOD_Delta_H_4_C_6_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_4_C_6_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_6_, "spec_1_site", "K"}, {UNIMOD_Delta_H_8_C_6_O_2_, "approved", "1"}, {UNIMOD_Delta_H_8_C_6_O_2_, "delta_composition", "H(8) C(6) O(2)"}, {UNIMOD_Delta_H_8_C_6_O_2_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_8_C_6_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_8_C_6_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_8_C_6_O_2_, "spec_1_site", "K"}, {UNIMOD_NEIAA, "approved", "1"}, {UNIMOD_NEIAA, "delta_composition", "H(7) C(4) N O"}, {UNIMOD_NEIAA, "spec_1_classification", "Isotopic label"}, {UNIMOD_NEIAA, "spec_1_hidden", "1"}, {UNIMOD_NEIAA, "spec_1_position", "Anywhere"}, {UNIMOD_NEIAA, "spec_1_site", "C"}, {UNIMOD_NEIAA, "spec_2_classification", "Isotopic label"}, {UNIMOD_NEIAA, "spec_2_hidden", "1"}, {UNIMOD_NEIAA, "spec_2_position", "Anywhere"}, {UNIMOD_NEIAA, "spec_2_site", "Y"}, {UNIMOD_NEIAA_2H_5_, "approved", "1"}, {UNIMOD_NEIAA_2H_5_, "delta_composition", "H(2) 2H(5) C(4) N O"}, {UNIMOD_NEIAA_2H_5_, "spec_1_classification", "Isotopic label"}, {UNIMOD_NEIAA_2H_5_, "spec_1_hidden", "1"}, {UNIMOD_NEIAA_2H_5_, "spec_1_position", "Anywhere"}, {UNIMOD_NEIAA_2H_5_, "spec_1_site", "C"}, {UNIMOD_NEIAA_2H_5_, "spec_2_classification", "Isotopic label"}, {UNIMOD_NEIAA_2H_5_, "spec_2_hidden", "1"}, {UNIMOD_NEIAA_2H_5_, "spec_2_position", "Anywhere"}, {UNIMOD_NEIAA_2H_5_, "spec_2_site", "Y"}, {UNIMOD_ADP_Ribosyl, "approved", "1"}, {UNIMOD_ADP_Ribosyl, "delta_composition", "H(13) C(10) N(5) O(9) P(2) Pent"}, {UNIMOD_ADP_Ribosyl, "spec_1_classification", "Other glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_1_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_1_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_1_site", "R"}, {UNIMOD_ADP_Ribosyl, "spec_2_classification", "Other glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_2_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_2_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_2_site", "C"}, {UNIMOD_ADP_Ribosyl, "spec_3_classification", "N-linked glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_3_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_3_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_3_site", "N"}, {UNIMOD_ADP_Ribosyl, "spec_4_classification", "O-linked glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_4_classification", "O-linked glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_4_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_4_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_4_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_4_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_4_site", "T"}, {UNIMOD_ADP_Ribosyl, "spec_4_site", "S"}, {UNIMOD_ADP_Ribosyl, "spec_5_classification", "Other glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_5_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_5_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_5_site", "E"}, {UNIMOD_ADP_Ribosyl, "spec_6_classification", "Other glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_6_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_6_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_6_site", "K"}, {UNIMOD_ADP_Ribosyl, "spec_7_classification", "Other glycosylation"}, {UNIMOD_ADP_Ribosyl, "spec_7_hidden", "1"}, {UNIMOD_ADP_Ribosyl, "spec_7_position", "Anywhere"}, {UNIMOD_ADP_Ribosyl, "spec_7_site", "D"}, {UNIMOD_iTRAQ4plex, "approved", "0"}, {UNIMOD_iTRAQ4plex, "delta_composition", "H(12) C(4) 13C(3) N 15N O"}, {UNIMOD_iTRAQ4plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_1_hidden", "0"}, {UNIMOD_iTRAQ4plex, "spec_1_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_1_site", "K"}, {UNIMOD_iTRAQ4plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_2_hidden", "0"}, {UNIMOD_iTRAQ4plex, "spec_2_position", "Any N-term"}, {UNIMOD_iTRAQ4plex, "spec_2_site", "N-term"}, {UNIMOD_iTRAQ4plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_3_hidden", "0"}, {UNIMOD_iTRAQ4plex, "spec_3_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_3_site", "Y"}, {UNIMOD_iTRAQ4plex, "spec_4_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_4_hidden", "1"}, {UNIMOD_iTRAQ4plex, "spec_4_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_4_site", "H"}, {UNIMOD_iTRAQ4plex, "spec_5_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_5_hidden", "1"}, {UNIMOD_iTRAQ4plex, "spec_5_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_5_site", "S"}, {UNIMOD_iTRAQ4plex, "spec_6_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_6_hidden", "1"}, {UNIMOD_iTRAQ4plex, "spec_6_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_6_site", "T"}, {UNIMOD_iTRAQ4plex, "spec_7_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_7_hidden", "1"}, {UNIMOD_iTRAQ4plex, "spec_7_position", "Protein N-term"}, {UNIMOD_iTRAQ4plex, "spec_7_site", "N-term"}, {UNIMOD_iTRAQ4plex, "spec_8_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex, "spec_8_hidden", "1"}, {UNIMOD_iTRAQ4plex, "spec_8_position", "Anywhere"}, {UNIMOD_iTRAQ4plex, "spec_8_site", "C"}, {UNIMOD_IGBP, "approved", "1"}, {UNIMOD_IGBP, "delta_composition", "H(13) C(12) N(2) O(2) Br"}, {UNIMOD_IGBP, "spec_1_classification", "Isotopic label"}, {UNIMOD_IGBP, "spec_1_hidden", "1"}, {UNIMOD_IGBP, "spec_1_position", "Anywhere"}, {UNIMOD_IGBP, "spec_1_site", "C"}, {UNIMOD_Crotonaldehyde, "approved", "1"}, {UNIMOD_Crotonaldehyde, "delta_composition", "H(6) C(4) O"}, {UNIMOD_Crotonaldehyde, "spec_1_classification", "Other"}, {UNIMOD_Crotonaldehyde, "spec_1_hidden", "1"}, {UNIMOD_Crotonaldehyde, "spec_1_position", "Anywhere"}, {UNIMOD_Crotonaldehyde, "spec_1_site", "C"}, {UNIMOD_Crotonaldehyde, "spec_2_classification", "Other"}, {UNIMOD_Crotonaldehyde, "spec_2_hidden", "1"}, {UNIMOD_Crotonaldehyde, "spec_2_position", "Anywhere"}, {UNIMOD_Crotonaldehyde, "spec_2_site", "H"}, {UNIMOD_Crotonaldehyde, "spec_3_classification", "Other"}, {UNIMOD_Crotonaldehyde, "spec_3_hidden", "1"}, {UNIMOD_Crotonaldehyde, "spec_3_position", "Anywhere"}, {UNIMOD_Crotonaldehyde, "spec_3_site", "K"}, {UNIMOD_Delta_H_2_C_2_, "approved", "1"}, {UNIMOD_Delta_H_2_C_2_, "delta_composition", "H(2) C(2)"}, {UNIMOD_Delta_H_2_C_2_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_2_C_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_2_C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_2_, "spec_1_site", "H"}, {UNIMOD_Delta_H_2_C_2_, "spec_2_classification", "Other"}, {UNIMOD_Delta_H_2_C_2_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_2_C_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_2_, "spec_2_site", "K"}, {UNIMOD_Delta_H_2_C_2_, "spec_3_classification", "Other"}, {UNIMOD_Delta_H_2_C_2_, "spec_3_hidden", "1"}, {UNIMOD_Delta_H_2_C_2_, "spec_3_position", "Protein N-term"}, {UNIMOD_Delta_H_2_C_2_, "spec_3_site", "N-term"}, {UNIMOD_Delta_H_2_C_2_, "spec_4_classification", "Other"}, {UNIMOD_Delta_H_2_C_2_, "spec_4_hidden", "1"}, {UNIMOD_Delta_H_2_C_2_, "spec_4_position", "Any N-term"}, {UNIMOD_Delta_H_2_C_2_, "spec_4_site", "N-term"}, {UNIMOD_Delta_H_4_C_2_, "approved", "1"}, {UNIMOD_Delta_H_4_C_2_, "delta_composition", "H(4) C(2)"}, {UNIMOD_Delta_H_4_C_2_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_4_C_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_2_, "spec_1_site", "H"}, {UNIMOD_Delta_H_4_C_2_, "spec_2_classification", "Other"}, {UNIMOD_Delta_H_4_C_2_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_4_C_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_2_, "spec_2_site", "K"}, {UNIMOD_Delta_H_4_C_2_, "spec_3_classification", "Other"}, {UNIMOD_Delta_H_4_C_2_, "spec_3_hidden", "1"}, {UNIMOD_Delta_H_4_C_2_, "spec_3_position", "Any N-term"}, {UNIMOD_Delta_H_4_C_2_, "spec_3_site", "N-term"}, {UNIMOD_Delta_H_4_C_3_, "approved", "1"}, {UNIMOD_Delta_H_4_C_3_, "delta_composition", "H(4) C(3)"}, {UNIMOD_Delta_H_4_C_3_, "spec_1_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_, "spec_1_site", "H"}, {UNIMOD_Delta_H_4_C_3_, "spec_2_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_3_, "spec_2_site", "K"}, {UNIMOD_Delta_H_4_C_3_, "spec_3_classification", "Other"}, {UNIMOD_Delta_H_4_C_3_, "spec_3_hidden", "1"}, {UNIMOD_Delta_H_4_C_3_, "spec_3_position", "Protein N-term"}, {UNIMOD_Delta_H_4_C_3_, "spec_3_site", "N-term"}, {UNIMOD_Label_18O_1_, "approved", "1"}, {UNIMOD_Label_18O_1_, "delta_composition", "O(-1) 18O"}, {UNIMOD_Label_18O_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_18O_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_18O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_18O_1_, "spec_1_site", "S"}, {UNIMOD_Label_18O_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_18O_1_, "spec_2_hidden", "1"}, {UNIMOD_Label_18O_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_18O_1_, "spec_2_site", "T"}, {UNIMOD_Label_18O_1_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_18O_1_, "spec_3_hidden", "1"}, {UNIMOD_Label_18O_1_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_18O_1_, "spec_3_site", "Y"}, {UNIMOD_Label_18O_1_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Label_18O_1_, "spec_4_hidden", "0"}, {UNIMOD_Label_18O_1_, "spec_4_position", "Any C-term"}, {UNIMOD_Label_18O_1_, "spec_4_site", "C-term"}, {UNIMOD_Label_13C_6_15N_2_, "approved", "1"}, {UNIMOD_Label_13C_6_15N_2_, "delta_composition", "C(-6) 13C(6) N(-2) 15N(2)"}, {UNIMOD_Label_13C_6_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_2_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_2_, "spec_1_site", "K"}, {UNIMOD_Thiophospho, "approved", "1"}, {UNIMOD_Thiophospho, "delta_composition", "H O(2) P S"}, {UNIMOD_Thiophospho, "spec_1_classification", "Other"}, {UNIMOD_Thiophospho, "spec_1_hidden", "1"}, {UNIMOD_Thiophospho, "spec_1_position", "Anywhere"}, {UNIMOD_Thiophospho, "spec_1_site", "S"}, {UNIMOD_Thiophospho, "spec_2_classification", "Other"}, {UNIMOD_Thiophospho, "spec_2_hidden", "1"}, {UNIMOD_Thiophospho, "spec_2_position", "Anywhere"}, {UNIMOD_Thiophospho, "spec_2_site", "T"}, {UNIMOD_Thiophospho, "spec_3_classification", "Other"}, {UNIMOD_Thiophospho, "spec_3_hidden", "1"}, {UNIMOD_Thiophospho, "spec_3_position", "Anywhere"}, {UNIMOD_Thiophospho, "spec_3_site", "Y"}, {UNIMOD_SPITC, "approved", "1"}, {UNIMOD_SPITC, "delta_composition", "H(5) C(7) N O(3) S(2)"}, {UNIMOD_SPITC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_SPITC, "spec_1_hidden", "1"}, {UNIMOD_SPITC, "spec_1_position", "Anywhere"}, {UNIMOD_SPITC, "spec_1_site", "K"}, {UNIMOD_SPITC, "spec_2_classification", "Chemical derivative"}, {UNIMOD_SPITC, "spec_2_hidden", "1"}, {UNIMOD_SPITC, "spec_2_position", "Any N-term"}, {UNIMOD_SPITC, "spec_2_site", "N-term"}, {UNIMOD_Label_2H_3_, "approved", "1"}, {UNIMOD_Label_2H_3_, "delta_composition", "H(-3) 2H(3)"}, {UNIMOD_Label_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_3_, "spec_1_site", "L"}, {UNIMOD_Label_2H_3_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_2H_3_, "spec_2_hidden", "1"}, {UNIMOD_Label_2H_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_2H_3_, "spec_2_site", "M"}, {UNIMOD_PET, "approved", "1"}, {UNIMOD_PET, "delta_composition", "H(7) C(7) N O(-1) S"}, {UNIMOD_PET, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PET, "spec_1_hidden", "1"}, {UNIMOD_PET, "spec_1_position", "Anywhere"}, {UNIMOD_PET, "spec_1_site", "S"}, {UNIMOD_PET, "spec_2_classification", "Chemical derivative"}, {UNIMOD_PET, "spec_2_hidden", "1"}, {UNIMOD_PET, "spec_2_position", "Anywhere"}, {UNIMOD_PET, "spec_2_site", "T"}, {UNIMOD_Label_13C_6_15N_4_, "approved", "1"}, {UNIMOD_Label_13C_6_15N_4_, "delta_composition", "C(-6) 13C(6) N(-4) 15N(4)"}, {UNIMOD_Label_13C_6_15N_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_4_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_4_, "spec_1_site", "R"}, {UNIMOD_Label_13C_5_15N_1_, "approved", "1"}, {UNIMOD_Label_13C_5_15N_1_, "delta_composition", "C(-5) 13C(5) N(-1) 15N"}, {UNIMOD_Label_13C_5_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_5_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_5_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_5_15N_1_, "spec_1_site", "V"}, {UNIMOD_Label_13C_5_15N_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_13C_5_15N_1_, "spec_2_hidden", "1"}, {UNIMOD_Label_13C_5_15N_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_13C_5_15N_1_, "spec_2_site", "P"}, {UNIMOD_Label_13C_5_15N_1_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_13C_5_15N_1_, "spec_3_hidden", "1"}, {UNIMOD_Label_13C_5_15N_1_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_13C_5_15N_1_, "spec_3_site", "M"}, {UNIMOD_Label_13C_5_15N_1_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Label_13C_5_15N_1_, "spec_4_hidden", "1"}, {UNIMOD_Label_13C_5_15N_1_, "spec_4_position", "Anywhere"}, {UNIMOD_Label_13C_5_15N_1_, "spec_4_site", "E"}, {UNIMOD_Label_13C_9_15N_1_, "approved", "1"}, {UNIMOD_Label_13C_9_15N_1_, "delta_composition", "C(-9) 13C(9) N(-1) 15N"}, {UNIMOD_Label_13C_9_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_9_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_9_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_9_15N_1_, "spec_1_site", "F"}, {UNIMOD_Cytopiloyne, "approved", "1"}, {UNIMOD_Cytopiloyne, "delta_composition", "H(22) C(19) O(7)"}, {UNIMOD_Cytopiloyne, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_1_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_1_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_1_site", "C"}, {UNIMOD_Cytopiloyne, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_2_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_2_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_2_site", "K"}, {UNIMOD_Cytopiloyne, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_3_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_3_position", "Any N-term"}, {UNIMOD_Cytopiloyne, "spec_3_site", "N-term"}, {UNIMOD_Cytopiloyne, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_4_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_4_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_4_site", "P"}, {UNIMOD_Cytopiloyne, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_5_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_5_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_5_site", "R"}, {UNIMOD_Cytopiloyne, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_6_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_6_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_6_site", "S"}, {UNIMOD_Cytopiloyne, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne, "spec_7_hidden", "1"}, {UNIMOD_Cytopiloyne, "spec_7_position", "Anywhere"}, {UNIMOD_Cytopiloyne, "spec_7_site", "Y"}, {UNIMOD_Cytopiloyne_water, "approved", "1"}, {UNIMOD_Cytopiloyne_water, "delta_composition", "H(24) C(19) O(8)"}, {UNIMOD_Cytopiloyne_water, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_1_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_1_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_1_site", "C"}, {UNIMOD_Cytopiloyne_water, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_2_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_2_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_2_site", "K"}, {UNIMOD_Cytopiloyne_water, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_3_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_3_position", "Any N-term"}, {UNIMOD_Cytopiloyne_water, "spec_3_site", "N-term"}, {UNIMOD_Cytopiloyne_water, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_4_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_4_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_4_site", "R"}, {UNIMOD_Cytopiloyne_water, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_5_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_5_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_5_site", "S"}, {UNIMOD_Cytopiloyne_water, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_6_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_6_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_6_site", "T"}, {UNIMOD_Cytopiloyne_water, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Cytopiloyne_water, "spec_7_hidden", "1"}, {UNIMOD_Cytopiloyne_water, "spec_7_position", "Anywhere"}, {UNIMOD_Cytopiloyne_water, "spec_7_site", "Y"}, {UNIMOD_CAF, "approved", "1"}, {UNIMOD_CAF, "delta_composition", "H(4) C(3) O(4) S"}, {UNIMOD_CAF, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CAF, "spec_1_hidden", "1"}, {UNIMOD_CAF, "spec_1_position", "Any N-term"}, {UNIMOD_CAF, "spec_1_site", "N-term"}, {UNIMOD_Nitrosyl, "approved", "1"}, {UNIMOD_Nitrosyl, "delta_composition", "H(-1) N O"}, {UNIMOD_Nitrosyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Nitrosyl, "spec_1_hidden", "1"}, {UNIMOD_Nitrosyl, "spec_1_position", "Anywhere"}, {UNIMOD_Nitrosyl, "spec_1_site", "C"}, {UNIMOD_Nitrosyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Nitrosyl, "spec_2_hidden", "1"}, {UNIMOD_Nitrosyl, "spec_2_position", "Anywhere"}, {UNIMOD_Nitrosyl, "spec_2_site", "Y"}, {UNIMOD_AEBS, "approved", "1"}, {UNIMOD_AEBS, "delta_composition", "H(9) C(8) N O(2) S"}, {UNIMOD_AEBS, "spec_1_classification", "Artefact"}, {UNIMOD_AEBS, "spec_1_hidden", "1"}, {UNIMOD_AEBS, "spec_1_position", "Anywhere"}, {UNIMOD_AEBS, "spec_1_site", "H"}, {UNIMOD_AEBS, "spec_2_classification", "Artefact"}, {UNIMOD_AEBS, "spec_2_hidden", "1"}, {UNIMOD_AEBS, "spec_2_position", "Anywhere"}, {UNIMOD_AEBS, "spec_2_site", "K"}, {UNIMOD_AEBS, "spec_3_classification", "Artefact"}, {UNIMOD_AEBS, "spec_3_hidden", "1"}, {UNIMOD_AEBS, "spec_3_position", "Protein N-term"}, {UNIMOD_AEBS, "spec_3_site", "N-term"}, {UNIMOD_AEBS, "spec_4_classification", "Artefact"}, {UNIMOD_AEBS, "spec_4_hidden", "1"}, {UNIMOD_AEBS, "spec_4_position", "Anywhere"}, {UNIMOD_AEBS, "spec_4_site", "S"}, {UNIMOD_AEBS, "spec_5_classification", "Artefact"}, {UNIMOD_AEBS, "spec_5_hidden", "1"}, {UNIMOD_AEBS, "spec_5_position", "Anywhere"}, {UNIMOD_AEBS, "spec_5_site", "Y"}, {UNIMOD_Ethanolyl, "approved", "1"}, {UNIMOD_Ethanolyl, "delta_composition", "H(4) C(2) O"}, {UNIMOD_Ethanolyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ethanolyl, "spec_1_hidden", "1"}, {UNIMOD_Ethanolyl, "spec_1_position", "Anywhere"}, {UNIMOD_Ethanolyl, "spec_1_site", "C"}, {UNIMOD_Ethanolyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Ethanolyl, "spec_2_hidden", "1"}, {UNIMOD_Ethanolyl, "spec_2_position", "Anywhere"}, {UNIMOD_Ethanolyl, "spec_2_site", "K"}, {UNIMOD_Ethanolyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Ethanolyl, "spec_3_hidden", "1"}, {UNIMOD_Ethanolyl, "spec_3_position", "Anywhere"}, {UNIMOD_Ethanolyl, "spec_3_site", "R"}, {UNIMOD_Ethyl, "approved", "1"}, {UNIMOD_Ethyl, "delta_composition", "H(4) C(2)"}, {UNIMOD_Ethyl, "spec_1_classification", "Multiple"}, {UNIMOD_Ethyl, "spec_1_hidden", "1"}, {UNIMOD_Ethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Ethyl, "spec_1_site", "K"}, {UNIMOD_Ethyl, "spec_2_classification", "Multiple"}, {UNIMOD_Ethyl, "spec_2_hidden", "1"}, {UNIMOD_Ethyl, "spec_2_position", "Any N-term"}, {UNIMOD_Ethyl, "spec_2_site", "N-term"}, {UNIMOD_Ethyl, "spec_3_classification", "Artefact"}, {UNIMOD_Ethyl, "spec_3_hidden", "1"}, {UNIMOD_Ethyl, "spec_3_position", "Anywhere"}, {UNIMOD_Ethyl, "spec_3_site", "E"}, {UNIMOD_Ethyl, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Ethyl, "spec_4_hidden", "1"}, {UNIMOD_Ethyl, "spec_4_position", "Protein N-term"}, {UNIMOD_Ethyl, "spec_4_site", "N-term"}, {UNIMOD_Ethyl, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Ethyl, "spec_5_hidden", "1"}, {UNIMOD_Ethyl, "spec_5_position", "Any C-term"}, {UNIMOD_Ethyl, "spec_5_site", "C-term"}, {UNIMOD_Ethyl, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Ethyl, "spec_6_hidden", "1"}, {UNIMOD_Ethyl, "spec_6_position", "Anywhere"}, {UNIMOD_Ethyl, "spec_6_site", "D"}, {UNIMOD_CoenzymeA, "approved", "1"}, {UNIMOD_CoenzymeA, "delta_composition", "H(34) C(21) N(7) O(16) P(3) S"}, {UNIMOD_CoenzymeA, "spec_1_classification", "Post-translational"}, {UNIMOD_CoenzymeA, "spec_1_hidden", "1"}, {UNIMOD_CoenzymeA, "spec_1_position", "Anywhere"}, {UNIMOD_CoenzymeA, "spec_1_site", "C"}, {UNIMOD_Methyl_2H_2_, "approved", "1"}, {UNIMOD_Methyl_2H_2_, "delta_composition", "2H(2) C"}, {UNIMOD_Methyl_2H_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_2_, "spec_1_hidden", "1"}, {UNIMOD_Methyl_2H_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_2H_2_, "spec_1_site", "K"}, {UNIMOD_Methyl_2H_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_2_, "spec_2_hidden", "1"}, {UNIMOD_Methyl_2H_2_, "spec_2_position", "Any N-term"}, {UNIMOD_Methyl_2H_2_, "spec_2_site", "N-term"}, {UNIMOD_SulfanilicAcid, "approved", "1"}, {UNIMOD_SulfanilicAcid, "delta_composition", "H(5) C(6) N O(2) S"}, {UNIMOD_SulfanilicAcid, "spec_1_classification", "Isotopic label"}, {UNIMOD_SulfanilicAcid, "spec_1_hidden", "1"}, {UNIMOD_SulfanilicAcid, "spec_1_position", "Any C-term"}, {UNIMOD_SulfanilicAcid, "spec_1_site", "C-term"}, {UNIMOD_SulfanilicAcid, "spec_2_classification", "Isotopic label"}, {UNIMOD_SulfanilicAcid, "spec_2_hidden", "1"}, {UNIMOD_SulfanilicAcid, "spec_2_position", "Anywhere"}, {UNIMOD_SulfanilicAcid, "spec_2_site", "D"}, {UNIMOD_SulfanilicAcid, "spec_3_classification", "Isotopic label"}, {UNIMOD_SulfanilicAcid, "spec_3_hidden", "1"}, {UNIMOD_SulfanilicAcid, "spec_3_position", "Anywhere"}, {UNIMOD_SulfanilicAcid, "spec_3_site", "E"}, {UNIMOD_SulfanilicAcid_13C_6_, "approved", "1"}, {UNIMOD_SulfanilicAcid_13C_6_, "delta_composition", "H(5) 13C(6) N O(2) S"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_1_position", "Any C-term"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_1_site", "C-term"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_2_hidden", "1"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_2_position", "Anywhere"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_2_site", "D"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_3_hidden", "1"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_3_position", "Anywhere"}, {UNIMOD_SulfanilicAcid_13C_6_, "spec_3_site", "E"}, {UNIMOD_Trp__Oxolactone, "approved", "1"}, {UNIMOD_Trp__Oxolactone, "delta_composition", "H(-2) O"}, {UNIMOD_Trp__Oxolactone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Trp__Oxolactone, "spec_1_hidden", "1"}, {UNIMOD_Trp__Oxolactone, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Oxolactone, "spec_1_site", "W"}, {UNIMOD_Biotin_PEO_Amine, "approved", "0"}, {UNIMOD_Biotin_PEO_Amine, "delta_composition", "H(28) C(16) N(4) O(3) S"}, {UNIMOD_Biotin_PEO_Amine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_PEO_Amine, "spec_1_hidden", "1"}, {UNIMOD_Biotin_PEO_Amine, "spec_1_position", "Protein C-term"}, {UNIMOD_Biotin_PEO_Amine, "spec_1_site", "C-term"}, {UNIMOD_Biotin_PEO_Amine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin_PEO_Amine, "spec_2_hidden", "1"}, {UNIMOD_Biotin_PEO_Amine, "spec_2_position", "Anywhere"}, {UNIMOD_Biotin_PEO_Amine, "spec_2_site", "D"}, {UNIMOD_Biotin_PEO_Amine, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Biotin_PEO_Amine, "spec_3_hidden", "1"}, {UNIMOD_Biotin_PEO_Amine, "spec_3_position", "Anywhere"}, {UNIMOD_Biotin_PEO_Amine, "spec_3_site", "E"}, {UNIMOD_Biotin_HPDP, "approved", "0"}, {UNIMOD_Biotin_HPDP, "delta_composition", "H(32) C(19) N(4) O(3) S(2)"}, {UNIMOD_Biotin_HPDP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_HPDP, "spec_1_hidden", "1"}, {UNIMOD_Biotin_HPDP, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_HPDP, "spec_1_site", "C"}, {UNIMOD_Delta_Hg_1_, "approved", "1"}, {UNIMOD_Delta_Hg_1_, "delta_composition", "Hg"}, {UNIMOD_Delta_Hg_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_Hg_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_Hg_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_Hg_1_, "spec_1_site", "C"}, {UNIMOD_IodoU_AMP, "approved", "1"}, {UNIMOD_IodoU_AMP, "delta_composition", "H(11) C(9) N(2) O(9) P"}, {UNIMOD_IodoU_AMP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_IodoU_AMP, "spec_1_hidden", "1"}, {UNIMOD_IodoU_AMP, "spec_1_position", "Anywhere"}, {UNIMOD_IodoU_AMP, "spec_1_site", "F"}, {UNIMOD_IodoU_AMP, "spec_2_classification", "Chemical derivative"}, {UNIMOD_IodoU_AMP, "spec_2_hidden", "1"}, {UNIMOD_IodoU_AMP, "spec_2_position", "Anywhere"}, {UNIMOD_IodoU_AMP, "spec_2_site", "W"}, {UNIMOD_IodoU_AMP, "spec_3_classification", "Chemical derivative"}, {UNIMOD_IodoU_AMP, "spec_3_hidden", "1"}, {UNIMOD_IodoU_AMP, "spec_3_position", "Anywhere"}, {UNIMOD_IodoU_AMP, "spec_3_site", "Y"}, {UNIMOD_CAMthiopropanoyl, "approved", "1"}, {UNIMOD_CAMthiopropanoyl, "delta_composition", "H(7) C(5) N O(2) S"}, {UNIMOD_CAMthiopropanoyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CAMthiopropanoyl, "spec_1_hidden", "1"}, {UNIMOD_CAMthiopropanoyl, "spec_1_position", "Anywhere"}, {UNIMOD_CAMthiopropanoyl, "spec_1_site", "K"}, {UNIMOD_CAMthiopropanoyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_CAMthiopropanoyl, "spec_2_hidden", "1"}, {UNIMOD_CAMthiopropanoyl, "spec_2_position", "Protein N-term"}, {UNIMOD_CAMthiopropanoyl, "spec_2_site", "N-term"}, {UNIMOD_IED_Biotin, "approved", "1"}, {UNIMOD_IED_Biotin, "delta_composition", "H(22) C(14) N(4) O(3) S"}, {UNIMOD_IED_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_IED_Biotin, "spec_1_hidden", "1"}, {UNIMOD_IED_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_IED_Biotin, "spec_1_site", "C"}, {UNIMOD_dHex, "approved", "1"}, {UNIMOD_dHex, "delta_composition", "dHex"}, {UNIMOD_dHex, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex, "spec_1_hidden", "1"}, {UNIMOD_dHex, "spec_1_hidden", "1"}, {UNIMOD_dHex, "spec_1_position", "Anywhere"}, {UNIMOD_dHex, "spec_1_position", "Anywhere"}, {UNIMOD_dHex, "spec_1_site", "T"}, {UNIMOD_dHex, "spec_1_site", "S"}, {UNIMOD_dHex, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex, "spec_2_hidden", "1"}, {UNIMOD_dHex, "spec_2_position", "Anywhere"}, {UNIMOD_dHex, "spec_2_site", "N"}, {UNIMOD_Methyl_2H_3_, "approved", "1"}, {UNIMOD_Methyl_2H_3_, "delta_composition", "H(-1) 2H(3) C"}, {UNIMOD_Methyl_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Methyl_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_, "spec_1_site", "C-term"}, {UNIMOD_Methyl_2H_3_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_, "spec_2_hidden", "1"}, {UNIMOD_Methyl_2H_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_, "spec_2_site", "D"}, {UNIMOD_Methyl_2H_3_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_, "spec_3_hidden", "1"}, {UNIMOD_Methyl_2H_3_, "spec_3_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_, "spec_3_site", "E"}, {UNIMOD_Methyl_2H_3_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_, "spec_4_hidden", "1"}, {UNIMOD_Methyl_2H_3_, "spec_4_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_, "spec_4_site", "K"}, {UNIMOD_Methyl_2H_3_, "spec_5_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_, "spec_5_hidden", "1"}, {UNIMOD_Methyl_2H_3_, "spec_5_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_, "spec_5_site", "R"}, {UNIMOD_Carboxy, "approved", "0"}, {UNIMOD_Carboxy, "delta_composition", "C O(2)"}, {UNIMOD_Carboxy, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carboxy, "spec_1_hidden", "1"}, {UNIMOD_Carboxy, "spec_1_position", "Anywhere"}, {UNIMOD_Carboxy, "spec_1_site", "W"}, {UNIMOD_Carboxy, "spec_2_classification", "Post-translational"}, {UNIMOD_Carboxy, "spec_2_hidden", "1"}, {UNIMOD_Carboxy, "spec_2_position", "Anywhere"}, {UNIMOD_Carboxy, "spec_2_site", "K"}, {UNIMOD_Carboxy, "spec_3_classification", "Post-translational"}, {UNIMOD_Carboxy, "spec_3_hidden", "1"}, {UNIMOD_Carboxy, "spec_3_position", "Anywhere"}, {UNIMOD_Carboxy, "spec_3_site", "D"}, {UNIMOD_Carboxy, "spec_4_classification", "Post-translational"}, {UNIMOD_Carboxy, "spec_4_hidden", "1"}, {UNIMOD_Carboxy, "spec_4_position", "Anywhere"}, {UNIMOD_Carboxy, "spec_4_site", "E"}, {UNIMOD_Carboxy, "spec_5_classification", "Post-translational"}, {UNIMOD_Carboxy, "spec_5_hidden", "1"}, {UNIMOD_Carboxy, "spec_5_position", "Protein N-term"}, {UNIMOD_Carboxy, "spec_5_site", "M"}, {UNIMOD_Bromobimane, "approved", "1"}, {UNIMOD_Bromobimane, "delta_composition", "H(10) C(10) N(2) O(2)"}, {UNIMOD_Bromobimane, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Bromobimane, "spec_1_hidden", "1"}, {UNIMOD_Bromobimane, "spec_1_position", "Anywhere"}, {UNIMOD_Bromobimane, "spec_1_site", "C"}, {UNIMOD_Menadione, "approved", "0"}, {UNIMOD_Menadione, "delta_composition", "H(6) C(11) O(2)"}, {UNIMOD_Menadione, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Menadione, "spec_1_hidden", "1"}, {UNIMOD_Menadione, "spec_1_position", "Anywhere"}, {UNIMOD_Menadione, "spec_1_site", "C"}, {UNIMOD_Menadione, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Menadione, "spec_2_hidden", "1"}, {UNIMOD_Menadione, "spec_2_position", "Anywhere"}, {UNIMOD_Menadione, "spec_2_site", "K"}, {UNIMOD_DeStreak, "approved", "1"}, {UNIMOD_DeStreak, "delta_composition", "H(4) C(2) O S"}, {UNIMOD_DeStreak, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DeStreak, "spec_1_hidden", "1"}, {UNIMOD_DeStreak, "spec_1_position", "Anywhere"}, {UNIMOD_DeStreak, "spec_1_site", "C"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "approved", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "delta_composition", "dHex Hex(3) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_, "spec_2_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "approved", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "delta_composition", "dHex Hex(4) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "spec_2_site", "S"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "approved", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "delta_composition", "dHex Hex(5) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_, "approved", "1"}, {UNIMOD_Hex_3_HexNAc_4_, "delta_composition", "Hex(3) HexNAc(4)"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_site", "T"}, {UNIMOD_Hex_3_HexNAc_4_, "spec_2_site", "S"}, {UNIMOD_Hex_4_HexNAc_4_, "approved", "1"}, {UNIMOD_Hex_4_HexNAc_4_, "delta_composition", "Hex(4) HexNAc(4)"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_, "spec_2_site", "S"}, {UNIMOD_Hex_5_HexNAc_4_, "approved", "1"}, {UNIMOD_Hex_5_HexNAc_4_, "delta_composition", "Hex(5) HexNAc(4)"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_site", "T"}, {UNIMOD_Hex_5_HexNAc_4_, "spec_2_site", "S"}, {UNIMOD_Cysteinyl, "approved", "1"}, {UNIMOD_Cysteinyl, "delta_composition", "H(5) C(3) N O(2) S"}, {UNIMOD_Cysteinyl, "spec_1_classification", "Multiple"}, {UNIMOD_Cysteinyl, "spec_1_hidden", "1"}, {UNIMOD_Cysteinyl, "spec_1_position", "Anywhere"}, {UNIMOD_Cysteinyl, "spec_1_site", "C"}, {UNIMOD_Lys_loss, "approved", "1"}, {UNIMOD_Lys_loss, "delta_composition", "H(-12) C(-6) N(-2) O(-1)"}, {UNIMOD_Lys_loss, "spec_1_classification", "Post-translational"}, {UNIMOD_Lys_loss, "spec_1_hidden", "1"}, {UNIMOD_Lys_loss, "spec_1_position", "Protein C-term"}, {UNIMOD_Lys_loss, "spec_1_site", "K"}, {UNIMOD_Nmethylmaleimide, "approved", "1"}, {UNIMOD_Nmethylmaleimide, "delta_composition", "H(5) C(5) N O(2)"}, {UNIMOD_Nmethylmaleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Nmethylmaleimide, "spec_1_hidden", "1"}, {UNIMOD_Nmethylmaleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Nmethylmaleimide, "spec_1_site", "C"}, {UNIMOD_Nmethylmaleimide, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Nmethylmaleimide, "spec_2_hidden", "1"}, {UNIMOD_Nmethylmaleimide, "spec_2_position", "Anywhere"}, {UNIMOD_Nmethylmaleimide, "spec_2_site", "K"}, {UNIMOD_DimethylpyrroleAdduct, "approved", "1"}, {UNIMOD_DimethylpyrroleAdduct, "delta_composition", "H(6) C(6)"}, {UNIMOD_DimethylpyrroleAdduct, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DimethylpyrroleAdduct, "spec_1_hidden", "1"}, {UNIMOD_DimethylpyrroleAdduct, "spec_1_position", "Anywhere"}, {UNIMOD_DimethylpyrroleAdduct, "spec_1_site", "K"}, {UNIMOD_Delta_H_2_C_5_, "approved", "1"}, {UNIMOD_Delta_H_2_C_5_, "delta_composition", "H(2) C(5)"}, {UNIMOD_Delta_H_2_C_5_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_2_C_5_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_2_C_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_5_, "spec_1_site", "K"}, {UNIMOD_Delta_H_2_C_3_O_1_, "approved", "1"}, {UNIMOD_Delta_H_2_C_3_O_1_, "delta_composition", "H(2) C(3) O"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_1_site", "K"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_2_C_3_O_1_, "spec_2_site", "R"}, {UNIMOD_Nethylmaleimide_water, "approved", "1"}, {UNIMOD_Nethylmaleimide_water, "delta_composition", "H(9) C(6) N O(3)"}, {UNIMOD_Nethylmaleimide_water, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Nethylmaleimide_water, "spec_1_hidden", "1"}, {UNIMOD_Nethylmaleimide_water, "spec_1_position", "Anywhere"}, {UNIMOD_Nethylmaleimide_water, "spec_1_site", "C"}, {UNIMOD_Nethylmaleimide_water, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Nethylmaleimide_water, "spec_2_hidden", "1"}, {UNIMOD_Nethylmaleimide_water, "spec_2_position", "Anywhere"}, {UNIMOD_Nethylmaleimide_water, "spec_2_site", "K"}, {UNIMOD_Xlink_B10621, "approved", "1"}, {UNIMOD_Xlink_B10621, "delta_composition", "H(30) C(31) N(4) O(6) S I"}, {UNIMOD_Xlink_B10621, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_B10621, "spec_1_hidden", "1"}, {UNIMOD_Xlink_B10621, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_B10621, "spec_1_site", "C"}, {UNIMOD_Xlink_DTBP_87_, "approved", "0"}, {UNIMOD_Xlink_DTBP_87_, "delta_composition", "H(5) C(3) N S"}, {UNIMOD_Xlink_DTBP_87_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTBP_87_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DTBP_87_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DTBP_87_, "spec_1_site", "K"}, {UNIMOD_Xlink_DTBP_87_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTBP_87_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DTBP_87_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DTBP_87_, "spec_2_site", "N-term"}, {UNIMOD_FP_Biotin, "approved", "0"}, {UNIMOD_FP_Biotin, "delta_composition", "H(49) C(27) N(4) O(5) P S"}, {UNIMOD_FP_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_FP_Biotin, "spec_1_hidden", "1"}, {UNIMOD_FP_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_FP_Biotin, "spec_1_site", "S"}, {UNIMOD_FP_Biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_FP_Biotin, "spec_2_hidden", "1"}, {UNIMOD_FP_Biotin, "spec_2_position", "Anywhere"}, {UNIMOD_FP_Biotin, "spec_2_site", "Y"}, {UNIMOD_FP_Biotin, "spec_3_classification", "Chemical derivative"}, {UNIMOD_FP_Biotin, "spec_3_hidden", "1"}, {UNIMOD_FP_Biotin, "spec_3_position", "Anywhere"}, {UNIMOD_FP_Biotin, "spec_3_site", "T"}, {UNIMOD_FP_Biotin, "spec_4_classification", "Chemical derivative"}, {UNIMOD_FP_Biotin, "spec_4_hidden", "1"}, {UNIMOD_FP_Biotin, "spec_4_position", "Anywhere"}, {UNIMOD_FP_Biotin, "spec_4_site", "K"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "approved", "1"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "delta_composition", "H(4) C(2) O(-1) S"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_2_O__1_S_1_, "spec_1_site", "S"}, {UNIMOD_Methyl_2H_3_13C_1_, "approved", "1"}, {UNIMOD_Methyl_2H_3_13C_1_, "delta_composition", "H(-1) 2H(3) 13C"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_1_hidden", "1"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_1_site", "R"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_2_hidden", "1"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_2_site", "K"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_3_hidden", "1"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_3_position", "Any N-term"}, {UNIMOD_Methyl_2H_3_13C_1_, "spec_3_site", "N-term"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "approved", "1"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "delta_composition", "H(-2) 2H(6) 13C(2)"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_1_site", "R"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_2_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_2_site", "K"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_3_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_3_position", "Any N-term"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_3_site", "N-term"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_4_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_4_position", "Protein N-term"}, {UNIMOD_Dimethyl_2H_6_13C_2_, "spec_4_site", "N-term"}, {UNIMOD_Thiophos_S_S_biotin, "approved", "1"}, {UNIMOD_Thiophos_S_S_biotin, "delta_composition", "H(34) C(19) N(4) O(5) P S(3)"}, {UNIMOD_Thiophos_S_S_biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Thiophos_S_S_biotin, "spec_1_hidden", "1"}, {UNIMOD_Thiophos_S_S_biotin, "spec_1_position", "Anywhere"}, {UNIMOD_Thiophos_S_S_biotin, "spec_1_site", "S"}, {UNIMOD_Thiophos_S_S_biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Thiophos_S_S_biotin, "spec_2_hidden", "1"}, {UNIMOD_Thiophos_S_S_biotin, "spec_2_position", "Anywhere"}, {UNIMOD_Thiophos_S_S_biotin, "spec_2_site", "T"}, {UNIMOD_Thiophos_S_S_biotin, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Thiophos_S_S_biotin, "spec_3_hidden", "1"}, {UNIMOD_Thiophos_S_S_biotin, "spec_3_position", "Anywhere"}, {UNIMOD_Thiophos_S_S_biotin, "spec_3_site", "Y"}, {UNIMOD_Can_FP_biotin, "approved", "0"}, {UNIMOD_Can_FP_biotin, "delta_composition", "H(34) C(19) N(3) O(5) P S"}, {UNIMOD_Can_FP_biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Can_FP_biotin, "spec_1_hidden", "1"}, {UNIMOD_Can_FP_biotin, "spec_1_position", "Anywhere"}, {UNIMOD_Can_FP_biotin, "spec_1_site", "S"}, {UNIMOD_Can_FP_biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Can_FP_biotin, "spec_2_hidden", "1"}, {UNIMOD_Can_FP_biotin, "spec_2_position", "Anywhere"}, {UNIMOD_Can_FP_biotin, "spec_2_site", "Y"}, {UNIMOD_Can_FP_biotin, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Can_FP_biotin, "spec_3_hidden", "1"}, {UNIMOD_Can_FP_biotin, "spec_3_position", "Anywhere"}, {UNIMOD_Can_FP_biotin, "spec_3_site", "T"}, {UNIMOD_HNE_Delta_H_2_, "approved", "1"}, {UNIMOD_HNE_Delta_H_2_, "delta_composition", "H(18) C(9) O(2)"}, {UNIMOD_HNE_Delta_H_2_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_, "spec_1_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_, "spec_1_site", "C"}, {UNIMOD_HNE_Delta_H_2_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_, "spec_2_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_, "spec_2_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_, "spec_2_site", "H"}, {UNIMOD_HNE_Delta_H_2_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_, "spec_3_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_, "spec_3_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_, "spec_3_site", "K"}, {UNIMOD_Methylamine, "approved", "1"}, {UNIMOD_Methylamine, "delta_composition", "H(3) C N O(-1)"}, {UNIMOD_Methylamine, "spec_1_classification", "Artefact"}, {UNIMOD_Methylamine, "spec_1_hidden", "1"}, {UNIMOD_Methylamine, "spec_1_position", "Anywhere"}, {UNIMOD_Methylamine, "spec_1_site", "S"}, {UNIMOD_Methylamine, "spec_2_classification", "Artefact"}, {UNIMOD_Methylamine, "spec_2_hidden", "1"}, {UNIMOD_Methylamine, "spec_2_position", "Anywhere"}, {UNIMOD_Methylamine, "spec_2_site", "T"}, {UNIMOD_Bromo, "approved", "1"}, {UNIMOD_Bromo, "delta_composition", "H(-1) Br"}, {UNIMOD_Bromo, "spec_1_classification", "Post-translational"}, {UNIMOD_Bromo, "spec_1_hidden", "1"}, {UNIMOD_Bromo, "spec_1_position", "Anywhere"}, {UNIMOD_Bromo, "spec_1_site", "W"}, {UNIMOD_Bromo, "spec_2_classification", "Post-translational"}, {UNIMOD_Bromo, "spec_2_hidden", "1"}, {UNIMOD_Bromo, "spec_2_position", "Anywhere"}, {UNIMOD_Bromo, "spec_2_site", "H"}, {UNIMOD_Bromo, "spec_3_classification", "Post-translational"}, {UNIMOD_Bromo, "spec_3_hidden", "1"}, {UNIMOD_Bromo, "spec_3_position", "Anywhere"}, {UNIMOD_Bromo, "spec_3_site", "F"}, {UNIMOD_Bromo, "spec_4_classification", "Artefact"}, {UNIMOD_Bromo, "spec_4_hidden", "1"}, {UNIMOD_Bromo, "spec_4_position", "Anywhere"}, {UNIMOD_Bromo, "spec_4_site", "Y"}, {UNIMOD_Amino, "approved", "1"}, {UNIMOD_Amino, "delta_composition", "H N"}, {UNIMOD_Amino, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Amino, "spec_1_hidden", "1"}, {UNIMOD_Amino, "spec_1_position", "Anywhere"}, {UNIMOD_Amino, "spec_1_site", "Y"}, {UNIMOD_Argbiotinhydrazide, "approved", "0"}, {UNIMOD_Argbiotinhydrazide, "delta_composition", "H(13) C(9) N O(2) S"}, {UNIMOD_Argbiotinhydrazide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Argbiotinhydrazide, "spec_1_hidden", "1"}, {UNIMOD_Argbiotinhydrazide, "spec_1_position", "Anywhere"}, {UNIMOD_Argbiotinhydrazide, "spec_1_site", "R"}, {UNIMOD_Arg__GluSA, "approved", "1"}, {UNIMOD_Arg__GluSA, "delta_composition", "H(-5) C(-1) N(-3) O"}, {UNIMOD_Arg__GluSA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Arg__GluSA, "spec_1_hidden", "1"}, {UNIMOD_Arg__GluSA, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__GluSA, "spec_1_site", "R"}, {UNIMOD_Trioxidation, "approved", "1"}, {UNIMOD_Trioxidation, "delta_composition", "O(3)"}, {UNIMOD_Trioxidation, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Trioxidation, "spec_1_hidden", "1"}, {UNIMOD_Trioxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Trioxidation, "spec_1_site", "C"}, {UNIMOD_Trioxidation, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Trioxidation, "spec_2_hidden", "1"}, {UNIMOD_Trioxidation, "spec_2_position", "Anywhere"}, {UNIMOD_Trioxidation, "spec_2_site", "W"}, {UNIMOD_Trioxidation, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Trioxidation, "spec_3_hidden", "1"}, {UNIMOD_Trioxidation, "spec_3_position", "Anywhere"}, {UNIMOD_Trioxidation, "spec_3_site", "Y"}, {UNIMOD_Trioxidation, "spec_4_classification", "Artefact"}, {UNIMOD_Trioxidation, "spec_4_hidden", "1"}, {UNIMOD_Trioxidation, "spec_4_position", "Anywhere"}, {UNIMOD_Trioxidation, "spec_4_site", "F"}, {UNIMOD_His__Asn, "approved", "1"}, {UNIMOD_His__Asn, "delta_composition", "H(-1) C(-2) N(-1) O"}, {UNIMOD_His__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Asn, "spec_1_hidden", "1"}, {UNIMOD_His__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_His__Asn, "spec_1_site", "H"}, {UNIMOD_His__Asp, "approved", "1"}, {UNIMOD_His__Asp, "delta_composition", "H(-2) C(-2) N(-2) O(2)"}, {UNIMOD_His__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Asp, "spec_1_hidden", "1"}, {UNIMOD_His__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_His__Asp, "spec_1_site", "H"}, {UNIMOD_Trp__Hydroxykynurenin, "approved", "1"}, {UNIMOD_Trp__Hydroxykynurenin, "delta_composition", "C(-1) O(2)"}, {UNIMOD_Trp__Hydroxykynurenin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Trp__Hydroxykynurenin, "spec_1_hidden", "1"}, {UNIMOD_Trp__Hydroxykynurenin, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Hydroxykynurenin, "spec_1_site", "W"}, {UNIMOD_Trp__Kynurenin, "approved", "1"}, {UNIMOD_Trp__Kynurenin, "delta_composition", "C(-1) O"}, {UNIMOD_Trp__Kynurenin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Trp__Kynurenin, "spec_1_hidden", "1"}, {UNIMOD_Trp__Kynurenin, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Kynurenin, "spec_1_site", "W"}, {UNIMOD_Lys__Allysine, "approved", "1"}, {UNIMOD_Lys__Allysine, "delta_composition", "H(-3) N(-1) O"}, {UNIMOD_Lys__Allysine, "spec_1_classification", "Post-translational"}, {UNIMOD_Lys__Allysine, "spec_1_hidden", "1"}, {UNIMOD_Lys__Allysine, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Allysine, "spec_1_site", "K"}, {UNIMOD_Lysbiotinhydrazide, "approved", "0"}, {UNIMOD_Lysbiotinhydrazide, "delta_composition", "H(15) C(10) N(3) O(2) S"}, {UNIMOD_Lysbiotinhydrazide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Lysbiotinhydrazide, "spec_1_hidden", "1"}, {UNIMOD_Lysbiotinhydrazide, "spec_1_position", "Anywhere"}, {UNIMOD_Lysbiotinhydrazide, "spec_1_site", "K"}, {UNIMOD_Nitro, "approved", "1"}, {UNIMOD_Nitro, "delta_composition", "H(-1) N O(2)"}, {UNIMOD_Nitro, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Nitro, "spec_1_hidden", "1"}, {UNIMOD_Nitro, "spec_1_position", "Anywhere"}, {UNIMOD_Nitro, "spec_1_site", "W"}, {UNIMOD_Nitro, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Nitro, "spec_2_hidden", "1"}, {UNIMOD_Nitro, "spec_2_position", "Anywhere"}, {UNIMOD_Nitro, "spec_2_site", "Y"}, {UNIMOD_Nitro, "spec_3_classification", "Artefact"}, {UNIMOD_Nitro, "spec_3_hidden", "1"}, {UNIMOD_Nitro, "spec_3_position", "Anywhere"}, {UNIMOD_Nitro, "spec_3_site", "F"}, {UNIMOD_probiotinhydrazide, "approved", "0"}, {UNIMOD_probiotinhydrazide, "delta_composition", "H(18) C(10) N(4) O(2) S"}, {UNIMOD_probiotinhydrazide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_probiotinhydrazide, "spec_1_hidden", "1"}, {UNIMOD_probiotinhydrazide, "spec_1_position", "Anywhere"}, {UNIMOD_probiotinhydrazide, "spec_1_site", "P"}, {UNIMOD_Pro__pyro_Glu, "approved", "1"}, {UNIMOD_Pro__pyro_Glu, "delta_composition", "H(-2) O"}, {UNIMOD_Pro__pyro_Glu, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pro__pyro_Glu, "spec_1_hidden", "1"}, {UNIMOD_Pro__pyro_Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__pyro_Glu, "spec_1_site", "P"}, {UNIMOD_Pro__Pyrrolidinone, "approved", "1"}, {UNIMOD_Pro__Pyrrolidinone, "delta_composition", "H(-2) C(-1) O(-1)"}, {UNIMOD_Pro__Pyrrolidinone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pro__Pyrrolidinone, "spec_1_hidden", "1"}, {UNIMOD_Pro__Pyrrolidinone, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Pyrrolidinone, "spec_1_site", "P"}, {UNIMOD_Thrbiotinhydrazide, "approved", "0"}, {UNIMOD_Thrbiotinhydrazide, "delta_composition", "H(16) C(10) N(4) O S"}, {UNIMOD_Thrbiotinhydrazide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Thrbiotinhydrazide, "spec_1_hidden", "1"}, {UNIMOD_Thrbiotinhydrazide, "spec_1_position", "Anywhere"}, {UNIMOD_Thrbiotinhydrazide, "spec_1_site", "T"}, {UNIMOD_Diisopropylphosphate, "approved", "0"}, {UNIMOD_Diisopropylphosphate, "delta_composition", "H(13) C(6) O(3) P"}, {UNIMOD_Diisopropylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Diisopropylphosphate, "spec_1_hidden", "1"}, {UNIMOD_Diisopropylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_Diisopropylphosphate, "spec_1_site", "S"}, {UNIMOD_Diisopropylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Diisopropylphosphate, "spec_2_hidden", "1"}, {UNIMOD_Diisopropylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_Diisopropylphosphate, "spec_2_site", "T"}, {UNIMOD_Diisopropylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Diisopropylphosphate, "spec_3_hidden", "1"}, {UNIMOD_Diisopropylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_Diisopropylphosphate, "spec_3_site", "Y"}, {UNIMOD_Diisopropylphosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Diisopropylphosphate, "spec_4_hidden", "1"}, {UNIMOD_Diisopropylphosphate, "spec_4_position", "Anywhere"}, {UNIMOD_Diisopropylphosphate, "spec_4_site", "K"}, {UNIMOD_Diisopropylphosphate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Diisopropylphosphate, "spec_5_hidden", "1"}, {UNIMOD_Diisopropylphosphate, "spec_5_position", "Any N-term"}, {UNIMOD_Diisopropylphosphate, "spec_5_site", "N-term"}, {UNIMOD_Isopropylphospho, "approved", "0"}, {UNIMOD_Isopropylphospho, "delta_composition", "H(7) C(3) O(3) P"}, {UNIMOD_Isopropylphospho, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Isopropylphospho, "spec_1_hidden", "1"}, {UNIMOD_Isopropylphospho, "spec_1_position", "Anywhere"}, {UNIMOD_Isopropylphospho, "spec_1_site", "S"}, {UNIMOD_Isopropylphospho, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Isopropylphospho, "spec_2_hidden", "1"}, {UNIMOD_Isopropylphospho, "spec_2_position", "Anywhere"}, {UNIMOD_Isopropylphospho, "spec_2_site", "T"}, {UNIMOD_Isopropylphospho, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Isopropylphospho, "spec_3_hidden", "1"}, {UNIMOD_Isopropylphospho, "spec_3_position", "Anywhere"}, {UNIMOD_Isopropylphospho, "spec_3_site", "Y"}, {UNIMOD_ICPL_13C_6_, "approved", "0"}, {UNIMOD_ICPL_13C_6_, "delta_composition", "H(3) 13C(6) N O"}, {UNIMOD_ICPL_13C_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_, "spec_1_hidden", "0"}, {UNIMOD_ICPL_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_ICPL_13C_6_, "spec_1_site", "K"}, {UNIMOD_ICPL_13C_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_, "spec_2_hidden", "0"}, {UNIMOD_ICPL_13C_6_, "spec_2_position", "Protein N-term"}, {UNIMOD_ICPL_13C_6_, "spec_2_site", "N-term"}, {UNIMOD_ICPL_13C_6_, "spec_3_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_, "spec_3_hidden", "1"}, {UNIMOD_ICPL_13C_6_, "spec_3_position", "Any N-term"}, {UNIMOD_ICPL_13C_6_, "spec_3_site", "N-term"}, {UNIMOD_ICPL, "approved", "0"}, {UNIMOD_ICPL, "delta_composition", "H(3) C(6) N O"}, {UNIMOD_ICPL, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICPL, "spec_1_hidden", "0"}, {UNIMOD_ICPL, "spec_1_position", "Anywhere"}, {UNIMOD_ICPL, "spec_1_site", "K"}, {UNIMOD_ICPL, "spec_2_classification", "Isotopic label"}, {UNIMOD_ICPL, "spec_2_hidden", "0"}, {UNIMOD_ICPL, "spec_2_position", "Protein N-term"}, {UNIMOD_ICPL, "spec_2_site", "N-term"}, {UNIMOD_ICPL, "spec_3_classification", "Isotopic label"}, {UNIMOD_ICPL, "spec_3_hidden", "1"}, {UNIMOD_ICPL, "spec_3_position", "Any N-term"}, {UNIMOD_ICPL, "spec_3_site", "N-term"}, {UNIMOD_Deamidated_18O_1_, "approved", "1"}, {UNIMOD_Deamidated_18O_1_, "delta_composition", "H(-1) N(-1) 18O"}, {UNIMOD_Deamidated_18O_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Deamidated_18O_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Deamidated_18O_1_, "spec_1_hidden", "1"}, {UNIMOD_Deamidated_18O_1_, "spec_1_hidden", "1"}, {UNIMOD_Deamidated_18O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Deamidated_18O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Deamidated_18O_1_, "spec_1_site", "Q"}, {UNIMOD_Deamidated_18O_1_, "spec_1_site", "N"}, {UNIMOD_Cys__Dha, "approved", "1"}, {UNIMOD_Cys__Dha, "delta_composition", "H(-2) S(-1)"}, {UNIMOD_Cys__Dha, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cys__Dha, "spec_1_hidden", "1"}, {UNIMOD_Cys__Dha, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Dha, "spec_1_site", "C"}, {UNIMOD_Pro__Pyrrolidone, "approved", "0"}, {UNIMOD_Pro__Pyrrolidone, "delta_composition", "C(-1) O(-1)"}, {UNIMOD_Pro__Pyrrolidone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pro__Pyrrolidone, "spec_1_hidden", "1"}, {UNIMOD_Pro__Pyrrolidone, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Pyrrolidone, "spec_1_site", "P"}, {UNIMOD_HMVK, "approved", "1"}, {UNIMOD_HMVK, "delta_composition", "H(6) C(4) O(2)"}, {UNIMOD_HMVK, "spec_1_classification", "Chemical derivative"}, {UNIMOD_HMVK, "spec_1_hidden", "1"}, {UNIMOD_HMVK, "spec_1_position", "Anywhere"}, {UNIMOD_HMVK, "spec_1_site", "C"}, {UNIMOD_Arg__Orn, "approved", "1"}, {UNIMOD_Arg__Orn, "delta_composition", "H(-2) C(-1) N(-2)"}, {UNIMOD_Arg__Orn, "spec_1_classification", "Artefact"}, {UNIMOD_Arg__Orn, "spec_1_hidden", "1"}, {UNIMOD_Arg__Orn, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Orn, "spec_1_site", "R"}, {UNIMOD_Dehydro, "approved", "1"}, {UNIMOD_Dehydro, "delta_composition", "H(-1)"}, {UNIMOD_Dehydro, "spec_1_classification", "Multiple"}, {UNIMOD_Dehydro, "spec_1_hidden", "0"}, {UNIMOD_Dehydro, "spec_1_position", "Anywhere"}, {UNIMOD_Dehydro, "spec_1_site", "C"}, {UNIMOD_Diphthamide, "approved", "1"}, {UNIMOD_Diphthamide, "delta_composition", "H(14) C(7) N(2) O"}, {UNIMOD_Diphthamide, "spec_1_classification", "Post-translational"}, {UNIMOD_Diphthamide, "spec_1_hidden", "1"}, {UNIMOD_Diphthamide, "spec_1_position", "Anywhere"}, {UNIMOD_Diphthamide, "spec_1_site", "H"}, {UNIMOD_Hydroxyfarnesyl, "approved", "1"}, {UNIMOD_Hydroxyfarnesyl, "delta_composition", "H(24) C(15) O"}, {UNIMOD_Hydroxyfarnesyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Hydroxyfarnesyl, "spec_1_hidden", "1"}, {UNIMOD_Hydroxyfarnesyl, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxyfarnesyl, "spec_1_site", "C"}, {UNIMOD_Diacylglycerol, "approved", "1"}, {UNIMOD_Diacylglycerol, "delta_composition", "H(68) C(37) O(4)"}, {UNIMOD_Diacylglycerol, "spec_1_classification", "Post-translational"}, {UNIMOD_Diacylglycerol, "spec_1_hidden", "1"}, {UNIMOD_Diacylglycerol, "spec_1_position", "Anywhere"}, {UNIMOD_Diacylglycerol, "spec_1_site", "C"}, {UNIMOD_Carboxyethyl, "approved", "1"}, {UNIMOD_Carboxyethyl, "delta_composition", "H(4) C(3) O(2)"}, {UNIMOD_Carboxyethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Carboxyethyl, "spec_1_hidden", "1"}, {UNIMOD_Carboxyethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Carboxyethyl, "spec_1_site", "K"}, {UNIMOD_Carboxyethyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Carboxyethyl, "spec_2_hidden", "1"}, {UNIMOD_Carboxyethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Carboxyethyl, "spec_2_site", "H"}, {UNIMOD_Hypusine, "approved", "1"}, {UNIMOD_Hypusine, "delta_composition", "H(9) C(4) N O"}, {UNIMOD_Hypusine, "spec_1_classification", "Post-translational"}, {UNIMOD_Hypusine, "spec_1_hidden", "1"}, {UNIMOD_Hypusine, "spec_1_position", "Anywhere"}, {UNIMOD_Hypusine, "spec_1_site", "K"}, {UNIMOD_Retinylidene, "approved", "1"}, {UNIMOD_Retinylidene, "delta_composition", "H(26) C(20)"}, {UNIMOD_Retinylidene, "spec_1_classification", "Post-translational"}, {UNIMOD_Retinylidene, "spec_1_hidden", "1"}, {UNIMOD_Retinylidene, "spec_1_position", "Anywhere"}, {UNIMOD_Retinylidene, "spec_1_site", "K"}, {UNIMOD_Lys__AminoadipicAcid, "approved", "1"}, {UNIMOD_Lys__AminoadipicAcid, "delta_composition", "H(-3) N(-1) O(2)"}, {UNIMOD_Lys__AminoadipicAcid, "spec_1_classification", "Post-translational"}, {UNIMOD_Lys__AminoadipicAcid, "spec_1_hidden", "1"}, {UNIMOD_Lys__AminoadipicAcid, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__AminoadipicAcid, "spec_1_site", "K"}, {UNIMOD_Cys__PyruvicAcid, "approved", "1"}, {UNIMOD_Cys__PyruvicAcid, "delta_composition", "H(-3) N(-1) O S(-1)"}, {UNIMOD_Cys__PyruvicAcid, "spec_1_classification", "Post-translational"}, {UNIMOD_Cys__PyruvicAcid, "spec_1_hidden", "1"}, {UNIMOD_Cys__PyruvicAcid, "spec_1_position", "Protein N-term"}, {UNIMOD_Cys__PyruvicAcid, "spec_1_site", "C"}, {UNIMOD_Ammonia_loss, "approved", "0"}, {UNIMOD_Ammonia_loss, "delta_composition", "H(-3) N(-1)"}, {UNIMOD_Ammonia_loss, "spec_1_classification", "Post-translational"}, {UNIMOD_Ammonia_loss, "spec_1_hidden", "1"}, {UNIMOD_Ammonia_loss, "spec_1_position", "Protein N-term"}, {UNIMOD_Ammonia_loss, "spec_1_site", "T"}, {UNIMOD_Ammonia_loss, "spec_2_classification", "Post-translational"}, {UNIMOD_Ammonia_loss, "spec_2_hidden", "1"}, {UNIMOD_Ammonia_loss, "spec_2_position", "Protein N-term"}, {UNIMOD_Ammonia_loss, "spec_2_site", "S"}, {UNIMOD_Ammonia_loss, "spec_3_classification", "Artefact"}, {UNIMOD_Ammonia_loss, "spec_3_hidden", "0"}, {UNIMOD_Ammonia_loss, "spec_3_position", "Any N-term"}, {UNIMOD_Ammonia_loss, "spec_3_site", "C"}, {UNIMOD_Ammonia_loss, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Ammonia_loss, "spec_4_hidden", "1"}, {UNIMOD_Ammonia_loss, "spec_4_position", "Anywhere"}, {UNIMOD_Ammonia_loss, "spec_4_site", "N"}, {UNIMOD_Phycocyanobilin, "approved", "1"}, {UNIMOD_Phycocyanobilin, "delta_composition", "H(38) C(33) N(4) O(6)"}, {UNIMOD_Phycocyanobilin, "spec_1_classification", "Post-translational"}, {UNIMOD_Phycocyanobilin, "spec_1_hidden", "1"}, {UNIMOD_Phycocyanobilin, "spec_1_position", "Anywhere"}, {UNIMOD_Phycocyanobilin, "spec_1_site", "C"}, {UNIMOD_Phycoerythrobilin, "approved", "1"}, {UNIMOD_Phycoerythrobilin, "delta_composition", "H(40) C(33) N(4) O(6)"}, {UNIMOD_Phycoerythrobilin, "spec_1_classification", "Post-translational"}, {UNIMOD_Phycoerythrobilin, "spec_1_hidden", "1"}, {UNIMOD_Phycoerythrobilin, "spec_1_position", "Anywhere"}, {UNIMOD_Phycoerythrobilin, "spec_1_site", "C"}, {UNIMOD_Phytochromobilin, "approved", "1"}, {UNIMOD_Phytochromobilin, "delta_composition", "H(36) C(33) N(4) O(6)"}, {UNIMOD_Phytochromobilin, "spec_1_classification", "Post-translational"}, {UNIMOD_Phytochromobilin, "spec_1_hidden", "1"}, {UNIMOD_Phytochromobilin, "spec_1_position", "Anywhere"}, {UNIMOD_Phytochromobilin, "spec_1_site", "C"}, {UNIMOD_Heme, "approved", "1"}, {UNIMOD_Heme, "delta_composition", "H(32) C(34) N(4) O(4) Fe"}, {UNIMOD_Heme, "spec_1_classification", "Post-translational"}, {UNIMOD_Heme, "spec_1_hidden", "1"}, {UNIMOD_Heme, "spec_1_position", "Anywhere"}, {UNIMOD_Heme, "spec_1_site", "C"}, {UNIMOD_Heme, "spec_2_classification", "Post-translational"}, {UNIMOD_Heme, "spec_2_hidden", "1"}, {UNIMOD_Heme, "spec_2_position", "Anywhere"}, {UNIMOD_Heme, "spec_2_site", "H"}, {UNIMOD_Molybdopterin, "approved", "1"}, {UNIMOD_Molybdopterin, "delta_composition", "H(11) C(10) N(5) O(8) P S(2) Mo"}, {UNIMOD_Molybdopterin, "spec_1_classification", "Post-translational"}, {UNIMOD_Molybdopterin, "spec_1_hidden", "1"}, {UNIMOD_Molybdopterin, "spec_1_position", "Anywhere"}, {UNIMOD_Molybdopterin, "spec_1_site", "C"}, {UNIMOD_Quinone, "approved", "1"}, {UNIMOD_Quinone, "delta_composition", "H(-2) O(2)"}, {UNIMOD_Quinone, "spec_1_classification", "Post-translational"}, {UNIMOD_Quinone, "spec_1_hidden", "1"}, {UNIMOD_Quinone, "spec_1_position", "Anywhere"}, {UNIMOD_Quinone, "spec_1_site", "Y"}, {UNIMOD_Quinone, "spec_2_classification", "Post-translational"}, {UNIMOD_Quinone, "spec_2_hidden", "1"}, {UNIMOD_Quinone, "spec_2_position", "Anywhere"}, {UNIMOD_Quinone, "spec_2_site", "W"}, {UNIMOD_Glucosylgalactosyl, "approved", "1"}, {UNIMOD_Glucosylgalactosyl, "delta_composition", "O Hex(2)"}, {UNIMOD_Glucosylgalactosyl, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Glucosylgalactosyl, "spec_1_hidden", "1"}, {UNIMOD_Glucosylgalactosyl, "spec_1_position", "Anywhere"}, {UNIMOD_Glucosylgalactosyl, "spec_1_site", "K"}, {UNIMOD_GPIanchor, "approved", "0"}, {UNIMOD_GPIanchor, "delta_composition", "H(6) C(2) N O(3) P"}, {UNIMOD_GPIanchor, "spec_1_classification", "Post-translational"}, {UNIMOD_GPIanchor, "spec_1_hidden", "1"}, {UNIMOD_GPIanchor, "spec_1_position", "Protein C-term"}, {UNIMOD_GPIanchor, "spec_1_site", "C-term"}, {UNIMOD_PhosphoribosyldephosphoCoA, "approved", "1"}, {UNIMOD_PhosphoribosyldephosphoCoA, "delta_composition", "H(42) C(26) N(7) O(19) P(3) S"}, {UNIMOD_PhosphoribosyldephosphoCoA, "spec_1_classification", "Post-translational"}, {UNIMOD_PhosphoribosyldephosphoCoA, "spec_1_hidden", "1"}, {UNIMOD_PhosphoribosyldephosphoCoA, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoribosyldephosphoCoA, "spec_1_site", "S"}, {UNIMOD_GlycerylPE, "approved", "1"}, {UNIMOD_GlycerylPE, "delta_composition", "H(12) C(5) N O(5) P"}, {UNIMOD_GlycerylPE, "spec_1_classification", "Post-translational"}, {UNIMOD_GlycerylPE, "spec_1_hidden", "1"}, {UNIMOD_GlycerylPE, "spec_1_position", "Anywhere"}, {UNIMOD_GlycerylPE, "spec_1_site", "E"}, {UNIMOD_Triiodothyronine, "approved", "1"}, {UNIMOD_Triiodothyronine, "delta_composition", "H C(6) O I(3)"}, {UNIMOD_Triiodothyronine, "spec_1_classification", "Post-translational"}, {UNIMOD_Triiodothyronine, "spec_1_hidden", "1"}, {UNIMOD_Triiodothyronine, "spec_1_position", "Anywhere"}, {UNIMOD_Triiodothyronine, "spec_1_site", "Y"}, {UNIMOD_Thyroxine, "approved", "1"}, {UNIMOD_Thyroxine, "delta_composition", "C(6) O I(4)"}, {UNIMOD_Thyroxine, "spec_1_classification", "Post-translational"}, {UNIMOD_Thyroxine, "spec_1_hidden", "1"}, {UNIMOD_Thyroxine, "spec_1_position", "Anywhere"}, {UNIMOD_Thyroxine, "spec_1_site", "Y"}, {UNIMOD_Tyr__Dha, "approved", "1"}, {UNIMOD_Tyr__Dha, "delta_composition", "H(-6) C(-6) O(-1)"}, {UNIMOD_Tyr__Dha, "spec_1_classification", "Post-translational"}, {UNIMOD_Tyr__Dha, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Dha, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Dha, "spec_1_site", "Y"}, {UNIMOD_Didehydro, "approved", "1"}, {UNIMOD_Didehydro, "delta_composition", "H(-2)"}, {UNIMOD_Didehydro, "spec_1_classification", "Post-translational"}, {UNIMOD_Didehydro, "spec_1_hidden", "1"}, {UNIMOD_Didehydro, "spec_1_position", "Anywhere"}, {UNIMOD_Didehydro, "spec_1_site", "Y"}, {UNIMOD_Didehydro, "spec_2_classification", "Post-translational"}, {UNIMOD_Didehydro, "spec_2_hidden", "1"}, {UNIMOD_Didehydro, "spec_2_position", "Anywhere"}, {UNIMOD_Didehydro, "spec_2_site", "S"}, {UNIMOD_Didehydro, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Didehydro, "spec_3_hidden", "1"}, {UNIMOD_Didehydro, "spec_3_position", "Anywhere"}, {UNIMOD_Didehydro, "spec_3_site", "T"}, {UNIMOD_Didehydro, "spec_4_classification", "Artefact"}, {UNIMOD_Didehydro, "spec_4_hidden", "1"}, {UNIMOD_Didehydro, "spec_4_position", "Any C-term"}, {UNIMOD_Didehydro, "spec_4_site", "K"}, {UNIMOD_Cys__Oxoalanine, "approved", "1"}, {UNIMOD_Cys__Oxoalanine, "delta_composition", "H(-2) O S(-1)"}, {UNIMOD_Cys__Oxoalanine, "spec_1_classification", "Post-translational"}, {UNIMOD_Cys__Oxoalanine, "spec_1_hidden", "1"}, {UNIMOD_Cys__Oxoalanine, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Oxoalanine, "spec_1_site", "C"}, {UNIMOD_Ser__LacticAcid, "approved", "1"}, {UNIMOD_Ser__LacticAcid, "delta_composition", "H(-1) N(-1)"}, {UNIMOD_Ser__LacticAcid, "spec_1_classification", "Post-translational"}, {UNIMOD_Ser__LacticAcid, "spec_1_hidden", "1"}, {UNIMOD_Ser__LacticAcid, "spec_1_position", "Protein N-term"}, {UNIMOD_Ser__LacticAcid, "spec_1_site", "S"}, {UNIMOD_Phosphoadenosine, "approved", "1"}, {UNIMOD_Phosphoadenosine, "delta_composition", "H(12) C(10) N(5) O(6) P"}, {UNIMOD_Phosphoadenosine, "spec_1_classification", "Post-translational"}, {UNIMOD_Phosphoadenosine, "spec_1_hidden", "1"}, {UNIMOD_Phosphoadenosine, "spec_1_position", "Anywhere"}, {UNIMOD_Phosphoadenosine, "spec_1_site", "Y"}, {UNIMOD_Phosphoadenosine, "spec_2_classification", "Post-translational"}, {UNIMOD_Phosphoadenosine, "spec_2_hidden", "1"}, {UNIMOD_Phosphoadenosine, "spec_2_position", "Anywhere"}, {UNIMOD_Phosphoadenosine, "spec_2_site", "K"}, {UNIMOD_Phosphoadenosine, "spec_3_classification", "Post-translational"}, {UNIMOD_Phosphoadenosine, "spec_3_hidden", "1"}, {UNIMOD_Phosphoadenosine, "spec_3_position", "Anywhere"}, {UNIMOD_Phosphoadenosine, "spec_3_site", "T"}, {UNIMOD_Phosphoadenosine, "spec_4_classification", "Post-translational"}, {UNIMOD_Phosphoadenosine, "spec_4_hidden", "1"}, {UNIMOD_Phosphoadenosine, "spec_4_position", "Anywhere"}, {UNIMOD_Phosphoadenosine, "spec_4_site", "H"}, {UNIMOD_Phosphoadenosine, "spec_5_classification", "Post-translational"}, {UNIMOD_Phosphoadenosine, "spec_5_hidden", "1"}, {UNIMOD_Phosphoadenosine, "spec_5_position", "Anywhere"}, {UNIMOD_Phosphoadenosine, "spec_5_site", "S"}, {UNIMOD_Hydroxycinnamyl, "approved", "1"}, {UNIMOD_Hydroxycinnamyl, "delta_composition", "H(6) C(9) O(2)"}, {UNIMOD_Hydroxycinnamyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Hydroxycinnamyl, "spec_1_hidden", "1"}, {UNIMOD_Hydroxycinnamyl, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxycinnamyl, "spec_1_site", "C"}, {UNIMOD_Glycosyl, "approved", "1"}, {UNIMOD_Glycosyl, "delta_composition", "H(-2) C(-1) Hex"}, {UNIMOD_Glycosyl, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Glycosyl, "spec_1_hidden", "1"}, {UNIMOD_Glycosyl, "spec_1_position", "Anywhere"}, {UNIMOD_Glycosyl, "spec_1_site", "P"}, {UNIMOD_FMNH, "approved", "1"}, {UNIMOD_FMNH, "delta_composition", "H(19) C(17) N(4) O(9) P"}, {UNIMOD_FMNH, "spec_1_classification", "Post-translational"}, {UNIMOD_FMNH, "spec_1_hidden", "1"}, {UNIMOD_FMNH, "spec_1_position", "Anywhere"}, {UNIMOD_FMNH, "spec_1_site", "C"}, {UNIMOD_FMNH, "spec_2_classification", "Post-translational"}, {UNIMOD_FMNH, "spec_2_hidden", "1"}, {UNIMOD_FMNH, "spec_2_position", "Anywhere"}, {UNIMOD_FMNH, "spec_2_site", "H"}, {UNIMOD_Archaeol, "approved", "1"}, {UNIMOD_Archaeol, "delta_composition", "H(86) C(43) O(2)"}, {UNIMOD_Archaeol, "spec_1_classification", "Post-translational"}, {UNIMOD_Archaeol, "spec_1_hidden", "1"}, {UNIMOD_Archaeol, "spec_1_position", "Anywhere"}, {UNIMOD_Archaeol, "spec_1_site", "C"}, {UNIMOD_Phenylisocyanate, "approved", "1"}, {UNIMOD_Phenylisocyanate, "delta_composition", "H(5) C(7) N O"}, {UNIMOD_Phenylisocyanate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Phenylisocyanate, "spec_1_hidden", "1"}, {UNIMOD_Phenylisocyanate, "spec_1_position", "Any N-term"}, {UNIMOD_Phenylisocyanate, "spec_1_site", "N-term"}, {UNIMOD_Phenylisocyanate_2H_5_, "approved", "1"}, {UNIMOD_Phenylisocyanate_2H_5_, "delta_composition", "2H(5) C(7) N O"}, {UNIMOD_Phenylisocyanate_2H_5_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Phenylisocyanate_2H_5_, "spec_1_hidden", "1"}, {UNIMOD_Phenylisocyanate_2H_5_, "spec_1_position", "Any N-term"}, {UNIMOD_Phenylisocyanate_2H_5_, "spec_1_site", "N-term"}, {UNIMOD_Phosphoguanosine, "approved", "1"}, {UNIMOD_Phosphoguanosine, "delta_composition", "H(12) C(10) N(5) O(7) P"}, {UNIMOD_Phosphoguanosine, "spec_1_classification", "Post-translational"}, {UNIMOD_Phosphoguanosine, "spec_1_hidden", "1"}, {UNIMOD_Phosphoguanosine, "spec_1_position", "Anywhere"}, {UNIMOD_Phosphoguanosine, "spec_1_site", "K"}, {UNIMOD_Phosphoguanosine, "spec_2_classification", "Post-translational"}, {UNIMOD_Phosphoguanosine, "spec_2_hidden", "1"}, {UNIMOD_Phosphoguanosine, "spec_2_position", "Anywhere"}, {UNIMOD_Phosphoguanosine, "spec_2_site", "H"}, {UNIMOD_Hydroxymethyl, "approved", "1"}, {UNIMOD_Hydroxymethyl, "delta_composition", "H(2) C O"}, {UNIMOD_Hydroxymethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Hydroxymethyl, "spec_1_hidden", "1"}, {UNIMOD_Hydroxymethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxymethyl, "spec_1_site", "N"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "approved", "1"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "delta_composition", "H(47) C(40) N(20) O(26) P(4) S(3) Se Mo"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "spec_1_classification", "Post-translational"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "spec_1_hidden", "1"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "spec_1_position", "Anywhere"}, {UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_, "spec_1_site", "C"}, {UNIMOD_Dipyrrolylmethanemethyl, "approved", "1"}, {UNIMOD_Dipyrrolylmethanemethyl, "delta_composition", "H(22) C(20) N(2) O(8)"}, {UNIMOD_Dipyrrolylmethanemethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Dipyrrolylmethanemethyl, "spec_1_hidden", "1"}, {UNIMOD_Dipyrrolylmethanemethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dipyrrolylmethanemethyl, "spec_1_site", "C"}, {UNIMOD_PhosphoUridine, "approved", "1"}, {UNIMOD_PhosphoUridine, "delta_composition", "H(11) C(9) N(2) O(8) P"}, {UNIMOD_PhosphoUridine, "spec_1_classification", "Post-translational"}, {UNIMOD_PhosphoUridine, "spec_1_hidden", "1"}, {UNIMOD_PhosphoUridine, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoUridine, "spec_1_site", "Y"}, {UNIMOD_PhosphoUridine, "spec_2_classification", "Post-translational"}, {UNIMOD_PhosphoUridine, "spec_2_hidden", "1"}, {UNIMOD_PhosphoUridine, "spec_2_position", "Anywhere"}, {UNIMOD_PhosphoUridine, "spec_2_site", "H"}, {UNIMOD_Glycerophospho, "approved", "1"}, {UNIMOD_Glycerophospho, "delta_composition", "H(7) C(3) O(5) P"}, {UNIMOD_Glycerophospho, "spec_1_classification", "Post-translational"}, {UNIMOD_Glycerophospho, "spec_1_hidden", "1"}, {UNIMOD_Glycerophospho, "spec_1_position", "Anywhere"}, {UNIMOD_Glycerophospho, "spec_1_site", "S"}, {UNIMOD_Carboxy__Thiocarboxy, "approved", "1"}, {UNIMOD_Carboxy__Thiocarboxy, "delta_composition", "O(-1) S"}, {UNIMOD_Carboxy__Thiocarboxy, "spec_1_classification", "Post-translational"}, {UNIMOD_Carboxy__Thiocarboxy, "spec_1_hidden", "1"}, {UNIMOD_Carboxy__Thiocarboxy, "spec_1_position", "Protein C-term"}, {UNIMOD_Carboxy__Thiocarboxy, "spec_1_site", "G"}, {UNIMOD_Sulfide, "approved", "1"}, {UNIMOD_Sulfide, "delta_composition", "S"}, {UNIMOD_Sulfide, "spec_1_classification", "Post-translational"}, {UNIMOD_Sulfide, "spec_1_hidden", "1"}, {UNIMOD_Sulfide, "spec_1_position", "Anywhere"}, {UNIMOD_Sulfide, "spec_1_site", "C"}, {UNIMOD_Sulfide, "spec_2_classification", "Post-translational"}, {UNIMOD_Sulfide, "spec_2_hidden", "1"}, {UNIMOD_Sulfide, "spec_2_position", "Anywhere"}, {UNIMOD_Sulfide, "spec_2_site", "D"}, {UNIMOD_Sulfide, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Sulfide, "spec_3_hidden", "1"}, {UNIMOD_Sulfide, "spec_3_position", "Anywhere"}, {UNIMOD_Sulfide, "spec_3_site", "W"}, {UNIMOD_PyruvicAcidIminyl, "approved", "1"}, {UNIMOD_PyruvicAcidIminyl, "delta_composition", "H(2) C(3) O(2)"}, {UNIMOD_PyruvicAcidIminyl, "spec_1_classification", "Post-translational"}, {UNIMOD_PyruvicAcidIminyl, "spec_1_hidden", "1"}, {UNIMOD_PyruvicAcidIminyl, "spec_1_position", "Protein N-term"}, {UNIMOD_PyruvicAcidIminyl, "spec_1_site", "C"}, {UNIMOD_PyruvicAcidIminyl, "spec_2_classification", "Post-translational"}, {UNIMOD_PyruvicAcidIminyl, "spec_2_hidden", "1"}, {UNIMOD_PyruvicAcidIminyl, "spec_2_position", "Protein N-term"}, {UNIMOD_PyruvicAcidIminyl, "spec_2_site", "V"}, {UNIMOD_PyruvicAcidIminyl, "spec_3_classification", "Post-translational"}, {UNIMOD_PyruvicAcidIminyl, "spec_3_hidden", "1"}, {UNIMOD_PyruvicAcidIminyl, "spec_3_position", "Anywhere"}, {UNIMOD_PyruvicAcidIminyl, "spec_3_site", "K"}, {UNIMOD_Delta_Se_1_, "approved", "1"}, {UNIMOD_Delta_Se_1_, "delta_composition", "Se"}, {UNIMOD_Delta_Se_1_, "spec_1_classification", "Post-translational"}, {UNIMOD_Delta_Se_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_Se_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_Se_1_, "spec_1_site", "C"}, {UNIMOD_MolybdopterinGD, "approved", "1"}, {UNIMOD_MolybdopterinGD, "delta_composition", "H(47) C(40) N(20) O(26) P(4) S(4) Mo"}, {UNIMOD_MolybdopterinGD, "spec_1_classification", "Post-translational"}, {UNIMOD_MolybdopterinGD, "spec_1_hidden", "1"}, {UNIMOD_MolybdopterinGD, "spec_1_position", "Anywhere"}, {UNIMOD_MolybdopterinGD, "spec_1_site", "C"}, {UNIMOD_MolybdopterinGD, "spec_2_classification", "Post-translational"}, {UNIMOD_MolybdopterinGD, "spec_2_hidden", "1"}, {UNIMOD_MolybdopterinGD, "spec_2_position", "Anywhere"}, {UNIMOD_MolybdopterinGD, "spec_2_site", "D"}, {UNIMOD_MolybdopterinGD, "spec_3_classification", "Post-translational"}, {UNIMOD_MolybdopterinGD, "spec_3_hidden", "1"}, {UNIMOD_MolybdopterinGD, "spec_3_position", "Anywhere"}, {UNIMOD_MolybdopterinGD, "spec_3_site", "U"}, {UNIMOD_Dioxidation, "approved", "1"}, {UNIMOD_Dioxidation, "delta_composition", "O(2)"}, {UNIMOD_Dioxidation, "spec_10_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_10_hidden", "1"}, {UNIMOD_Dioxidation, "spec_10_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_10_site", "E"}, {UNIMOD_Dioxidation, "spec_11_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_11_hidden", "1"}, {UNIMOD_Dioxidation, "spec_11_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_11_site", "I"}, {UNIMOD_Dioxidation, "spec_12_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_12_hidden", "1"}, {UNIMOD_Dioxidation, "spec_12_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_12_site", "L"}, {UNIMOD_Dioxidation, "spec_13_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_13_hidden", "1"}, {UNIMOD_Dioxidation, "spec_13_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_13_site", "V"}, {UNIMOD_Dioxidation, "spec_1_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_1_hidden", "1"}, {UNIMOD_Dioxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_1_site", "P"}, {UNIMOD_Dioxidation, "spec_2_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_2_hidden", "1"}, {UNIMOD_Dioxidation, "spec_2_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_2_site", "R"}, {UNIMOD_Dioxidation, "spec_3_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_3_hidden", "1"}, {UNIMOD_Dioxidation, "spec_3_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_3_site", "K"}, {UNIMOD_Dioxidation, "spec_4_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_4_hidden", "0"}, {UNIMOD_Dioxidation, "spec_4_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_4_site", "M"}, {UNIMOD_Dioxidation, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_5_hidden", "1"}, {UNIMOD_Dioxidation, "spec_5_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_5_site", "F"}, {UNIMOD_Dioxidation, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Dioxidation, "spec_6_hidden", "1"}, {UNIMOD_Dioxidation, "spec_6_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_6_site", "W"}, {UNIMOD_Dioxidation, "spec_7_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_7_hidden", "1"}, {UNIMOD_Dioxidation, "spec_7_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_7_site", "Y"}, {UNIMOD_Dioxidation, "spec_8_classification", "Post-translational"}, {UNIMOD_Dioxidation, "spec_8_hidden", "1"}, {UNIMOD_Dioxidation, "spec_8_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_8_site", "C"}, {UNIMOD_Dioxidation, "spec_9_classification", "Multiple"}, {UNIMOD_Dioxidation, "spec_9_hidden", "1"}, {UNIMOD_Dioxidation, "spec_9_position", "Anywhere"}, {UNIMOD_Dioxidation, "spec_9_site", "U"}, {UNIMOD_Octanoyl, "approved", "1"}, {UNIMOD_Octanoyl, "delta_composition", "H(14) C(8) O"}, {UNIMOD_Octanoyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Octanoyl, "spec_1_hidden", "1"}, {UNIMOD_Octanoyl, "spec_1_position", "Anywhere"}, {UNIMOD_Octanoyl, "spec_1_site", "S"}, {UNIMOD_Octanoyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Octanoyl, "spec_2_hidden", "1"}, {UNIMOD_Octanoyl, "spec_2_position", "Anywhere"}, {UNIMOD_Octanoyl, "spec_2_site", "T"}, {UNIMOD_Octanoyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Octanoyl, "spec_3_hidden", "1"}, {UNIMOD_Octanoyl, "spec_3_position", "Anywhere"}, {UNIMOD_Octanoyl, "spec_3_site", "C"}, {UNIMOD_PhosphoHexNAc, "approved", "1"}, {UNIMOD_PhosphoHexNAc, "delta_composition", "H O(3) P HexNAc"}, {UNIMOD_PhosphoHexNAc, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHexNAc, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHexNAc, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHexNAc, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHexNAc, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHexNAc, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHexNAc, "spec_1_site", "T"}, {UNIMOD_PhosphoHexNAc, "spec_1_site", "S"}, {UNIMOD_PhosphoHex, "approved", "1"}, {UNIMOD_PhosphoHex, "delta_composition", "H O(3) P Hex"}, {UNIMOD_PhosphoHex, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHex, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHex, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHex, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHex, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHex, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHex, "spec_1_site", "T"}, {UNIMOD_PhosphoHex, "spec_1_site", "S"}, {UNIMOD_Palmitoleyl, "approved", "1"}, {UNIMOD_Palmitoleyl, "delta_composition", "H(28) C(16) O"}, {UNIMOD_Palmitoleyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Palmitoleyl, "spec_1_hidden", "1"}, {UNIMOD_Palmitoleyl, "spec_1_position", "Anywhere"}, {UNIMOD_Palmitoleyl, "spec_1_site", "C"}, {UNIMOD_Palmitoleyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Palmitoleyl, "spec_2_hidden", "1"}, {UNIMOD_Palmitoleyl, "spec_2_position", "Anywhere"}, {UNIMOD_Palmitoleyl, "spec_2_site", "S"}, {UNIMOD_Palmitoleyl, "spec_3_classification", "Pre-translational"}, {UNIMOD_Palmitoleyl, "spec_3_hidden", "1"}, {UNIMOD_Palmitoleyl, "spec_3_position", "Anywhere"}, {UNIMOD_Palmitoleyl, "spec_3_site", "T"}, {UNIMOD_Cholesterol, "approved", "1"}, {UNIMOD_Cholesterol, "delta_composition", "H(44) C(27)"}, {UNIMOD_Cholesterol, "spec_1_classification", "Post-translational"}, {UNIMOD_Cholesterol, "spec_1_hidden", "1"}, {UNIMOD_Cholesterol, "spec_1_position", "Protein C-term"}, {UNIMOD_Cholesterol, "spec_1_site", "C-term"}, {UNIMOD_Didehydroretinylidene, "approved", "1"}, {UNIMOD_Didehydroretinylidene, "delta_composition", "H(24) C(20)"}, {UNIMOD_Didehydroretinylidene, "spec_1_classification", "Post-translational"}, {UNIMOD_Didehydroretinylidene, "spec_1_hidden", "1"}, {UNIMOD_Didehydroretinylidene, "spec_1_position", "Anywhere"}, {UNIMOD_Didehydroretinylidene, "spec_1_site", "K"}, {UNIMOD_CHDH, "approved", "1"}, {UNIMOD_CHDH, "delta_composition", "H(26) C(17) O(4)"}, {UNIMOD_CHDH, "spec_1_classification", "Post-translational"}, {UNIMOD_CHDH, "spec_1_hidden", "1"}, {UNIMOD_CHDH, "spec_1_position", "Anywhere"}, {UNIMOD_CHDH, "spec_1_site", "D"}, {UNIMOD_Methylpyrroline, "approved", "1"}, {UNIMOD_Methylpyrroline, "delta_composition", "H(7) C(6) N O"}, {UNIMOD_Methylpyrroline, "spec_1_classification", "Post-translational"}, {UNIMOD_Methylpyrroline, "spec_1_hidden", "1"}, {UNIMOD_Methylpyrroline, "spec_1_position", "Anywhere"}, {UNIMOD_Methylpyrroline, "spec_1_site", "K"}, {UNIMOD_Hydroxyheme, "approved", "1"}, {UNIMOD_Hydroxyheme, "delta_composition", "H(30) C(34) N(4) O(4) Fe"}, {UNIMOD_Hydroxyheme, "spec_1_classification", "Post-translational"}, {UNIMOD_Hydroxyheme, "spec_1_hidden", "1"}, {UNIMOD_Hydroxyheme, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxyheme, "spec_1_site", "E"}, {UNIMOD_MicrocinC7, "approved", "1"}, {UNIMOD_MicrocinC7, "delta_composition", "H(19) C(13) N(6) O(6) P"}, {UNIMOD_MicrocinC7, "spec_1_classification", "Post-translational"}, {UNIMOD_MicrocinC7, "spec_1_hidden", "1"}, {UNIMOD_MicrocinC7, "spec_1_position", "Protein C-term"}, {UNIMOD_MicrocinC7, "spec_1_site", "C-term"}, {UNIMOD_Cyano, "approved", "1"}, {UNIMOD_Cyano, "delta_composition", "H(-1) C N"}, {UNIMOD_Cyano, "spec_1_classification", "Post-translational"}, {UNIMOD_Cyano, "spec_1_hidden", "1"}, {UNIMOD_Cyano, "spec_1_position", "Anywhere"}, {UNIMOD_Cyano, "spec_1_site", "C"}, {UNIMOD_Diironsubcluster, "approved", "1"}, {UNIMOD_Diironsubcluster, "delta_composition", "H(-1) C(5) N(2) O(5) S(2) Fe(2)"}, {UNIMOD_Diironsubcluster, "spec_1_classification", "Post-translational"}, {UNIMOD_Diironsubcluster, "spec_1_hidden", "1"}, {UNIMOD_Diironsubcluster, "spec_1_position", "Anywhere"}, {UNIMOD_Diironsubcluster, "spec_1_site", "C"}, {UNIMOD_Amidino, "approved", "1"}, {UNIMOD_Amidino, "delta_composition", "H(2) C N(2)"}, {UNIMOD_Amidino, "spec_1_classification", "Post-translational"}, {UNIMOD_Amidino, "spec_1_hidden", "1"}, {UNIMOD_Amidino, "spec_1_position", "Anywhere"}, {UNIMOD_Amidino, "spec_1_site", "C"}, {UNIMOD_FMN, "approved", "1"}, {UNIMOD_FMN, "delta_composition", "H(19) C(17) N(4) O(8) P"}, {UNIMOD_FMN, "spec_1_classification", "Post-translational"}, {UNIMOD_FMN, "spec_1_hidden", "1"}, {UNIMOD_FMN, "spec_1_position", "Anywhere"}, {UNIMOD_FMN, "spec_1_site", "T"}, {UNIMOD_FMN, "spec_2_classification", "Post-translational"}, {UNIMOD_FMN, "spec_2_hidden", "1"}, {UNIMOD_FMN, "spec_2_position", "Anywhere"}, {UNIMOD_FMN, "spec_2_site", "S"}, {UNIMOD_FMNC, "approved", "1"}, {UNIMOD_FMNC, "delta_composition", "H(21) C(17) N(4) O(9) P"}, {UNIMOD_FMNC, "spec_1_classification", "Post-translational"}, {UNIMOD_FMNC, "spec_1_hidden", "1"}, {UNIMOD_FMNC, "spec_1_position", "Anywhere"}, {UNIMOD_FMNC, "spec_1_site", "C"}, {UNIMOD_CuSMo, "approved", "1"}, {UNIMOD_CuSMo, "delta_composition", "H(24) C(19) N(8) O(15) P(2) S(3) Cu Mo"}, {UNIMOD_CuSMo, "spec_1_classification", "Post-translational"}, {UNIMOD_CuSMo, "spec_1_hidden", "1"}, {UNIMOD_CuSMo, "spec_1_position", "Anywhere"}, {UNIMOD_CuSMo, "spec_1_site", "C"}, {UNIMOD_Hydroxytrimethyl, "approved", "1"}, {UNIMOD_Hydroxytrimethyl, "delta_composition", "H(7) C(3) O"}, {UNIMOD_Hydroxytrimethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Hydroxytrimethyl, "spec_1_hidden", "1"}, {UNIMOD_Hydroxytrimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxytrimethyl, "spec_1_site", "K"}, {UNIMOD_Deoxy, "approved", "1"}, {UNIMOD_Deoxy, "delta_composition", "O(-1)"}, {UNIMOD_Deoxy, "spec_1_classification", "Post-translational"}, {UNIMOD_Deoxy, "spec_1_hidden", "1"}, {UNIMOD_Deoxy, "spec_1_position", "Anywhere"}, {UNIMOD_Deoxy, "spec_1_site", "D"}, {UNIMOD_Deoxy, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Deoxy, "spec_2_hidden", "1"}, {UNIMOD_Deoxy, "spec_2_position", "Anywhere"}, {UNIMOD_Deoxy, "spec_2_site", "S"}, {UNIMOD_Deoxy, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Deoxy, "spec_3_hidden", "1"}, {UNIMOD_Deoxy, "spec_3_position", "Anywhere"}, {UNIMOD_Deoxy, "spec_3_site", "T"}, {UNIMOD_Microcin, "approved", "1"}, {UNIMOD_Microcin, "delta_composition", "H(37) C(36) N(3) O(20)"}, {UNIMOD_Microcin, "spec_1_classification", "Post-translational"}, {UNIMOD_Microcin, "spec_1_hidden", "1"}, {UNIMOD_Microcin, "spec_1_position", "Protein C-term"}, {UNIMOD_Microcin, "spec_1_site", "C-term"}, {UNIMOD_Decanoyl, "approved", "1"}, {UNIMOD_Decanoyl, "delta_composition", "H(18) C(10) O"}, {UNIMOD_Decanoyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Decanoyl, "spec_1_hidden", "1"}, {UNIMOD_Decanoyl, "spec_1_position", "Anywhere"}, {UNIMOD_Decanoyl, "spec_1_site", "S"}, {UNIMOD_Decanoyl, "spec_2_classification", "Post-translational"}, {UNIMOD_Decanoyl, "spec_2_hidden", "1"}, {UNIMOD_Decanoyl, "spec_2_position", "Anywhere"}, {UNIMOD_Decanoyl, "spec_2_site", "T"}, {UNIMOD_Glu, "approved", "0"}, {UNIMOD_Glu, "delta_composition", "H(7) C(5) N O(3)"}, {UNIMOD_Glu, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Glu, "spec_1_hidden", "1"}, {UNIMOD_Glu, "spec_1_position", "Protein C-term"}, {UNIMOD_Glu, "spec_1_site", "C-term"}, {UNIMOD_Glu, "spec_2_classification", "Post-translational"}, {UNIMOD_Glu, "spec_2_hidden", "1"}, {UNIMOD_Glu, "spec_2_position", "Anywhere"}, {UNIMOD_Glu, "spec_2_site", "E"}, {UNIMOD_GluGlu, "approved", "0"}, {UNIMOD_GluGlu, "delta_composition", "H(14) C(10) N(2) O(6)"}, {UNIMOD_GluGlu, "spec_1_classification", "Post-translational"}, {UNIMOD_GluGlu, "spec_1_hidden", "1"}, {UNIMOD_GluGlu, "spec_1_position", "Protein C-term"}, {UNIMOD_GluGlu, "spec_1_site", "C-term"}, {UNIMOD_GluGlu, "spec_2_classification", "Post-translational"}, {UNIMOD_GluGlu, "spec_2_hidden", "1"}, {UNIMOD_GluGlu, "spec_2_position", "Anywhere"}, {UNIMOD_GluGlu, "spec_2_site", "E"}, {UNIMOD_GluGluGlu, "approved", "0"}, {UNIMOD_GluGluGlu, "delta_composition", "H(21) C(15) N(3) O(9)"}, {UNIMOD_GluGluGlu, "spec_1_classification", "Post-translational"}, {UNIMOD_GluGluGlu, "spec_1_hidden", "1"}, {UNIMOD_GluGluGlu, "spec_1_position", "Protein C-term"}, {UNIMOD_GluGluGlu, "spec_1_site", "C-term"}, {UNIMOD_GluGluGlu, "spec_2_classification", "Post-translational"}, {UNIMOD_GluGluGlu, "spec_2_hidden", "1"}, {UNIMOD_GluGluGlu, "spec_2_position", "Anywhere"}, {UNIMOD_GluGluGlu, "spec_2_site", "E"}, {UNIMOD_GluGluGluGlu, "approved", "0"}, {UNIMOD_GluGluGluGlu, "delta_composition", "H(28) C(20) N(4) O(12)"}, {UNIMOD_GluGluGluGlu, "spec_1_classification", "Post-translational"}, {UNIMOD_GluGluGluGlu, "spec_1_hidden", "1"}, {UNIMOD_GluGluGluGlu, "spec_1_position", "Protein C-term"}, {UNIMOD_GluGluGluGlu, "spec_1_site", "C-term"}, {UNIMOD_GluGluGluGlu, "spec_2_classification", "Post-translational"}, {UNIMOD_GluGluGluGlu, "spec_2_hidden", "1"}, {UNIMOD_GluGluGluGlu, "spec_2_position", "Anywhere"}, {UNIMOD_GluGluGluGlu, "spec_2_site", "E"}, {UNIMOD_HexN, "approved", "1"}, {UNIMOD_HexN, "delta_composition", "HexN"}, {UNIMOD_HexN, "spec_1_classification", "Synth. pep. protect. gp."}, {UNIMOD_HexN, "spec_1_hidden", "1"}, {UNIMOD_HexN, "spec_1_position", "Anywhere"}, {UNIMOD_HexN, "spec_1_site", "K"}, {UNIMOD_HexN, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_HexN, "spec_2_hidden", "1"}, {UNIMOD_HexN, "spec_2_position", "Anywhere"}, {UNIMOD_HexN, "spec_2_site", "N"}, {UNIMOD_HexN, "spec_3_classification", "O-linked glycosylation"}, {UNIMOD_HexN, "spec_3_classification", "O-linked glycosylation"}, {UNIMOD_HexN, "spec_3_hidden", "1"}, {UNIMOD_HexN, "spec_3_hidden", "1"}, {UNIMOD_HexN, "spec_3_position", "Anywhere"}, {UNIMOD_HexN, "spec_3_position", "Anywhere"}, {UNIMOD_HexN, "spec_3_site", "T"}, {UNIMOD_HexN, "spec_3_site", "S"}, {UNIMOD_HexN, "spec_4_classification", "Other glycosylation"}, {UNIMOD_HexN, "spec_4_hidden", "1"}, {UNIMOD_HexN, "spec_4_position", "Anywhere"}, {UNIMOD_HexN, "spec_4_site", "W"}, {UNIMOD_Xlink_DMP_154_, "approved", "0"}, {UNIMOD_Xlink_DMP_154_, "delta_composition", "H(14) C(8) N(2) O"}, {UNIMOD_Xlink_DMP_154_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_154_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DMP_154_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DMP_154_, "spec_1_site", "K"}, {UNIMOD_Xlink_DMP_154_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_154_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DMP_154_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DMP_154_, "spec_2_site", "N-term"}, {UNIMOD_NDA, "approved", "0"}, {UNIMOD_NDA, "delta_composition", "H(5) C(13) N"}, {UNIMOD_NDA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NDA, "spec_1_hidden", "1"}, {UNIMOD_NDA, "spec_1_position", "Anywhere"}, {UNIMOD_NDA, "spec_1_site", "K"}, {UNIMOD_NDA, "spec_2_classification", "Chemical derivative"}, {UNIMOD_NDA, "spec_2_hidden", "1"}, {UNIMOD_NDA, "spec_2_position", "Any N-term"}, {UNIMOD_NDA, "spec_2_site", "N-term"}, {UNIMOD_SPITC_13C_6_, "approved", "1"}, {UNIMOD_SPITC_13C_6_, "delta_composition", "H(5) C 13C(6) N O(3) S(2)"}, {UNIMOD_SPITC_13C_6_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_SPITC_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_SPITC_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_SPITC_13C_6_, "spec_1_site", "K"}, {UNIMOD_SPITC_13C_6_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_SPITC_13C_6_, "spec_2_hidden", "1"}, {UNIMOD_SPITC_13C_6_, "spec_2_position", "Any N-term"}, {UNIMOD_SPITC_13C_6_, "spec_2_site", "N-term"}, {UNIMOD_AEC_MAEC, "approved", "0"}, {UNIMOD_AEC_MAEC, "delta_composition", "H(5) C(2) N O(-1) S"}, {UNIMOD_AEC_MAEC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AEC_MAEC, "spec_1_hidden", "1"}, {UNIMOD_AEC_MAEC, "spec_1_position", "Anywhere"}, {UNIMOD_AEC_MAEC, "spec_1_site", "S"}, {UNIMOD_AEC_MAEC, "spec_2_classification", "Chemical derivative"}, {UNIMOD_AEC_MAEC, "spec_2_hidden", "1"}, {UNIMOD_AEC_MAEC, "spec_2_position", "Anywhere"}, {UNIMOD_AEC_MAEC, "spec_2_site", "T"}, {UNIMOD_TMAB, "approved", "0"}, {UNIMOD_TMAB, "delta_composition", "H(14) C(7) N O"}, {UNIMOD_TMAB, "spec_1_classification", "Isotopic label"}, {UNIMOD_TMAB, "spec_1_hidden", "1"}, {UNIMOD_TMAB, "spec_1_position", "Anywhere"}, {UNIMOD_TMAB, "spec_1_site", "K"}, {UNIMOD_TMAB, "spec_2_classification", "Isotopic label"}, {UNIMOD_TMAB, "spec_2_hidden", "1"}, {UNIMOD_TMAB, "spec_2_position", "Any N-term"}, {UNIMOD_TMAB, "spec_2_site", "N-term"}, {UNIMOD_TMAB_2H_9_, "approved", "0"}, {UNIMOD_TMAB_2H_9_, "delta_composition", "H(5) 2H(9) C(7) N O"}, {UNIMOD_TMAB_2H_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_TMAB_2H_9_, "spec_1_hidden", "1"}, {UNIMOD_TMAB_2H_9_, "spec_1_position", "Anywhere"}, {UNIMOD_TMAB_2H_9_, "spec_1_site", "K"}, {UNIMOD_TMAB_2H_9_, "spec_2_classification", "Isotopic label"}, {UNIMOD_TMAB_2H_9_, "spec_2_hidden", "1"}, {UNIMOD_TMAB_2H_9_, "spec_2_position", "Any N-term"}, {UNIMOD_TMAB_2H_9_, "spec_2_site", "N-term"}, {UNIMOD_FTC, "approved", "1"}, {UNIMOD_FTC, "delta_composition", "H(15) C(21) N(3) O(5) S"}, {UNIMOD_FTC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_FTC, "spec_1_hidden", "1"}, {UNIMOD_FTC, "spec_1_position", "Anywhere"}, {UNIMOD_FTC, "spec_1_site", "C"}, {UNIMOD_FTC, "spec_2_classification", "Chemical derivative"}, {UNIMOD_FTC, "spec_2_hidden", "1"}, {UNIMOD_FTC, "spec_2_position", "Anywhere"}, {UNIMOD_FTC, "spec_2_site", "K"}, {UNIMOD_FTC, "spec_3_classification", "Chemical derivative"}, {UNIMOD_FTC, "spec_3_hidden", "1"}, {UNIMOD_FTC, "spec_3_position", "Anywhere"}, {UNIMOD_FTC, "spec_3_site", "P"}, {UNIMOD_FTC, "spec_4_classification", "Chemical derivative"}, {UNIMOD_FTC, "spec_4_hidden", "1"}, {UNIMOD_FTC, "spec_4_position", "Anywhere"}, {UNIMOD_FTC, "spec_4_site", "R"}, {UNIMOD_FTC, "spec_5_classification", "Chemical derivative"}, {UNIMOD_FTC, "spec_5_hidden", "1"}, {UNIMOD_FTC, "spec_5_position", "Anywhere"}, {UNIMOD_FTC, "spec_5_site", "S"}, {UNIMOD_Label_2H_4_, "approved", "0"}, {UNIMOD_Label_2H_4_, "delta_composition", "H(-4) 2H(4)"}, {UNIMOD_Label_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_4_, "spec_1_site", "K"}, {UNIMOD_Label_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_, "spec_2_hidden", "1"}, {UNIMOD_Label_2H_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_2H_4_, "spec_2_site", "F"}, {UNIMOD_Label_2H_4_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_, "spec_3_hidden", "1"}, {UNIMOD_Label_2H_4_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_2H_4_, "spec_3_site", "Y"}, {UNIMOD_Label_2H_4_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_, "spec_4_hidden", "1"}, {UNIMOD_Label_2H_4_, "spec_4_position", "Anywhere"}, {UNIMOD_Label_2H_4_, "spec_4_site", "A"}, {UNIMOD_Label_2H_4_, "spec_5_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_, "spec_5_hidden", "1"}, {UNIMOD_Label_2H_4_, "spec_5_position", "Anywhere"}, {UNIMOD_Label_2H_4_, "spec_5_site", "U"}, {UNIMOD_DHP, "approved", "0"}, {UNIMOD_DHP, "delta_composition", "H(8) C(8) N"}, {UNIMOD_DHP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DHP, "spec_1_hidden", "1"}, {UNIMOD_DHP, "spec_1_position", "Anywhere"}, {UNIMOD_DHP, "spec_1_site", "C"}, {UNIMOD_Hep, "approved", "1"}, {UNIMOD_Hep, "delta_composition", "Hep"}, {UNIMOD_Hep, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Hep, "spec_1_hidden", "1"}, {UNIMOD_Hep, "spec_1_position", "Anywhere"}, {UNIMOD_Hep, "spec_1_site", "K"}, {UNIMOD_Hep, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hep, "spec_2_hidden", "1"}, {UNIMOD_Hep, "spec_2_position", "Anywhere"}, {UNIMOD_Hep, "spec_2_site", "N"}, {UNIMOD_Hep, "spec_3_classification", "Other glycosylation"}, {UNIMOD_Hep, "spec_3_hidden", "1"}, {UNIMOD_Hep, "spec_3_position", "Anywhere"}, {UNIMOD_Hep, "spec_3_site", "Q"}, {UNIMOD_Hep, "spec_4_classification", "N-linked glycosylation"}, {UNIMOD_Hep, "spec_4_hidden", "1"}, {UNIMOD_Hep, "spec_4_position", "Anywhere"}, {UNIMOD_Hep, "spec_4_site", "R"}, {UNIMOD_Hep, "spec_5_classification", "O-linked glycosylation"}, {UNIMOD_Hep, "spec_5_classification", "O-linked glycosylation"}, {UNIMOD_Hep, "spec_5_hidden", "1"}, {UNIMOD_Hep, "spec_5_hidden", "1"}, {UNIMOD_Hep, "spec_5_position", "Anywhere"}, {UNIMOD_Hep, "spec_5_position", "Anywhere"}, {UNIMOD_Hep, "spec_5_site", "T"}, {UNIMOD_Hep, "spec_5_site", "S"}, {UNIMOD_BADGE, "approved", "0"}, {UNIMOD_BADGE, "delta_composition", "H(24) C(21) O(4)"}, {UNIMOD_BADGE, "spec_1_classification", "Non-standard residue"}, {UNIMOD_BADGE, "spec_1_hidden", "1"}, {UNIMOD_BADGE, "spec_1_position", "Anywhere"}, {UNIMOD_BADGE, "spec_1_site", "C"}, {UNIMOD_CyDye_Cy3, "approved", "0"}, {UNIMOD_CyDye_Cy3, "delta_composition", "H(44) C(37) N(4) O(6) S"}, {UNIMOD_CyDye_Cy3, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CyDye_Cy3, "spec_1_hidden", "1"}, {UNIMOD_CyDye_Cy3, "spec_1_position", "Anywhere"}, {UNIMOD_CyDye_Cy3, "spec_1_site", "C"}, {UNIMOD_CyDye_Cy5, "approved", "0"}, {UNIMOD_CyDye_Cy5, "delta_composition", "H(44) C(38) N(4) O(6) S"}, {UNIMOD_CyDye_Cy5, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CyDye_Cy5, "spec_1_hidden", "1"}, {UNIMOD_CyDye_Cy5, "spec_1_position", "Anywhere"}, {UNIMOD_CyDye_Cy5, "spec_1_site", "C"}, {UNIMOD_BHTOH, "approved", "0"}, {UNIMOD_BHTOH, "delta_composition", "H(22) C(15) O(2)"}, {UNIMOD_BHTOH, "spec_1_classification", "Other"}, {UNIMOD_BHTOH, "spec_1_hidden", "1"}, {UNIMOD_BHTOH, "spec_1_position", "Anywhere"}, {UNIMOD_BHTOH, "spec_1_site", "C"}, {UNIMOD_BHTOH, "spec_2_classification", "Other"}, {UNIMOD_BHTOH, "spec_2_hidden", "1"}, {UNIMOD_BHTOH, "spec_2_position", "Anywhere"}, {UNIMOD_BHTOH, "spec_2_site", "H"}, {UNIMOD_BHTOH, "spec_3_classification", "Other"}, {UNIMOD_BHTOH, "spec_3_hidden", "1"}, {UNIMOD_BHTOH, "spec_3_position", "Anywhere"}, {UNIMOD_BHTOH, "spec_3_site", "K"}, {UNIMOD_IGBP_13C_2_, "approved", "1"}, {UNIMOD_IGBP_13C_2_, "delta_composition", "H(13) C(10) 13C(2) N(2) O(2) Br"}, {UNIMOD_IGBP_13C_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_IGBP_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_IGBP_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_IGBP_13C_2_, "spec_1_site", "C"}, {UNIMOD_Nmethylmaleimide_water, "approved", "0"}, {UNIMOD_Nmethylmaleimide_water, "delta_composition", "H(7) C(5) N O(3)"}, {UNIMOD_Nmethylmaleimide_water, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Nmethylmaleimide_water, "spec_1_hidden", "1"}, {UNIMOD_Nmethylmaleimide_water, "spec_1_position", "Anywhere"}, {UNIMOD_Nmethylmaleimide_water, "spec_1_site", "C"}, {UNIMOD_PyMIC, "approved", "0"}, {UNIMOD_PyMIC, "delta_composition", "H(6) C(7) N(2) O"}, {UNIMOD_PyMIC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PyMIC, "spec_1_hidden", "1"}, {UNIMOD_PyMIC, "spec_1_position", "Any N-term"}, {UNIMOD_PyMIC, "spec_1_site", "N-term"}, {UNIMOD_LG_lactam_K, "approved", "0"}, {UNIMOD_LG_lactam_K, "delta_composition", "H(28) C(20) O(4)"}, {UNIMOD_LG_lactam_K, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_lactam_K, "spec_1_hidden", "1"}, {UNIMOD_LG_lactam_K, "spec_1_position", "Anywhere"}, {UNIMOD_LG_lactam_K, "spec_1_site", "K"}, {UNIMOD_LG_lactam_K, "spec_2_classification", "Post-translational"}, {UNIMOD_LG_lactam_K, "spec_2_hidden", "1"}, {UNIMOD_LG_lactam_K, "spec_2_position", "Protein N-term"}, {UNIMOD_LG_lactam_K, "spec_2_site", "N-term"}, {UNIMOD_LG_Hlactam_K, "approved", "0"}, {UNIMOD_LG_Hlactam_K, "delta_composition", "H(28) C(20) O(5)"}, {UNIMOD_LG_Hlactam_K, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_Hlactam_K, "spec_1_hidden", "1"}, {UNIMOD_LG_Hlactam_K, "spec_1_position", "Anywhere"}, {UNIMOD_LG_Hlactam_K, "spec_1_site", "K"}, {UNIMOD_LG_Hlactam_K, "spec_2_classification", "Post-translational"}, {UNIMOD_LG_Hlactam_K, "spec_2_hidden", "1"}, {UNIMOD_LG_Hlactam_K, "spec_2_position", "Protein N-term"}, {UNIMOD_LG_Hlactam_K, "spec_2_site", "N-term"}, {UNIMOD_LG_lactam_R, "approved", "0"}, {UNIMOD_LG_lactam_R, "delta_composition", "H(26) C(19) N(-2) O(4)"}, {UNIMOD_LG_lactam_R, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_lactam_R, "spec_1_hidden", "1"}, {UNIMOD_LG_lactam_R, "spec_1_position", "Anywhere"}, {UNIMOD_LG_lactam_R, "spec_1_site", "R"}, {UNIMOD_LG_Hlactam_R, "approved", "0"}, {UNIMOD_LG_Hlactam_R, "delta_composition", "H(26) C(19) N(-2) O(5)"}, {UNIMOD_LG_Hlactam_R, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_Hlactam_R, "spec_1_hidden", "1"}, {UNIMOD_LG_Hlactam_R, "spec_1_position", "Anywhere"}, {UNIMOD_LG_Hlactam_R, "spec_1_site", "R"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "approved", "1"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "delta_composition", "2H(4) 13C(2)"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_1_site", "K"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_2_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_2_position", "Any N-term"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_2_site", "N-term"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_3_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_3_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_3_site", "R"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_4_hidden", "1"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_4_position", "Protein N-term"}, {UNIMOD_Dimethyl_2H_4_13C_2_, "spec_4_site", "N-term"}, {UNIMOD_Hex_2_, "approved", "0"}, {UNIMOD_Hex_2_, "delta_composition", "Hex(2)"}, {UNIMOD_Hex_2_, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Hex_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_, "spec_1_site", "K"}, {UNIMOD_Hex_2_, "spec_2_classification", "Other glycosylation"}, {UNIMOD_Hex_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_, "spec_2_site", "R"}, {UNIMOD_Hex_2_, "spec_3_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_, "spec_3_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_, "spec_3_hidden", "1"}, {UNIMOD_Hex_2_, "spec_3_hidden", "1"}, {UNIMOD_Hex_2_, "spec_3_position", "Anywhere"}, {UNIMOD_Hex_2_, "spec_3_position", "Anywhere"}, {UNIMOD_Hex_2_, "spec_3_site", "S"}, {UNIMOD_Hex_2_, "spec_3_site", "T"}, {UNIMOD_C8_QAT, "approved", "0"}, {UNIMOD_C8_QAT, "delta_composition", "H(29) C(14) N O"}, {UNIMOD_C8_QAT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_C8_QAT, "spec_1_hidden", "1"}, {UNIMOD_C8_QAT, "spec_1_position", "Anywhere"}, {UNIMOD_C8_QAT, "spec_1_site", "K"}, {UNIMOD_C8_QAT, "spec_2_classification", "Chemical derivative"}, {UNIMOD_C8_QAT, "spec_2_hidden", "1"}, {UNIMOD_C8_QAT, "spec_2_position", "Any N-term"}, {UNIMOD_C8_QAT, "spec_2_site", "N-term"}, {UNIMOD_PropylNAGthiazoline, "approved", "0"}, {UNIMOD_PropylNAGthiazoline, "delta_composition", "H(14) C(9) N O(4) S"}, {UNIMOD_PropylNAGthiazoline, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PropylNAGthiazoline, "spec_1_hidden", "1"}, {UNIMOD_PropylNAGthiazoline, "spec_1_position", "Anywhere"}, {UNIMOD_PropylNAGthiazoline, "spec_1_site", "C"}, {UNIMOD_FNEM, "approved", "0"}, {UNIMOD_FNEM, "delta_composition", "H(13) C(24) N O(7)"}, {UNIMOD_FNEM, "spec_1_classification", "Chemical derivative"}, {UNIMOD_FNEM, "spec_1_hidden", "1"}, {UNIMOD_FNEM, "spec_1_position", "Anywhere"}, {UNIMOD_FNEM, "spec_1_site", "C"}, {UNIMOD_Diethyl, "approved", "0"}, {UNIMOD_Diethyl, "delta_composition", "H(8) C(4)"}, {UNIMOD_Diethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Diethyl, "spec_1_hidden", "1"}, {UNIMOD_Diethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Diethyl, "spec_1_site", "K"}, {UNIMOD_Diethyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Diethyl, "spec_2_hidden", "1"}, {UNIMOD_Diethyl, "spec_2_position", "Any N-term"}, {UNIMOD_Diethyl, "spec_2_site", "N-term"}, {UNIMOD_BisANS, "approved", "0"}, {UNIMOD_BisANS, "delta_composition", "H(22) C(32) N(2) O(6) S(2)"}, {UNIMOD_BisANS, "spec_1_classification", "Chemical derivative"}, {UNIMOD_BisANS, "spec_1_hidden", "1"}, {UNIMOD_BisANS, "spec_1_position", "Anywhere"}, {UNIMOD_BisANS, "spec_1_site", "K"}, {UNIMOD_Piperidine, "approved", "0"}, {UNIMOD_Piperidine, "delta_composition", "H(8) C(5)"}, {UNIMOD_Piperidine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Piperidine, "spec_1_hidden", "1"}, {UNIMOD_Piperidine, "spec_1_position", "Anywhere"}, {UNIMOD_Piperidine, "spec_1_site", "K"}, {UNIMOD_Piperidine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Piperidine, "spec_2_hidden", "1"}, {UNIMOD_Piperidine, "spec_2_position", "Any N-term"}, {UNIMOD_Piperidine, "spec_2_site", "N-term"}, {UNIMOD_Maleimide_PEO2_Biotin, "approved", "0"}, {UNIMOD_Maleimide_PEO2_Biotin, "delta_composition", "H(35) C(23) N(5) O(7) S"}, {UNIMOD_Maleimide_PEO2_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Maleimide_PEO2_Biotin, "spec_1_hidden", "1"}, {UNIMOD_Maleimide_PEO2_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_Maleimide_PEO2_Biotin, "spec_1_site", "C"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "approved", "0"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "delta_composition", "H(36) C(22) N(4) O(4) S"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_1_hidden", "1"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_1_position", "Anywhere"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_1_site", "K"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_2_hidden", "1"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_2_position", "Any N-term"}, {UNIMOD_Sulfo_NHS_LC_LC_Biotin, "spec_2_site", "N-term"}, {UNIMOD_CLIP_TRAQ_2, "approved", "0"}, {UNIMOD_CLIP_TRAQ_2, "delta_composition", "H(12) C(6) 13C N(2) O"}, {UNIMOD_CLIP_TRAQ_2, "spec_1_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_2, "spec_1_hidden", "1"}, {UNIMOD_CLIP_TRAQ_2, "spec_1_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_2, "spec_1_site", "K"}, {UNIMOD_CLIP_TRAQ_2, "spec_2_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_2, "spec_2_hidden", "1"}, {UNIMOD_CLIP_TRAQ_2, "spec_2_position", "Any N-term"}, {UNIMOD_CLIP_TRAQ_2, "spec_2_site", "N-term"}, {UNIMOD_CLIP_TRAQ_2, "spec_3_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_2, "spec_3_hidden", "1"}, {UNIMOD_CLIP_TRAQ_2, "spec_3_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_2, "spec_3_site", "Y"}, {UNIMOD_Dethiomethyl, "approved", "1"}, {UNIMOD_Dethiomethyl, "delta_composition", "H(-4) C(-1) S(-1)"}, {UNIMOD_Dethiomethyl, "spec_1_classification", "Artefact"}, {UNIMOD_Dethiomethyl, "spec_1_hidden", "1"}, {UNIMOD_Dethiomethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dethiomethyl, "spec_1_site", "M"}, {UNIMOD_Methyl_Deamidated, "approved", "1"}, {UNIMOD_Methyl_Deamidated, "delta_composition", "H C N(-1) O"}, {UNIMOD_Methyl_Deamidated, "spec_1_classification", "Post-translational"}, {UNIMOD_Methyl_Deamidated, "spec_1_hidden", "1"}, {UNIMOD_Methyl_Deamidated, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_Deamidated, "spec_1_site", "Q"}, {UNIMOD_Methyl_Deamidated, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Methyl_Deamidated, "spec_2_hidden", "1"}, {UNIMOD_Methyl_Deamidated, "spec_2_position", "Anywhere"}, {UNIMOD_Methyl_Deamidated, "spec_2_site", "N"}, {UNIMOD_Delta_H_5_C_2_, "approved", "1"}, {UNIMOD_Delta_H_5_C_2_, "delta_composition", "H(5) C(2)"}, {UNIMOD_Delta_H_5_C_2_, "spec_1_classification", "Post-translational"}, {UNIMOD_Delta_H_5_C_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_5_C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_5_C_2_, "spec_1_site", "P"}, {UNIMOD_Cation_K, "approved", "1"}, {UNIMOD_Cation_K, "delta_composition", "H(-1) K"}, {UNIMOD_Cation_K, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_K, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_K, "spec_1_hidden", "1"}, {UNIMOD_Cation_K, "spec_1_hidden", "1"}, {UNIMOD_Cation_K, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_K, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_K, "spec_1_site", "E"}, {UNIMOD_Cation_K, "spec_1_site", "D"}, {UNIMOD_Cation_K, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_K, "spec_2_hidden", "1"}, {UNIMOD_Cation_K, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_K, "spec_2_site", "C-term"}, {UNIMOD_Cation_Cu_I_, "approved", "1"}, {UNIMOD_Cation_Cu_I_, "delta_composition", "H(-1) Cu"}, {UNIMOD_Cation_Cu_I_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Cu_I_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Cu_I_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Cu_I_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Cu_I_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Cu_I_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Cu_I_, "spec_1_site", "E"}, {UNIMOD_Cation_Cu_I_, "spec_1_site", "D"}, {UNIMOD_Cation_Cu_I_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Cu_I_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Cu_I_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Cu_I_, "spec_2_site", "C-term"}, {UNIMOD_Cation_Cu_I_, "spec_3_classification", "Artefact"}, {UNIMOD_Cation_Cu_I_, "spec_3_hidden", "1"}, {UNIMOD_Cation_Cu_I_, "spec_3_position", "Anywhere"}, {UNIMOD_Cation_Cu_I_, "spec_3_site", "H"}, {UNIMOD_iTRAQ4plex114, "approved", "0"}, {UNIMOD_iTRAQ4plex114, "delta_composition", "H(12) C(5) 13C(2) N(2) 18O"}, {UNIMOD_iTRAQ4plex114, "spec_1_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex114, "spec_1_hidden", "1"}, {UNIMOD_iTRAQ4plex114, "spec_1_position", "Anywhere"}, {UNIMOD_iTRAQ4plex114, "spec_1_site", "K"}, {UNIMOD_iTRAQ4plex114, "spec_2_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex114, "spec_2_hidden", "1"}, {UNIMOD_iTRAQ4plex114, "spec_2_position", "Any N-term"}, {UNIMOD_iTRAQ4plex114, "spec_2_site", "N-term"}, {UNIMOD_iTRAQ4plex114, "spec_3_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex114, "spec_3_hidden", "1"}, {UNIMOD_iTRAQ4plex114, "spec_3_position", "Anywhere"}, {UNIMOD_iTRAQ4plex114, "spec_3_site", "Y"}, {UNIMOD_iTRAQ4plex114, "spec_4_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex114, "spec_4_hidden", "1"}, {UNIMOD_iTRAQ4plex114, "spec_4_position", "Anywhere"}, {UNIMOD_iTRAQ4plex114, "spec_4_site", "C"}, {UNIMOD_iTRAQ4plex115, "approved", "0"}, {UNIMOD_iTRAQ4plex115, "delta_composition", "H(12) C(6) 13C N 15N 18O"}, {UNIMOD_iTRAQ4plex115, "spec_1_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex115, "spec_1_hidden", "1"}, {UNIMOD_iTRAQ4plex115, "spec_1_position", "Anywhere"}, {UNIMOD_iTRAQ4plex115, "spec_1_site", "K"}, {UNIMOD_iTRAQ4plex115, "spec_2_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex115, "spec_2_hidden", "1"}, {UNIMOD_iTRAQ4plex115, "spec_2_position", "Any N-term"}, {UNIMOD_iTRAQ4plex115, "spec_2_site", "N-term"}, {UNIMOD_iTRAQ4plex115, "spec_3_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex115, "spec_3_hidden", "1"}, {UNIMOD_iTRAQ4plex115, "spec_3_position", "Anywhere"}, {UNIMOD_iTRAQ4plex115, "spec_3_site", "Y"}, {UNIMOD_iTRAQ4plex115, "spec_4_classification", "Isotopic label"}, {UNIMOD_iTRAQ4plex115, "spec_4_hidden", "1"}, {UNIMOD_iTRAQ4plex115, "spec_4_position", "Anywhere"}, {UNIMOD_iTRAQ4plex115, "spec_4_site", "C"}, {UNIMOD_Dibromo, "approved", "1"}, {UNIMOD_Dibromo, "delta_composition", "H(-2) Br(2)"}, {UNIMOD_Dibromo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Dibromo, "spec_1_hidden", "1"}, {UNIMOD_Dibromo, "spec_1_position", "Anywhere"}, {UNIMOD_Dibromo, "spec_1_site", "Y"}, {UNIMOD_LRGG, "approved", "1"}, {UNIMOD_LRGG, "delta_composition", "H(29) C(16) N(7) O(4)"}, {UNIMOD_LRGG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_LRGG, "spec_1_hidden", "1"}, {UNIMOD_LRGG, "spec_1_position", "Anywhere"}, {UNIMOD_LRGG, "spec_1_site", "K"}, {UNIMOD_CLIP_TRAQ_3, "approved", "0"}, {UNIMOD_CLIP_TRAQ_3, "delta_composition", "H(20) C(11) 13C N(3) O(4)"}, {UNIMOD_CLIP_TRAQ_3, "spec_1_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_3, "spec_1_hidden", "1"}, {UNIMOD_CLIP_TRAQ_3, "spec_1_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_3, "spec_1_site", "K"}, {UNIMOD_CLIP_TRAQ_3, "spec_2_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_3, "spec_2_hidden", "1"}, {UNIMOD_CLIP_TRAQ_3, "spec_2_position", "Any N-term"}, {UNIMOD_CLIP_TRAQ_3, "spec_2_site", "N-term"}, {UNIMOD_CLIP_TRAQ_3, "spec_3_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_3, "spec_3_hidden", "1"}, {UNIMOD_CLIP_TRAQ_3, "spec_3_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_3, "spec_3_site", "Y"}, {UNIMOD_CLIP_TRAQ_4, "approved", "0"}, {UNIMOD_CLIP_TRAQ_4, "delta_composition", "H(15) C(9) 13C N(2) O(5)"}, {UNIMOD_CLIP_TRAQ_4, "spec_1_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_4, "spec_1_hidden", "1"}, {UNIMOD_CLIP_TRAQ_4, "spec_1_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_4, "spec_1_site", "K"}, {UNIMOD_CLIP_TRAQ_4, "spec_2_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_4, "spec_2_hidden", "1"}, {UNIMOD_CLIP_TRAQ_4, "spec_2_position", "Any N-term"}, {UNIMOD_CLIP_TRAQ_4, "spec_2_site", "N-term"}, {UNIMOD_CLIP_TRAQ_4, "spec_3_classification", "Isotopic label"}, {UNIMOD_CLIP_TRAQ_4, "spec_3_hidden", "1"}, {UNIMOD_CLIP_TRAQ_4, "spec_3_position", "Anywhere"}, {UNIMOD_CLIP_TRAQ_4, "spec_3_site", "Y"}, {UNIMOD_Biotin_Cayman_10141, "approved", "0"}, {UNIMOD_Biotin_Cayman_10141, "delta_composition", "H(54) C(35) N(4) O(4) S"}, {UNIMOD_Biotin_Cayman_10141, "spec_1_classification", "Other"}, {UNIMOD_Biotin_Cayman_10141, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Cayman_10141, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Cayman_10141, "spec_1_site", "C"}, {UNIMOD_Biotin_Cayman_10013, "approved", "0"}, {UNIMOD_Biotin_Cayman_10013, "delta_composition", "H(60) C(36) N(4) O(5) S"}, {UNIMOD_Biotin_Cayman_10013, "spec_1_classification", "Other"}, {UNIMOD_Biotin_Cayman_10013, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Cayman_10013, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Cayman_10013, "spec_1_site", "C"}, {UNIMOD_Ala__Ser, "approved", "0"}, {UNIMOD_Ala__Ser, "delta_composition", "O"}, {UNIMOD_Ala__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Ser, "spec_1_hidden", "1"}, {UNIMOD_Ala__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Ser, "spec_1_site", "A"}, {UNIMOD_Ala__Thr, "approved", "0"}, {UNIMOD_Ala__Thr, "delta_composition", "H(2) C O"}, {UNIMOD_Ala__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Thr, "spec_1_hidden", "1"}, {UNIMOD_Ala__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Thr, "spec_1_site", "A"}, {UNIMOD_Ala__Asp, "approved", "0"}, {UNIMOD_Ala__Asp, "delta_composition", "C O(2)"}, {UNIMOD_Ala__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Asp, "spec_1_hidden", "1"}, {UNIMOD_Ala__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Asp, "spec_1_site", "A"}, {UNIMOD_Ala__Pro, "approved", "0"}, {UNIMOD_Ala__Pro, "delta_composition", "H(2) C(2)"}, {UNIMOD_Ala__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Pro, "spec_1_hidden", "1"}, {UNIMOD_Ala__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Pro, "spec_1_site", "A"}, {UNIMOD_Ala__Gly, "approved", "0"}, {UNIMOD_Ala__Gly, "delta_composition", "H(-2) C(-1)"}, {UNIMOD_Ala__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Gly, "spec_1_hidden", "1"}, {UNIMOD_Ala__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Gly, "spec_1_site", "A"}, {UNIMOD_Ala__Glu, "approved", "0"}, {UNIMOD_Ala__Glu, "delta_composition", "H(2) C(2) O(2)"}, {UNIMOD_Ala__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Glu, "spec_1_hidden", "1"}, {UNIMOD_Ala__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Glu, "spec_1_site", "A"}, {UNIMOD_Ala__Val, "approved", "0"}, {UNIMOD_Ala__Val, "delta_composition", "H(4) C(2)"}, {UNIMOD_Ala__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Val, "spec_1_hidden", "1"}, {UNIMOD_Ala__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Val, "spec_1_site", "A"}, {UNIMOD_Cys__Phe, "approved", "0"}, {UNIMOD_Cys__Phe, "delta_composition", "H(4) C(6) S(-1)"}, {UNIMOD_Cys__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Phe, "spec_1_hidden", "1"}, {UNIMOD_Cys__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Phe, "spec_1_site", "C"}, {UNIMOD_Cys__Ser, "approved", "0"}, {UNIMOD_Cys__Ser, "delta_composition", "O S(-1)"}, {UNIMOD_Cys__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Ser, "spec_1_hidden", "1"}, {UNIMOD_Cys__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Ser, "spec_1_site", "C"}, {UNIMOD_Cys__Trp, "approved", "0"}, {UNIMOD_Cys__Trp, "delta_composition", "H(5) C(8) N S(-1)"}, {UNIMOD_Cys__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Trp, "spec_1_hidden", "1"}, {UNIMOD_Cys__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Trp, "spec_1_site", "C"}, {UNIMOD_Cys__Tyr, "approved", "0"}, {UNIMOD_Cys__Tyr, "delta_composition", "H(4) C(6) O S(-1)"}, {UNIMOD_Cys__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Cys__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Tyr, "spec_1_site", "C"}, {UNIMOD_Cys__Arg, "approved", "0"}, {UNIMOD_Cys__Arg, "delta_composition", "H(7) C(3) N(3) S(-1)"}, {UNIMOD_Cys__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Arg, "spec_1_hidden", "1"}, {UNIMOD_Cys__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Arg, "spec_1_site", "C"}, {UNIMOD_Cys__Gly, "approved", "0"}, {UNIMOD_Cys__Gly, "delta_composition", "H(-2) C(-1) S(-1)"}, {UNIMOD_Cys__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Gly, "spec_1_hidden", "1"}, {UNIMOD_Cys__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Gly, "spec_1_site", "C"}, {UNIMOD_Asp__Ala, "approved", "0"}, {UNIMOD_Asp__Ala, "delta_composition", "C(-1) O(-2)"}, {UNIMOD_Asp__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Ala, "spec_1_hidden", "1"}, {UNIMOD_Asp__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Ala, "spec_1_site", "D"}, {UNIMOD_Asp__His, "approved", "0"}, {UNIMOD_Asp__His, "delta_composition", "H(2) C(2) N(2) O(-2)"}, {UNIMOD_Asp__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__His, "spec_1_hidden", "1"}, {UNIMOD_Asp__His, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__His, "spec_1_site", "D"}, {UNIMOD_Asp__Asn, "approved", "0"}, {UNIMOD_Asp__Asn, "delta_composition", "H N O(-1)"}, {UNIMOD_Asp__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Asn, "spec_1_hidden", "1"}, {UNIMOD_Asp__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Asn, "spec_1_site", "D"}, {UNIMOD_Asp__Gly, "approved", "0"}, {UNIMOD_Asp__Gly, "delta_composition", "H(-2) C(-2) O(-2)"}, {UNIMOD_Asp__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Gly, "spec_1_hidden", "1"}, {UNIMOD_Asp__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Gly, "spec_1_site", "D"}, {UNIMOD_Asp__Tyr, "approved", "0"}, {UNIMOD_Asp__Tyr, "delta_composition", "H(4) C(5) O(-1)"}, {UNIMOD_Asp__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Asp__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Tyr, "spec_1_site", "D"}, {UNIMOD_Asp__Glu, "approved", "0"}, {UNIMOD_Asp__Glu, "delta_composition", "H(2) C"}, {UNIMOD_Asp__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Glu, "spec_1_hidden", "1"}, {UNIMOD_Asp__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Glu, "spec_1_site", "D"}, {UNIMOD_Asp__Val, "approved", "0"}, {UNIMOD_Asp__Val, "delta_composition", "H(4) C O(-2)"}, {UNIMOD_Asp__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Val, "spec_1_hidden", "1"}, {UNIMOD_Asp__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Val, "spec_1_site", "D"}, {UNIMOD_Glu__Ala, "approved", "0"}, {UNIMOD_Glu__Ala, "delta_composition", "H(-2) C(-2) O(-2)"}, {UNIMOD_Glu__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Ala, "spec_1_hidden", "1"}, {UNIMOD_Glu__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Ala, "spec_1_site", "E"}, {UNIMOD_Glu__Gln, "approved", "0"}, {UNIMOD_Glu__Gln, "delta_composition", "H N O(-1)"}, {UNIMOD_Glu__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Gln, "spec_1_hidden", "1"}, {UNIMOD_Glu__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Gln, "spec_1_site", "E"}, {UNIMOD_Glu__Asp, "approved", "0"}, {UNIMOD_Glu__Asp, "delta_composition", "H(-2) C(-1)"}, {UNIMOD_Glu__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Asp, "spec_1_hidden", "1"}, {UNIMOD_Glu__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Asp, "spec_1_site", "E"}, {UNIMOD_Glu__Lys, "approved", "0"}, {UNIMOD_Glu__Lys, "delta_composition", "H(5) C N O(-2)"}, {UNIMOD_Glu__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Lys, "spec_1_hidden", "1"}, {UNIMOD_Glu__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Lys, "spec_1_site", "E"}, {UNIMOD_Glu__Gly, "approved", "0"}, {UNIMOD_Glu__Gly, "delta_composition", "H(-4) C(-3) O(-2)"}, {UNIMOD_Glu__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Gly, "spec_1_hidden", "1"}, {UNIMOD_Glu__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Gly, "spec_1_site", "E"}, {UNIMOD_Glu__Val, "approved", "0"}, {UNIMOD_Glu__Val, "delta_composition", "H(2) O(-2)"}, {UNIMOD_Glu__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Val, "spec_1_hidden", "1"}, {UNIMOD_Glu__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Val, "spec_1_site", "E"}, {UNIMOD_Phe__Ser, "approved", "0"}, {UNIMOD_Phe__Ser, "delta_composition", "H(-4) C(-6) O"}, {UNIMOD_Phe__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Ser, "spec_1_hidden", "1"}, {UNIMOD_Phe__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Ser, "spec_1_site", "F"}, {UNIMOD_Phe__Cys, "approved", "0"}, {UNIMOD_Phe__Cys, "delta_composition", "H(-4) C(-6) S"}, {UNIMOD_Phe__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Cys, "spec_1_hidden", "1"}, {UNIMOD_Phe__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Cys, "spec_1_site", "F"}, {UNIMOD_Phe__Xle, "approved", "0"}, {UNIMOD_Phe__Xle, "delta_composition", "H(2) C(-3)"}, {UNIMOD_Phe__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Xle, "spec_1_hidden", "1"}, {UNIMOD_Phe__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Xle, "spec_1_site", "F"}, {UNIMOD_Phe__Tyr, "approved", "0"}, {UNIMOD_Phe__Tyr, "delta_composition", "O"}, {UNIMOD_Phe__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Phe__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Tyr, "spec_1_site", "F"}, {UNIMOD_Phe__Val, "approved", "0"}, {UNIMOD_Phe__Val, "delta_composition", "C(-4)"}, {UNIMOD_Phe__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Val, "spec_1_hidden", "1"}, {UNIMOD_Phe__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Val, "spec_1_site", "F"}, {UNIMOD_Gly__Ala, "approved", "0"}, {UNIMOD_Gly__Ala, "delta_composition", "H(2) C"}, {UNIMOD_Gly__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Ala, "spec_1_hidden", "1"}, {UNIMOD_Gly__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Ala, "spec_1_site", "G"}, {UNIMOD_Gly__Ser, "approved", "0"}, {UNIMOD_Gly__Ser, "delta_composition", "H(2) C O"}, {UNIMOD_Gly__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Ser, "spec_1_hidden", "1"}, {UNIMOD_Gly__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Ser, "spec_1_site", "G"}, {UNIMOD_Gly__Trp, "approved", "0"}, {UNIMOD_Gly__Trp, "delta_composition", "H(7) C(9) N"}, {UNIMOD_Gly__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Trp, "spec_1_hidden", "1"}, {UNIMOD_Gly__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Trp, "spec_1_site", "G"}, {UNIMOD_Gly__Glu, "approved", "0"}, {UNIMOD_Gly__Glu, "delta_composition", "H(4) C(3) O(2)"}, {UNIMOD_Gly__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Glu, "spec_1_hidden", "1"}, {UNIMOD_Gly__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Glu, "spec_1_site", "G"}, {UNIMOD_Gly__Val, "approved", "0"}, {UNIMOD_Gly__Val, "delta_composition", "H(6) C(3)"}, {UNIMOD_Gly__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Val, "spec_1_hidden", "1"}, {UNIMOD_Gly__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Val, "spec_1_site", "G"}, {UNIMOD_Gly__Asp, "approved", "0"}, {UNIMOD_Gly__Asp, "delta_composition", "H(2) C(2) O(2)"}, {UNIMOD_Gly__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Asp, "spec_1_hidden", "1"}, {UNIMOD_Gly__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Asp, "spec_1_site", "G"}, {UNIMOD_Gly__Cys, "approved", "0"}, {UNIMOD_Gly__Cys, "delta_composition", "H(2) C S"}, {UNIMOD_Gly__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Cys, "spec_1_hidden", "1"}, {UNIMOD_Gly__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Cys, "spec_1_site", "G"}, {UNIMOD_Gly__Arg, "approved", "0"}, {UNIMOD_Gly__Arg, "delta_composition", "H(9) C(4) N(3)"}, {UNIMOD_Gly__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Arg, "spec_1_hidden", "1"}, {UNIMOD_Gly__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Arg, "spec_1_site", "G"}, {UNIMOD_His__Pro, "approved", "0"}, {UNIMOD_His__Pro, "delta_composition", "C(-1) N(-2)"}, {UNIMOD_His__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Pro, "spec_1_hidden", "1"}, {UNIMOD_His__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_His__Pro, "spec_1_site", "H"}, {UNIMOD_His__Tyr, "approved", "0"}, {UNIMOD_His__Tyr, "delta_composition", "H(2) C(3) N(-2) O"}, {UNIMOD_His__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Tyr, "spec_1_hidden", "1"}, {UNIMOD_His__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_His__Tyr, "spec_1_site", "H"}, {UNIMOD_His__Gln, "approved", "0"}, {UNIMOD_His__Gln, "delta_composition", "H C(-1) N(-1) O"}, {UNIMOD_His__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Gln, "spec_1_hidden", "1"}, {UNIMOD_His__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_His__Gln, "spec_1_site", "H"}, {UNIMOD_His__Arg, "approved", "0"}, {UNIMOD_His__Arg, "delta_composition", "H(5) N"}, {UNIMOD_His__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Arg, "spec_1_hidden", "1"}, {UNIMOD_His__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_His__Arg, "spec_1_site", "H"}, {UNIMOD_His__Xle, "approved", "0"}, {UNIMOD_His__Xle, "delta_composition", "H(4) N(-2)"}, {UNIMOD_His__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Xle, "spec_1_hidden", "1"}, {UNIMOD_His__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_His__Xle, "spec_1_site", "H"}, {UNIMOD_Xle__Thr, "approved", "0"}, {UNIMOD_Xle__Thr, "delta_composition", "H(-4) C(-2) O"}, {UNIMOD_Xle__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Thr, "spec_1_hidden", "1"}, {UNIMOD_Xle__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Thr, "spec_1_site", "I"}, {UNIMOD_Xle__Thr, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Thr, "spec_2_hidden", "1"}, {UNIMOD_Xle__Thr, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Thr, "spec_2_site", "L"}, {UNIMOD_Xle__Asn, "approved", "0"}, {UNIMOD_Xle__Asn, "delta_composition", "H(-5) C(-2) N O"}, {UNIMOD_Xle__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Asn, "spec_1_hidden", "1"}, {UNIMOD_Xle__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Asn, "spec_1_site", "I"}, {UNIMOD_Xle__Asn, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Asn, "spec_2_hidden", "1"}, {UNIMOD_Xle__Asn, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Asn, "spec_2_site", "L"}, {UNIMOD_Xle__Lys, "approved", "0"}, {UNIMOD_Xle__Lys, "delta_composition", "H N"}, {UNIMOD_Xle__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Lys, "spec_1_hidden", "1"}, {UNIMOD_Xle__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Lys, "spec_1_site", "I"}, {UNIMOD_Xle__Lys, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Lys, "spec_2_hidden", "1"}, {UNIMOD_Xle__Lys, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Lys, "spec_2_site", "L"}, {UNIMOD_Lys__Thr, "approved", "0"}, {UNIMOD_Lys__Thr, "delta_composition", "H(-5) C(-2) N(-1) O"}, {UNIMOD_Lys__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Thr, "spec_1_hidden", "1"}, {UNIMOD_Lys__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Thr, "spec_1_site", "K"}, {UNIMOD_Lys__Asn, "approved", "0"}, {UNIMOD_Lys__Asn, "delta_composition", "H(-6) C(-2) O"}, {UNIMOD_Lys__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Asn, "spec_1_hidden", "1"}, {UNIMOD_Lys__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Asn, "spec_1_site", "K"}, {UNIMOD_Lys__Glu, "approved", "0"}, {UNIMOD_Lys__Glu, "delta_composition", "H(-5) C(-1) N(-1) O(2)"}, {UNIMOD_Lys__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Glu, "spec_1_hidden", "1"}, {UNIMOD_Lys__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Glu, "spec_1_site", "K"}, {UNIMOD_Lys__Gln, "approved", "0"}, {UNIMOD_Lys__Gln, "delta_composition", "H(-4) C(-1) O"}, {UNIMOD_Lys__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Gln, "spec_1_hidden", "1"}, {UNIMOD_Lys__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Gln, "spec_1_site", "K"}, {UNIMOD_Lys__Met, "approved", "0"}, {UNIMOD_Lys__Met, "delta_composition", "H(-3) C(-1) N(-1) S"}, {UNIMOD_Lys__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Met, "spec_1_hidden", "1"}, {UNIMOD_Lys__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Met, "spec_1_site", "K"}, {UNIMOD_Lys__Arg, "approved", "0"}, {UNIMOD_Lys__Arg, "delta_composition", "N(2)"}, {UNIMOD_Lys__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Arg, "spec_1_hidden", "1"}, {UNIMOD_Lys__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Arg, "spec_1_site", "K"}, {UNIMOD_Lys__Xle, "approved", "0"}, {UNIMOD_Lys__Xle, "delta_composition", "H(-1) N(-1)"}, {UNIMOD_Lys__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Xle, "spec_1_hidden", "1"}, {UNIMOD_Lys__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Xle, "spec_1_site", "K"}, {UNIMOD_Xle__Ser, "approved", "0"}, {UNIMOD_Xle__Ser, "delta_composition", "H(-6) C(-3) O"}, {UNIMOD_Xle__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Ser, "spec_1_hidden", "1"}, {UNIMOD_Xle__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Ser, "spec_1_site", "L"}, {UNIMOD_Xle__Ser, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Ser, "spec_2_hidden", "1"}, {UNIMOD_Xle__Ser, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Ser, "spec_2_site", "I"}, {UNIMOD_Xle__Phe, "approved", "0"}, {UNIMOD_Xle__Phe, "delta_composition", "H(-2) C(3)"}, {UNIMOD_Xle__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Phe, "spec_1_hidden", "1"}, {UNIMOD_Xle__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Phe, "spec_1_site", "L"}, {UNIMOD_Xle__Phe, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Phe, "spec_2_hidden", "1"}, {UNIMOD_Xle__Phe, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Phe, "spec_2_site", "I"}, {UNIMOD_Xle__Trp, "approved", "0"}, {UNIMOD_Xle__Trp, "delta_composition", "H(-1) C(5) N"}, {UNIMOD_Xle__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Trp, "spec_1_hidden", "1"}, {UNIMOD_Xle__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Trp, "spec_1_site", "L"}, {UNIMOD_Xle__Trp, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Trp, "spec_2_hidden", "1"}, {UNIMOD_Xle__Trp, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Trp, "spec_2_site", "I"}, {UNIMOD_Xle__Pro, "approved", "0"}, {UNIMOD_Xle__Pro, "delta_composition", "H(-4) C(-1)"}, {UNIMOD_Xle__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Pro, "spec_1_hidden", "1"}, {UNIMOD_Xle__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Pro, "spec_1_site", "L"}, {UNIMOD_Xle__Pro, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Pro, "spec_2_hidden", "1"}, {UNIMOD_Xle__Pro, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Pro, "spec_2_site", "I"}, {UNIMOD_Xle__Val, "approved", "0"}, {UNIMOD_Xle__Val, "delta_composition", "H(-2) C(-1)"}, {UNIMOD_Xle__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Val, "spec_1_hidden", "1"}, {UNIMOD_Xle__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Val, "spec_1_site", "L"}, {UNIMOD_Xle__Val, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Val, "spec_2_hidden", "1"}, {UNIMOD_Xle__Val, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Val, "spec_2_site", "I"}, {UNIMOD_Xle__His, "approved", "0"}, {UNIMOD_Xle__His, "delta_composition", "H(-4) N(2)"}, {UNIMOD_Xle__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__His, "spec_1_hidden", "1"}, {UNIMOD_Xle__His, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__His, "spec_1_site", "L"}, {UNIMOD_Xle__His, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__His, "spec_2_hidden", "1"}, {UNIMOD_Xle__His, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__His, "spec_2_site", "I"}, {UNIMOD_Xle__Gln, "approved", "0"}, {UNIMOD_Xle__Gln, "delta_composition", "H(-3) C(-1) N O"}, {UNIMOD_Xle__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Gln, "spec_1_hidden", "1"}, {UNIMOD_Xle__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Gln, "spec_1_site", "L"}, {UNIMOD_Xle__Gln, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Gln, "spec_2_hidden", "1"}, {UNIMOD_Xle__Gln, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Gln, "spec_2_site", "I"}, {UNIMOD_Xle__Met, "approved", "0"}, {UNIMOD_Xle__Met, "delta_composition", "H(-2) C(-1) S"}, {UNIMOD_Xle__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Met, "spec_1_hidden", "1"}, {UNIMOD_Xle__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Met, "spec_1_site", "L"}, {UNIMOD_Xle__Met, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Met, "spec_2_hidden", "1"}, {UNIMOD_Xle__Met, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Met, "spec_2_site", "I"}, {UNIMOD_Xle__Arg, "approved", "0"}, {UNIMOD_Xle__Arg, "delta_composition", "H N(3)"}, {UNIMOD_Xle__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Arg, "spec_1_hidden", "1"}, {UNIMOD_Xle__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Arg, "spec_1_site", "L"}, {UNIMOD_Xle__Arg, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Arg, "spec_2_hidden", "1"}, {UNIMOD_Xle__Arg, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Arg, "spec_2_site", "I"}, {UNIMOD_Met__Thr, "approved", "0"}, {UNIMOD_Met__Thr, "delta_composition", "H(-2) C(-1) O S(-1)"}, {UNIMOD_Met__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Thr, "spec_1_hidden", "1"}, {UNIMOD_Met__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Thr, "spec_1_site", "M"}, {UNIMOD_Met__Arg, "approved", "0"}, {UNIMOD_Met__Arg, "delta_composition", "H(3) C N(3) S(-1)"}, {UNIMOD_Met__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Arg, "spec_1_hidden", "1"}, {UNIMOD_Met__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Arg, "spec_1_site", "M"}, {UNIMOD_Met__Lys, "approved", "0"}, {UNIMOD_Met__Lys, "delta_composition", "H(3) C N S(-1)"}, {UNIMOD_Met__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Lys, "spec_1_hidden", "1"}, {UNIMOD_Met__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Lys, "spec_1_site", "M"}, {UNIMOD_Met__Xle, "approved", "0"}, {UNIMOD_Met__Xle, "delta_composition", "H(2) C S(-1)"}, {UNIMOD_Met__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Xle, "spec_1_hidden", "1"}, {UNIMOD_Met__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Xle, "spec_1_site", "M"}, {UNIMOD_Met__Val, "approved", "0"}, {UNIMOD_Met__Val, "delta_composition", "S(-1)"}, {UNIMOD_Met__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Val, "spec_1_hidden", "1"}, {UNIMOD_Met__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Val, "spec_1_site", "M"}, {UNIMOD_Asn__Ser, "approved", "0"}, {UNIMOD_Asn__Ser, "delta_composition", "H(-1) C(-1) N(-1)"}, {UNIMOD_Asn__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Ser, "spec_1_hidden", "1"}, {UNIMOD_Asn__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Ser, "spec_1_site", "N"}, {UNIMOD_Asn__Thr, "approved", "0"}, {UNIMOD_Asn__Thr, "delta_composition", "H N(-1)"}, {UNIMOD_Asn__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Thr, "spec_1_hidden", "1"}, {UNIMOD_Asn__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Thr, "spec_1_site", "N"}, {UNIMOD_Asn__Lys, "approved", "0"}, {UNIMOD_Asn__Lys, "delta_composition", "H(6) C(2) O(-1)"}, {UNIMOD_Asn__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Lys, "spec_1_hidden", "1"}, {UNIMOD_Asn__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Lys, "spec_1_site", "N"}, {UNIMOD_Asn__Tyr, "approved", "0"}, {UNIMOD_Asn__Tyr, "delta_composition", "H(3) C(5) N(-1)"}, {UNIMOD_Asn__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Asn__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Tyr, "spec_1_site", "N"}, {UNIMOD_Asn__His, "approved", "0"}, {UNIMOD_Asn__His, "delta_composition", "H C(2) N O(-1)"}, {UNIMOD_Asn__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__His, "spec_1_hidden", "1"}, {UNIMOD_Asn__His, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__His, "spec_1_site", "N"}, {UNIMOD_Asn__Asp, "approved", "0"}, {UNIMOD_Asn__Asp, "delta_composition", "H(-1) N(-1) O"}, {UNIMOD_Asn__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Asp, "spec_1_hidden", "1"}, {UNIMOD_Asn__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Asp, "spec_1_site", "N"}, {UNIMOD_Asn__Xle, "approved", "0"}, {UNIMOD_Asn__Xle, "delta_composition", "H(5) C(2) N(-1) O(-1)"}, {UNIMOD_Asn__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Xle, "spec_1_hidden", "1"}, {UNIMOD_Asn__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Xle, "spec_1_site", "N"}, {UNIMOD_Pro__Ser, "approved", "0"}, {UNIMOD_Pro__Ser, "delta_composition", "H(-2) C(-2) O"}, {UNIMOD_Pro__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Ser, "spec_1_hidden", "1"}, {UNIMOD_Pro__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Ser, "spec_1_site", "P"}, {UNIMOD_Pro__Ala, "approved", "0"}, {UNIMOD_Pro__Ala, "delta_composition", "H(-2) C(-2)"}, {UNIMOD_Pro__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Ala, "spec_1_hidden", "1"}, {UNIMOD_Pro__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Ala, "spec_1_site", "P"}, {UNIMOD_Pro__His, "approved", "0"}, {UNIMOD_Pro__His, "delta_composition", "C N(2)"}, {UNIMOD_Pro__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__His, "spec_1_hidden", "1"}, {UNIMOD_Pro__His, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__His, "spec_1_site", "P"}, {UNIMOD_Pro__Gln, "approved", "0"}, {UNIMOD_Pro__Gln, "delta_composition", "H N O"}, {UNIMOD_Pro__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Gln, "spec_1_hidden", "1"}, {UNIMOD_Pro__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Gln, "spec_1_site", "P"}, {UNIMOD_Pro__Thr, "approved", "0"}, {UNIMOD_Pro__Thr, "delta_composition", "C(-1) O"}, {UNIMOD_Pro__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Thr, "spec_1_hidden", "1"}, {UNIMOD_Pro__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Thr, "spec_1_site", "P"}, {UNIMOD_Pro__Arg, "approved", "0"}, {UNIMOD_Pro__Arg, "delta_composition", "H(5) C N(3)"}, {UNIMOD_Pro__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Arg, "spec_1_hidden", "1"}, {UNIMOD_Pro__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Arg, "spec_1_site", "P"}, {UNIMOD_Pro__Xle, "approved", "0"}, {UNIMOD_Pro__Xle, "delta_composition", "H(4) C"}, {UNIMOD_Pro__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Xle, "spec_1_hidden", "1"}, {UNIMOD_Pro__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Xle, "spec_1_site", "P"}, {UNIMOD_Gln__Pro, "approved", "0"}, {UNIMOD_Gln__Pro, "delta_composition", "H(-1) N(-1) O(-1)"}, {UNIMOD_Gln__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Pro, "spec_1_hidden", "1"}, {UNIMOD_Gln__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Pro, "spec_1_site", "Q"}, {UNIMOD_Gln__Lys, "approved", "0"}, {UNIMOD_Gln__Lys, "delta_composition", "H(4) C O(-1)"}, {UNIMOD_Gln__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Lys, "spec_1_hidden", "1"}, {UNIMOD_Gln__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Lys, "spec_1_site", "Q"}, {UNIMOD_Gln__Glu, "approved", "0"}, {UNIMOD_Gln__Glu, "delta_composition", "H(-1) N(-1) O"}, {UNIMOD_Gln__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Glu, "spec_1_hidden", "1"}, {UNIMOD_Gln__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Glu, "spec_1_site", "Q"}, {UNIMOD_Gln__His, "approved", "0"}, {UNIMOD_Gln__His, "delta_composition", "H(-1) C N O(-1)"}, {UNIMOD_Gln__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__His, "spec_1_hidden", "1"}, {UNIMOD_Gln__His, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__His, "spec_1_site", "Q"}, {UNIMOD_Gln__Arg, "approved", "0"}, {UNIMOD_Gln__Arg, "delta_composition", "H(4) C N(2) O(-1)"}, {UNIMOD_Gln__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Arg, "spec_1_hidden", "1"}, {UNIMOD_Gln__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Arg, "spec_1_site", "Q"}, {UNIMOD_Gln__Xle, "approved", "0"}, {UNIMOD_Gln__Xle, "delta_composition", "H(3) C N(-1) O(-1)"}, {UNIMOD_Gln__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Xle, "spec_1_hidden", "1"}, {UNIMOD_Gln__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Xle, "spec_1_site", "Q"}, {UNIMOD_Arg__Ser, "approved", "0"}, {UNIMOD_Arg__Ser, "delta_composition", "H(-7) C(-3) N(-3) O"}, {UNIMOD_Arg__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Ser, "spec_1_hidden", "1"}, {UNIMOD_Arg__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Ser, "spec_1_site", "R"}, {UNIMOD_Arg__Trp, "approved", "0"}, {UNIMOD_Arg__Trp, "delta_composition", "H(-2) C(5) N(-2)"}, {UNIMOD_Arg__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Trp, "spec_1_hidden", "1"}, {UNIMOD_Arg__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Trp, "spec_1_site", "R"}, {UNIMOD_Arg__Thr, "approved", "0"}, {UNIMOD_Arg__Thr, "delta_composition", "H(-5) C(-2) N(-3) O"}, {UNIMOD_Arg__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Thr, "spec_1_hidden", "1"}, {UNIMOD_Arg__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Thr, "spec_1_site", "R"}, {UNIMOD_Arg__Pro, "approved", "0"}, {UNIMOD_Arg__Pro, "delta_composition", "H(-5) C(-1) N(-3)"}, {UNIMOD_Arg__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Pro, "spec_1_hidden", "1"}, {UNIMOD_Arg__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Pro, "spec_1_site", "R"}, {UNIMOD_Arg__Lys, "approved", "0"}, {UNIMOD_Arg__Lys, "delta_composition", "N(-2)"}, {UNIMOD_Arg__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Lys, "spec_1_hidden", "1"}, {UNIMOD_Arg__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Lys, "spec_1_site", "R"}, {UNIMOD_Arg__His, "approved", "0"}, {UNIMOD_Arg__His, "delta_composition", "H(-5) N(-1)"}, {UNIMOD_Arg__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__His, "spec_1_hidden", "1"}, {UNIMOD_Arg__His, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__His, "spec_1_site", "R"}, {UNIMOD_Arg__Gln, "approved", "0"}, {UNIMOD_Arg__Gln, "delta_composition", "H(-4) C(-1) N(-2) O"}, {UNIMOD_Arg__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Gln, "spec_1_hidden", "1"}, {UNIMOD_Arg__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Gln, "spec_1_site", "R"}, {UNIMOD_Arg__Met, "approved", "0"}, {UNIMOD_Arg__Met, "delta_composition", "H(-3) C(-1) N(-3) S"}, {UNIMOD_Arg__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Met, "spec_1_hidden", "1"}, {UNIMOD_Arg__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Met, "spec_1_site", "R"}, {UNIMOD_Arg__Cys, "approved", "0"}, {UNIMOD_Arg__Cys, "delta_composition", "H(-7) C(-3) N(-3) S"}, {UNIMOD_Arg__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Cys, "spec_1_hidden", "1"}, {UNIMOD_Arg__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Cys, "spec_1_site", "R"}, {UNIMOD_Arg__Xle, "approved", "0"}, {UNIMOD_Arg__Xle, "delta_composition", "H(-1) N(-3)"}, {UNIMOD_Arg__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Xle, "spec_1_hidden", "1"}, {UNIMOD_Arg__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Xle, "spec_1_site", "R"}, {UNIMOD_Arg__Gly, "approved", "0"}, {UNIMOD_Arg__Gly, "delta_composition", "H(-9) C(-4) N(-3)"}, {UNIMOD_Arg__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Gly, "spec_1_hidden", "1"}, {UNIMOD_Arg__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Gly, "spec_1_site", "R"}, {UNIMOD_Ser__Phe, "approved", "0"}, {UNIMOD_Ser__Phe, "delta_composition", "H(4) C(6) O(-1)"}, {UNIMOD_Ser__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Phe, "spec_1_hidden", "1"}, {UNIMOD_Ser__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Phe, "spec_1_site", "S"}, {UNIMOD_Ser__Ala, "approved", "0"}, {UNIMOD_Ser__Ala, "delta_composition", "O(-1)"}, {UNIMOD_Ser__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Ala, "spec_1_hidden", "1"}, {UNIMOD_Ser__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Ala, "spec_1_site", "S"}, {UNIMOD_Ser__Trp, "approved", "0"}, {UNIMOD_Ser__Trp, "delta_composition", "H(5) C(8) N O(-1)"}, {UNIMOD_Ser__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Trp, "spec_1_hidden", "1"}, {UNIMOD_Ser__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Trp, "spec_1_site", "S"}, {UNIMOD_Ser__Thr, "approved", "0"}, {UNIMOD_Ser__Thr, "delta_composition", "H(2) C"}, {UNIMOD_Ser__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Thr, "spec_1_hidden", "1"}, {UNIMOD_Ser__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Thr, "spec_1_site", "S"}, {UNIMOD_Ser__Asn, "approved", "0"}, {UNIMOD_Ser__Asn, "delta_composition", "H C N"}, {UNIMOD_Ser__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Asn, "spec_1_hidden", "1"}, {UNIMOD_Ser__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Asn, "spec_1_site", "S"}, {UNIMOD_Ser__Pro, "approved", "0"}, {UNIMOD_Ser__Pro, "delta_composition", "H(2) C(2) O(-1)"}, {UNIMOD_Ser__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Pro, "spec_1_hidden", "1"}, {UNIMOD_Ser__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Pro, "spec_1_site", "S"}, {UNIMOD_Ser__Tyr, "approved", "0"}, {UNIMOD_Ser__Tyr, "delta_composition", "H(4) C(6)"}, {UNIMOD_Ser__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Ser__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Tyr, "spec_1_site", "S"}, {UNIMOD_Ser__Cys, "approved", "0"}, {UNIMOD_Ser__Cys, "delta_composition", "O(-1) S"}, {UNIMOD_Ser__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Cys, "spec_1_hidden", "1"}, {UNIMOD_Ser__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Cys, "spec_1_site", "S"}, {UNIMOD_Ser__Arg, "approved", "0"}, {UNIMOD_Ser__Arg, "delta_composition", "H(7) C(3) N(3) O(-1)"}, {UNIMOD_Ser__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Arg, "spec_1_hidden", "1"}, {UNIMOD_Ser__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Arg, "spec_1_site", "S"}, {UNIMOD_Ser__Xle, "approved", "0"}, {UNIMOD_Ser__Xle, "delta_composition", "H(6) C(3) O(-1)"}, {UNIMOD_Ser__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Xle, "spec_1_hidden", "1"}, {UNIMOD_Ser__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Xle, "spec_1_site", "S"}, {UNIMOD_Ser__Gly, "approved", "0"}, {UNIMOD_Ser__Gly, "delta_composition", "H(-2) C(-1) O(-1)"}, {UNIMOD_Ser__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Gly, "spec_1_hidden", "1"}, {UNIMOD_Ser__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Gly, "spec_1_site", "S"}, {UNIMOD_Thr__Ser, "approved", "0"}, {UNIMOD_Thr__Ser, "delta_composition", "H(-2) C(-1)"}, {UNIMOD_Thr__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Ser, "spec_1_hidden", "1"}, {UNIMOD_Thr__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Ser, "spec_1_site", "T"}, {UNIMOD_Thr__Ala, "approved", "0"}, {UNIMOD_Thr__Ala, "delta_composition", "H(-2) C(-1) O(-1)"}, {UNIMOD_Thr__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Ala, "spec_1_hidden", "1"}, {UNIMOD_Thr__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Ala, "spec_1_site", "T"}, {UNIMOD_Thr__Asn, "approved", "0"}, {UNIMOD_Thr__Asn, "delta_composition", "H(-1) N"}, {UNIMOD_Thr__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Asn, "spec_1_hidden", "1"}, {UNIMOD_Thr__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Asn, "spec_1_site", "T"}, {UNIMOD_Thr__Lys, "approved", "0"}, {UNIMOD_Thr__Lys, "delta_composition", "H(5) C(2) N O(-1)"}, {UNIMOD_Thr__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Lys, "spec_1_hidden", "1"}, {UNIMOD_Thr__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Lys, "spec_1_site", "T"}, {UNIMOD_Thr__Pro, "approved", "0"}, {UNIMOD_Thr__Pro, "delta_composition", "C O(-1)"}, {UNIMOD_Thr__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Pro, "spec_1_hidden", "1"}, {UNIMOD_Thr__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Pro, "spec_1_site", "T"}, {UNIMOD_Thr__Met, "approved", "0"}, {UNIMOD_Thr__Met, "delta_composition", "H(2) C O(-1) S"}, {UNIMOD_Thr__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Met, "spec_1_hidden", "1"}, {UNIMOD_Thr__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Met, "spec_1_site", "T"}, {UNIMOD_Thr__Xle, "approved", "0"}, {UNIMOD_Thr__Xle, "delta_composition", "H(4) C(2) O(-1)"}, {UNIMOD_Thr__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Xle, "spec_1_hidden", "1"}, {UNIMOD_Thr__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Xle, "spec_1_site", "T"}, {UNIMOD_Thr__Arg, "approved", "0"}, {UNIMOD_Thr__Arg, "delta_composition", "H(5) C(2) N(3) O(-1)"}, {UNIMOD_Thr__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Arg, "spec_1_hidden", "1"}, {UNIMOD_Thr__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Arg, "spec_1_site", "T"}, {UNIMOD_Val__Phe, "approved", "0"}, {UNIMOD_Val__Phe, "delta_composition", "C(4)"}, {UNIMOD_Val__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Phe, "spec_1_hidden", "1"}, {UNIMOD_Val__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Phe, "spec_1_site", "V"}, {UNIMOD_Val__Ala, "approved", "0"}, {UNIMOD_Val__Ala, "delta_composition", "H(-4) C(-2)"}, {UNIMOD_Val__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Ala, "spec_1_hidden", "1"}, {UNIMOD_Val__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Ala, "spec_1_site", "V"}, {UNIMOD_Val__Glu, "approved", "0"}, {UNIMOD_Val__Glu, "delta_composition", "H(-2) O(2)"}, {UNIMOD_Val__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Glu, "spec_1_hidden", "1"}, {UNIMOD_Val__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Glu, "spec_1_site", "V"}, {UNIMOD_Val__Met, "approved", "0"}, {UNIMOD_Val__Met, "delta_composition", "S"}, {UNIMOD_Val__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Met, "spec_1_hidden", "1"}, {UNIMOD_Val__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Met, "spec_1_site", "V"}, {UNIMOD_Val__Asp, "approved", "0"}, {UNIMOD_Val__Asp, "delta_composition", "H(-4) C(-1) O(2)"}, {UNIMOD_Val__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Asp, "spec_1_hidden", "1"}, {UNIMOD_Val__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Asp, "spec_1_site", "V"}, {UNIMOD_Val__Xle, "approved", "0"}, {UNIMOD_Val__Xle, "delta_composition", "H(2) C"}, {UNIMOD_Val__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Xle, "spec_1_hidden", "1"}, {UNIMOD_Val__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Xle, "spec_1_site", "V"}, {UNIMOD_Val__Gly, "approved", "0"}, {UNIMOD_Val__Gly, "delta_composition", "H(-6) C(-3)"}, {UNIMOD_Val__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Gly, "spec_1_hidden", "1"}, {UNIMOD_Val__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Gly, "spec_1_site", "V"}, {UNIMOD_Trp__Ser, "approved", "0"}, {UNIMOD_Trp__Ser, "delta_composition", "H(-5) C(-8) N(-1) O"}, {UNIMOD_Trp__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Ser, "spec_1_hidden", "1"}, {UNIMOD_Trp__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Ser, "spec_1_site", "W"}, {UNIMOD_Trp__Cys, "approved", "0"}, {UNIMOD_Trp__Cys, "delta_composition", "H(-5) C(-8) N(-1) S"}, {UNIMOD_Trp__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Cys, "spec_1_hidden", "1"}, {UNIMOD_Trp__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Cys, "spec_1_site", "W"}, {UNIMOD_Trp__Arg, "approved", "0"}, {UNIMOD_Trp__Arg, "delta_composition", "H(2) C(-5) N(2)"}, {UNIMOD_Trp__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Arg, "spec_1_hidden", "1"}, {UNIMOD_Trp__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Arg, "spec_1_site", "W"}, {UNIMOD_Trp__Gly, "approved", "0"}, {UNIMOD_Trp__Gly, "delta_composition", "H(-7) C(-9) N(-1)"}, {UNIMOD_Trp__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Gly, "spec_1_hidden", "1"}, {UNIMOD_Trp__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Gly, "spec_1_site", "W"}, {UNIMOD_Trp__Xle, "approved", "0"}, {UNIMOD_Trp__Xle, "delta_composition", "H C(-5) N(-1)"}, {UNIMOD_Trp__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Xle, "spec_1_hidden", "1"}, {UNIMOD_Trp__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Xle, "spec_1_site", "W"}, {UNIMOD_Tyr__Phe, "approved", "0"}, {UNIMOD_Tyr__Phe, "delta_composition", "O(-1)"}, {UNIMOD_Tyr__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Phe, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Phe, "spec_1_site", "Y"}, {UNIMOD_Tyr__Ser, "approved", "0"}, {UNIMOD_Tyr__Ser, "delta_composition", "H(-4) C(-6)"}, {UNIMOD_Tyr__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Ser, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Ser, "spec_1_site", "Y"}, {UNIMOD_Tyr__Asn, "approved", "0"}, {UNIMOD_Tyr__Asn, "delta_composition", "H(-3) C(-5) N"}, {UNIMOD_Tyr__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Asn, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Asn, "spec_1_site", "Y"}, {UNIMOD_Tyr__His, "approved", "0"}, {UNIMOD_Tyr__His, "delta_composition", "H(-2) C(-3) N(2) O(-1)"}, {UNIMOD_Tyr__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__His, "spec_1_hidden", "1"}, {UNIMOD_Tyr__His, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__His, "spec_1_site", "Y"}, {UNIMOD_Tyr__Asp, "approved", "0"}, {UNIMOD_Tyr__Asp, "delta_composition", "H(-4) C(-5) O"}, {UNIMOD_Tyr__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Asp, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Asp, "spec_1_site", "Y"}, {UNIMOD_Tyr__Cys, "approved", "0"}, {UNIMOD_Tyr__Cys, "delta_composition", "H(-4) C(-6) O(-1) S"}, {UNIMOD_Tyr__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Cys, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Cys, "spec_1_site", "Y"}, {UNIMOD_BDMAPP, "approved", "0"}, {UNIMOD_BDMAPP, "delta_composition", "H(12) C(11) N O Br"}, {UNIMOD_BDMAPP, "spec_1_classification", "Artefact"}, {UNIMOD_BDMAPP, "spec_1_hidden", "1"}, {UNIMOD_BDMAPP, "spec_1_position", "Anywhere"}, {UNIMOD_BDMAPP, "spec_1_site", "H"}, {UNIMOD_BDMAPP, "spec_2_classification", "Chemical derivative"}, {UNIMOD_BDMAPP, "spec_2_hidden", "1"}, {UNIMOD_BDMAPP, "spec_2_position", "Anywhere"}, {UNIMOD_BDMAPP, "spec_2_site", "K"}, {UNIMOD_BDMAPP, "spec_3_classification", "Chemical derivative"}, {UNIMOD_BDMAPP, "spec_3_hidden", "1"}, {UNIMOD_BDMAPP, "spec_3_position", "Protein N-term"}, {UNIMOD_BDMAPP, "spec_3_site", "N-term"}, {UNIMOD_BDMAPP, "spec_4_classification", "Artefact"}, {UNIMOD_BDMAPP, "spec_4_hidden", "1"}, {UNIMOD_BDMAPP, "spec_4_position", "Anywhere"}, {UNIMOD_BDMAPP, "spec_4_site", "Y"}, {UNIMOD_BDMAPP, "spec_5_classification", "Artefact"}, {UNIMOD_BDMAPP, "spec_5_hidden", "1"}, {UNIMOD_BDMAPP, "spec_5_position", "Anywhere"}, {UNIMOD_BDMAPP, "spec_5_site", "W"}, {UNIMOD_NA_LNO2, "approved", "0"}, {UNIMOD_NA_LNO2, "delta_composition", "H(31) C(18) N O(4)"}, {UNIMOD_NA_LNO2, "spec_1_classification", "Post-translational"}, {UNIMOD_NA_LNO2, "spec_1_hidden", "1"}, {UNIMOD_NA_LNO2, "spec_1_position", "Anywhere"}, {UNIMOD_NA_LNO2, "spec_1_site", "C"}, {UNIMOD_NA_LNO2, "spec_2_classification", "Post-translational"}, {UNIMOD_NA_LNO2, "spec_2_hidden", "1"}, {UNIMOD_NA_LNO2, "spec_2_position", "Anywhere"}, {UNIMOD_NA_LNO2, "spec_2_site", "H"}, {UNIMOD_NA_OA_NO2, "approved", "0"}, {UNIMOD_NA_OA_NO2, "delta_composition", "H(33) C(18) N O(4)"}, {UNIMOD_NA_OA_NO2, "spec_1_classification", "Post-translational"}, {UNIMOD_NA_OA_NO2, "spec_1_hidden", "1"}, {UNIMOD_NA_OA_NO2, "spec_1_position", "Anywhere"}, {UNIMOD_NA_OA_NO2, "spec_1_site", "C"}, {UNIMOD_NA_OA_NO2, "spec_2_classification", "Post-translational"}, {UNIMOD_NA_OA_NO2, "spec_2_hidden", "1"}, {UNIMOD_NA_OA_NO2, "spec_2_position", "Anywhere"}, {UNIMOD_NA_OA_NO2, "spec_2_site", "H"}, {UNIMOD_ICPL_2H_4_, "approved", "0"}, {UNIMOD_ICPL_2H_4_, "delta_composition", "H(-1) 2H(4) C(6) N O"}, {UNIMOD_ICPL_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICPL_2H_4_, "spec_1_hidden", "0"}, {UNIMOD_ICPL_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_ICPL_2H_4_, "spec_1_site", "K"}, {UNIMOD_ICPL_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_ICPL_2H_4_, "spec_2_hidden", "0"}, {UNIMOD_ICPL_2H_4_, "spec_2_position", "Protein N-term"}, {UNIMOD_ICPL_2H_4_, "spec_2_site", "N-term"}, {UNIMOD_ICPL_2H_4_, "spec_3_classification", "Isotopic label"}, {UNIMOD_ICPL_2H_4_, "spec_3_hidden", "1"}, {UNIMOD_ICPL_2H_4_, "spec_3_position", "Any N-term"}, {UNIMOD_ICPL_2H_4_, "spec_3_site", "N-term"}, {UNIMOD_Label_13C_6_15N_1_, "approved", "1"}, {UNIMOD_Label_13C_6_15N_1_, "delta_composition", "C(-6) 13C(6) N(-1) 15N"}, {UNIMOD_Label_13C_6_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_1_, "spec_1_site", "L"}, {UNIMOD_Label_13C_6_15N_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_1_, "spec_2_hidden", "1"}, {UNIMOD_Label_13C_6_15N_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_1_, "spec_2_site", "I"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "approved", "0"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "delta_composition", "H(-9) 2H(9) C(-6) 13C(6) N(-2) 15N(2)"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_9_13C_6_15N_2_, "spec_1_site", "K"}, {UNIMOD_NIC, "approved", "0"}, {UNIMOD_NIC, "delta_composition", "H(3) C(6) N O"}, {UNIMOD_NIC, "spec_1_classification", "Isotopic label"}, {UNIMOD_NIC, "spec_1_hidden", "1"}, {UNIMOD_NIC, "spec_1_position", "Any N-term"}, {UNIMOD_NIC, "spec_1_site", "N-term"}, {UNIMOD_NIC, "spec_2_classification", "Isotopic label"}, {UNIMOD_NIC, "spec_2_hidden", "1"}, {UNIMOD_NIC, "spec_2_position", "Anywhere"}, {UNIMOD_NIC, "spec_2_site", "K"}, {UNIMOD_dNIC, "approved", "0"}, {UNIMOD_dNIC, "delta_composition", "H 2H(3) C(6) N O"}, {UNIMOD_dNIC, "spec_1_classification", "Isotopic label"}, {UNIMOD_dNIC, "spec_1_hidden", "1"}, {UNIMOD_dNIC, "spec_1_position", "Any N-term"}, {UNIMOD_dNIC, "spec_1_site", "N-term"}, {UNIMOD_dNIC, "spec_2_classification", "Isotopic label"}, {UNIMOD_dNIC, "spec_2_hidden", "1"}, {UNIMOD_dNIC, "spec_2_position", "Anywhere"}, {UNIMOD_dNIC, "spec_2_site", "K"}, {UNIMOD_HNE_Delta_H_2_O, "approved", "0"}, {UNIMOD_HNE_Delta_H_2_O, "delta_composition", "H(14) C(9) O"}, {UNIMOD_HNE_Delta_H_2_O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_O, "spec_1_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_O, "spec_1_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_O, "spec_1_site", "C"}, {UNIMOD_HNE_Delta_H_2_O, "spec_2_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_O, "spec_2_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_O, "spec_2_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_O, "spec_2_site", "H"}, {UNIMOD_HNE_Delta_H_2_O, "spec_3_classification", "Chemical derivative"}, {UNIMOD_HNE_Delta_H_2_O, "spec_3_hidden", "1"}, {UNIMOD_HNE_Delta_H_2_O, "spec_3_position", "Anywhere"}, {UNIMOD_HNE_Delta_H_2_O, "spec_3_site", "K"}, {UNIMOD_4_ONE, "approved", "0"}, {UNIMOD_4_ONE, "delta_composition", "H(14) C(9) O(2)"}, {UNIMOD_4_ONE, "spec_1_classification", "Chemical derivative"}, {UNIMOD_4_ONE, "spec_1_hidden", "1"}, {UNIMOD_4_ONE, "spec_1_position", "Anywhere"}, {UNIMOD_4_ONE, "spec_1_site", "C"}, {UNIMOD_4_ONE, "spec_2_classification", "Chemical derivative"}, {UNIMOD_4_ONE, "spec_2_hidden", "1"}, {UNIMOD_4_ONE, "spec_2_position", "Anywhere"}, {UNIMOD_4_ONE, "spec_2_site", "H"}, {UNIMOD_4_ONE, "spec_3_classification", "Chemical derivative"}, {UNIMOD_4_ONE, "spec_3_hidden", "1"}, {UNIMOD_4_ONE, "spec_3_position", "Anywhere"}, {UNIMOD_4_ONE, "spec_3_site", "K"}, {UNIMOD_O_Dimethylphosphate, "approved", "0"}, {UNIMOD_O_Dimethylphosphate, "delta_composition", "H(5) C(2) O(3) P"}, {UNIMOD_O_Dimethylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_O_Dimethylphosphate, "spec_1_hidden", "1"}, {UNIMOD_O_Dimethylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_O_Dimethylphosphate, "spec_1_site", "S"}, {UNIMOD_O_Dimethylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_O_Dimethylphosphate, "spec_2_hidden", "1"}, {UNIMOD_O_Dimethylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_O_Dimethylphosphate, "spec_2_site", "T"}, {UNIMOD_O_Dimethylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_O_Dimethylphosphate, "spec_3_hidden", "1"}, {UNIMOD_O_Dimethylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_O_Dimethylphosphate, "spec_3_site", "Y"}, {UNIMOD_O_Methylphosphate, "approved", "0"}, {UNIMOD_O_Methylphosphate, "delta_composition", "H(3) C O(3) P"}, {UNIMOD_O_Methylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_O_Methylphosphate, "spec_1_hidden", "1"}, {UNIMOD_O_Methylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_O_Methylphosphate, "spec_1_site", "S"}, {UNIMOD_O_Methylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_O_Methylphosphate, "spec_2_hidden", "1"}, {UNIMOD_O_Methylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_O_Methylphosphate, "spec_2_site", "T"}, {UNIMOD_O_Methylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_O_Methylphosphate, "spec_3_hidden", "1"}, {UNIMOD_O_Methylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_O_Methylphosphate, "spec_3_site", "Y"}, {UNIMOD_Diethylphosphate, "approved", "0"}, {UNIMOD_Diethylphosphate, "delta_composition", "H(9) C(4) O(3) P"}, {UNIMOD_Diethylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_1_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_1_site", "S"}, {UNIMOD_Diethylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_2_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_2_site", "T"}, {UNIMOD_Diethylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_3_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_3_site", "Y"}, {UNIMOD_Diethylphosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_4_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_4_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_4_site", "K"}, {UNIMOD_Diethylphosphate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_5_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_5_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_5_site", "C"}, {UNIMOD_Diethylphosphate, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_6_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_6_position", "Anywhere"}, {UNIMOD_Diethylphosphate, "spec_6_site", "H"}, {UNIMOD_Diethylphosphate, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphate, "spec_7_hidden", "1"}, {UNIMOD_Diethylphosphate, "spec_7_position", "Any N-term"}, {UNIMOD_Diethylphosphate, "spec_7_site", "N-term"}, {UNIMOD_Ethylphosphate, "approved", "0"}, {UNIMOD_Ethylphosphate, "delta_composition", "H(5) C(2) O(3) P"}, {UNIMOD_Ethylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ethylphosphate, "spec_1_hidden", "1"}, {UNIMOD_Ethylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_Ethylphosphate, "spec_1_site", "S"}, {UNIMOD_Ethylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Ethylphosphate, "spec_2_hidden", "1"}, {UNIMOD_Ethylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_Ethylphosphate, "spec_2_site", "T"}, {UNIMOD_Ethylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Ethylphosphate, "spec_3_hidden", "1"}, {UNIMOD_Ethylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_Ethylphosphate, "spec_3_site", "Y"}, {UNIMOD_Ethylphosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Ethylphosphate, "spec_4_hidden", "1"}, {UNIMOD_Ethylphosphate, "spec_4_position", "Anywhere"}, {UNIMOD_Ethylphosphate, "spec_4_site", "K"}, {UNIMOD_Ethylphosphate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Ethylphosphate, "spec_5_hidden", "1"}, {UNIMOD_Ethylphosphate, "spec_5_position", "Any N-term"}, {UNIMOD_Ethylphosphate, "spec_5_site", "N-term"}, {UNIMOD_O_pinacolylmethylphosphonate, "approved", "0"}, {UNIMOD_O_pinacolylmethylphosphonate, "delta_composition", "H(15) C(7) O(2) P"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_1_hidden", "1"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_1_position", "Anywhere"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_1_site", "S"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_2_hidden", "1"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_2_position", "Anywhere"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_2_site", "T"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_3_hidden", "1"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_3_position", "Anywhere"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_3_site", "Y"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_4_hidden", "1"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_4_position", "Anywhere"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_4_site", "H"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_5_hidden", "1"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_5_position", "Anywhere"}, {UNIMOD_O_pinacolylmethylphosphonate, "spec_5_site", "K"}, {UNIMOD_Methylphosphonate, "approved", "0"}, {UNIMOD_Methylphosphonate, "delta_composition", "H(3) C O(2) P"}, {UNIMOD_Methylphosphonate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Methylphosphonate, "spec_1_hidden", "1"}, {UNIMOD_Methylphosphonate, "spec_1_position", "Anywhere"}, {UNIMOD_Methylphosphonate, "spec_1_site", "S"}, {UNIMOD_Methylphosphonate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Methylphosphonate, "spec_2_hidden", "1"}, {UNIMOD_Methylphosphonate, "spec_2_position", "Anywhere"}, {UNIMOD_Methylphosphonate, "spec_2_site", "T"}, {UNIMOD_Methylphosphonate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Methylphosphonate, "spec_3_hidden", "1"}, {UNIMOD_Methylphosphonate, "spec_3_position", "Anywhere"}, {UNIMOD_Methylphosphonate, "spec_3_site", "Y"}, {UNIMOD_O_Isopropylmethylphosphonate, "approved", "0"}, {UNIMOD_O_Isopropylmethylphosphonate, "delta_composition", "H(9) C(4) O(2) P"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_1_hidden", "1"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_1_position", "Anywhere"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_1_site", "S"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_2_hidden", "1"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_2_position", "Anywhere"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_2_site", "T"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_3_hidden", "1"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_3_position", "Anywhere"}, {UNIMOD_O_Isopropylmethylphosphonate, "spec_3_site", "Y"}, {UNIMOD_iTRAQ8plex, "approved", "0"}, {UNIMOD_iTRAQ8plex, "delta_composition", "H(24) C(7) 13C(7) N(3) 15N O(3)"}, {UNIMOD_iTRAQ8plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_1_hidden", "0"}, {UNIMOD_iTRAQ8plex, "spec_1_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_1_site", "K"}, {UNIMOD_iTRAQ8plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_2_hidden", "0"}, {UNIMOD_iTRAQ8plex, "spec_2_position", "Any N-term"}, {UNIMOD_iTRAQ8plex, "spec_2_site", "N-term"}, {UNIMOD_iTRAQ8plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_3_hidden", "0"}, {UNIMOD_iTRAQ8plex, "spec_3_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_3_site", "Y"}, {UNIMOD_iTRAQ8plex, "spec_4_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_4_hidden", "1"}, {UNIMOD_iTRAQ8plex, "spec_4_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_4_site", "H"}, {UNIMOD_iTRAQ8plex, "spec_5_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_5_hidden", "1"}, {UNIMOD_iTRAQ8plex, "spec_5_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_5_site", "S"}, {UNIMOD_iTRAQ8plex, "spec_6_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_6_hidden", "1"}, {UNIMOD_iTRAQ8plex, "spec_6_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_6_site", "T"}, {UNIMOD_iTRAQ8plex, "spec_7_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_7_hidden", "1"}, {UNIMOD_iTRAQ8plex, "spec_7_position", "Protein N-term"}, {UNIMOD_iTRAQ8plex, "spec_7_site", "N-term"}, {UNIMOD_iTRAQ8plex, "spec_8_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex, "spec_8_hidden", "1"}, {UNIMOD_iTRAQ8plex, "spec_8_position", "Anywhere"}, {UNIMOD_iTRAQ8plex, "spec_8_site", "C"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "approved", "0"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "delta_composition", "H(24) C(8) 13C(6) N(2) 15N(2) O(3)"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_1_hidden", "1"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_1_site", "K"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_2_hidden", "1"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_2_position", "Any N-term"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_2_site", "N-term"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_3_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_3_hidden", "1"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_3_position", "Anywhere"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_3_site", "Y"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_4_classification", "Isotopic label"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_4_hidden", "1"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_4_position", "Anywhere"}, {UNIMOD_iTRAQ8plex_13C_6_15N_2_, "spec_4_site", "C"}, {UNIMOD_Ethanolamine, "approved", "0"}, {UNIMOD_Ethanolamine, "delta_composition", "H(5) C(2) N"}, {UNIMOD_Ethanolamine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ethanolamine, "spec_1_hidden", "1"}, {UNIMOD_Ethanolamine, "spec_1_position", "Any C-term"}, {UNIMOD_Ethanolamine, "spec_1_site", "C-term"}, {UNIMOD_Ethanolamine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Ethanolamine, "spec_2_hidden", "1"}, {UNIMOD_Ethanolamine, "spec_2_position", "Anywhere"}, {UNIMOD_Ethanolamine, "spec_2_site", "D"}, {UNIMOD_Ethanolamine, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Ethanolamine, "spec_3_hidden", "1"}, {UNIMOD_Ethanolamine, "spec_3_position", "Anywhere"}, {UNIMOD_Ethanolamine, "spec_3_site", "E"}, {UNIMOD_Ethanolamine, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Ethanolamine, "spec_4_hidden", "1"}, {UNIMOD_Ethanolamine, "spec_4_position", "Anywhere"}, {UNIMOD_Ethanolamine, "spec_4_site", "C"}, {UNIMOD_BEMAD_ST, "approved", "0"}, {UNIMOD_BEMAD_ST, "delta_composition", "H(8) C(4) O S(2)"}, {UNIMOD_BEMAD_ST, "spec_1_classification", "Chemical derivative"}, {UNIMOD_BEMAD_ST, "spec_1_hidden", "1"}, {UNIMOD_BEMAD_ST, "spec_1_position", "Anywhere"}, {UNIMOD_BEMAD_ST, "spec_1_site", "S"}, {UNIMOD_BEMAD_ST, "spec_2_classification", "Chemical derivative"}, {UNIMOD_BEMAD_ST, "spec_2_hidden", "1"}, {UNIMOD_BEMAD_ST, "spec_2_position", "Anywhere"}, {UNIMOD_BEMAD_ST, "spec_2_site", "T"}, {UNIMOD_BEMAD_C, "approved", "0"}, {UNIMOD_BEMAD_C, "delta_composition", "H(8) C(4) O(2) S"}, {UNIMOD_BEMAD_C, "spec_1_classification", "Chemical derivative"}, {UNIMOD_BEMAD_C, "spec_1_hidden", "1"}, {UNIMOD_BEMAD_C, "spec_1_position", "Anywhere"}, {UNIMOD_BEMAD_C, "spec_1_site", "C"}, {UNIMOD_TMT6plex, "approved", "0"}, {UNIMOD_TMT6plex, "delta_composition", "H(20) C(8) 13C(4) N 15N O(2)"}, {UNIMOD_TMT6plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_1_hidden", "0"}, {UNIMOD_TMT6plex, "spec_1_position", "Anywhere"}, {UNIMOD_TMT6plex, "spec_1_site", "K"}, {UNIMOD_TMT6plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_2_hidden", "0"}, {UNIMOD_TMT6plex, "spec_2_position", "Any N-term"}, {UNIMOD_TMT6plex, "spec_2_site", "N-term"}, {UNIMOD_TMT6plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_3_hidden", "1"}, {UNIMOD_TMT6plex, "spec_3_position", "Protein N-term"}, {UNIMOD_TMT6plex, "spec_3_site", "N-term"}, {UNIMOD_TMT6plex, "spec_4_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_4_hidden", "1"}, {UNIMOD_TMT6plex, "spec_4_position", "Anywhere"}, {UNIMOD_TMT6plex, "spec_4_site", "H"}, {UNIMOD_TMT6plex, "spec_5_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_5_hidden", "1"}, {UNIMOD_TMT6plex, "spec_5_position", "Anywhere"}, {UNIMOD_TMT6plex, "spec_5_site", "S"}, {UNIMOD_TMT6plex, "spec_6_classification", "Isotopic label"}, {UNIMOD_TMT6plex, "spec_6_hidden", "1"}, {UNIMOD_TMT6plex, "spec_6_position", "Anywhere"}, {UNIMOD_TMT6plex, "spec_6_site", "T"}, {UNIMOD_TMT2plex, "approved", "0"}, {UNIMOD_TMT2plex, "delta_composition", "H(20) C(11) 13C N(2) O(2)"}, {UNIMOD_TMT2plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_1_hidden", "0"}, {UNIMOD_TMT2plex, "spec_1_position", "Anywhere"}, {UNIMOD_TMT2plex, "spec_1_site", "K"}, {UNIMOD_TMT2plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_2_hidden", "0"}, {UNIMOD_TMT2plex, "spec_2_position", "Any N-term"}, {UNIMOD_TMT2plex, "spec_2_site", "N-term"}, {UNIMOD_TMT2plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_3_hidden", "1"}, {UNIMOD_TMT2plex, "spec_3_position", "Protein N-term"}, {UNIMOD_TMT2plex, "spec_3_site", "N-term"}, {UNIMOD_TMT2plex, "spec_4_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_4_hidden", "1"}, {UNIMOD_TMT2plex, "spec_4_position", "Anywhere"}, {UNIMOD_TMT2plex, "spec_4_site", "H"}, {UNIMOD_TMT2plex, "spec_5_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_5_hidden", "1"}, {UNIMOD_TMT2plex, "spec_5_position", "Anywhere"}, {UNIMOD_TMT2plex, "spec_5_site", "S"}, {UNIMOD_TMT2plex, "spec_6_classification", "Isotopic label"}, {UNIMOD_TMT2plex, "spec_6_hidden", "1"}, {UNIMOD_TMT2plex, "spec_6_position", "Anywhere"}, {UNIMOD_TMT2plex, "spec_6_site", "T"}, {UNIMOD_TMT, "approved", "0"}, {UNIMOD_TMT, "delta_composition", "H(20) C(12) N(2) O(2)"}, {UNIMOD_TMT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TMT, "spec_1_hidden", "1"}, {UNIMOD_TMT, "spec_1_position", "Anywhere"}, {UNIMOD_TMT, "spec_1_site", "K"}, {UNIMOD_TMT, "spec_2_classification", "Chemical derivative"}, {UNIMOD_TMT, "spec_2_hidden", "1"}, {UNIMOD_TMT, "spec_2_position", "Any N-term"}, {UNIMOD_TMT, "spec_2_site", "N-term"}, {UNIMOD_TMT, "spec_3_classification", "Chemical derivative"}, {UNIMOD_TMT, "spec_3_hidden", "1"}, {UNIMOD_TMT, "spec_3_position", "Protein N-term"}, {UNIMOD_TMT, "spec_3_site", "N-term"}, {UNIMOD_TMT, "spec_4_classification", "Isotopic label"}, {UNIMOD_TMT, "spec_4_hidden", "1"}, {UNIMOD_TMT, "spec_4_position", "Anywhere"}, {UNIMOD_TMT, "spec_4_site", "H"}, {UNIMOD_TMT, "spec_5_classification", "Isotopic label"}, {UNIMOD_TMT, "spec_5_hidden", "1"}, {UNIMOD_TMT, "spec_5_position", "Anywhere"}, {UNIMOD_TMT, "spec_5_site", "S"}, {UNIMOD_TMT, "spec_6_classification", "Isotopic label"}, {UNIMOD_TMT, "spec_6_hidden", "1"}, {UNIMOD_TMT, "spec_6_position", "Anywhere"}, {UNIMOD_TMT, "spec_6_site", "T"}, {UNIMOD_ExacTagThiol, "approved", "0"}, {UNIMOD_ExacTagThiol, "delta_composition", "H(50) C(23) 13C(12) N(8) 15N(6) O(18)"}, {UNIMOD_ExacTagThiol, "spec_1_classification", "Isotopic label"}, {UNIMOD_ExacTagThiol, "spec_1_hidden", "1"}, {UNIMOD_ExacTagThiol, "spec_1_position", "Anywhere"}, {UNIMOD_ExacTagThiol, "spec_1_site", "C"}, {UNIMOD_ExacTagAmine, "approved", "0"}, {UNIMOD_ExacTagAmine, "delta_composition", "H(52) C(25) 13C(12) N(8) 15N(6) O(19) S"}, {UNIMOD_ExacTagAmine, "spec_1_classification", "Isotopic label"}, {UNIMOD_ExacTagAmine, "spec_1_hidden", "1"}, {UNIMOD_ExacTagAmine, "spec_1_position", "Anywhere"}, {UNIMOD_ExacTagAmine, "spec_1_site", "K"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "approved", "0"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "delta_composition", "H(12) C(9) O"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_1_hidden", "1"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_1_position", "Anywhere"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_1_site", "C"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_2_hidden", "1"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_2_position", "Anywhere"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_2_site", "H"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_3_hidden", "1"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_3_position", "Anywhere"}, {UNIMOD_4_ONE_Delta_H__2_O__1_, "spec_3_site", "K"}, {UNIMOD_NO_SMX_SEMD, "approved", "0"}, {UNIMOD_NO_SMX_SEMD, "delta_composition", "H(10) C(10) N(3) O(3) S"}, {UNIMOD_NO_SMX_SEMD, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NO_SMX_SEMD, "spec_1_hidden", "1"}, {UNIMOD_NO_SMX_SEMD, "spec_1_position", "Anywhere"}, {UNIMOD_NO_SMX_SEMD, "spec_1_site", "C"}, {UNIMOD_NO_SMX_SMCT, "approved", "0"}, {UNIMOD_NO_SMX_SMCT, "delta_composition", "H(10) C(10) N(3) O(4) S"}, {UNIMOD_NO_SMX_SMCT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NO_SMX_SMCT, "spec_1_hidden", "1"}, {UNIMOD_NO_SMX_SMCT, "spec_1_position", "Anywhere"}, {UNIMOD_NO_SMX_SMCT, "spec_1_site", "C"}, {UNIMOD_NO_SMX_SIMD, "approved", "0"}, {UNIMOD_NO_SMX_SIMD, "delta_composition", "H(9) C(10) N(3) O(4) S"}, {UNIMOD_NO_SMX_SIMD, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NO_SMX_SIMD, "spec_1_hidden", "1"}, {UNIMOD_NO_SMX_SIMD, "spec_1_position", "Anywhere"}, {UNIMOD_NO_SMX_SIMD, "spec_1_site", "C"}, {UNIMOD_Malonyl, "approved", "0"}, {UNIMOD_Malonyl, "delta_composition", "H(2) C(3) O(3)"}, {UNIMOD_Malonyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Malonyl, "spec_1_hidden", "1"}, {UNIMOD_Malonyl, "spec_1_position", "Anywhere"}, {UNIMOD_Malonyl, "spec_1_site", "C"}, {UNIMOD_Malonyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Malonyl, "spec_2_hidden", "1"}, {UNIMOD_Malonyl, "spec_2_position", "Anywhere"}, {UNIMOD_Malonyl, "spec_2_site", "S"}, {UNIMOD_Malonyl, "spec_3_classification", "Post-translational"}, {UNIMOD_Malonyl, "spec_3_hidden", "1"}, {UNIMOD_Malonyl, "spec_3_position", "Anywhere"}, {UNIMOD_Malonyl, "spec_3_site", "K"}, {UNIMOD_3sulfo, "approved", "0"}, {UNIMOD_3sulfo, "delta_composition", "H(4) C(7) O(4) S"}, {UNIMOD_3sulfo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_3sulfo, "spec_1_hidden", "1"}, {UNIMOD_3sulfo, "spec_1_position", "Any N-term"}, {UNIMOD_3sulfo, "spec_1_site", "N-term"}, {UNIMOD_trifluoro, "approved", "0"}, {UNIMOD_trifluoro, "delta_composition", "H(-3) F(3)"}, {UNIMOD_trifluoro, "spec_1_classification", "Non-standard residue"}, {UNIMOD_trifluoro, "spec_1_hidden", "1"}, {UNIMOD_trifluoro, "spec_1_position", "Anywhere"}, {UNIMOD_trifluoro, "spec_1_site", "L"}, {UNIMOD_TNBS, "approved", "0"}, {UNIMOD_TNBS, "delta_composition", "H C(6) N(3) O(6)"}, {UNIMOD_TNBS, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TNBS, "spec_1_hidden", "1"}, {UNIMOD_TNBS, "spec_1_position", "Anywhere"}, {UNIMOD_TNBS, "spec_1_site", "K"}, {UNIMOD_TNBS, "spec_2_classification", "Chemical derivative"}, {UNIMOD_TNBS, "spec_2_hidden", "1"}, {UNIMOD_TNBS, "spec_2_position", "Any N-term"}, {UNIMOD_TNBS, "spec_2_site", "N-term"}, {UNIMOD_IDEnT, "approved", "0"}, {UNIMOD_IDEnT, "delta_composition", "H(7) C(9) N O Cl(2)"}, {UNIMOD_IDEnT, "spec_1_classification", "Isotopic label"}, {UNIMOD_IDEnT, "spec_1_hidden", "1"}, {UNIMOD_IDEnT, "spec_1_position", "Anywhere"}, {UNIMOD_IDEnT, "spec_1_site", "C"}, {UNIMOD_BEMAD_ST_2H_6_, "approved", "0"}, {UNIMOD_BEMAD_ST_2H_6_, "delta_composition", "H(2) 2H(6) C(4) O S(2)"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_1_position", "Anywhere"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_1_site", "S"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_2_hidden", "1"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_2_position", "Anywhere"}, {UNIMOD_BEMAD_ST_2H_6_, "spec_2_site", "T"}, {UNIMOD_BEMAD_C_2H_6_, "approved", "0"}, {UNIMOD_BEMAD_C_2H_6_, "delta_composition", "H(2) 2H(6) C(4) O(2) S"}, {UNIMOD_BEMAD_C_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_BEMAD_C_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_BEMAD_C_2H_6_, "spec_1_position", "Anywhere"}, {UNIMOD_BEMAD_C_2H_6_, "spec_1_site", "C"}, {UNIMOD_Met_loss, "approved", "0"}, {UNIMOD_Met_loss, "delta_composition", "H(-9) C(-5) N(-1) O(-1) S(-1)"}, {UNIMOD_Met_loss, "spec_1_classification", "Co-translational"}, {UNIMOD_Met_loss, "spec_1_hidden", "1"}, {UNIMOD_Met_loss, "spec_1_position", "Protein N-term"}, {UNIMOD_Met_loss, "spec_1_site", "M"}, {UNIMOD_Met_loss_Acetyl, "approved", "0"}, {UNIMOD_Met_loss_Acetyl, "delta_composition", "H(-7) C(-3) N(-1) S(-1)"}, {UNIMOD_Met_loss_Acetyl, "spec_1_classification", "Co-translational"}, {UNIMOD_Met_loss_Acetyl, "spec_1_hidden", "1"}, {UNIMOD_Met_loss_Acetyl, "spec_1_position", "Protein N-term"}, {UNIMOD_Met_loss_Acetyl, "spec_1_site", "M"}, {UNIMOD_Menadione_HQ, "approved", "0"}, {UNIMOD_Menadione_HQ, "delta_composition", "H(8) C(11) O(2)"}, {UNIMOD_Menadione_HQ, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Menadione_HQ, "spec_1_hidden", "1"}, {UNIMOD_Menadione_HQ, "spec_1_position", "Anywhere"}, {UNIMOD_Menadione_HQ, "spec_1_site", "C"}, {UNIMOD_Menadione_HQ, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Menadione_HQ, "spec_2_hidden", "1"}, {UNIMOD_Menadione_HQ, "spec_2_position", "Anywhere"}, {UNIMOD_Menadione_HQ, "spec_2_site", "K"}, {UNIMOD_Methyl_Acetyl_2H_3_, "approved", "0"}, {UNIMOD_Methyl_Acetyl_2H_3_, "delta_composition", "H 2H(3) C(3) O"}, {UNIMOD_Methyl_Acetyl_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Methyl_Acetyl_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Methyl_Acetyl_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_Acetyl_2H_3_, "spec_1_site", "K"}, {UNIMOD_lapachenole, "approved", "0"}, {UNIMOD_lapachenole, "delta_composition", "H(16) C(16) O(2)"}, {UNIMOD_lapachenole, "spec_1_classification", "Chemical derivative"}, {UNIMOD_lapachenole, "spec_1_hidden", "1"}, {UNIMOD_lapachenole, "spec_1_position", "Anywhere"}, {UNIMOD_lapachenole, "spec_1_site", "C"}, {UNIMOD_Label_13C_5_, "approved", "1"}, {UNIMOD_Label_13C_5_, "delta_composition", "C(-5) 13C(5)"}, {UNIMOD_Label_13C_5_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_5_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_5_, "spec_1_site", "P"}, {UNIMOD_maleimide, "approved", "0"}, {UNIMOD_maleimide, "delta_composition", "H(3) C(4) N O(2)"}, {UNIMOD_maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_maleimide, "spec_1_hidden", "1"}, {UNIMOD_maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_maleimide, "spec_1_site", "C"}, {UNIMOD_maleimide, "spec_2_classification", "Chemical derivative"}, {UNIMOD_maleimide, "spec_2_hidden", "1"}, {UNIMOD_maleimide, "spec_2_position", "Anywhere"}, {UNIMOD_maleimide, "spec_2_site", "K"}, {UNIMOD_Biotin_phenacyl, "approved", "0"}, {UNIMOD_Biotin_phenacyl, "delta_composition", "H(38) C(29) N(8) O(6) S"}, {UNIMOD_Biotin_phenacyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_phenacyl, "spec_1_hidden", "1"}, {UNIMOD_Biotin_phenacyl, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_phenacyl, "spec_1_site", "C"}, {UNIMOD_Biotin_phenacyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin_phenacyl, "spec_2_hidden", "1"}, {UNIMOD_Biotin_phenacyl, "spec_2_position", "Anywhere"}, {UNIMOD_Biotin_phenacyl, "spec_2_site", "H"}, {UNIMOD_Biotin_phenacyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Biotin_phenacyl, "spec_3_hidden", "1"}, {UNIMOD_Biotin_phenacyl, "spec_3_position", "Anywhere"}, {UNIMOD_Biotin_phenacyl, "spec_3_site", "S"}, {UNIMOD_Carboxymethyl_13C_2_, "approved", "0"}, {UNIMOD_Carboxymethyl_13C_2_, "delta_composition", "H(2) 13C(2) O(2)"}, {UNIMOD_Carboxymethyl_13C_2_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carboxymethyl_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_Carboxymethyl_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Carboxymethyl_13C_2_, "spec_1_site", "C"}, {UNIMOD_NEM_2H_5_, "approved", "0"}, {UNIMOD_NEM_2H_5_, "delta_composition", "H(2) 2H(5) C(6) N O(2)"}, {UNIMOD_NEM_2H_5_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NEM_2H_5_, "spec_1_hidden", "1"}, {UNIMOD_NEM_2H_5_, "spec_1_position", "Anywhere"}, {UNIMOD_NEM_2H_5_, "spec_1_site", "C"}, {UNIMOD_AEC_MAEC_2H_4_, "approved", "0"}, {UNIMOD_AEC_MAEC_2H_4_, "delta_composition", "H 2H(4) C(2) N O(-1) S"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_1_hidden", "1"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_1_site", "S"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_2_hidden", "1"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_2_position", "Anywhere"}, {UNIMOD_AEC_MAEC_2H_4_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_, "delta_composition", "Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_, "spec_2_site", "N"}, {UNIMOD_Label_13C_6__GG, "approved", "0"}, {UNIMOD_Label_13C_6__GG, "delta_composition", "H(6) C(-2) 13C(6) N(2) O(2)"}, {UNIMOD_Label_13C_6__GG, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6__GG, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6__GG, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6__GG, "spec_1_site", "K"}, {UNIMOD_Biotin_Thermo_21345, "approved", "0"}, {UNIMOD_Biotin_Thermo_21345, "delta_composition", "H(25) C(15) N(3) O(2) S"}, {UNIMOD_Biotin_Thermo_21345, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21345, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21345, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21345, "spec_1_site", "Q"}, {UNIMOD_Pentylamine, "approved", "0"}, {UNIMOD_Pentylamine, "delta_composition", "H(11) C(5) N"}, {UNIMOD_Pentylamine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pentylamine, "spec_1_hidden", "1"}, {UNIMOD_Pentylamine, "spec_1_position", "Anywhere"}, {UNIMOD_Pentylamine, "spec_1_site", "Q"}, {UNIMOD_Biotin_Thermo_21360, "approved", "0"}, {UNIMOD_Biotin_Thermo_21360, "delta_composition", "H(37) C(21) N(5) O(6) S"}, {UNIMOD_Biotin_Thermo_21360, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21360, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21360, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21360, "spec_1_site", "C-term"}, {UNIMOD_Cy3b_maleimide, "approved", "0"}, {UNIMOD_Cy3b_maleimide, "delta_composition", "H(38) C(37) N(4) O(7) S"}, {UNIMOD_Cy3b_maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cy3b_maleimide, "spec_1_hidden", "1"}, {UNIMOD_Cy3b_maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Cy3b_maleimide, "spec_1_site", "C"}, {UNIMOD_Gly_loss_Amide, "approved", "0"}, {UNIMOD_Gly_loss_Amide, "delta_composition", "H(-2) C(-2) O(-2)"}, {UNIMOD_Gly_loss_Amide, "spec_1_classification", "Post-translational"}, {UNIMOD_Gly_loss_Amide, "spec_1_hidden", "1"}, {UNIMOD_Gly_loss_Amide, "spec_1_position", "Any C-term"}, {UNIMOD_Gly_loss_Amide, "spec_1_site", "G"}, {UNIMOD_Xlink_BMOE, "approved", "0"}, {UNIMOD_Xlink_BMOE, "delta_composition", "H(8) C(10) N(2) O(4)"}, {UNIMOD_Xlink_BMOE, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BMOE, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BMOE, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BMOE, "spec_1_site", "C"}, {UNIMOD_Xlink_DFDNB, "approved", "0"}, {UNIMOD_Xlink_DFDNB, "delta_composition", "C(6) N(2) O(4)"}, {UNIMOD_Xlink_DFDNB, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DFDNB, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DFDNB, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DFDNB, "spec_1_site", "K"}, {UNIMOD_Xlink_DFDNB, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DFDNB, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DFDNB, "spec_2_position", "Anywhere"}, {UNIMOD_Xlink_DFDNB, "spec_2_site", "R"}, {UNIMOD_Xlink_DFDNB, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Xlink_DFDNB, "spec_3_hidden", "1"}, {UNIMOD_Xlink_DFDNB, "spec_3_position", "Anywhere"}, {UNIMOD_Xlink_DFDNB, "spec_3_site", "Q"}, {UNIMOD_Xlink_DFDNB, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Xlink_DFDNB, "spec_4_hidden", "1"}, {UNIMOD_Xlink_DFDNB, "spec_4_position", "Anywhere"}, {UNIMOD_Xlink_DFDNB, "spec_4_site", "N"}, {UNIMOD_TMPP_Ac, "approved", "0"}, {UNIMOD_TMPP_Ac, "delta_composition", "H(33) C(29) O(10) P"}, {UNIMOD_TMPP_Ac, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TMPP_Ac, "spec_1_hidden", "1"}, {UNIMOD_TMPP_Ac, "spec_1_position", "Any N-term"}, {UNIMOD_TMPP_Ac, "spec_1_site", "N-term"}, {UNIMOD_TMPP_Ac, "spec_2_classification", "Artefact"}, {UNIMOD_TMPP_Ac, "spec_2_hidden", "1"}, {UNIMOD_TMPP_Ac, "spec_2_position", "Anywhere"}, {UNIMOD_TMPP_Ac, "spec_2_site", "K"}, {UNIMOD_TMPP_Ac, "spec_3_classification", "Artefact"}, {UNIMOD_TMPP_Ac, "spec_3_hidden", "1"}, {UNIMOD_TMPP_Ac, "spec_3_position", "Anywhere"}, {UNIMOD_TMPP_Ac, "spec_3_site", "Y"}, {UNIMOD_Dihydroxyimidazolidine, "approved", "0"}, {UNIMOD_Dihydroxyimidazolidine, "delta_composition", "H(4) C(3) O(2)"}, {UNIMOD_Dihydroxyimidazolidine, "spec_1_classification", "Multiple"}, {UNIMOD_Dihydroxyimidazolidine, "spec_1_hidden", "1"}, {UNIMOD_Dihydroxyimidazolidine, "spec_1_position", "Anywhere"}, {UNIMOD_Dihydroxyimidazolidine, "spec_1_site", "R"}, {UNIMOD_Label_2H_4__Acetyl, "approved", "0"}, {UNIMOD_Label_2H_4__Acetyl, "delta_composition", "H(-2) 2H(4) C(2) O"}, {UNIMOD_Label_2H_4__Acetyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_4__Acetyl, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_4__Acetyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_4__Acetyl, "spec_1_site", "K"}, {UNIMOD_Label_13C_6__Acetyl, "approved", "0"}, {UNIMOD_Label_13C_6__Acetyl, "delta_composition", "H(2) C(-4) 13C(6) O"}, {UNIMOD_Label_13C_6__Acetyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6__Acetyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6__Acetyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6__Acetyl, "spec_1_site", "K"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "approved", "0"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "delta_composition", "H(2) C(-4) 13C(6) N(-2) 15N(2) O"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_2__Acetyl, "spec_1_site", "K"}, {UNIMOD_Arg__Npo, "approved", "0"}, {UNIMOD_Arg__Npo, "delta_composition", "H(-1) C(3) N O(2)"}, {UNIMOD_Arg__Npo, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Arg__Npo, "spec_1_hidden", "1"}, {UNIMOD_Arg__Npo, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Npo, "spec_1_site", "R"}, {UNIMOD_EQIGG, "approved", "0"}, {UNIMOD_EQIGG, "delta_composition", "H(32) C(20) N(6) O(8)"}, {UNIMOD_EQIGG, "spec_1_classification", "Other"}, {UNIMOD_EQIGG, "spec_1_hidden", "1"}, {UNIMOD_EQIGG, "spec_1_position", "Anywhere"}, {UNIMOD_EQIGG, "spec_1_site", "K"}, {UNIMOD_Arg2PG, "approved", "0"}, {UNIMOD_Arg2PG, "delta_composition", "H(10) C(16) O(4)"}, {UNIMOD_Arg2PG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Arg2PG, "spec_1_hidden", "1"}, {UNIMOD_Arg2PG, "spec_1_position", "Anywhere"}, {UNIMOD_Arg2PG, "spec_1_site", "R"}, {UNIMOD_cGMP, "approved", "0"}, {UNIMOD_cGMP, "delta_composition", "H(10) C(10) N(5) O(7) P"}, {UNIMOD_cGMP, "spec_1_classification", "Post-translational"}, {UNIMOD_cGMP, "spec_1_hidden", "1"}, {UNIMOD_cGMP, "spec_1_position", "Anywhere"}, {UNIMOD_cGMP, "spec_1_site", "C"}, {UNIMOD_cGMP, "spec_2_classification", "Post-translational"}, {UNIMOD_cGMP, "spec_2_hidden", "1"}, {UNIMOD_cGMP, "spec_2_position", "Anywhere"}, {UNIMOD_cGMP, "spec_2_site", "S"}, {UNIMOD_cGMP_RMP_loss, "approved", "0"}, {UNIMOD_cGMP_RMP_loss, "delta_composition", "H(4) C(5) N(5) O"}, {UNIMOD_cGMP_RMP_loss, "spec_1_classification", "Post-translational"}, {UNIMOD_cGMP_RMP_loss, "spec_1_hidden", "1"}, {UNIMOD_cGMP_RMP_loss, "spec_1_position", "Anywhere"}, {UNIMOD_cGMP_RMP_loss, "spec_1_site", "C"}, {UNIMOD_cGMP_RMP_loss, "spec_2_classification", "Post-translational"}, {UNIMOD_cGMP_RMP_loss, "spec_2_hidden", "1"}, {UNIMOD_cGMP_RMP_loss, "spec_2_position", "Anywhere"}, {UNIMOD_cGMP_RMP_loss, "spec_2_site", "S"}, {UNIMOD_Label_2H_4__GG, "approved", "0"}, {UNIMOD_Label_2H_4__GG, "delta_composition", "H(2) 2H(4) C(4) N(2) O(2)"}, {UNIMOD_Label_2H_4__GG, "spec_1_classification", "Post-translational"}, {UNIMOD_Label_2H_4__GG, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_4__GG, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_4__GG, "spec_1_site", "K"}, {UNIMOD_MG_H1, "approved", "0"}, {UNIMOD_MG_H1, "delta_composition", "H(2) C(3) O"}, {UNIMOD_MG_H1, "spec_1_classification", "Other"}, {UNIMOD_MG_H1, "spec_1_hidden", "1"}, {UNIMOD_MG_H1, "spec_1_position", "Anywhere"}, {UNIMOD_MG_H1, "spec_1_site", "R"}, {UNIMOD_G_H1, "approved", "0"}, {UNIMOD_G_H1, "delta_composition", "C(2) O"}, {UNIMOD_G_H1, "spec_1_classification", "Other"}, {UNIMOD_G_H1, "spec_1_hidden", "1"}, {UNIMOD_G_H1, "spec_1_position", "Anywhere"}, {UNIMOD_G_H1, "spec_1_site", "R"}, {UNIMOD_ZGB, "approved", "0"}, {UNIMOD_ZGB, "delta_composition", "H(53) B C(37) N(6) O(6) F(2) S"}, {UNIMOD_ZGB, "spec_1_classification", "Other"}, {UNIMOD_ZGB, "spec_1_hidden", "1"}, {UNIMOD_ZGB, "spec_1_position", "Anywhere"}, {UNIMOD_ZGB, "spec_1_site", "K"}, {UNIMOD_ZGB, "spec_2_classification", "Other"}, {UNIMOD_ZGB, "spec_2_hidden", "1"}, {UNIMOD_ZGB, "spec_2_position", "Any N-term"}, {UNIMOD_ZGB, "spec_2_site", "N-term"}, {UNIMOD_Label_13C_1_2H_3_, "approved", "0"}, {UNIMOD_Label_13C_1_2H_3_, "delta_composition", "H(-3) 2H(3) C(-1) 13C"}, {UNIMOD_Label_13C_1_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_1_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_1_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_1_2H_3_, "spec_1_site", "M"}, {UNIMOD_Label_13C_6_15N_2__GG, "approved", "0"}, {UNIMOD_Label_13C_6_15N_2__GG, "delta_composition", "H(6) C(-2) 13C(6) 15N(2) O(2)"}, {UNIMOD_Label_13C_6_15N_2__GG, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_2__GG, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_2__GG, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_2__GG, "spec_1_site", "K"}, {UNIMOD_ICPL_13C_6_2H_4_, "approved", "0"}, {UNIMOD_ICPL_13C_6_2H_4_, "delta_composition", "H(-1) 2H(4) 13C(6) N O"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_1_hidden", "0"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_1_position", "Anywhere"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_1_site", "K"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_2_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_2_hidden", "0"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_2_position", "Protein N-term"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_2_site", "N-term"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_3_classification", "Isotopic label"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_3_hidden", "0"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_3_position", "Any N-term"}, {UNIMOD_ICPL_13C_6_2H_4_, "spec_3_site", "N-term"}, {UNIMOD_QEQTGG, "approved", "0"}, {UNIMOD_QEQTGG, "delta_composition", "H(36) C(23) N(8) O(11)"}, {UNIMOD_QEQTGG, "spec_1_classification", "Other"}, {UNIMOD_QEQTGG, "spec_1_hidden", "1"}, {UNIMOD_QEQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_QEQTGG, "spec_1_site", "K"}, {UNIMOD_QQQTGG, "approved", "0"}, {UNIMOD_QQQTGG, "delta_composition", "H(37) C(23) N(9) O(10)"}, {UNIMOD_QQQTGG, "spec_1_classification", "Other"}, {UNIMOD_QQQTGG, "spec_1_hidden", "1"}, {UNIMOD_QQQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_QQQTGG, "spec_1_site", "K"}, {UNIMOD_Bodipy, "approved", "0"}, {UNIMOD_Bodipy, "delta_composition", "H(21) B C(20) N(4) O(3) F(2)"}, {UNIMOD_Bodipy, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Bodipy, "spec_1_hidden", "1"}, {UNIMOD_Bodipy, "spec_1_position", "Anywhere"}, {UNIMOD_Bodipy, "spec_1_site", "C"}, {UNIMOD_Biotin_Thermo_21325, "approved", "0"}, {UNIMOD_Biotin_Thermo_21325, "delta_composition", "H(45) C(34) N(7) O(7) S"}, {UNIMOD_Biotin_Thermo_21325, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21325, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21325, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21325, "spec_1_site", "K"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "approved", "0"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "delta_composition", "H(-3) 2H(3) C(-1) 13C O"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "spec_1_classification", "Multiple"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_1_2H_3__Oxidation, "spec_1_site", "M"}, {UNIMOD_HydroxymethylOP, "approved", "0"}, {UNIMOD_HydroxymethylOP, "delta_composition", "H(4) C(6) O(2)"}, {UNIMOD_HydroxymethylOP, "spec_1_classification", "Other"}, {UNIMOD_HydroxymethylOP, "spec_1_hidden", "1"}, {UNIMOD_HydroxymethylOP, "spec_1_position", "Anywhere"}, {UNIMOD_HydroxymethylOP, "spec_1_site", "K"}, {UNIMOD_MDCC, "approved", "0"}, {UNIMOD_MDCC, "delta_composition", "H(21) C(20) N(3) O(5)"}, {UNIMOD_MDCC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MDCC, "spec_1_hidden", "1"}, {UNIMOD_MDCC, "spec_1_position", "Anywhere"}, {UNIMOD_MDCC, "spec_1_site", "C"}, {UNIMOD_mTRAQ, "approved", "0"}, {UNIMOD_mTRAQ, "delta_composition", "H(12) C(7) N(2) O"}, {UNIMOD_mTRAQ, "spec_1_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_1_hidden", "0"}, {UNIMOD_mTRAQ, "spec_1_position", "Anywhere"}, {UNIMOD_mTRAQ, "spec_1_site", "K"}, {UNIMOD_mTRAQ, "spec_2_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_2_hidden", "0"}, {UNIMOD_mTRAQ, "spec_2_position", "Any N-term"}, {UNIMOD_mTRAQ, "spec_2_site", "N-term"}, {UNIMOD_mTRAQ, "spec_3_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_3_hidden", "0"}, {UNIMOD_mTRAQ, "spec_3_position", "Anywhere"}, {UNIMOD_mTRAQ, "spec_3_site", "Y"}, {UNIMOD_mTRAQ, "spec_4_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_4_hidden", "1"}, {UNIMOD_mTRAQ, "spec_4_position", "Anywhere"}, {UNIMOD_mTRAQ, "spec_4_site", "H"}, {UNIMOD_mTRAQ, "spec_5_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_5_hidden", "1"}, {UNIMOD_mTRAQ, "spec_5_position", "Anywhere"}, {UNIMOD_mTRAQ, "spec_5_site", "S"}, {UNIMOD_mTRAQ, "spec_6_classification", "Isotopic label"}, {UNIMOD_mTRAQ, "spec_6_hidden", "1"}, {UNIMOD_mTRAQ, "spec_6_position", "Anywhere"}, {UNIMOD_mTRAQ, "spec_6_site", "T"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "approved", "0"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "delta_composition", "H(12) C(4) 13C(3) N 15N O"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_1_hidden", "0"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_1_site", "K"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_2_hidden", "0"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_2_position", "Any N-term"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_2_site", "N-term"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_3_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_3_hidden", "0"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_3_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_3_site", "Y"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_4_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_4_hidden", "1"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_4_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_4_site", "H"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_5_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_5_hidden", "1"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_5_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_5_site", "S"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_6_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_6_hidden", "1"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_6_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_3_15N_1_, "spec_6_site", "T"}, {UNIMOD_DyLight_maleimide, "approved", "0"}, {UNIMOD_DyLight_maleimide, "delta_composition", "H(48) C(39) N(4) O(15) S(4)"}, {UNIMOD_DyLight_maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DyLight_maleimide, "spec_1_hidden", "1"}, {UNIMOD_DyLight_maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_DyLight_maleimide, "spec_1_site", "C"}, {UNIMOD_Methyl_PEO12_Maleimide, "approved", "0"}, {UNIMOD_Methyl_PEO12_Maleimide, "delta_composition", "H(58) C(32) N(2) O(15)"}, {UNIMOD_Methyl_PEO12_Maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Methyl_PEO12_Maleimide, "spec_1_hidden", "1"}, {UNIMOD_Methyl_PEO12_Maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_PEO12_Maleimide, "spec_1_site", "C"}, {UNIMOD_CarbamidomethylDTT, "approved", "0"}, {UNIMOD_CarbamidomethylDTT, "delta_composition", "H(11) C(6) N O(3) S(2)"}, {UNIMOD_CarbamidomethylDTT, "spec_1_classification", "Artefact"}, {UNIMOD_CarbamidomethylDTT, "spec_1_hidden", "1"}, {UNIMOD_CarbamidomethylDTT, "spec_1_position", "Anywhere"}, {UNIMOD_CarbamidomethylDTT, "spec_1_site", "C"}, {UNIMOD_CarboxymethylDTT, "approved", "0"}, {UNIMOD_CarboxymethylDTT, "delta_composition", "H(10) C(6) O(4) S(2)"}, {UNIMOD_CarboxymethylDTT, "spec_1_classification", "Artefact"}, {UNIMOD_CarboxymethylDTT, "spec_1_hidden", "1"}, {UNIMOD_CarboxymethylDTT, "spec_1_position", "Anywhere"}, {UNIMOD_CarboxymethylDTT, "spec_1_site", "C"}, {UNIMOD_Biotin_PEG_PRA, "approved", "0"}, {UNIMOD_Biotin_PEG_PRA, "delta_composition", "H(42) C(26) N(8) O(7)"}, {UNIMOD_Biotin_PEG_PRA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_PEG_PRA, "spec_1_hidden", "1"}, {UNIMOD_Biotin_PEG_PRA, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_PEG_PRA, "spec_1_site", "M"}, {UNIMOD_Met__Aha, "approved", "0"}, {UNIMOD_Met__Aha, "delta_composition", "H(-3) C(-1) N(3) S(-1)"}, {UNIMOD_Met__Aha, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Met__Aha, "spec_1_hidden", "1"}, {UNIMOD_Met__Aha, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Aha, "spec_1_site", "M"}, {UNIMOD_Label_15N_4_, "approved", "0"}, {UNIMOD_Label_15N_4_, "delta_composition", "N(-4) 15N(4)"}, {UNIMOD_Label_15N_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_15N_4_, "spec_1_hidden", "1"}, {UNIMOD_Label_15N_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_15N_4_, "spec_1_site", "R"}, {UNIMOD_pyrophospho, "approved", "0"}, {UNIMOD_pyrophospho, "delta_composition", "H(2) O(6) P(2)"}, {UNIMOD_pyrophospho, "spec_1_classification", "Post-translational"}, {UNIMOD_pyrophospho, "spec_1_hidden", "1"}, {UNIMOD_pyrophospho, "spec_1_position", "Anywhere"}, {UNIMOD_pyrophospho, "spec_1_site", "S"}, {UNIMOD_pyrophospho, "spec_2_classification", "Post-translational"}, {UNIMOD_pyrophospho, "spec_2_hidden", "1"}, {UNIMOD_pyrophospho, "spec_2_position", "Anywhere"}, {UNIMOD_pyrophospho, "spec_2_site", "T"}, {UNIMOD_Met__Hpg, "approved", "0"}, {UNIMOD_Met__Hpg, "delta_composition", "H(-2) C S(-1)"}, {UNIMOD_Met__Hpg, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Met__Hpg, "spec_1_hidden", "1"}, {UNIMOD_Met__Hpg, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Hpg, "spec_1_site", "M"}, {UNIMOD_4AcAllylGal, "approved", "0"}, {UNIMOD_4AcAllylGal, "delta_composition", "H(24) C(17) O(9)"}, {UNIMOD_4AcAllylGal, "spec_1_classification", "Chemical derivative"}, {UNIMOD_4AcAllylGal, "spec_1_hidden", "1"}, {UNIMOD_4AcAllylGal, "spec_1_position", "Anywhere"}, {UNIMOD_4AcAllylGal, "spec_1_site", "C"}, {UNIMOD_DimethylArsino, "approved", "0"}, {UNIMOD_DimethylArsino, "delta_composition", "H(5) C(2) As"}, {UNIMOD_DimethylArsino, "spec_1_classification", "Post-translational"}, {UNIMOD_DimethylArsino, "spec_1_hidden", "1"}, {UNIMOD_DimethylArsino, "spec_1_position", "Anywhere"}, {UNIMOD_DimethylArsino, "spec_1_site", "C"}, {UNIMOD_Lys__CamCys, "approved", "0"}, {UNIMOD_Lys__CamCys, "delta_composition", "H(-4) C(-1) O S"}, {UNIMOD_Lys__CamCys, "spec_1_classification", "Pre-translational"}, {UNIMOD_Lys__CamCys, "spec_1_hidden", "1"}, {UNIMOD_Lys__CamCys, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__CamCys, "spec_1_site", "K"}, {UNIMOD_Phe__CamCys, "approved", "0"}, {UNIMOD_Phe__CamCys, "delta_composition", "H(-1) C(-4) N O S"}, {UNIMOD_Phe__CamCys, "spec_1_classification", "Pre-translational"}, {UNIMOD_Phe__CamCys, "spec_1_hidden", "1"}, {UNIMOD_Phe__CamCys, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__CamCys, "spec_1_site", "F"}, {UNIMOD_Leu__MetOx, "approved", "0"}, {UNIMOD_Leu__MetOx, "delta_composition", "H(-2) C(-1) O S"}, {UNIMOD_Leu__MetOx, "spec_1_classification", "Pre-translational"}, {UNIMOD_Leu__MetOx, "spec_1_hidden", "1"}, {UNIMOD_Leu__MetOx, "spec_1_position", "Anywhere"}, {UNIMOD_Leu__MetOx, "spec_1_site", "L"}, {UNIMOD_Lys__MetOx, "approved", "0"}, {UNIMOD_Lys__MetOx, "delta_composition", "H(-3) C(-1) N(-1) O S"}, {UNIMOD_Lys__MetOx, "spec_1_classification", "Pre-translational"}, {UNIMOD_Lys__MetOx, "spec_1_hidden", "1"}, {UNIMOD_Lys__MetOx, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__MetOx, "spec_1_site", "K"}, {UNIMOD_Galactosyl, "approved", "0"}, {UNIMOD_Galactosyl, "delta_composition", "O Hex"}, {UNIMOD_Galactosyl, "spec_1_classification", "Other glycosylation"}, {UNIMOD_Galactosyl, "spec_1_hidden", "1"}, {UNIMOD_Galactosyl, "spec_1_position", "Anywhere"}, {UNIMOD_Galactosyl, "spec_1_site", "K"}, {UNIMOD_Galactosyl, "spec_2_classification", "Other glycosylation"}, {UNIMOD_Galactosyl, "spec_2_hidden", "1"}, {UNIMOD_Galactosyl, "spec_2_position", "Any N-term"}, {UNIMOD_Galactosyl, "spec_2_site", "N-term"}, {UNIMOD_Xlink_SMCC_321_, "approved", "0"}, {UNIMOD_Xlink_SMCC_321_, "delta_composition", "H(27) C(17) N(3) O(3)"}, {UNIMOD_Xlink_SMCC_321_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_321_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_SMCC_321_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_SMCC_321_, "spec_1_site", "C"}, {UNIMOD_Bacillosamine, "approved", "0"}, {UNIMOD_Bacillosamine, "delta_composition", "H(6) C(4) N(2) dHex"}, {UNIMOD_Bacillosamine, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Bacillosamine, "spec_1_hidden", "1"}, {UNIMOD_Bacillosamine, "spec_1_position", "Anywhere"}, {UNIMOD_Bacillosamine, "spec_1_site", "N"}, {UNIMOD_MTSL, "approved", "0"}, {UNIMOD_MTSL, "delta_composition", "H(14) C(9) N O S"}, {UNIMOD_MTSL, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MTSL, "spec_1_hidden", "1"}, {UNIMOD_MTSL, "spec_1_position", "Anywhere"}, {UNIMOD_MTSL, "spec_1_site", "C"}, {UNIMOD_HNE_BAHAH, "approved", "0"}, {UNIMOD_HNE_BAHAH, "delta_composition", "H(45) C(25) N(5) O(4) S"}, {UNIMOD_HNE_BAHAH, "spec_1_classification", "Chemical derivative"}, {UNIMOD_HNE_BAHAH, "spec_1_hidden", "1"}, {UNIMOD_HNE_BAHAH, "spec_1_position", "Anywhere"}, {UNIMOD_HNE_BAHAH, "spec_1_site", "C"}, {UNIMOD_HNE_BAHAH, "spec_2_classification", "Chemical derivative"}, {UNIMOD_HNE_BAHAH, "spec_2_hidden", "1"}, {UNIMOD_HNE_BAHAH, "spec_2_position", "Anywhere"}, {UNIMOD_HNE_BAHAH, "spec_2_site", "H"}, {UNIMOD_HNE_BAHAH, "spec_3_classification", "Chemical derivative"}, {UNIMOD_HNE_BAHAH, "spec_3_hidden", "1"}, {UNIMOD_HNE_BAHAH, "spec_3_position", "Anywhere"}, {UNIMOD_HNE_BAHAH, "spec_3_site", "K"}, {UNIMOD_Methylmalonylation, "approved", "0"}, {UNIMOD_Methylmalonylation, "delta_composition", "H(4) C(4) O(3)"}, {UNIMOD_Methylmalonylation, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Methylmalonylation, "spec_1_hidden", "1"}, {UNIMOD_Methylmalonylation, "spec_1_position", "Anywhere"}, {UNIMOD_Methylmalonylation, "spec_1_site", "S"}, {UNIMOD_Label_13C_4_15N_2__GG, "approved", "0"}, {UNIMOD_Label_13C_4_15N_2__GG, "delta_composition", "H(6) 13C(4) 15N(2) O(2)"}, {UNIMOD_Label_13C_4_15N_2__GG, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_4_15N_2__GG, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_4_15N_2__GG, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_4_15N_2__GG, "spec_1_site", "K"}, {UNIMOD_ethylamino, "approved", "0"}, {UNIMOD_ethylamino, "delta_composition", "H(5) C(2) N O(-1)"}, {UNIMOD_ethylamino, "spec_1_classification", "Chemical derivative"}, {UNIMOD_ethylamino, "spec_1_hidden", "1"}, {UNIMOD_ethylamino, "spec_1_position", "Anywhere"}, {UNIMOD_ethylamino, "spec_1_site", "S"}, {UNIMOD_ethylamino, "spec_2_classification", "Chemical derivative"}, {UNIMOD_ethylamino, "spec_2_hidden", "1"}, {UNIMOD_ethylamino, "spec_2_position", "Anywhere"}, {UNIMOD_ethylamino, "spec_2_site", "T"}, {UNIMOD_MercaptoEthanol, "approved", "0"}, {UNIMOD_MercaptoEthanol, "delta_composition", "H(4) C(2) S"}, {UNIMOD_MercaptoEthanol, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MercaptoEthanol, "spec_1_hidden", "1"}, {UNIMOD_MercaptoEthanol, "spec_1_position", "Anywhere"}, {UNIMOD_MercaptoEthanol, "spec_1_site", "S"}, {UNIMOD_MercaptoEthanol, "spec_2_classification", "Chemical derivative"}, {UNIMOD_MercaptoEthanol, "spec_2_hidden", "1"}, {UNIMOD_MercaptoEthanol, "spec_2_position", "Anywhere"}, {UNIMOD_MercaptoEthanol, "spec_2_site", "T"}, {UNIMOD_Ethyl_Deamidated, "approved", "0"}, {UNIMOD_Ethyl_Deamidated, "delta_composition", "H(3) C(2) N(-1) O"}, {UNIMOD_Ethyl_Deamidated, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ethyl_Deamidated, "spec_1_hidden", "1"}, {UNIMOD_Ethyl_Deamidated, "spec_1_position", "Anywhere"}, {UNIMOD_Ethyl_Deamidated, "spec_1_site", "N"}, {UNIMOD_Ethyl_Deamidated, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Ethyl_Deamidated, "spec_2_hidden", "1"}, {UNIMOD_Ethyl_Deamidated, "spec_2_position", "Anywhere"}, {UNIMOD_Ethyl_Deamidated, "spec_2_site", "Q"}, {UNIMOD_VFQQQTGG, "approved", "0"}, {UNIMOD_VFQQQTGG, "delta_composition", "H(55) C(37) N(11) O(12)"}, {UNIMOD_VFQQQTGG, "spec_1_classification", "Other"}, {UNIMOD_VFQQQTGG, "spec_1_hidden", "1"}, {UNIMOD_VFQQQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_VFQQQTGG, "spec_1_site", "K"}, {UNIMOD_VIEVYQEQTGG, "approved", "0"}, {UNIMOD_VIEVYQEQTGG, "delta_composition", "H(81) C(53) N(13) O(19)"}, {UNIMOD_VIEVYQEQTGG, "spec_1_classification", "Other"}, {UNIMOD_VIEVYQEQTGG, "spec_1_hidden", "1"}, {UNIMOD_VIEVYQEQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_VIEVYQEQTGG, "spec_1_site", "K"}, {UNIMOD_AMTzHexNAc2, "approved", "0"}, {UNIMOD_AMTzHexNAc2, "delta_composition", "H(30) C(19) N(6) O(10)"}, {UNIMOD_AMTzHexNAc2, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AMTzHexNAc2, "spec_1_hidden", "1"}, {UNIMOD_AMTzHexNAc2, "spec_1_position", "Anywhere"}, {UNIMOD_AMTzHexNAc2, "spec_1_site", "N"}, {UNIMOD_AMTzHexNAc2, "spec_2_classification", "Chemical derivative"}, {UNIMOD_AMTzHexNAc2, "spec_2_hidden", "1"}, {UNIMOD_AMTzHexNAc2, "spec_2_position", "Anywhere"}, {UNIMOD_AMTzHexNAc2, "spec_2_site", "S"}, {UNIMOD_AMTzHexNAc2, "spec_3_classification", "Chemical derivative"}, {UNIMOD_AMTzHexNAc2, "spec_3_hidden", "1"}, {UNIMOD_AMTzHexNAc2, "spec_3_position", "Anywhere"}, {UNIMOD_AMTzHexNAc2, "spec_3_site", "T"}, {UNIMOD_Atto495Maleimide, "approved", "0"}, {UNIMOD_Atto495Maleimide, "delta_composition", "H(32) C(27) N(5) O(3)"}, {UNIMOD_Atto495Maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Atto495Maleimide, "spec_1_hidden", "1"}, {UNIMOD_Atto495Maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Atto495Maleimide, "spec_1_site", "C"}, {UNIMOD_Chlorination, "approved", "0"}, {UNIMOD_Chlorination, "delta_composition", "H(-1) Cl"}, {UNIMOD_Chlorination, "spec_1_classification", "Artefact"}, {UNIMOD_Chlorination, "spec_1_hidden", "1"}, {UNIMOD_Chlorination, "spec_1_position", "Anywhere"}, {UNIMOD_Chlorination, "spec_1_site", "Y"}, {UNIMOD_Chlorination, "spec_2_classification", "Artefact"}, {UNIMOD_Chlorination, "spec_2_hidden", "1"}, {UNIMOD_Chlorination, "spec_2_position", "Anywhere"}, {UNIMOD_Chlorination, "spec_2_site", "W"}, {UNIMOD_dichlorination, "approved", "0"}, {UNIMOD_dichlorination, "delta_composition", "H(-2) Cl(2)"}, {UNIMOD_dichlorination, "spec_1_classification", "Artefact"}, {UNIMOD_dichlorination, "spec_1_hidden", "1"}, {UNIMOD_dichlorination, "spec_1_position", "Anywhere"}, {UNIMOD_dichlorination, "spec_1_site", "Y"}, {UNIMOD_dichlorination, "spec_2_classification", "Chemical derivative"}, {UNIMOD_dichlorination, "spec_2_hidden", "1"}, {UNIMOD_dichlorination, "spec_2_position", "Anywhere"}, {UNIMOD_dichlorination, "spec_2_site", "C"}, {UNIMOD_AROD, "approved", "0"}, {UNIMOD_AROD, "delta_composition", "H(52) C(35) N(10) O(9) S(2)"}, {UNIMOD_AROD, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AROD, "spec_1_hidden", "1"}, {UNIMOD_AROD, "spec_1_position", "Anywhere"}, {UNIMOD_AROD, "spec_1_site", "C"}, {UNIMOD_Cys__methylaminoAla, "approved", "0"}, {UNIMOD_Cys__methylaminoAla, "delta_composition", "H(3) C N S(-1)"}, {UNIMOD_Cys__methylaminoAla, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cys__methylaminoAla, "spec_1_hidden", "1"}, {UNIMOD_Cys__methylaminoAla, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__methylaminoAla, "spec_1_site", "C"}, {UNIMOD_Cys__ethylaminoAla, "approved", "0"}, {UNIMOD_Cys__ethylaminoAla, "delta_composition", "H(5) C(2) N S(-1)"}, {UNIMOD_Cys__ethylaminoAla, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cys__ethylaminoAla, "spec_1_hidden", "1"}, {UNIMOD_Cys__ethylaminoAla, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__ethylaminoAla, "spec_1_site", "C"}, {UNIMOD_DNPS, "approved", "0"}, {UNIMOD_DNPS, "delta_composition", "H(3) C(6) N(2) O(4) S"}, {UNIMOD_DNPS, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DNPS, "spec_1_hidden", "1"}, {UNIMOD_DNPS, "spec_1_position", "Anywhere"}, {UNIMOD_DNPS, "spec_1_site", "C"}, {UNIMOD_DNPS, "spec_2_classification", "Chemical derivative"}, {UNIMOD_DNPS, "spec_2_hidden", "1"}, {UNIMOD_DNPS, "spec_2_position", "Anywhere"}, {UNIMOD_DNPS, "spec_2_site", "W"}, {UNIMOD_SulfoGMBS, "approved", "0"}, {UNIMOD_SulfoGMBS, "delta_composition", "H(26) C(22) N(4) O(5) S"}, {UNIMOD_SulfoGMBS, "spec_1_classification", "Other"}, {UNIMOD_SulfoGMBS, "spec_1_hidden", "1"}, {UNIMOD_SulfoGMBS, "spec_1_position", "Anywhere"}, {UNIMOD_SulfoGMBS, "spec_1_site", "C"}, {UNIMOD_DimethylamineGMBS, "approved", "0"}, {UNIMOD_DimethylamineGMBS, "delta_composition", "H(21) C(13) N(3) O(3)"}, {UNIMOD_DimethylamineGMBS, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DimethylamineGMBS, "spec_1_hidden", "1"}, {UNIMOD_DimethylamineGMBS, "spec_1_position", "Anywhere"}, {UNIMOD_DimethylamineGMBS, "spec_1_site", "C"}, {UNIMOD_Label_15N_2_2H_9_, "approved", "0"}, {UNIMOD_Label_15N_2_2H_9_, "delta_composition", "H(-9) 2H(9) N(-2) 15N(2)"}, {UNIMOD_Label_15N_2_2H_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_15N_2_2H_9_, "spec_1_hidden", "1"}, {UNIMOD_Label_15N_2_2H_9_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_15N_2_2H_9_, "spec_1_site", "K"}, {UNIMOD_LG_anhydrolactam, "approved", "0"}, {UNIMOD_LG_anhydrolactam, "delta_composition", "H(26) C(20) O(3)"}, {UNIMOD_LG_anhydrolactam, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_anhydrolactam, "spec_1_hidden", "1"}, {UNIMOD_LG_anhydrolactam, "spec_1_position", "Anywhere"}, {UNIMOD_LG_anhydrolactam, "spec_1_site", "K"}, {UNIMOD_LG_anhydrolactam, "spec_2_classification", "Post-translational"}, {UNIMOD_LG_anhydrolactam, "spec_2_hidden", "1"}, {UNIMOD_LG_anhydrolactam, "spec_2_position", "Any N-term"}, {UNIMOD_LG_anhydrolactam, "spec_2_site", "N-term"}, {UNIMOD_LG_pyrrole, "approved", "0"}, {UNIMOD_LG_pyrrole, "delta_composition", "H(28) C(20) O(3)"}, {UNIMOD_LG_pyrrole, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_pyrrole, "spec_1_hidden", "1"}, {UNIMOD_LG_pyrrole, "spec_1_position", "Anywhere"}, {UNIMOD_LG_pyrrole, "spec_1_site", "K"}, {UNIMOD_LG_pyrrole, "spec_2_classification", "Post-translational"}, {UNIMOD_LG_pyrrole, "spec_2_hidden", "1"}, {UNIMOD_LG_pyrrole, "spec_2_position", "Any N-term"}, {UNIMOD_LG_pyrrole, "spec_2_site", "N-term"}, {UNIMOD_LG_pyrrole, "spec_3_classification", "Post-translational"}, {UNIMOD_LG_pyrrole, "spec_3_hidden", "1"}, {UNIMOD_LG_pyrrole, "spec_3_position", "Anywhere"}, {UNIMOD_LG_pyrrole, "spec_3_site", "C"}, {UNIMOD_LG_anhyropyrrole, "approved", "0"}, {UNIMOD_LG_anhyropyrrole, "delta_composition", "H(26) C(20) O(2)"}, {UNIMOD_LG_anhyropyrrole, "spec_1_classification", "Post-translational"}, {UNIMOD_LG_anhyropyrrole, "spec_1_hidden", "1"}, {UNIMOD_LG_anhyropyrrole, "spec_1_position", "Anywhere"}, {UNIMOD_LG_anhyropyrrole, "spec_1_site", "K"}, {UNIMOD_LG_anhyropyrrole, "spec_2_classification", "Post-translational"}, {UNIMOD_LG_anhyropyrrole, "spec_2_hidden", "1"}, {UNIMOD_LG_anhyropyrrole, "spec_2_position", "Any N-term"}, {UNIMOD_LG_anhyropyrrole, "spec_2_site", "N-term"}, {UNIMOD_3_deoxyglucosone, "approved", "0"}, {UNIMOD_3_deoxyglucosone, "delta_composition", "H(8) C(6) O(4)"}, {UNIMOD_3_deoxyglucosone, "spec_1_classification", "Multiple"}, {UNIMOD_3_deoxyglucosone, "spec_1_hidden", "1"}, {UNIMOD_3_deoxyglucosone, "spec_1_position", "Anywhere"}, {UNIMOD_3_deoxyglucosone, "spec_1_site", "R"}, {UNIMOD_Cation_Li, "approved", "0"}, {UNIMOD_Cation_Li, "delta_composition", "H(-1) Li"}, {UNIMOD_Cation_Li, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Li, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Li, "spec_1_hidden", "1"}, {UNIMOD_Cation_Li, "spec_1_hidden", "1"}, {UNIMOD_Cation_Li, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Li, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Li, "spec_1_site", "D"}, {UNIMOD_Cation_Li, "spec_1_site", "E"}, {UNIMOD_Cation_Li, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Li, "spec_2_hidden", "1"}, {UNIMOD_Cation_Li, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Li, "spec_2_site", "C-term"}, {UNIMOD_Cation_Ca_II_, "approved", "0"}, {UNIMOD_Cation_Ca_II_, "delta_composition", "H(-2) Ca"}, {UNIMOD_Cation_Ca_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ca_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ca_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ca_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ca_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ca_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ca_II_, "spec_1_site", "E"}, {UNIMOD_Cation_Ca_II_, "spec_1_site", "D"}, {UNIMOD_Cation_Ca_II_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Ca_II_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Ca_II_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Ca_II_, "spec_2_site", "C-term"}, {UNIMOD_Cation_Fe_II_, "approved", "0"}, {UNIMOD_Cation_Fe_II_, "delta_composition", "H(-2) Fe"}, {UNIMOD_Cation_Fe_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Fe_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Fe_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Fe_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Fe_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Fe_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Fe_II_, "spec_1_site", "D"}, {UNIMOD_Cation_Fe_II_, "spec_1_site", "E"}, {UNIMOD_Cation_Fe_II_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Fe_II_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Fe_II_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Fe_II_, "spec_2_site", "C-term"}, {UNIMOD_Cation_Ni_II_, "approved", "0"}, {UNIMOD_Cation_Ni_II_, "delta_composition", "H(-2) Ni"}, {UNIMOD_Cation_Ni_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ni_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ni_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ni_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ni_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ni_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ni_II_, "spec_1_site", "D"}, {UNIMOD_Cation_Ni_II_, "spec_1_site", "E"}, {UNIMOD_Cation_Ni_II_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Ni_II_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Ni_II_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Ni_II_, "spec_2_site", "C-term"}, {UNIMOD_Cation_Zn_II_, "approved", "0"}, {UNIMOD_Cation_Zn_II_, "delta_composition", "H(-2) Zn"}, {UNIMOD_Cation_Zn_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Zn_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Zn_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Zn_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Zn_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Zn_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Zn_II_, "spec_1_site", "E"}, {UNIMOD_Cation_Zn_II_, "spec_1_site", "D"}, {UNIMOD_Cation_Zn_II_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Zn_II_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Zn_II_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Zn_II_, "spec_2_site", "C-term"}, {UNIMOD_Cation_Zn_II_, "spec_3_classification", "Artefact"}, {UNIMOD_Cation_Zn_II_, "spec_3_hidden", "1"}, {UNIMOD_Cation_Zn_II_, "spec_3_position", "Anywhere"}, {UNIMOD_Cation_Zn_II_, "spec_3_site", "H"}, {UNIMOD_Cation_Ag, "approved", "0"}, {UNIMOD_Cation_Ag, "delta_composition", "H(-1) Ag"}, {UNIMOD_Cation_Ag, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ag, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Ag, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ag, "spec_1_hidden", "1"}, {UNIMOD_Cation_Ag, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ag, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Ag, "spec_1_site", "D"}, {UNIMOD_Cation_Ag, "spec_1_site", "E"}, {UNIMOD_Cation_Ag, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Ag, "spec_2_hidden", "1"}, {UNIMOD_Cation_Ag, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Ag, "spec_2_site", "C-term"}, {UNIMOD_Cation_Mg_II_, "approved", "0"}, {UNIMOD_Cation_Mg_II_, "delta_composition", "H(-2) Mg"}, {UNIMOD_Cation_Mg_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Mg_II_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Mg_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Mg_II_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Mg_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Mg_II_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Mg_II_, "spec_1_site", "D"}, {UNIMOD_Cation_Mg_II_, "spec_1_site", "E"}, {UNIMOD_Cation_Mg_II_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Mg_II_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Mg_II_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Mg_II_, "spec_2_site", "C-term"}, {UNIMOD_2_succinyl, "approved", "0"}, {UNIMOD_2_succinyl, "delta_composition", "H(4) C(4) O(4)"}, {UNIMOD_2_succinyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_2_succinyl, "spec_1_hidden", "1"}, {UNIMOD_2_succinyl, "spec_1_position", "Anywhere"}, {UNIMOD_2_succinyl, "spec_1_site", "C"}, {UNIMOD_Propargylamine, "approved", "0"}, {UNIMOD_Propargylamine, "delta_composition", "H(3) C(3) N O(-1)"}, {UNIMOD_Propargylamine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Propargylamine, "spec_1_hidden", "1"}, {UNIMOD_Propargylamine, "spec_1_position", "Any C-term"}, {UNIMOD_Propargylamine, "spec_1_site", "C-term"}, {UNIMOD_Propargylamine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Propargylamine, "spec_2_hidden", "1"}, {UNIMOD_Propargylamine, "spec_2_position", "Anywhere"}, {UNIMOD_Propargylamine, "spec_2_site", "D"}, {UNIMOD_Propargylamine, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Propargylamine, "spec_3_hidden", "1"}, {UNIMOD_Propargylamine, "spec_3_position", "Anywhere"}, {UNIMOD_Propargylamine, "spec_3_site", "E"}, {UNIMOD_Phosphopropargyl, "approved", "0"}, {UNIMOD_Phosphopropargyl, "delta_composition", "H(4) C(3) N O(2) P"}, {UNIMOD_Phosphopropargyl, "spec_1_classification", "Multiple"}, {UNIMOD_Phosphopropargyl, "spec_1_hidden", "1"}, {UNIMOD_Phosphopropargyl, "spec_1_position", "Anywhere"}, {UNIMOD_Phosphopropargyl, "spec_1_site", "S"}, {UNIMOD_Phosphopropargyl, "spec_2_classification", "Multiple"}, {UNIMOD_Phosphopropargyl, "spec_2_hidden", "1"}, {UNIMOD_Phosphopropargyl, "spec_2_position", "Anywhere"}, {UNIMOD_Phosphopropargyl, "spec_2_site", "T"}, {UNIMOD_Phosphopropargyl, "spec_3_classification", "Multiple"}, {UNIMOD_Phosphopropargyl, "spec_3_hidden", "1"}, {UNIMOD_Phosphopropargyl, "spec_3_position", "Anywhere"}, {UNIMOD_Phosphopropargyl, "spec_3_site", "Y"}, {UNIMOD_SUMO2135, "approved", "0"}, {UNIMOD_SUMO2135, "delta_composition", "H(137) C(90) N(21) O(37) S"}, {UNIMOD_SUMO2135, "spec_1_classification", "Other"}, {UNIMOD_SUMO2135, "spec_1_hidden", "1"}, {UNIMOD_SUMO2135, "spec_1_position", "Anywhere"}, {UNIMOD_SUMO2135, "spec_1_site", "K"}, {UNIMOD_SUMO3549, "approved", "0"}, {UNIMOD_SUMO3549, "delta_composition", "H(224) C(150) N(38) O(60) S"}, {UNIMOD_SUMO3549, "spec_1_classification", "Other"}, {UNIMOD_SUMO3549, "spec_1_hidden", "1"}, {UNIMOD_SUMO3549, "spec_1_position", "Anywhere"}, {UNIMOD_SUMO3549, "spec_1_site", "K"}, {UNIMOD_thioacylPA, "approved", "0"}, {UNIMOD_thioacylPA, "delta_composition", "H(9) C(6) N O(2) S"}, {UNIMOD_thioacylPA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_thioacylPA, "spec_1_hidden", "1"}, {UNIMOD_thioacylPA, "spec_1_position", "Anywhere"}, {UNIMOD_thioacylPA, "spec_1_site", "K"}, {UNIMOD_maleimide3, "approved", "0"}, {UNIMOD_maleimide3, "delta_composition", "H(59) C(37) N(7) O(23)"}, {UNIMOD_maleimide3, "spec_1_classification", "Post-translational"}, {UNIMOD_maleimide3, "spec_1_hidden", "1"}, {UNIMOD_maleimide3, "spec_1_position", "Anywhere"}, {UNIMOD_maleimide3, "spec_1_site", "K"}, {UNIMOD_maleimide3, "spec_2_classification", "Post-translational"}, {UNIMOD_maleimide3, "spec_2_hidden", "1"}, {UNIMOD_maleimide3, "spec_2_position", "Anywhere"}, {UNIMOD_maleimide3, "spec_2_site", "C"}, {UNIMOD_maleimide5, "approved", "0"}, {UNIMOD_maleimide5, "delta_composition", "H(79) C(49) N(7) O(33)"}, {UNIMOD_maleimide5, "spec_1_classification", "Post-translational"}, {UNIMOD_maleimide5, "spec_1_hidden", "1"}, {UNIMOD_maleimide5, "spec_1_position", "Anywhere"}, {UNIMOD_maleimide5, "spec_1_site", "C"}, {UNIMOD_maleimide5, "spec_2_classification", "Post-translational"}, {UNIMOD_maleimide5, "spec_2_hidden", "1"}, {UNIMOD_maleimide5, "spec_2_position", "Anywhere"}, {UNIMOD_maleimide5, "spec_2_site", "K"}, {UNIMOD_Puromycin, "approved", "0"}, {UNIMOD_Puromycin, "delta_composition", "H(27) C(22) N(7) O(4)"}, {UNIMOD_Puromycin, "spec_1_classification", "Co-translational"}, {UNIMOD_Puromycin, "spec_1_hidden", "1"}, {UNIMOD_Puromycin, "spec_1_position", "Any C-term"}, {UNIMOD_Puromycin, "spec_1_site", "C-term"}, {UNIMOD_Carbofuran, "approved", "0"}, {UNIMOD_Carbofuran, "delta_composition", "H(4) C(2) N O"}, {UNIMOD_Carbofuran, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carbofuran, "spec_1_hidden", "1"}, {UNIMOD_Carbofuran, "spec_1_position", "Anywhere"}, {UNIMOD_Carbofuran, "spec_1_site", "S"}, {UNIMOD_BITC, "approved", "0"}, {UNIMOD_BITC, "delta_composition", "H(7) C(8) N S"}, {UNIMOD_BITC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_BITC, "spec_1_hidden", "1"}, {UNIMOD_BITC, "spec_1_position", "Anywhere"}, {UNIMOD_BITC, "spec_1_site", "C"}, {UNIMOD_BITC, "spec_2_classification", "Chemical derivative"}, {UNIMOD_BITC, "spec_2_hidden", "1"}, {UNIMOD_BITC, "spec_2_position", "Anywhere"}, {UNIMOD_BITC, "spec_2_site", "K"}, {UNIMOD_BITC, "spec_3_classification", "Chemical derivative"}, {UNIMOD_BITC, "spec_3_hidden", "1"}, {UNIMOD_BITC, "spec_3_position", "Any N-term"}, {UNIMOD_BITC, "spec_3_site", "N-term"}, {UNIMOD_PEITC, "approved", "0"}, {UNIMOD_PEITC, "delta_composition", "H(9) C(9) N S"}, {UNIMOD_PEITC, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PEITC, "spec_1_hidden", "1"}, {UNIMOD_PEITC, "spec_1_position", "Anywhere"}, {UNIMOD_PEITC, "spec_1_site", "C"}, {UNIMOD_PEITC, "spec_2_classification", "Chemical derivative"}, {UNIMOD_PEITC, "spec_2_hidden", "1"}, {UNIMOD_PEITC, "spec_2_position", "Anywhere"}, {UNIMOD_PEITC, "spec_2_site", "K"}, {UNIMOD_PEITC, "spec_3_classification", "Chemical derivative"}, {UNIMOD_PEITC, "spec_3_hidden", "1"}, {UNIMOD_PEITC, "spec_3_position", "Any N-term"}, {UNIMOD_PEITC, "spec_3_site", "N-term"}, {UNIMOD_glucosone, "approved", "0"}, {UNIMOD_glucosone, "delta_composition", "H(8) C(6) O(5)"}, {UNIMOD_glucosone, "spec_1_classification", "Other"}, {UNIMOD_glucosone, "spec_1_hidden", "1"}, {UNIMOD_glucosone, "spec_1_position", "Anywhere"}, {UNIMOD_glucosone, "spec_1_site", "R"}, {UNIMOD_cysTMT, "approved", "0"}, {UNIMOD_cysTMT, "delta_composition", "H(25) C(14) N(3) O(2) S"}, {UNIMOD_cysTMT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_cysTMT, "spec_1_hidden", "1"}, {UNIMOD_cysTMT, "spec_1_position", "Anywhere"}, {UNIMOD_cysTMT, "spec_1_site", "C"}, {UNIMOD_cysTMT6plex, "approved", "0"}, {UNIMOD_cysTMT6plex, "delta_composition", "H(25) C(10) 13C(4) N(2) 15N O(2) S"}, {UNIMOD_cysTMT6plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_cysTMT6plex, "spec_1_hidden", "1"}, {UNIMOD_cysTMT6plex, "spec_1_position", "Anywhere"}, {UNIMOD_cysTMT6plex, "spec_1_site", "C"}, {UNIMOD_Label_13C_6__Dimethyl, "approved", "0"}, {UNIMOD_Label_13C_6__Dimethyl, "delta_composition", "H(4) C(-4) 13C(6)"}, {UNIMOD_Label_13C_6__Dimethyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6__Dimethyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6__Dimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6__Dimethyl, "spec_1_site", "K"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "approved", "0"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "delta_composition", "H(4) C(-4) 13C(6) N(-2) 15N(2)"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_2__Dimethyl, "spec_1_site", "K"}, {UNIMOD_Ammonium, "approved", "0"}, {UNIMOD_Ammonium, "delta_composition", "H(3) N"}, {UNIMOD_Ammonium, "spec_1_classification", "Artefact"}, {UNIMOD_Ammonium, "spec_1_hidden", "1"}, {UNIMOD_Ammonium, "spec_1_position", "Any C-term"}, {UNIMOD_Ammonium, "spec_1_site", "C-term"}, {UNIMOD_Ammonium, "spec_2_classification", "Artefact"}, {UNIMOD_Ammonium, "spec_2_classification", "Artefact"}, {UNIMOD_Ammonium, "spec_2_hidden", "1"}, {UNIMOD_Ammonium, "spec_2_hidden", "1"}, {UNIMOD_Ammonium, "spec_2_position", "Anywhere"}, {UNIMOD_Ammonium, "spec_2_position", "Anywhere"}, {UNIMOD_Ammonium, "spec_2_site", "E"}, {UNIMOD_Ammonium, "spec_2_site", "D"}, {UNIMOD_ISD_z_2_ion, "approved", "0"}, {UNIMOD_ISD_z_2_ion, "delta_composition", "H(-1) N(-1)"}, {UNIMOD_ISD_z_2_ion, "spec_1_classification", "Artefact"}, {UNIMOD_ISD_z_2_ion, "spec_1_hidden", "1"}, {UNIMOD_ISD_z_2_ion, "spec_1_position", "Any N-term"}, {UNIMOD_ISD_z_2_ion, "spec_1_site", "N-term"}, {UNIMOD_Biotin_Sigma_B1267, "approved", "0"}, {UNIMOD_Biotin_Sigma_B1267, "delta_composition", "H(27) C(20) N(5) O(5) S"}, {UNIMOD_Biotin_Sigma_B1267, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Sigma_B1267, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Sigma_B1267, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Sigma_B1267, "spec_1_site", "C"}, {UNIMOD_Label_15N_1_, "approved", "0"}, {UNIMOD_Label_15N_1_, "delta_composition", "N(-1) 15N"}, {UNIMOD_Label_15N_1_, "spec_10_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_10_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_10_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_10_site", "I"}, {UNIMOD_Label_15N_1_, "spec_11_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_11_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_11_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_11_site", "L"}, {UNIMOD_Label_15N_1_, "spec_12_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_12_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_12_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_12_site", "D"}, {UNIMOD_Label_15N_1_, "spec_13_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_13_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_13_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_13_site", "E"}, {UNIMOD_Label_15N_1_, "spec_14_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_14_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_14_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_14_site", "M"}, {UNIMOD_Label_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_1_site", "F"}, {UNIMOD_Label_15N_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_2_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_2_site", "Y"}, {UNIMOD_Label_15N_1_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_3_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_3_site", "G"}, {UNIMOD_Label_15N_1_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_4_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_4_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_4_site", "A"}, {UNIMOD_Label_15N_1_, "spec_5_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_5_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_5_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_5_site", "S"}, {UNIMOD_Label_15N_1_, "spec_6_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_6_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_6_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_6_site", "P"}, {UNIMOD_Label_15N_1_, "spec_7_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_7_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_7_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_7_site", "V"}, {UNIMOD_Label_15N_1_, "spec_8_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_8_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_8_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_8_site", "T"}, {UNIMOD_Label_15N_1_, "spec_9_classification", "Isotopic label"}, {UNIMOD_Label_15N_1_, "spec_9_hidden", "1"}, {UNIMOD_Label_15N_1_, "spec_9_position", "Anywhere"}, {UNIMOD_Label_15N_1_, "spec_9_site", "C"}, {UNIMOD_Label_15N_2_, "approved", "0"}, {UNIMOD_Label_15N_2_, "delta_composition", "N(-2) 15N(2)"}, {UNIMOD_Label_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_15N_2_, "spec_1_hidden", "1"}, {UNIMOD_Label_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_15N_2_, "spec_1_site", "N"}, {UNIMOD_Label_15N_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_15N_2_, "spec_2_hidden", "1"}, {UNIMOD_Label_15N_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_15N_2_, "spec_2_site", "Q"}, {UNIMOD_Label_15N_2_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Label_15N_2_, "spec_3_hidden", "1"}, {UNIMOD_Label_15N_2_, "spec_3_position", "Anywhere"}, {UNIMOD_Label_15N_2_, "spec_3_site", "K"}, {UNIMOD_Label_15N_2_, "spec_4_classification", "Isotopic label"}, {UNIMOD_Label_15N_2_, "spec_4_hidden", "1"}, {UNIMOD_Label_15N_2_, "spec_4_position", "Anywhere"}, {UNIMOD_Label_15N_2_, "spec_4_site", "W"}, {UNIMOD_Label_15N_3_, "approved", "0"}, {UNIMOD_Label_15N_3_, "delta_composition", "N(-3) 15N(3)"}, {UNIMOD_Label_15N_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_15N_3_, "spec_1_hidden", "1"}, {UNIMOD_Label_15N_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_15N_3_, "spec_1_site", "H"}, {UNIMOD_sulfo_amino, "approved", "0"}, {UNIMOD_sulfo_amino, "delta_composition", "H N O(3) S"}, {UNIMOD_sulfo_amino, "spec_1_classification", "Chemical derivative"}, {UNIMOD_sulfo_amino, "spec_1_hidden", "1"}, {UNIMOD_sulfo_amino, "spec_1_position", "Anywhere"}, {UNIMOD_sulfo_amino, "spec_1_site", "Y"}, {UNIMOD_AHA_Alkyne, "approved", "0"}, {UNIMOD_AHA_Alkyne, "delta_composition", "H(5) C(4) N(5) O S(-1)"}, {UNIMOD_AHA_Alkyne, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AHA_Alkyne, "spec_1_hidden", "1"}, {UNIMOD_AHA_Alkyne, "spec_1_position", "Anywhere"}, {UNIMOD_AHA_Alkyne, "spec_1_site", "M"}, {UNIMOD_AHA_Alkyne_KDDDD, "approved", "0"}, {UNIMOD_AHA_Alkyne_KDDDD, "delta_composition", "H(37) C(26) N(11) O(14) S(-1)"}, {UNIMOD_AHA_Alkyne_KDDDD, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AHA_Alkyne_KDDDD, "spec_1_hidden", "1"}, {UNIMOD_AHA_Alkyne_KDDDD, "spec_1_position", "Anywhere"}, {UNIMOD_AHA_Alkyne_KDDDD, "spec_1_site", "M"}, {UNIMOD_EGCG1, "approved", "0"}, {UNIMOD_EGCG1, "delta_composition", "H(16) C(22) O(11)"}, {UNIMOD_EGCG1, "spec_1_classification", "Post-translational"}, {UNIMOD_EGCG1, "spec_1_hidden", "1"}, {UNIMOD_EGCG1, "spec_1_position", "Anywhere"}, {UNIMOD_EGCG1, "spec_1_site", "C"}, {UNIMOD_EGCG2, "approved", "0"}, {UNIMOD_EGCG2, "delta_composition", "H(11) C(15) O(6)"}, {UNIMOD_EGCG2, "spec_1_classification", "Post-translational"}, {UNIMOD_EGCG2, "spec_1_hidden", "1"}, {UNIMOD_EGCG2, "spec_1_position", "Anywhere"}, {UNIMOD_EGCG2, "spec_1_site", "C"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "approved", "0"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "delta_composition", "H(2) C(-5) 13C(6) N(-4) 15N(4)"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_4__Methyl, "spec_1_site", "R"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "approved", "0"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "delta_composition", "H(4) C(-4) 13C(6) N(-4) 15N(4)"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl, "spec_1_site", "R"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "approved", "0"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "delta_composition", "H(-1) 2H(3) C(-6) 13C(7) N(-4) 15N(4)"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_, "spec_1_site", "R"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "approved", "0"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "delta_composition", "H(-2) 2H(6) C(-6) 13C(8) N(-4) 15N(4)"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_, "spec_1_site", "R"}, {UNIMOD_Cys__CamSec, "approved", "0"}, {UNIMOD_Cys__CamSec, "delta_composition", "H(3) C(2) N O S(-1) Se"}, {UNIMOD_Cys__CamSec, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Cys__CamSec, "spec_1_hidden", "1"}, {UNIMOD_Cys__CamSec, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__CamSec, "spec_1_site", "C"}, {UNIMOD_Thiazolidine, "approved", "0"}, {UNIMOD_Thiazolidine, "delta_composition", "C"}, {UNIMOD_Thiazolidine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_1_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_1_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_1_site", "C"}, {UNIMOD_Thiazolidine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_2_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_2_position", "Protein N-term"}, {UNIMOD_Thiazolidine, "spec_2_site", "N-term"}, {UNIMOD_Thiazolidine, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_3_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_3_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_3_site", "K"}, {UNIMOD_Thiazolidine, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_4_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_4_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_4_site", "R"}, {UNIMOD_Thiazolidine, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_5_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_5_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_5_site", "H"}, {UNIMOD_Thiazolidine, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_6_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_6_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_6_site", "Y"}, {UNIMOD_Thiazolidine, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_7_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_7_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_7_site", "W"}, {UNIMOD_Thiazolidine, "spec_8_classification", "Chemical derivative"}, {UNIMOD_Thiazolidine, "spec_8_hidden", "1"}, {UNIMOD_Thiazolidine, "spec_8_position", "Anywhere"}, {UNIMOD_Thiazolidine, "spec_8_site", "F"}, {UNIMOD_DEDGFLYMVYASQETFG, "approved", "0"}, {UNIMOD_DEDGFLYMVYASQETFG, "delta_composition", "H(122) C(89) N(18) O(31) S"}, {UNIMOD_DEDGFLYMVYASQETFG, "spec_1_classification", "Post-translational"}, {UNIMOD_DEDGFLYMVYASQETFG, "spec_1_hidden", "1"}, {UNIMOD_DEDGFLYMVYASQETFG, "spec_1_position", "Anywhere"}, {UNIMOD_DEDGFLYMVYASQETFG, "spec_1_site", "K"}, {UNIMOD_Biotin_Invitrogen_M1602, "approved", "0"}, {UNIMOD_Biotin_Invitrogen_M1602, "delta_composition", "H(33) C(23) N(5) O(7) S"}, {UNIMOD_Biotin_Invitrogen_M1602, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Invitrogen_M1602, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Invitrogen_M1602, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Invitrogen_M1602, "spec_1_site", "C"}, {UNIMOD_glycidamide, "approved", "0"}, {UNIMOD_glycidamide, "delta_composition", "H(5) C(3) N O(2)"}, {UNIMOD_glycidamide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_glycidamide, "spec_1_hidden", "1"}, {UNIMOD_glycidamide, "spec_1_position", "Anywhere"}, {UNIMOD_glycidamide, "spec_1_site", "K"}, {UNIMOD_glycidamide, "spec_2_classification", "Chemical derivative"}, {UNIMOD_glycidamide, "spec_2_hidden", "1"}, {UNIMOD_glycidamide, "spec_2_position", "Any N-term"}, {UNIMOD_glycidamide, "spec_2_site", "N-term"}, {UNIMOD_Ahx2_Hsl, "approved", "0"}, {UNIMOD_Ahx2_Hsl, "delta_composition", "H(27) C(16) N(3) O(3)"}, {UNIMOD_Ahx2_Hsl, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Ahx2_Hsl, "spec_1_hidden", "1"}, {UNIMOD_Ahx2_Hsl, "spec_1_position", "Any C-term"}, {UNIMOD_Ahx2_Hsl, "spec_1_site", "C-term"}, {UNIMOD_DMPO, "approved", "0"}, {UNIMOD_DMPO, "delta_composition", "H(9) C(6) N O"}, {UNIMOD_DMPO, "spec_1_classification", "Post-translational"}, {UNIMOD_DMPO, "spec_1_hidden", "1"}, {UNIMOD_DMPO, "spec_1_position", "Anywhere"}, {UNIMOD_DMPO, "spec_1_site", "C"}, {UNIMOD_DMPO, "spec_2_classification", "Post-translational"}, {UNIMOD_DMPO, "spec_2_hidden", "1"}, {UNIMOD_DMPO, "spec_2_position", "Anywhere"}, {UNIMOD_DMPO, "spec_2_site", "H"}, {UNIMOD_DMPO, "spec_3_classification", "Post-translational"}, {UNIMOD_DMPO, "spec_3_hidden", "1"}, {UNIMOD_DMPO, "spec_3_position", "Anywhere"}, {UNIMOD_DMPO, "spec_3_site", "Y"}, {UNIMOD_ICDID, "approved", "0"}, {UNIMOD_ICDID, "delta_composition", "H(10) C(8) O(2)"}, {UNIMOD_ICDID, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICDID, "spec_1_hidden", "1"}, {UNIMOD_ICDID, "spec_1_position", "Anywhere"}, {UNIMOD_ICDID, "spec_1_site", "C"}, {UNIMOD_ICDID_2H_6_, "approved", "0"}, {UNIMOD_ICDID_2H_6_, "delta_composition", "H(4) 2H(6) C(8) O(2)"}, {UNIMOD_ICDID_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_ICDID_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_ICDID_2H_6_, "spec_1_position", "Anywhere"}, {UNIMOD_ICDID_2H_6_, "spec_1_site", "C"}, {UNIMOD_Xlink_DSS_156_, "approved", "0"}, {UNIMOD_Xlink_DSS_156_, "delta_composition", "H(12) C(8) O(3)"}, {UNIMOD_Xlink_DSS_156_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_156_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSS_156_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSS_156_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSS_156_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_156_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSS_156_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSS_156_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_EGS_244_, "approved", "0"}, {UNIMOD_Xlink_EGS_244_, "delta_composition", "H(12) C(10) O(7)"}, {UNIMOD_Xlink_EGS_244_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_244_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_EGS_244_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_EGS_244_, "spec_1_site", "K"}, {UNIMOD_Xlink_EGS_244_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_244_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_EGS_244_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_EGS_244_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DST_132_, "approved", "0"}, {UNIMOD_Xlink_DST_132_, "delta_composition", "H(4) C(4) O(5)"}, {UNIMOD_Xlink_DST_132_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_132_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DST_132_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DST_132_, "spec_1_site", "K"}, {UNIMOD_Xlink_DST_132_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_132_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DST_132_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DST_132_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DTSSP_192_, "approved", "0"}, {UNIMOD_Xlink_DTSSP_192_, "delta_composition", "H(8) C(6) O(3) S(2)"}, {UNIMOD_Xlink_DTSSP_192_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_192_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DTSSP_192_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DTSSP_192_, "spec_1_site", "K"}, {UNIMOD_Xlink_DTSSP_192_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_192_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DTSSP_192_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DTSSP_192_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_SMCC_237_, "approved", "0"}, {UNIMOD_Xlink_SMCC_237_, "delta_composition", "H(15) C(12) N O(4)"}, {UNIMOD_Xlink_SMCC_237_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_237_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_SMCC_237_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_SMCC_237_, "spec_1_site", "C"}, {UNIMOD_Xlink_SMCC_237_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_237_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_SMCC_237_, "spec_2_position", "Anywhere"}, {UNIMOD_Xlink_SMCC_237_, "spec_2_site", "K"}, {UNIMOD_Xlink_SMCC_237_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_237_, "spec_3_hidden", "1"}, {UNIMOD_Xlink_SMCC_237_, "spec_3_position", "Protein N-term"}, {UNIMOD_Xlink_SMCC_237_, "spec_3_site", "N-term"}, {UNIMOD_Xlink_DMP_140_, "approved", "0"}, {UNIMOD_Xlink_DMP_140_, "delta_composition", "H(12) C(7) N(2) O"}, {UNIMOD_Xlink_DMP_140_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_140_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DMP_140_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DMP_140_, "spec_1_site", "K"}, {UNIMOD_Xlink_DMP_140_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_140_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DMP_140_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DMP_140_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_EGS_115_, "approved", "0"}, {UNIMOD_Xlink_EGS_115_, "delta_composition", "H(5) C(4) N O(3)"}, {UNIMOD_Xlink_EGS_115_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_115_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_EGS_115_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_EGS_115_, "spec_1_site", "K"}, {UNIMOD_Xlink_EGS_115_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_115_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_EGS_115_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_EGS_115_, "spec_2_site", "N-term"}, {UNIMOD_Biotin_Thermo_88310, "approved", "0"}, {UNIMOD_Biotin_Thermo_88310, "delta_composition", "H(16) C(10) N(2) O(2)"}, {UNIMOD_Biotin_Thermo_88310, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_88310, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_88310, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_88310, "spec_1_site", "K"}, {UNIMOD_2_nitrobenzyl, "approved", "0"}, {UNIMOD_2_nitrobenzyl, "delta_composition", "H(5) C(7) N O(2)"}, {UNIMOD_2_nitrobenzyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_2_nitrobenzyl, "spec_1_hidden", "1"}, {UNIMOD_2_nitrobenzyl, "spec_1_position", "Anywhere"}, {UNIMOD_2_nitrobenzyl, "spec_1_site", "Y"}, {UNIMOD_Cys__SecNEM, "approved", "0"}, {UNIMOD_Cys__SecNEM, "delta_composition", "H(7) C(6) N O(2) S(-1) Se"}, {UNIMOD_Cys__SecNEM, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Cys__SecNEM, "spec_1_hidden", "1"}, {UNIMOD_Cys__SecNEM, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__SecNEM, "spec_1_site", "C"}, {UNIMOD_Cys__SecNEM_2H_5_, "approved", "0"}, {UNIMOD_Cys__SecNEM_2H_5_, "delta_composition", "H(2) 2H(5) C(6) N O(2) S(-1) Se"}, {UNIMOD_Cys__SecNEM_2H_5_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cys__SecNEM_2H_5_, "spec_1_hidden", "1"}, {UNIMOD_Cys__SecNEM_2H_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__SecNEM_2H_5_, "spec_1_site", "C"}, {UNIMOD_Thiadiazole, "approved", "0"}, {UNIMOD_Thiadiazole, "delta_composition", "H(6) C(9) N(2) S"}, {UNIMOD_Thiadiazole, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Thiadiazole, "spec_1_hidden", "1"}, {UNIMOD_Thiadiazole, "spec_1_position", "Anywhere"}, {UNIMOD_Thiadiazole, "spec_1_site", "C"}, {UNIMOD_Withaferin, "approved", "0"}, {UNIMOD_Withaferin, "delta_composition", "H(38) C(28) O(6)"}, {UNIMOD_Withaferin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Withaferin, "spec_1_hidden", "1"}, {UNIMOD_Withaferin, "spec_1_position", "Anywhere"}, {UNIMOD_Withaferin, "spec_1_site", "C"}, {UNIMOD_Biotin_Thermo_88317, "approved", "0"}, {UNIMOD_Biotin_Thermo_88317, "delta_composition", "H(42) C(22) N(3) O(4) P"}, {UNIMOD_Biotin_Thermo_88317, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_88317, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_88317, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_88317, "spec_1_site", "Y"}, {UNIMOD_Biotin_Thermo_88317, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_88317, "spec_2_hidden", "1"}, {UNIMOD_Biotin_Thermo_88317, "spec_2_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_88317, "spec_2_site", "S"}, {UNIMOD_TAMRA_FP, "approved", "0"}, {UNIMOD_TAMRA_FP, "delta_composition", "H(46) C(37) N(3) O(6) P"}, {UNIMOD_TAMRA_FP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TAMRA_FP, "spec_1_hidden", "1"}, {UNIMOD_TAMRA_FP, "spec_1_position", "Anywhere"}, {UNIMOD_TAMRA_FP, "spec_1_site", "S"}, {UNIMOD_TAMRA_FP, "spec_2_classification", "Chemical derivative"}, {UNIMOD_TAMRA_FP, "spec_2_hidden", "1"}, {UNIMOD_TAMRA_FP, "spec_2_position", "Anywhere"}, {UNIMOD_TAMRA_FP, "spec_2_site", "Y"}, {UNIMOD_Biotin_Thermo_21901_H2O, "approved", "0"}, {UNIMOD_Biotin_Thermo_21901_H2O, "delta_composition", "H(37) C(23) N(5) O(8) S"}, {UNIMOD_Biotin_Thermo_21901_H2O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21901_H2O, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21901_H2O, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21901_H2O, "spec_1_site", "C"}, {UNIMOD_Deoxyhypusine, "approved", "0"}, {UNIMOD_Deoxyhypusine, "delta_composition", "H(9) C(4) N"}, {UNIMOD_Deoxyhypusine, "spec_1_classification", "Post-translational"}, {UNIMOD_Deoxyhypusine, "spec_1_hidden", "1"}, {UNIMOD_Deoxyhypusine, "spec_1_position", "Anywhere"}, {UNIMOD_Deoxyhypusine, "spec_1_site", "K"}, {UNIMOD_Deoxyhypusine, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Deoxyhypusine, "spec_2_hidden", "1"}, {UNIMOD_Deoxyhypusine, "spec_2_position", "Anywhere"}, {UNIMOD_Deoxyhypusine, "spec_2_site", "Q"}, {UNIMOD_Acetyldeoxyhypusine, "approved", "0"}, {UNIMOD_Acetyldeoxyhypusine, "delta_composition", "H(11) C(6) N"}, {UNIMOD_Acetyldeoxyhypusine, "spec_1_classification", "Post-translational"}, {UNIMOD_Acetyldeoxyhypusine, "spec_1_hidden", "1"}, {UNIMOD_Acetyldeoxyhypusine, "spec_1_position", "Anywhere"}, {UNIMOD_Acetyldeoxyhypusine, "spec_1_site", "K"}, {UNIMOD_Acetylhypusine, "approved", "0"}, {UNIMOD_Acetylhypusine, "delta_composition", "H(11) C(6) N O"}, {UNIMOD_Acetylhypusine, "spec_1_classification", "Post-translational"}, {UNIMOD_Acetylhypusine, "spec_1_hidden", "1"}, {UNIMOD_Acetylhypusine, "spec_1_position", "Anywhere"}, {UNIMOD_Acetylhypusine, "spec_1_site", "K"}, {UNIMOD_Ala__Cys, "approved", "0"}, {UNIMOD_Ala__Cys, "delta_composition", "S"}, {UNIMOD_Ala__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Cys, "spec_1_hidden", "1"}, {UNIMOD_Ala__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Cys, "spec_1_site", "A"}, {UNIMOD_Ala__Phe, "approved", "0"}, {UNIMOD_Ala__Phe, "delta_composition", "H(4) C(6)"}, {UNIMOD_Ala__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Phe, "spec_1_hidden", "1"}, {UNIMOD_Ala__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Phe, "spec_1_site", "A"}, {UNIMOD_Ala__His, "approved", "0"}, {UNIMOD_Ala__His, "delta_composition", "H(2) C(3) N(2)"}, {UNIMOD_Ala__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__His, "spec_1_hidden", "1"}, {UNIMOD_Ala__His, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__His, "spec_1_site", "A"}, {UNIMOD_Ala__Xle, "approved", "0"}, {UNIMOD_Ala__Xle, "delta_composition", "H(6) C(3)"}, {UNIMOD_Ala__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Xle, "spec_1_hidden", "1"}, {UNIMOD_Ala__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Xle, "spec_1_site", "A"}, {UNIMOD_Ala__Lys, "approved", "0"}, {UNIMOD_Ala__Lys, "delta_composition", "H(7) C(3) N"}, {UNIMOD_Ala__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Lys, "spec_1_hidden", "1"}, {UNIMOD_Ala__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Lys, "spec_1_site", "A"}, {UNIMOD_Ala__Met, "approved", "0"}, {UNIMOD_Ala__Met, "delta_composition", "H(4) C(2) S"}, {UNIMOD_Ala__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Met, "spec_1_hidden", "1"}, {UNIMOD_Ala__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Met, "spec_1_site", "A"}, {UNIMOD_Ala__Asn, "approved", "0"}, {UNIMOD_Ala__Asn, "delta_composition", "H C N O"}, {UNIMOD_Ala__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Asn, "spec_1_hidden", "1"}, {UNIMOD_Ala__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Asn, "spec_1_site", "A"}, {UNIMOD_Ala__Gln, "approved", "0"}, {UNIMOD_Ala__Gln, "delta_composition", "H(3) C(2) N O"}, {UNIMOD_Ala__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Gln, "spec_1_hidden", "1"}, {UNIMOD_Ala__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Gln, "spec_1_site", "A"}, {UNIMOD_Ala__Arg, "approved", "0"}, {UNIMOD_Ala__Arg, "delta_composition", "H(7) C(3) N(3)"}, {UNIMOD_Ala__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Arg, "spec_1_hidden", "1"}, {UNIMOD_Ala__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Arg, "spec_1_site", "A"}, {UNIMOD_Ala__Trp, "approved", "0"}, {UNIMOD_Ala__Trp, "delta_composition", "H(5) C(8) N"}, {UNIMOD_Ala__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Trp, "spec_1_hidden", "1"}, {UNIMOD_Ala__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Trp, "spec_1_site", "A"}, {UNIMOD_Ala__Tyr, "approved", "0"}, {UNIMOD_Ala__Tyr, "delta_composition", "H(4) C(6) O"}, {UNIMOD_Ala__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Ala__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Ala__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Ala__Tyr, "spec_1_site", "A"}, {UNIMOD_Cys__Ala, "approved", "0"}, {UNIMOD_Cys__Ala, "delta_composition", "S(-1)"}, {UNIMOD_Cys__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Ala, "spec_1_hidden", "1"}, {UNIMOD_Cys__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Ala, "spec_1_site", "C"}, {UNIMOD_Cys__Asp, "approved", "0"}, {UNIMOD_Cys__Asp, "delta_composition", "C O(2) S(-1)"}, {UNIMOD_Cys__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Asp, "spec_1_hidden", "1"}, {UNIMOD_Cys__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Asp, "spec_1_site", "C"}, {UNIMOD_Cys__Glu, "approved", "0"}, {UNIMOD_Cys__Glu, "delta_composition", "H(2) C(2) O(2) S(-1)"}, {UNIMOD_Cys__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Glu, "spec_1_hidden", "1"}, {UNIMOD_Cys__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Glu, "spec_1_site", "C"}, {UNIMOD_Cys__His, "approved", "0"}, {UNIMOD_Cys__His, "delta_composition", "H(2) C(3) N(2) S(-1)"}, {UNIMOD_Cys__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__His, "spec_1_hidden", "1"}, {UNIMOD_Cys__His, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__His, "spec_1_site", "C"}, {UNIMOD_Cys__Xle, "approved", "0"}, {UNIMOD_Cys__Xle, "delta_composition", "H(6) C(3) S(-1)"}, {UNIMOD_Cys__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Xle, "spec_1_hidden", "1"}, {UNIMOD_Cys__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Xle, "spec_1_site", "C"}, {UNIMOD_Cys__Lys, "approved", "0"}, {UNIMOD_Cys__Lys, "delta_composition", "H(7) C(3) N S(-1)"}, {UNIMOD_Cys__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Lys, "spec_1_hidden", "1"}, {UNIMOD_Cys__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Lys, "spec_1_site", "C"}, {UNIMOD_Cys__Met, "approved", "0"}, {UNIMOD_Cys__Met, "delta_composition", "H(4) C(2)"}, {UNIMOD_Cys__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Met, "spec_1_hidden", "1"}, {UNIMOD_Cys__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Met, "spec_1_site", "C"}, {UNIMOD_Cys__Asn, "approved", "0"}, {UNIMOD_Cys__Asn, "delta_composition", "H C N O S(-1)"}, {UNIMOD_Cys__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Asn, "spec_1_hidden", "1"}, {UNIMOD_Cys__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Asn, "spec_1_site", "C"}, {UNIMOD_Cys__Pro, "approved", "0"}, {UNIMOD_Cys__Pro, "delta_composition", "H(2) C(2) S(-1)"}, {UNIMOD_Cys__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Pro, "spec_1_hidden", "1"}, {UNIMOD_Cys__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Pro, "spec_1_site", "C"}, {UNIMOD_Cys__Gln, "approved", "0"}, {UNIMOD_Cys__Gln, "delta_composition", "H(3) C(2) N O S(-1)"}, {UNIMOD_Cys__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Gln, "spec_1_hidden", "1"}, {UNIMOD_Cys__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Gln, "spec_1_site", "C"}, {UNIMOD_Cys__Thr, "approved", "0"}, {UNIMOD_Cys__Thr, "delta_composition", "H(2) C O S(-1)"}, {UNIMOD_Cys__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Thr, "spec_1_hidden", "1"}, {UNIMOD_Cys__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Thr, "spec_1_site", "C"}, {UNIMOD_Cys__Val, "approved", "0"}, {UNIMOD_Cys__Val, "delta_composition", "H(4) C(2) S(-1)"}, {UNIMOD_Cys__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Cys__Val, "spec_1_hidden", "1"}, {UNIMOD_Cys__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Cys__Val, "spec_1_site", "C"}, {UNIMOD_Asp__Cys, "approved", "0"}, {UNIMOD_Asp__Cys, "delta_composition", "C(-1) O(-2) S"}, {UNIMOD_Asp__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Cys, "spec_1_hidden", "1"}, {UNIMOD_Asp__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Cys, "spec_1_site", "D"}, {UNIMOD_Asp__Phe, "approved", "0"}, {UNIMOD_Asp__Phe, "delta_composition", "H(4) C(5) O(-2)"}, {UNIMOD_Asp__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Phe, "spec_1_hidden", "1"}, {UNIMOD_Asp__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Phe, "spec_1_site", "D"}, {UNIMOD_Asp__Xle, "approved", "0"}, {UNIMOD_Asp__Xle, "delta_composition", "H(6) C(2) O(-2)"}, {UNIMOD_Asp__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Xle, "spec_1_hidden", "1"}, {UNIMOD_Asp__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Xle, "spec_1_site", "D"}, {UNIMOD_Asp__Lys, "approved", "0"}, {UNIMOD_Asp__Lys, "delta_composition", "H(7) C(2) N O(-2)"}, {UNIMOD_Asp__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Lys, "spec_1_hidden", "1"}, {UNIMOD_Asp__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Lys, "spec_1_site", "D"}, {UNIMOD_Asp__Met, "approved", "0"}, {UNIMOD_Asp__Met, "delta_composition", "H(4) C O(-2) S"}, {UNIMOD_Asp__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Met, "spec_1_hidden", "1"}, {UNIMOD_Asp__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Met, "spec_1_site", "D"}, {UNIMOD_Asp__Pro, "approved", "0"}, {UNIMOD_Asp__Pro, "delta_composition", "H(2) C O(-2)"}, {UNIMOD_Asp__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Pro, "spec_1_hidden", "1"}, {UNIMOD_Asp__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Pro, "spec_1_site", "D"}, {UNIMOD_Asp__Gln, "approved", "0"}, {UNIMOD_Asp__Gln, "delta_composition", "H(3) C N O(-1)"}, {UNIMOD_Asp__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Gln, "spec_1_hidden", "1"}, {UNIMOD_Asp__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Gln, "spec_1_site", "D"}, {UNIMOD_Asp__Arg, "approved", "0"}, {UNIMOD_Asp__Arg, "delta_composition", "H(7) C(2) N(3) O(-2)"}, {UNIMOD_Asp__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Arg, "spec_1_hidden", "1"}, {UNIMOD_Asp__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Arg, "spec_1_site", "D"}, {UNIMOD_Asp__Ser, "approved", "0"}, {UNIMOD_Asp__Ser, "delta_composition", "C(-1) O(-1)"}, {UNIMOD_Asp__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Ser, "spec_1_hidden", "1"}, {UNIMOD_Asp__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Ser, "spec_1_site", "D"}, {UNIMOD_Asp__Thr, "approved", "0"}, {UNIMOD_Asp__Thr, "delta_composition", "H(2) O(-1)"}, {UNIMOD_Asp__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Thr, "spec_1_hidden", "1"}, {UNIMOD_Asp__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Thr, "spec_1_site", "D"}, {UNIMOD_Asp__Trp, "approved", "0"}, {UNIMOD_Asp__Trp, "delta_composition", "H(5) C(7) N O(-2)"}, {UNIMOD_Asp__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Asp__Trp, "spec_1_hidden", "1"}, {UNIMOD_Asp__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Asp__Trp, "spec_1_site", "D"}, {UNIMOD_Glu__Cys, "approved", "0"}, {UNIMOD_Glu__Cys, "delta_composition", "H(-2) C(-2) O(-2) S"}, {UNIMOD_Glu__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Cys, "spec_1_hidden", "1"}, {UNIMOD_Glu__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Cys, "spec_1_site", "E"}, {UNIMOD_Glu__Phe, "approved", "0"}, {UNIMOD_Glu__Phe, "delta_composition", "H(2) C(4) O(-2)"}, {UNIMOD_Glu__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Phe, "spec_1_hidden", "1"}, {UNIMOD_Glu__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Phe, "spec_1_site", "E"}, {UNIMOD_Glu__His, "approved", "0"}, {UNIMOD_Glu__His, "delta_composition", "C N(2) O(-2)"}, {UNIMOD_Glu__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__His, "spec_1_hidden", "1"}, {UNIMOD_Glu__His, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__His, "spec_1_site", "E"}, {UNIMOD_Glu__Xle, "approved", "0"}, {UNIMOD_Glu__Xle, "delta_composition", "H(4) C O(-2)"}, {UNIMOD_Glu__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Xle, "spec_1_hidden", "1"}, {UNIMOD_Glu__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Xle, "spec_1_site", "E"}, {UNIMOD_Glu__Met, "approved", "0"}, {UNIMOD_Glu__Met, "delta_composition", "H(2) O(-2) S"}, {UNIMOD_Glu__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Met, "spec_1_hidden", "1"}, {UNIMOD_Glu__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Met, "spec_1_site", "E"}, {UNIMOD_Glu__Asn, "approved", "0"}, {UNIMOD_Glu__Asn, "delta_composition", "H(-1) C(-1) N O(-1)"}, {UNIMOD_Glu__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Asn, "spec_1_hidden", "1"}, {UNIMOD_Glu__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Asn, "spec_1_site", "E"}, {UNIMOD_Glu__Pro, "approved", "0"}, {UNIMOD_Glu__Pro, "delta_composition", "O(-2)"}, {UNIMOD_Glu__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Pro, "spec_1_hidden", "1"}, {UNIMOD_Glu__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Pro, "spec_1_site", "E"}, {UNIMOD_Glu__Arg, "approved", "0"}, {UNIMOD_Glu__Arg, "delta_composition", "H(5) C N(3) O(-2)"}, {UNIMOD_Glu__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Arg, "spec_1_hidden", "1"}, {UNIMOD_Glu__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Arg, "spec_1_site", "E"}, {UNIMOD_Glu__Ser, "approved", "0"}, {UNIMOD_Glu__Ser, "delta_composition", "H(-2) C(-2) O(-1)"}, {UNIMOD_Glu__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Ser, "spec_1_hidden", "1"}, {UNIMOD_Glu__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Ser, "spec_1_site", "E"}, {UNIMOD_Glu__Thr, "approved", "0"}, {UNIMOD_Glu__Thr, "delta_composition", "C(-1) O(-1)"}, {UNIMOD_Glu__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Thr, "spec_1_hidden", "1"}, {UNIMOD_Glu__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Thr, "spec_1_site", "E"}, {UNIMOD_Glu__Trp, "approved", "0"}, {UNIMOD_Glu__Trp, "delta_composition", "H(3) C(6) N O(-2)"}, {UNIMOD_Glu__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Trp, "spec_1_hidden", "1"}, {UNIMOD_Glu__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Trp, "spec_1_site", "E"}, {UNIMOD_Glu__Tyr, "approved", "0"}, {UNIMOD_Glu__Tyr, "delta_composition", "H(2) C(4) O(-1)"}, {UNIMOD_Glu__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Glu__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Glu__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Glu__Tyr, "spec_1_site", "E"}, {UNIMOD_Phe__Ala, "approved", "0"}, {UNIMOD_Phe__Ala, "delta_composition", "H(-4) C(-6)"}, {UNIMOD_Phe__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Ala, "spec_1_hidden", "1"}, {UNIMOD_Phe__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Ala, "spec_1_site", "F"}, {UNIMOD_Phe__Asp, "approved", "0"}, {UNIMOD_Phe__Asp, "delta_composition", "H(-4) C(-5) O(2)"}, {UNIMOD_Phe__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Asp, "spec_1_hidden", "1"}, {UNIMOD_Phe__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Asp, "spec_1_site", "F"}, {UNIMOD_Phe__Glu, "approved", "0"}, {UNIMOD_Phe__Glu, "delta_composition", "H(-2) C(-4) O(2)"}, {UNIMOD_Phe__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Glu, "spec_1_hidden", "1"}, {UNIMOD_Phe__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Glu, "spec_1_site", "F"}, {UNIMOD_Phe__Gly, "approved", "0"}, {UNIMOD_Phe__Gly, "delta_composition", "H(-6) C(-7)"}, {UNIMOD_Phe__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Gly, "spec_1_hidden", "1"}, {UNIMOD_Phe__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Gly, "spec_1_site", "F"}, {UNIMOD_Phe__His, "approved", "0"}, {UNIMOD_Phe__His, "delta_composition", "H(-2) C(-3) N(2)"}, {UNIMOD_Phe__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__His, "spec_1_hidden", "1"}, {UNIMOD_Phe__His, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__His, "spec_1_site", "F"}, {UNIMOD_Phe__Lys, "approved", "0"}, {UNIMOD_Phe__Lys, "delta_composition", "H(3) C(-3) N"}, {UNIMOD_Phe__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Lys, "spec_1_hidden", "1"}, {UNIMOD_Phe__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Lys, "spec_1_site", "F"}, {UNIMOD_Phe__Met, "approved", "0"}, {UNIMOD_Phe__Met, "delta_composition", "C(-4) S"}, {UNIMOD_Phe__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Met, "spec_1_hidden", "1"}, {UNIMOD_Phe__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Met, "spec_1_site", "F"}, {UNIMOD_Phe__Asn, "approved", "0"}, {UNIMOD_Phe__Asn, "delta_composition", "H(-3) C(-5) N O"}, {UNIMOD_Phe__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Asn, "spec_1_hidden", "1"}, {UNIMOD_Phe__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Asn, "spec_1_site", "F"}, {UNIMOD_Phe__Pro, "approved", "0"}, {UNIMOD_Phe__Pro, "delta_composition", "H(-2) C(-4)"}, {UNIMOD_Phe__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Pro, "spec_1_hidden", "1"}, {UNIMOD_Phe__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Pro, "spec_1_site", "F"}, {UNIMOD_Phe__Gln, "approved", "0"}, {UNIMOD_Phe__Gln, "delta_composition", "H(-1) C(-4) N O"}, {UNIMOD_Phe__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Gln, "spec_1_hidden", "1"}, {UNIMOD_Phe__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Gln, "spec_1_site", "F"}, {UNIMOD_Phe__Arg, "approved", "0"}, {UNIMOD_Phe__Arg, "delta_composition", "H(3) C(-3) N(3)"}, {UNIMOD_Phe__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Arg, "spec_1_hidden", "1"}, {UNIMOD_Phe__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Arg, "spec_1_site", "F"}, {UNIMOD_Phe__Thr, "approved", "0"}, {UNIMOD_Phe__Thr, "delta_composition", "H(-2) C(-5) O"}, {UNIMOD_Phe__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Thr, "spec_1_hidden", "1"}, {UNIMOD_Phe__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Thr, "spec_1_site", "F"}, {UNIMOD_Phe__Trp, "approved", "0"}, {UNIMOD_Phe__Trp, "delta_composition", "H C(2) N"}, {UNIMOD_Phe__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Phe__Trp, "spec_1_hidden", "1"}, {UNIMOD_Phe__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Phe__Trp, "spec_1_site", "F"}, {UNIMOD_Gly__Phe, "approved", "0"}, {UNIMOD_Gly__Phe, "delta_composition", "H(6) C(7)"}, {UNIMOD_Gly__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Phe, "spec_1_hidden", "1"}, {UNIMOD_Gly__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Phe, "spec_1_site", "G"}, {UNIMOD_Gly__His, "approved", "0"}, {UNIMOD_Gly__His, "delta_composition", "H(4) C(4) N(2)"}, {UNIMOD_Gly__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__His, "spec_1_hidden", "1"}, {UNIMOD_Gly__His, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__His, "spec_1_site", "G"}, {UNIMOD_Gly__Xle, "approved", "0"}, {UNIMOD_Gly__Xle, "delta_composition", "H(8) C(4)"}, {UNIMOD_Gly__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Xle, "spec_1_hidden", "1"}, {UNIMOD_Gly__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Xle, "spec_1_site", "G"}, {UNIMOD_Gly__Lys, "approved", "0"}, {UNIMOD_Gly__Lys, "delta_composition", "H(9) C(4) N"}, {UNIMOD_Gly__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Lys, "spec_1_hidden", "1"}, {UNIMOD_Gly__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Lys, "spec_1_site", "G"}, {UNIMOD_Gly__Met, "approved", "0"}, {UNIMOD_Gly__Met, "delta_composition", "H(6) C(3) S"}, {UNIMOD_Gly__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Met, "spec_1_hidden", "1"}, {UNIMOD_Gly__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Met, "spec_1_site", "G"}, {UNIMOD_Gly__Asn, "approved", "0"}, {UNIMOD_Gly__Asn, "delta_composition", "H(3) C(2) N O"}, {UNIMOD_Gly__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Asn, "spec_1_hidden", "1"}, {UNIMOD_Gly__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Asn, "spec_1_site", "G"}, {UNIMOD_Gly__Pro, "approved", "0"}, {UNIMOD_Gly__Pro, "delta_composition", "H(4) C(3)"}, {UNIMOD_Gly__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Pro, "spec_1_hidden", "1"}, {UNIMOD_Gly__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Pro, "spec_1_site", "G"}, {UNIMOD_Gly__Gln, "approved", "0"}, {UNIMOD_Gly__Gln, "delta_composition", "H(5) C(3) N O"}, {UNIMOD_Gly__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Gln, "spec_1_hidden", "1"}, {UNIMOD_Gly__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Gln, "spec_1_site", "G"}, {UNIMOD_Gly__Thr, "approved", "0"}, {UNIMOD_Gly__Thr, "delta_composition", "H(4) C(2) O"}, {UNIMOD_Gly__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Thr, "spec_1_hidden", "1"}, {UNIMOD_Gly__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Thr, "spec_1_site", "G"}, {UNIMOD_Gly__Tyr, "approved", "0"}, {UNIMOD_Gly__Tyr, "delta_composition", "H(6) C(7) O"}, {UNIMOD_Gly__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Gly__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Gly__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Gly__Tyr, "spec_1_site", "G"}, {UNIMOD_His__Ala, "approved", "0"}, {UNIMOD_His__Ala, "delta_composition", "H(-2) C(-3) N(-2)"}, {UNIMOD_His__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Ala, "spec_1_hidden", "1"}, {UNIMOD_His__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_His__Ala, "spec_1_site", "H"}, {UNIMOD_His__Cys, "approved", "0"}, {UNIMOD_His__Cys, "delta_composition", "H(-2) C(-3) N(-2) S"}, {UNIMOD_His__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Cys, "spec_1_hidden", "1"}, {UNIMOD_His__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_His__Cys, "spec_1_site", "H"}, {UNIMOD_His__Glu, "approved", "0"}, {UNIMOD_His__Glu, "delta_composition", "C(-1) N(-2) O(2)"}, {UNIMOD_His__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Glu, "spec_1_hidden", "1"}, {UNIMOD_His__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_His__Glu, "spec_1_site", "H"}, {UNIMOD_His__Phe, "approved", "0"}, {UNIMOD_His__Phe, "delta_composition", "H(2) C(3) N(-2)"}, {UNIMOD_His__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Phe, "spec_1_hidden", "1"}, {UNIMOD_His__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_His__Phe, "spec_1_site", "H"}, {UNIMOD_His__Gly, "approved", "0"}, {UNIMOD_His__Gly, "delta_composition", "H(-4) C(-4) N(-2)"}, {UNIMOD_His__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Gly, "spec_1_hidden", "1"}, {UNIMOD_His__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_His__Gly, "spec_1_site", "H"}, {UNIMOD_His__Lys, "approved", "0"}, {UNIMOD_His__Lys, "delta_composition", "H(5) N(-1)"}, {UNIMOD_His__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Lys, "spec_1_hidden", "1"}, {UNIMOD_His__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_His__Lys, "spec_1_site", "H"}, {UNIMOD_His__Met, "approved", "0"}, {UNIMOD_His__Met, "delta_composition", "H(2) C(-1) N(-2) S"}, {UNIMOD_His__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Met, "spec_1_hidden", "1"}, {UNIMOD_His__Met, "spec_1_position", "Anywhere"}, {UNIMOD_His__Met, "spec_1_site", "H"}, {UNIMOD_His__Ser, "approved", "0"}, {UNIMOD_His__Ser, "delta_composition", "H(-2) C(-3) N(-2) O"}, {UNIMOD_His__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Ser, "spec_1_hidden", "1"}, {UNIMOD_His__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_His__Ser, "spec_1_site", "H"}, {UNIMOD_His__Thr, "approved", "0"}, {UNIMOD_His__Thr, "delta_composition", "C(-2) N(-2) O"}, {UNIMOD_His__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Thr, "spec_1_hidden", "1"}, {UNIMOD_His__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_His__Thr, "spec_1_site", "H"}, {UNIMOD_His__Val, "approved", "0"}, {UNIMOD_His__Val, "delta_composition", "H(2) C(-1) N(-2)"}, {UNIMOD_His__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Val, "spec_1_hidden", "1"}, {UNIMOD_His__Val, "spec_1_position", "Anywhere"}, {UNIMOD_His__Val, "spec_1_site", "H"}, {UNIMOD_His__Trp, "approved", "0"}, {UNIMOD_His__Trp, "delta_composition", "H(3) C(5) N(-1)"}, {UNIMOD_His__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_His__Trp, "spec_1_hidden", "1"}, {UNIMOD_His__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_His__Trp, "spec_1_site", "H"}, {UNIMOD_Xle__Ala, "approved", "0"}, {UNIMOD_Xle__Ala, "delta_composition", "H(-6) C(-3)"}, {UNIMOD_Xle__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Ala, "spec_1_hidden", "1"}, {UNIMOD_Xle__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Ala, "spec_1_site", "L"}, {UNIMOD_Xle__Ala, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Ala, "spec_2_hidden", "1"}, {UNIMOD_Xle__Ala, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Ala, "spec_2_site", "I"}, {UNIMOD_Xle__Cys, "approved", "0"}, {UNIMOD_Xle__Cys, "delta_composition", "H(-6) C(-3) S"}, {UNIMOD_Xle__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Cys, "spec_1_hidden", "1"}, {UNIMOD_Xle__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Cys, "spec_1_site", "L"}, {UNIMOD_Xle__Cys, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Cys, "spec_2_hidden", "1"}, {UNIMOD_Xle__Cys, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Cys, "spec_2_site", "I"}, {UNIMOD_Xle__Asp, "approved", "0"}, {UNIMOD_Xle__Asp, "delta_composition", "H(-6) C(-2) O(2)"}, {UNIMOD_Xle__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Asp, "spec_1_hidden", "1"}, {UNIMOD_Xle__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Asp, "spec_1_site", "L"}, {UNIMOD_Xle__Asp, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Asp, "spec_2_hidden", "1"}, {UNIMOD_Xle__Asp, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Asp, "spec_2_site", "I"}, {UNIMOD_Xle__Glu, "approved", "0"}, {UNIMOD_Xle__Glu, "delta_composition", "H(-4) C(-1) O(2)"}, {UNIMOD_Xle__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Glu, "spec_1_hidden", "1"}, {UNIMOD_Xle__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Glu, "spec_1_site", "L"}, {UNIMOD_Xle__Glu, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Glu, "spec_2_hidden", "1"}, {UNIMOD_Xle__Glu, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Glu, "spec_2_site", "I"}, {UNIMOD_Xle__Gly, "approved", "0"}, {UNIMOD_Xle__Gly, "delta_composition", "H(-8) C(-4)"}, {UNIMOD_Xle__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Gly, "spec_1_hidden", "1"}, {UNIMOD_Xle__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Gly, "spec_1_site", "L"}, {UNIMOD_Xle__Gly, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Gly, "spec_2_hidden", "1"}, {UNIMOD_Xle__Gly, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Gly, "spec_2_site", "I"}, {UNIMOD_Xle__Tyr, "approved", "0"}, {UNIMOD_Xle__Tyr, "delta_composition", "H(-2) C(3) O"}, {UNIMOD_Xle__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Xle__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Xle__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Xle__Tyr, "spec_1_site", "L"}, {UNIMOD_Xle__Tyr, "spec_2_classification", "AA substitution"}, {UNIMOD_Xle__Tyr, "spec_2_hidden", "1"}, {UNIMOD_Xle__Tyr, "spec_2_position", "Anywhere"}, {UNIMOD_Xle__Tyr, "spec_2_site", "I"}, {UNIMOD_Lys__Ala, "approved", "0"}, {UNIMOD_Lys__Ala, "delta_composition", "H(-7) C(-3) N(-1)"}, {UNIMOD_Lys__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Ala, "spec_1_hidden", "1"}, {UNIMOD_Lys__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Ala, "spec_1_site", "K"}, {UNIMOD_Lys__Cys, "approved", "0"}, {UNIMOD_Lys__Cys, "delta_composition", "H(-7) C(-3) N(-1) S"}, {UNIMOD_Lys__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Cys, "spec_1_hidden", "1"}, {UNIMOD_Lys__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Cys, "spec_1_site", "K"}, {UNIMOD_Lys__Asp, "approved", "0"}, {UNIMOD_Lys__Asp, "delta_composition", "H(-7) C(-2) N(-1) O(2)"}, {UNIMOD_Lys__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Asp, "spec_1_hidden", "1"}, {UNIMOD_Lys__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Asp, "spec_1_site", "K"}, {UNIMOD_Lys__Phe, "approved", "0"}, {UNIMOD_Lys__Phe, "delta_composition", "H(-3) C(3) N(-1)"}, {UNIMOD_Lys__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Phe, "spec_1_hidden", "1"}, {UNIMOD_Lys__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Phe, "spec_1_site", "K"}, {UNIMOD_Lys__Gly, "approved", "0"}, {UNIMOD_Lys__Gly, "delta_composition", "H(-9) C(-4) N(-1)"}, {UNIMOD_Lys__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Gly, "spec_1_hidden", "1"}, {UNIMOD_Lys__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Gly, "spec_1_site", "K"}, {UNIMOD_Lys__His, "approved", "0"}, {UNIMOD_Lys__His, "delta_composition", "H(-5) N"}, {UNIMOD_Lys__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__His, "spec_1_hidden", "1"}, {UNIMOD_Lys__His, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__His, "spec_1_site", "K"}, {UNIMOD_Lys__Pro, "approved", "0"}, {UNIMOD_Lys__Pro, "delta_composition", "H(-5) C(-1) N(-1)"}, {UNIMOD_Lys__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Pro, "spec_1_hidden", "1"}, {UNIMOD_Lys__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Pro, "spec_1_site", "K"}, {UNIMOD_Lys__Ser, "approved", "0"}, {UNIMOD_Lys__Ser, "delta_composition", "H(-7) C(-3) N(-1) O"}, {UNIMOD_Lys__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Ser, "spec_1_hidden", "1"}, {UNIMOD_Lys__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Ser, "spec_1_site", "K"}, {UNIMOD_Lys__Val, "approved", "0"}, {UNIMOD_Lys__Val, "delta_composition", "H(-3) C(-1) N(-1)"}, {UNIMOD_Lys__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Val, "spec_1_hidden", "1"}, {UNIMOD_Lys__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Val, "spec_1_site", "K"}, {UNIMOD_Lys__Trp, "approved", "0"}, {UNIMOD_Lys__Trp, "delta_composition", "H(-2) C(5)"}, {UNIMOD_Lys__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Trp, "spec_1_hidden", "1"}, {UNIMOD_Lys__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Trp, "spec_1_site", "K"}, {UNIMOD_Lys__Tyr, "approved", "0"}, {UNIMOD_Lys__Tyr, "delta_composition", "H(-3) C(3) N(-1) O"}, {UNIMOD_Lys__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Lys__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Lys__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Lys__Tyr, "spec_1_site", "K"}, {UNIMOD_Met__Ala, "approved", "0"}, {UNIMOD_Met__Ala, "delta_composition", "H(-4) C(-2) S(-1)"}, {UNIMOD_Met__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Ala, "spec_1_hidden", "1"}, {UNIMOD_Met__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Ala, "spec_1_site", "M"}, {UNIMOD_Met__Cys, "approved", "0"}, {UNIMOD_Met__Cys, "delta_composition", "H(-4) C(-2)"}, {UNIMOD_Met__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Cys, "spec_1_hidden", "1"}, {UNIMOD_Met__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Cys, "spec_1_site", "M"}, {UNIMOD_Met__Asp, "approved", "0"}, {UNIMOD_Met__Asp, "delta_composition", "H(-4) C(-1) O(2) S(-1)"}, {UNIMOD_Met__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Asp, "spec_1_hidden", "1"}, {UNIMOD_Met__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Asp, "spec_1_site", "M"}, {UNIMOD_Met__Glu, "approved", "0"}, {UNIMOD_Met__Glu, "delta_composition", "H(-2) O(2) S(-1)"}, {UNIMOD_Met__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Glu, "spec_1_hidden", "1"}, {UNIMOD_Met__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Glu, "spec_1_site", "M"}, {UNIMOD_Met__Phe, "approved", "0"}, {UNIMOD_Met__Phe, "delta_composition", "C(4) S(-1)"}, {UNIMOD_Met__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Phe, "spec_1_hidden", "1"}, {UNIMOD_Met__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Phe, "spec_1_site", "M"}, {UNIMOD_Met__Gly, "approved", "0"}, {UNIMOD_Met__Gly, "delta_composition", "H(-6) C(-3) S(-1)"}, {UNIMOD_Met__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Gly, "spec_1_hidden", "1"}, {UNIMOD_Met__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Gly, "spec_1_site", "M"}, {UNIMOD_Met__His, "approved", "0"}, {UNIMOD_Met__His, "delta_composition", "H(-2) C N(2) S(-1)"}, {UNIMOD_Met__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__His, "spec_1_hidden", "1"}, {UNIMOD_Met__His, "spec_1_position", "Anywhere"}, {UNIMOD_Met__His, "spec_1_site", "M"}, {UNIMOD_Met__Asn, "approved", "0"}, {UNIMOD_Met__Asn, "delta_composition", "H(-3) C(-1) N O S(-1)"}, {UNIMOD_Met__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Asn, "spec_1_hidden", "1"}, {UNIMOD_Met__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Asn, "spec_1_site", "M"}, {UNIMOD_Met__Pro, "approved", "0"}, {UNIMOD_Met__Pro, "delta_composition", "H(-2) S(-1)"}, {UNIMOD_Met__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Pro, "spec_1_hidden", "1"}, {UNIMOD_Met__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Pro, "spec_1_site", "M"}, {UNIMOD_Met__Gln, "approved", "0"}, {UNIMOD_Met__Gln, "delta_composition", "H(-1) N O S(-1)"}, {UNIMOD_Met__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Gln, "spec_1_hidden", "1"}, {UNIMOD_Met__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Gln, "spec_1_site", "M"}, {UNIMOD_Met__Ser, "approved", "0"}, {UNIMOD_Met__Ser, "delta_composition", "H(-4) C(-2) O S(-1)"}, {UNIMOD_Met__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Ser, "spec_1_hidden", "1"}, {UNIMOD_Met__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Ser, "spec_1_site", "M"}, {UNIMOD_Met__Trp, "approved", "0"}, {UNIMOD_Met__Trp, "delta_composition", "H C(6) N S(-1)"}, {UNIMOD_Met__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Trp, "spec_1_hidden", "1"}, {UNIMOD_Met__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Trp, "spec_1_site", "M"}, {UNIMOD_Met__Tyr, "approved", "0"}, {UNIMOD_Met__Tyr, "delta_composition", "C(4) O S(-1)"}, {UNIMOD_Met__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Met__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Met__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Met__Tyr, "spec_1_site", "M"}, {UNIMOD_Asn__Ala, "approved", "0"}, {UNIMOD_Asn__Ala, "delta_composition", "H(-1) C(-1) N(-1) O(-1)"}, {UNIMOD_Asn__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Ala, "spec_1_hidden", "1"}, {UNIMOD_Asn__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Ala, "spec_1_site", "N"}, {UNIMOD_Asn__Cys, "approved", "0"}, {UNIMOD_Asn__Cys, "delta_composition", "H(-1) C(-1) N(-1) O(-1) S"}, {UNIMOD_Asn__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Cys, "spec_1_hidden", "1"}, {UNIMOD_Asn__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Cys, "spec_1_site", "N"}, {UNIMOD_Asn__Glu, "approved", "0"}, {UNIMOD_Asn__Glu, "delta_composition", "H C N(-1) O"}, {UNIMOD_Asn__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Glu, "spec_1_hidden", "1"}, {UNIMOD_Asn__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Glu, "spec_1_site", "N"}, {UNIMOD_Asn__Phe, "approved", "0"}, {UNIMOD_Asn__Phe, "delta_composition", "H(3) C(5) N(-1) O(-1)"}, {UNIMOD_Asn__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Phe, "spec_1_hidden", "1"}, {UNIMOD_Asn__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Phe, "spec_1_site", "N"}, {UNIMOD_Asn__Gly, "approved", "0"}, {UNIMOD_Asn__Gly, "delta_composition", "H(-3) C(-2) N(-1) O(-1)"}, {UNIMOD_Asn__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Gly, "spec_1_hidden", "1"}, {UNIMOD_Asn__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Gly, "spec_1_site", "N"}, {UNIMOD_Asn__Met, "approved", "0"}, {UNIMOD_Asn__Met, "delta_composition", "H(3) C N(-1) O(-1) S"}, {UNIMOD_Asn__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Met, "spec_1_hidden", "1"}, {UNIMOD_Asn__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Met, "spec_1_site", "N"}, {UNIMOD_Asn__Pro, "approved", "0"}, {UNIMOD_Asn__Pro, "delta_composition", "H C N(-1) O(-1)"}, {UNIMOD_Asn__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Pro, "spec_1_hidden", "1"}, {UNIMOD_Asn__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Pro, "spec_1_site", "N"}, {UNIMOD_Asn__Gln, "approved", "0"}, {UNIMOD_Asn__Gln, "delta_composition", "H(2) C"}, {UNIMOD_Asn__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Gln, "spec_1_hidden", "1"}, {UNIMOD_Asn__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Gln, "spec_1_site", "N"}, {UNIMOD_Asn__Arg, "approved", "0"}, {UNIMOD_Asn__Arg, "delta_composition", "H(6) C(2) N(2) O(-1)"}, {UNIMOD_Asn__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Arg, "spec_1_hidden", "1"}, {UNIMOD_Asn__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Arg, "spec_1_site", "N"}, {UNIMOD_Asn__Val, "approved", "0"}, {UNIMOD_Asn__Val, "delta_composition", "H(3) C N(-1) O(-1)"}, {UNIMOD_Asn__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Val, "spec_1_hidden", "1"}, {UNIMOD_Asn__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Val, "spec_1_site", "N"}, {UNIMOD_Asn__Trp, "approved", "0"}, {UNIMOD_Asn__Trp, "delta_composition", "H(4) C(7) O(-1)"}, {UNIMOD_Asn__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Asn__Trp, "spec_1_hidden", "1"}, {UNIMOD_Asn__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Asn__Trp, "spec_1_site", "N"}, {UNIMOD_Pro__Cys, "approved", "0"}, {UNIMOD_Pro__Cys, "delta_composition", "H(-2) C(-2) S"}, {UNIMOD_Pro__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Cys, "spec_1_hidden", "1"}, {UNIMOD_Pro__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Cys, "spec_1_site", "P"}, {UNIMOD_Pro__Asp, "approved", "0"}, {UNIMOD_Pro__Asp, "delta_composition", "H(-2) C(-1) O(2)"}, {UNIMOD_Pro__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Asp, "spec_1_hidden", "1"}, {UNIMOD_Pro__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Asp, "spec_1_site", "P"}, {UNIMOD_Pro__Glu, "approved", "0"}, {UNIMOD_Pro__Glu, "delta_composition", "O(2)"}, {UNIMOD_Pro__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Glu, "spec_1_hidden", "1"}, {UNIMOD_Pro__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Glu, "spec_1_site", "P"}, {UNIMOD_Pro__Phe, "approved", "0"}, {UNIMOD_Pro__Phe, "delta_composition", "H(2) C(4)"}, {UNIMOD_Pro__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Phe, "spec_1_hidden", "1"}, {UNIMOD_Pro__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Phe, "spec_1_site", "P"}, {UNIMOD_Pro__Gly, "approved", "0"}, {UNIMOD_Pro__Gly, "delta_composition", "H(-4) C(-3)"}, {UNIMOD_Pro__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Gly, "spec_1_hidden", "1"}, {UNIMOD_Pro__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Gly, "spec_1_site", "P"}, {UNIMOD_Pro__Lys, "approved", "0"}, {UNIMOD_Pro__Lys, "delta_composition", "H(5) C N"}, {UNIMOD_Pro__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Lys, "spec_1_hidden", "1"}, {UNIMOD_Pro__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Lys, "spec_1_site", "P"}, {UNIMOD_Pro__Met, "approved", "0"}, {UNIMOD_Pro__Met, "delta_composition", "H(2) S"}, {UNIMOD_Pro__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Met, "spec_1_hidden", "1"}, {UNIMOD_Pro__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Met, "spec_1_site", "P"}, {UNIMOD_Pro__Asn, "approved", "0"}, {UNIMOD_Pro__Asn, "delta_composition", "H(-1) C(-1) N O"}, {UNIMOD_Pro__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Asn, "spec_1_hidden", "1"}, {UNIMOD_Pro__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Asn, "spec_1_site", "P"}, {UNIMOD_Pro__Val, "approved", "0"}, {UNIMOD_Pro__Val, "delta_composition", "H(2)"}, {UNIMOD_Pro__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Val, "spec_1_hidden", "1"}, {UNIMOD_Pro__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Val, "spec_1_site", "P"}, {UNIMOD_Pro__Trp, "approved", "0"}, {UNIMOD_Pro__Trp, "delta_composition", "H(3) C(6) N"}, {UNIMOD_Pro__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Trp, "spec_1_hidden", "1"}, {UNIMOD_Pro__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Trp, "spec_1_site", "P"}, {UNIMOD_Pro__Tyr, "approved", "0"}, {UNIMOD_Pro__Tyr, "delta_composition", "H(2) C(4) O"}, {UNIMOD_Pro__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Pro__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Pro__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__Tyr, "spec_1_site", "P"}, {UNIMOD_Gln__Ala, "approved", "0"}, {UNIMOD_Gln__Ala, "delta_composition", "H(-3) C(-2) N(-1) O(-1)"}, {UNIMOD_Gln__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Ala, "spec_1_hidden", "1"}, {UNIMOD_Gln__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Ala, "spec_1_site", "Q"}, {UNIMOD_Gln__Cys, "approved", "0"}, {UNIMOD_Gln__Cys, "delta_composition", "H(-3) C(-2) N(-1) O(-1) S"}, {UNIMOD_Gln__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Cys, "spec_1_hidden", "1"}, {UNIMOD_Gln__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Cys, "spec_1_site", "Q"}, {UNIMOD_Gln__Asp, "approved", "0"}, {UNIMOD_Gln__Asp, "delta_composition", "H(-3) C(-1) N(-1) O"}, {UNIMOD_Gln__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Asp, "spec_1_hidden", "1"}, {UNIMOD_Gln__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Asp, "spec_1_site", "Q"}, {UNIMOD_Gln__Phe, "approved", "0"}, {UNIMOD_Gln__Phe, "delta_composition", "H C(4) N(-1) O(-1)"}, {UNIMOD_Gln__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Phe, "spec_1_hidden", "1"}, {UNIMOD_Gln__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Phe, "spec_1_site", "Q"}, {UNIMOD_Gln__Gly, "approved", "0"}, {UNIMOD_Gln__Gly, "delta_composition", "H(-5) C(-3) N(-1) O(-1)"}, {UNIMOD_Gln__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Gly, "spec_1_hidden", "1"}, {UNIMOD_Gln__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Gly, "spec_1_site", "Q"}, {UNIMOD_Gln__Met, "approved", "0"}, {UNIMOD_Gln__Met, "delta_composition", "H N(-1) O(-1) S"}, {UNIMOD_Gln__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Met, "spec_1_hidden", "1"}, {UNIMOD_Gln__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Met, "spec_1_site", "Q"}, {UNIMOD_Gln__Asn, "approved", "0"}, {UNIMOD_Gln__Asn, "delta_composition", "H(-2) C(-1)"}, {UNIMOD_Gln__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Asn, "spec_1_hidden", "1"}, {UNIMOD_Gln__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Asn, "spec_1_site", "Q"}, {UNIMOD_Gln__Ser, "approved", "0"}, {UNIMOD_Gln__Ser, "delta_composition", "H(-3) C(-2) N(-1)"}, {UNIMOD_Gln__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Ser, "spec_1_hidden", "1"}, {UNIMOD_Gln__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Ser, "spec_1_site", "Q"}, {UNIMOD_Gln__Thr, "approved", "0"}, {UNIMOD_Gln__Thr, "delta_composition", "H(-1) C(-1) N(-1)"}, {UNIMOD_Gln__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Thr, "spec_1_hidden", "1"}, {UNIMOD_Gln__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Thr, "spec_1_site", "Q"}, {UNIMOD_Gln__Val, "approved", "0"}, {UNIMOD_Gln__Val, "delta_composition", "H N(-1) O(-1)"}, {UNIMOD_Gln__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Val, "spec_1_hidden", "1"}, {UNIMOD_Gln__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Val, "spec_1_site", "Q"}, {UNIMOD_Gln__Trp, "approved", "0"}, {UNIMOD_Gln__Trp, "delta_composition", "H(2) C(6) O(-1)"}, {UNIMOD_Gln__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Trp, "spec_1_hidden", "1"}, {UNIMOD_Gln__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Trp, "spec_1_site", "Q"}, {UNIMOD_Gln__Tyr, "approved", "0"}, {UNIMOD_Gln__Tyr, "delta_composition", "H C(4) N(-1)"}, {UNIMOD_Gln__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Gln__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Gln__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Gln__Tyr, "spec_1_site", "Q"}, {UNIMOD_Arg__Ala, "approved", "0"}, {UNIMOD_Arg__Ala, "delta_composition", "H(-7) C(-3) N(-3)"}, {UNIMOD_Arg__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Ala, "spec_1_hidden", "1"}, {UNIMOD_Arg__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Ala, "spec_1_site", "R"}, {UNIMOD_Arg__Asp, "approved", "0"}, {UNIMOD_Arg__Asp, "delta_composition", "H(-7) C(-2) N(-3) O(2)"}, {UNIMOD_Arg__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Asp, "spec_1_hidden", "1"}, {UNIMOD_Arg__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Asp, "spec_1_site", "R"}, {UNIMOD_Arg__Glu, "approved", "0"}, {UNIMOD_Arg__Glu, "delta_composition", "H(-5) C(-1) N(-3) O(2)"}, {UNIMOD_Arg__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Glu, "spec_1_hidden", "1"}, {UNIMOD_Arg__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Glu, "spec_1_site", "R"}, {UNIMOD_Arg__Asn, "approved", "0"}, {UNIMOD_Arg__Asn, "delta_composition", "H(-6) C(-2) N(-2) O"}, {UNIMOD_Arg__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Asn, "spec_1_hidden", "1"}, {UNIMOD_Arg__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Asn, "spec_1_site", "R"}, {UNIMOD_Arg__Val, "approved", "0"}, {UNIMOD_Arg__Val, "delta_composition", "H(-3) C(-1) N(-3)"}, {UNIMOD_Arg__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Val, "spec_1_hidden", "1"}, {UNIMOD_Arg__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Val, "spec_1_site", "R"}, {UNIMOD_Arg__Tyr, "approved", "0"}, {UNIMOD_Arg__Tyr, "delta_composition", "H(-3) C(3) N(-3) O"}, {UNIMOD_Arg__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Arg__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Tyr, "spec_1_site", "R"}, {UNIMOD_Arg__Phe, "approved", "0"}, {UNIMOD_Arg__Phe, "delta_composition", "H(-3) C(3) N(-3)"}, {UNIMOD_Arg__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Arg__Phe, "spec_1_hidden", "1"}, {UNIMOD_Arg__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Arg__Phe, "spec_1_site", "R"}, {UNIMOD_Ser__Asp, "approved", "0"}, {UNIMOD_Ser__Asp, "delta_composition", "C O"}, {UNIMOD_Ser__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Asp, "spec_1_hidden", "1"}, {UNIMOD_Ser__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Asp, "spec_1_site", "S"}, {UNIMOD_Ser__Glu, "approved", "0"}, {UNIMOD_Ser__Glu, "delta_composition", "H(2) C(2) O"}, {UNIMOD_Ser__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Glu, "spec_1_hidden", "1"}, {UNIMOD_Ser__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Glu, "spec_1_site", "S"}, {UNIMOD_Ser__His, "approved", "0"}, {UNIMOD_Ser__His, "delta_composition", "H(2) C(3) N(2) O(-1)"}, {UNIMOD_Ser__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__His, "spec_1_hidden", "1"}, {UNIMOD_Ser__His, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__His, "spec_1_site", "S"}, {UNIMOD_Ser__Lys, "approved", "0"}, {UNIMOD_Ser__Lys, "delta_composition", "H(7) C(3) N O(-1)"}, {UNIMOD_Ser__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Lys, "spec_1_hidden", "1"}, {UNIMOD_Ser__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Lys, "spec_1_site", "S"}, {UNIMOD_Ser__Met, "approved", "0"}, {UNIMOD_Ser__Met, "delta_composition", "H(4) C(2) O(-1) S"}, {UNIMOD_Ser__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Met, "spec_1_hidden", "1"}, {UNIMOD_Ser__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Met, "spec_1_site", "S"}, {UNIMOD_Ser__Gln, "approved", "0"}, {UNIMOD_Ser__Gln, "delta_composition", "H(3) C(2) N"}, {UNIMOD_Ser__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Gln, "spec_1_hidden", "1"}, {UNIMOD_Ser__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Gln, "spec_1_site", "S"}, {UNIMOD_Ser__Val, "approved", "0"}, {UNIMOD_Ser__Val, "delta_composition", "H(4) C(2) O(-1)"}, {UNIMOD_Ser__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Ser__Val, "spec_1_hidden", "1"}, {UNIMOD_Ser__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Ser__Val, "spec_1_site", "S"}, {UNIMOD_Thr__Cys, "approved", "0"}, {UNIMOD_Thr__Cys, "delta_composition", "H(-2) C(-1) O(-1) S"}, {UNIMOD_Thr__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Cys, "spec_1_hidden", "1"}, {UNIMOD_Thr__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Cys, "spec_1_site", "T"}, {UNIMOD_Thr__Asp, "approved", "0"}, {UNIMOD_Thr__Asp, "delta_composition", "H(-2) O"}, {UNIMOD_Thr__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Asp, "spec_1_hidden", "1"}, {UNIMOD_Thr__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Asp, "spec_1_site", "T"}, {UNIMOD_Thr__Glu, "approved", "0"}, {UNIMOD_Thr__Glu, "delta_composition", "C O"}, {UNIMOD_Thr__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Glu, "spec_1_hidden", "1"}, {UNIMOD_Thr__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Glu, "spec_1_site", "T"}, {UNIMOD_Thr__Phe, "approved", "0"}, {UNIMOD_Thr__Phe, "delta_composition", "H(2) C(5) O(-1)"}, {UNIMOD_Thr__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Phe, "spec_1_hidden", "1"}, {UNIMOD_Thr__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Phe, "spec_1_site", "T"}, {UNIMOD_Thr__Gly, "approved", "0"}, {UNIMOD_Thr__Gly, "delta_composition", "H(-4) C(-2) O(-1)"}, {UNIMOD_Thr__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Gly, "spec_1_hidden", "1"}, {UNIMOD_Thr__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Gly, "spec_1_site", "T"}, {UNIMOD_Thr__His, "approved", "0"}, {UNIMOD_Thr__His, "delta_composition", "C(2) N(2) O(-1)"}, {UNIMOD_Thr__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__His, "spec_1_hidden", "1"}, {UNIMOD_Thr__His, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__His, "spec_1_site", "T"}, {UNIMOD_Thr__Gln, "approved", "0"}, {UNIMOD_Thr__Gln, "delta_composition", "H C N"}, {UNIMOD_Thr__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Gln, "spec_1_hidden", "1"}, {UNIMOD_Thr__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Gln, "spec_1_site", "T"}, {UNIMOD_Thr__Val, "approved", "0"}, {UNIMOD_Thr__Val, "delta_composition", "H(2) C O(-1)"}, {UNIMOD_Thr__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Val, "spec_1_hidden", "1"}, {UNIMOD_Thr__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Val, "spec_1_site", "T"}, {UNIMOD_Thr__Trp, "approved", "0"}, {UNIMOD_Thr__Trp, "delta_composition", "H(3) C(7) N O(-1)"}, {UNIMOD_Thr__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Trp, "spec_1_hidden", "1"}, {UNIMOD_Thr__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Trp, "spec_1_site", "T"}, {UNIMOD_Thr__Tyr, "approved", "0"}, {UNIMOD_Thr__Tyr, "delta_composition", "H(2) C(5)"}, {UNIMOD_Thr__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Thr__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Thr__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Thr__Tyr, "spec_1_site", "T"}, {UNIMOD_Val__Cys, "approved", "0"}, {UNIMOD_Val__Cys, "delta_composition", "H(-4) C(-2) S"}, {UNIMOD_Val__Cys, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Cys, "spec_1_hidden", "1"}, {UNIMOD_Val__Cys, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Cys, "spec_1_site", "V"}, {UNIMOD_Val__His, "approved", "0"}, {UNIMOD_Val__His, "delta_composition", "H(-2) C N(2)"}, {UNIMOD_Val__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__His, "spec_1_hidden", "1"}, {UNIMOD_Val__His, "spec_1_position", "Anywhere"}, {UNIMOD_Val__His, "spec_1_site", "V"}, {UNIMOD_Val__Lys, "approved", "0"}, {UNIMOD_Val__Lys, "delta_composition", "H(3) C N"}, {UNIMOD_Val__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Lys, "spec_1_hidden", "1"}, {UNIMOD_Val__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Lys, "spec_1_site", "V"}, {UNIMOD_Val__Asn, "approved", "0"}, {UNIMOD_Val__Asn, "delta_composition", "H(-3) C(-1) N O"}, {UNIMOD_Val__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Asn, "spec_1_hidden", "1"}, {UNIMOD_Val__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Asn, "spec_1_site", "V"}, {UNIMOD_Val__Pro, "approved", "0"}, {UNIMOD_Val__Pro, "delta_composition", "H(-2)"}, {UNIMOD_Val__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Pro, "spec_1_hidden", "1"}, {UNIMOD_Val__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Pro, "spec_1_site", "V"}, {UNIMOD_Val__Gln, "approved", "0"}, {UNIMOD_Val__Gln, "delta_composition", "H(-1) N O"}, {UNIMOD_Val__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Gln, "spec_1_hidden", "1"}, {UNIMOD_Val__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Gln, "spec_1_site", "V"}, {UNIMOD_Val__Arg, "approved", "0"}, {UNIMOD_Val__Arg, "delta_composition", "H(3) C N(3)"}, {UNIMOD_Val__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Arg, "spec_1_hidden", "1"}, {UNIMOD_Val__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Arg, "spec_1_site", "V"}, {UNIMOD_Val__Ser, "approved", "0"}, {UNIMOD_Val__Ser, "delta_composition", "H(-4) C(-2) O"}, {UNIMOD_Val__Ser, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Ser, "spec_1_hidden", "1"}, {UNIMOD_Val__Ser, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Ser, "spec_1_site", "V"}, {UNIMOD_Val__Thr, "approved", "0"}, {UNIMOD_Val__Thr, "delta_composition", "H(-2) C(-1) O"}, {UNIMOD_Val__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Thr, "spec_1_hidden", "1"}, {UNIMOD_Val__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Thr, "spec_1_site", "V"}, {UNIMOD_Val__Trp, "approved", "0"}, {UNIMOD_Val__Trp, "delta_composition", "H C(6) N"}, {UNIMOD_Val__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Trp, "spec_1_hidden", "1"}, {UNIMOD_Val__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Trp, "spec_1_site", "V"}, {UNIMOD_Val__Tyr, "approved", "0"}, {UNIMOD_Val__Tyr, "delta_composition", "C(4) O"}, {UNIMOD_Val__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Val__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Val__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Val__Tyr, "spec_1_site", "V"}, {UNIMOD_Trp__Ala, "approved", "0"}, {UNIMOD_Trp__Ala, "delta_composition", "H(-5) C(-8) N(-1)"}, {UNIMOD_Trp__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Ala, "spec_1_hidden", "1"}, {UNIMOD_Trp__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Ala, "spec_1_site", "W"}, {UNIMOD_Trp__Asp, "approved", "0"}, {UNIMOD_Trp__Asp, "delta_composition", "H(-5) C(-7) N(-1) O(2)"}, {UNIMOD_Trp__Asp, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Asp, "spec_1_hidden", "1"}, {UNIMOD_Trp__Asp, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Asp, "spec_1_site", "W"}, {UNIMOD_Trp__Glu, "approved", "0"}, {UNIMOD_Trp__Glu, "delta_composition", "H(-3) C(-6) N(-1) O(2)"}, {UNIMOD_Trp__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Glu, "spec_1_hidden", "1"}, {UNIMOD_Trp__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Glu, "spec_1_site", "W"}, {UNIMOD_Trp__Phe, "approved", "0"}, {UNIMOD_Trp__Phe, "delta_composition", "H(-1) C(-2) N(-1)"}, {UNIMOD_Trp__Phe, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Phe, "spec_1_hidden", "1"}, {UNIMOD_Trp__Phe, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Phe, "spec_1_site", "W"}, {UNIMOD_Trp__His, "approved", "0"}, {UNIMOD_Trp__His, "delta_composition", "H(-3) C(-5) N"}, {UNIMOD_Trp__His, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__His, "spec_1_hidden", "1"}, {UNIMOD_Trp__His, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__His, "spec_1_site", "W"}, {UNIMOD_Trp__Lys, "approved", "0"}, {UNIMOD_Trp__Lys, "delta_composition", "H(2) C(-5)"}, {UNIMOD_Trp__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Lys, "spec_1_hidden", "1"}, {UNIMOD_Trp__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Lys, "spec_1_site", "W"}, {UNIMOD_Trp__Met, "approved", "0"}, {UNIMOD_Trp__Met, "delta_composition", "H(-1) C(-6) N(-1) S"}, {UNIMOD_Trp__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Met, "spec_1_hidden", "1"}, {UNIMOD_Trp__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Met, "spec_1_site", "W"}, {UNIMOD_Trp__Asn, "approved", "0"}, {UNIMOD_Trp__Asn, "delta_composition", "H(-4) C(-7) O"}, {UNIMOD_Trp__Asn, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Asn, "spec_1_hidden", "1"}, {UNIMOD_Trp__Asn, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Asn, "spec_1_site", "W"}, {UNIMOD_Trp__Pro, "approved", "0"}, {UNIMOD_Trp__Pro, "delta_composition", "H(-3) C(-6) N(-1)"}, {UNIMOD_Trp__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Pro, "spec_1_hidden", "1"}, {UNIMOD_Trp__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Pro, "spec_1_site", "W"}, {UNIMOD_Trp__Gln, "approved", "0"}, {UNIMOD_Trp__Gln, "delta_composition", "H(-2) C(-6) O"}, {UNIMOD_Trp__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Gln, "spec_1_hidden", "1"}, {UNIMOD_Trp__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Gln, "spec_1_site", "W"}, {UNIMOD_Trp__Thr, "approved", "0"}, {UNIMOD_Trp__Thr, "delta_composition", "H(-3) C(-7) N(-1) O"}, {UNIMOD_Trp__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Thr, "spec_1_hidden", "1"}, {UNIMOD_Trp__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Thr, "spec_1_site", "W"}, {UNIMOD_Trp__Val, "approved", "0"}, {UNIMOD_Trp__Val, "delta_composition", "H(-1) C(-6) N(-1)"}, {UNIMOD_Trp__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Val, "spec_1_hidden", "1"}, {UNIMOD_Trp__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Val, "spec_1_site", "W"}, {UNIMOD_Trp__Tyr, "approved", "0"}, {UNIMOD_Trp__Tyr, "delta_composition", "H(-1) C(-2) N(-1) O"}, {UNIMOD_Trp__Tyr, "spec_1_classification", "AA substitution"}, {UNIMOD_Trp__Tyr, "spec_1_hidden", "1"}, {UNIMOD_Trp__Tyr, "spec_1_position", "Anywhere"}, {UNIMOD_Trp__Tyr, "spec_1_site", "W"}, {UNIMOD_Tyr__Ala, "approved", "0"}, {UNIMOD_Tyr__Ala, "delta_composition", "H(-4) C(-6) O(-1)"}, {UNIMOD_Tyr__Ala, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Ala, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Ala, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Ala, "spec_1_site", "Y"}, {UNIMOD_Tyr__Glu, "approved", "0"}, {UNIMOD_Tyr__Glu, "delta_composition", "H(-2) C(-4) O"}, {UNIMOD_Tyr__Glu, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Glu, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Glu, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Glu, "spec_1_site", "Y"}, {UNIMOD_Tyr__Gly, "approved", "0"}, {UNIMOD_Tyr__Gly, "delta_composition", "H(-6) C(-7) O(-1)"}, {UNIMOD_Tyr__Gly, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Gly, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Gly, "spec_1_site", "Y"}, {UNIMOD_Tyr__Lys, "approved", "0"}, {UNIMOD_Tyr__Lys, "delta_composition", "H(3) C(-3) N O(-1)"}, {UNIMOD_Tyr__Lys, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Lys, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Lys, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Lys, "spec_1_site", "Y"}, {UNIMOD_Tyr__Met, "approved", "0"}, {UNIMOD_Tyr__Met, "delta_composition", "C(-4) O(-1) S"}, {UNIMOD_Tyr__Met, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Met, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Met, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Met, "spec_1_site", "Y"}, {UNIMOD_Tyr__Pro, "approved", "0"}, {UNIMOD_Tyr__Pro, "delta_composition", "H(-2) C(-4) O(-1)"}, {UNIMOD_Tyr__Pro, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Pro, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Pro, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Pro, "spec_1_site", "Y"}, {UNIMOD_Tyr__Gln, "approved", "0"}, {UNIMOD_Tyr__Gln, "delta_composition", "H(-1) C(-4) N"}, {UNIMOD_Tyr__Gln, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Gln, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Gln, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Gln, "spec_1_site", "Y"}, {UNIMOD_Tyr__Arg, "approved", "0"}, {UNIMOD_Tyr__Arg, "delta_composition", "H(3) C(-3) N(3) O(-1)"}, {UNIMOD_Tyr__Arg, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Arg, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Arg, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Arg, "spec_1_site", "Y"}, {UNIMOD_Tyr__Thr, "approved", "0"}, {UNIMOD_Tyr__Thr, "delta_composition", "H(-2) C(-5)"}, {UNIMOD_Tyr__Thr, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Thr, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Thr, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Thr, "spec_1_site", "Y"}, {UNIMOD_Tyr__Val, "approved", "0"}, {UNIMOD_Tyr__Val, "delta_composition", "C(-4) O(-1)"}, {UNIMOD_Tyr__Val, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Val, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Val, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Val, "spec_1_site", "Y"}, {UNIMOD_Tyr__Trp, "approved", "0"}, {UNIMOD_Tyr__Trp, "delta_composition", "H C(2) N O(-1)"}, {UNIMOD_Tyr__Trp, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Trp, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Trp, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Trp, "spec_1_site", "Y"}, {UNIMOD_Tyr__Xle, "approved", "0"}, {UNIMOD_Tyr__Xle, "delta_composition", "H(2) C(-3) O(-1)"}, {UNIMOD_Tyr__Xle, "spec_1_classification", "AA substitution"}, {UNIMOD_Tyr__Xle, "spec_1_hidden", "1"}, {UNIMOD_Tyr__Xle, "spec_1_position", "Anywhere"}, {UNIMOD_Tyr__Xle, "spec_1_site", "Y"}, {UNIMOD_AHA_SS, "approved", "0"}, {UNIMOD_AHA_SS, "delta_composition", "H(9) C(7) N(5) O(2)"}, {UNIMOD_AHA_SS, "spec_1_classification", "Multiple"}, {UNIMOD_AHA_SS, "spec_1_hidden", "1"}, {UNIMOD_AHA_SS, "spec_1_position", "Anywhere"}, {UNIMOD_AHA_SS, "spec_1_site", "M"}, {UNIMOD_AHA_SS_CAM, "approved", "0"}, {UNIMOD_AHA_SS_CAM, "delta_composition", "H(12) C(9) N(6) O(3)"}, {UNIMOD_AHA_SS_CAM, "spec_1_classification", "Multiple"}, {UNIMOD_AHA_SS_CAM, "spec_1_hidden", "1"}, {UNIMOD_AHA_SS_CAM, "spec_1_position", "Anywhere"}, {UNIMOD_AHA_SS_CAM, "spec_1_site", "M"}, {UNIMOD_Biotin_Thermo_33033, "approved", "0"}, {UNIMOD_Biotin_Thermo_33033, "delta_composition", "H(36) C(25) N(6) O(4) S(2)"}, {UNIMOD_Biotin_Thermo_33033, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_33033, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_33033, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_33033, "spec_1_site", "N-term"}, {UNIMOD_Biotin_Thermo_33033_H, "approved", "0"}, {UNIMOD_Biotin_Thermo_33033_H, "delta_composition", "H(34) C(25) N(6) O(4) S(2)"}, {UNIMOD_Biotin_Thermo_33033_H, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_33033_H, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_33033_H, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_33033_H, "spec_1_site", "N-term"}, {UNIMOD_2_monomethylsuccinyl, "approved", "0"}, {UNIMOD_2_monomethylsuccinyl, "delta_composition", "H(6) C(5) O(4)"}, {UNIMOD_2_monomethylsuccinyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_2_monomethylsuccinyl, "spec_1_hidden", "1"}, {UNIMOD_2_monomethylsuccinyl, "spec_1_position", "Anywhere"}, {UNIMOD_2_monomethylsuccinyl, "spec_1_site", "C"}, {UNIMOD_Saligenin, "approved", "0"}, {UNIMOD_Saligenin, "delta_composition", "H(6) C(7) O"}, {UNIMOD_Saligenin, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Saligenin, "spec_1_hidden", "1"}, {UNIMOD_Saligenin, "spec_1_position", "Anywhere"}, {UNIMOD_Saligenin, "spec_1_site", "H"}, {UNIMOD_Saligenin, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Saligenin, "spec_2_hidden", "1"}, {UNIMOD_Saligenin, "spec_2_position", "Anywhere"}, {UNIMOD_Saligenin, "spec_2_site", "K"}, {UNIMOD_Cresylphosphate, "approved", "0"}, {UNIMOD_Cresylphosphate, "delta_composition", "H(7) C(7) O(3) P"}, {UNIMOD_Cresylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_1_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_1_site", "H"}, {UNIMOD_Cresylphosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_2_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_2_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_2_site", "K"}, {UNIMOD_Cresylphosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_3_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_3_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_3_site", "R"}, {UNIMOD_Cresylphosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_4_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_4_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_4_site", "S"}, {UNIMOD_Cresylphosphate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_5_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_5_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_5_site", "T"}, {UNIMOD_Cresylphosphate, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Cresylphosphate, "spec_6_hidden", "1"}, {UNIMOD_Cresylphosphate, "spec_6_position", "Anywhere"}, {UNIMOD_Cresylphosphate, "spec_6_site", "Y"}, {UNIMOD_CresylSaligeninPhosphate, "approved", "0"}, {UNIMOD_CresylSaligeninPhosphate, "delta_composition", "H(13) C(14) O(4) P"}, {UNIMOD_CresylSaligeninPhosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_1_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_1_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_1_site", "H"}, {UNIMOD_CresylSaligeninPhosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_2_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_2_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_2_site", "K"}, {UNIMOD_CresylSaligeninPhosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_3_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_3_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_3_site", "R"}, {UNIMOD_CresylSaligeninPhosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_4_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_4_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_4_site", "S"}, {UNIMOD_CresylSaligeninPhosphate, "spec_5_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_5_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_5_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_5_site", "T"}, {UNIMOD_CresylSaligeninPhosphate, "spec_6_classification", "Chemical derivative"}, {UNIMOD_CresylSaligeninPhosphate, "spec_6_hidden", "1"}, {UNIMOD_CresylSaligeninPhosphate, "spec_6_position", "Anywhere"}, {UNIMOD_CresylSaligeninPhosphate, "spec_6_site", "Y"}, {UNIMOD_Ub_Br2, "approved", "0"}, {UNIMOD_Ub_Br2, "delta_composition", "H(8) C(4) N(2) O"}, {UNIMOD_Ub_Br2, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ub_Br2, "spec_1_hidden", "1"}, {UNIMOD_Ub_Br2, "spec_1_position", "Anywhere"}, {UNIMOD_Ub_Br2, "spec_1_site", "C"}, {UNIMOD_Ub_VME, "approved", "0"}, {UNIMOD_Ub_VME, "delta_composition", "H(13) C(7) N(2) O(3)"}, {UNIMOD_Ub_VME, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ub_VME, "spec_1_hidden", "1"}, {UNIMOD_Ub_VME, "spec_1_position", "Anywhere"}, {UNIMOD_Ub_VME, "spec_1_site", "C"}, {UNIMOD_Ub_amide, "approved", "0"}, {UNIMOD_Ub_amide, "delta_composition", "H(14) C(9) N(3) O(2)"}, {UNIMOD_Ub_amide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ub_amide, "spec_1_hidden", "1"}, {UNIMOD_Ub_amide, "spec_1_position", "Anywhere"}, {UNIMOD_Ub_amide, "spec_1_site", "C"}, {UNIMOD_Ub_fluorescein, "approved", "0"}, {UNIMOD_Ub_fluorescein, "delta_composition", "H(29) C(31) N(6) O(7)"}, {UNIMOD_Ub_fluorescein, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Ub_fluorescein, "spec_1_hidden", "1"}, {UNIMOD_Ub_fluorescein, "spec_1_position", "Anywhere"}, {UNIMOD_Ub_fluorescein, "spec_1_site", "C"}, {UNIMOD_2_dimethylsuccinyl, "approved", "0"}, {UNIMOD_2_dimethylsuccinyl, "delta_composition", "H(8) C(6) O(4)"}, {UNIMOD_2_dimethylsuccinyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_2_dimethylsuccinyl, "spec_1_hidden", "1"}, {UNIMOD_2_dimethylsuccinyl, "spec_1_position", "Anywhere"}, {UNIMOD_2_dimethylsuccinyl, "spec_1_site", "C"}, {UNIMOD_Gly, "approved", "0"}, {UNIMOD_Gly, "delta_composition", "H(3) C(2) N O"}, {UNIMOD_Gly, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Gly, "spec_1_hidden", "1"}, {UNIMOD_Gly, "spec_1_position", "Anywhere"}, {UNIMOD_Gly, "spec_1_site", "K"}, {UNIMOD_Gly, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Gly, "spec_2_hidden", "1"}, {UNIMOD_Gly, "spec_2_position", "Anywhere"}, {UNIMOD_Gly, "spec_2_site", "S"}, {UNIMOD_Gly, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Gly, "spec_3_hidden", "1"}, {UNIMOD_Gly, "spec_3_position", "Anywhere"}, {UNIMOD_Gly, "spec_3_site", "T"}, {UNIMOD_pupylation, "approved", "0"}, {UNIMOD_pupylation, "delta_composition", "H(13) C(9) N(3) O(5)"}, {UNIMOD_pupylation, "spec_1_classification", "Post-translational"}, {UNIMOD_pupylation, "spec_1_hidden", "1"}, {UNIMOD_pupylation, "spec_1_position", "Anywhere"}, {UNIMOD_pupylation, "spec_1_site", "K"}, {UNIMOD_Label_13C_4_, "approved", "0"}, {UNIMOD_Label_13C_4_, "delta_composition", "C(-4) 13C(4)"}, {UNIMOD_Label_13C_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_4_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_4_, "spec_1_site", "M"}, {UNIMOD_Label_13C_4__Oxidation, "approved", "0"}, {UNIMOD_Label_13C_4__Oxidation, "delta_composition", "C(-4) 13C(4) O"}, {UNIMOD_Label_13C_4__Oxidation, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_4__Oxidation, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_4__Oxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_4__Oxidation, "spec_1_site", "M"}, {UNIMOD_HCysThiolactone, "approved", "0"}, {UNIMOD_HCysThiolactone, "delta_composition", "H(7) C(4) N O S"}, {UNIMOD_HCysThiolactone, "spec_1_classification", "Post-translational"}, {UNIMOD_HCysThiolactone, "spec_1_hidden", "1"}, {UNIMOD_HCysThiolactone, "spec_1_position", "Anywhere"}, {UNIMOD_HCysThiolactone, "spec_1_site", "K"}, {UNIMOD_HCysteinyl, "approved", "0"}, {UNIMOD_HCysteinyl, "delta_composition", "H(7) C(4) N O(2) S"}, {UNIMOD_HCysteinyl, "spec_1_classification", "Post-translational"}, {UNIMOD_HCysteinyl, "spec_1_hidden", "1"}, {UNIMOD_HCysteinyl, "spec_1_position", "Anywhere"}, {UNIMOD_HCysteinyl, "spec_1_site", "C"}, {UNIMOD_UgiJoullie, "approved", "0"}, {UNIMOD_UgiJoullie, "delta_composition", "H(60) C(47) N(23) O(10)"}, {UNIMOD_UgiJoullie, "spec_1_classification", "Chemical derivative"}, {UNIMOD_UgiJoullie, "spec_1_hidden", "1"}, {UNIMOD_UgiJoullie, "spec_1_position", "Anywhere"}, {UNIMOD_UgiJoullie, "spec_1_site", "D"}, {UNIMOD_UgiJoullie, "spec_2_classification", "Chemical derivative"}, {UNIMOD_UgiJoullie, "spec_2_hidden", "1"}, {UNIMOD_UgiJoullie, "spec_2_position", "Anywhere"}, {UNIMOD_UgiJoullie, "spec_2_site", "E"}, {UNIMOD_Dipyridyl, "approved", "0"}, {UNIMOD_Dipyridyl, "delta_composition", "H(11) C(13) N(3) O"}, {UNIMOD_Dipyridyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Dipyridyl, "spec_1_hidden", "1"}, {UNIMOD_Dipyridyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dipyridyl, "spec_1_site", "C"}, {UNIMOD_Furan, "approved", "0"}, {UNIMOD_Furan, "delta_composition", "H(2) C(4) O"}, {UNIMOD_Furan, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Furan, "spec_1_hidden", "1"}, {UNIMOD_Furan, "spec_1_position", "Anywhere"}, {UNIMOD_Furan, "spec_1_site", "Y"}, {UNIMOD_Difuran, "approved", "0"}, {UNIMOD_Difuran, "delta_composition", "H(4) C(8) O(2)"}, {UNIMOD_Difuran, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Difuran, "spec_1_hidden", "1"}, {UNIMOD_Difuran, "spec_1_position", "Anywhere"}, {UNIMOD_Difuran, "spec_1_site", "Y"}, {UNIMOD_BMP_piperidinol, "approved", "0"}, {UNIMOD_BMP_piperidinol, "delta_composition", "H(17) C(18) N O"}, {UNIMOD_BMP_piperidinol, "spec_1_classification", "Chemical derivative"}, {UNIMOD_BMP_piperidinol, "spec_1_hidden", "1"}, {UNIMOD_BMP_piperidinol, "spec_1_position", "Anywhere"}, {UNIMOD_BMP_piperidinol, "spec_1_site", "M"}, {UNIMOD_BMP_piperidinol, "spec_2_classification", "Chemical derivative"}, {UNIMOD_BMP_piperidinol, "spec_2_hidden", "1"}, {UNIMOD_BMP_piperidinol, "spec_2_position", "Anywhere"}, {UNIMOD_BMP_piperidinol, "spec_2_site", "C"}, {UNIMOD_UgiJoullieProGly, "approved", "0"}, {UNIMOD_UgiJoullieProGly, "delta_composition", "H(10) C(7) N(2) O(2)"}, {UNIMOD_UgiJoullieProGly, "spec_1_classification", "Chemical derivative"}, {UNIMOD_UgiJoullieProGly, "spec_1_hidden", "1"}, {UNIMOD_UgiJoullieProGly, "spec_1_position", "Anywhere"}, {UNIMOD_UgiJoullieProGly, "spec_1_site", "D"}, {UNIMOD_UgiJoullieProGly, "spec_2_classification", "Chemical derivative"}, {UNIMOD_UgiJoullieProGly, "spec_2_hidden", "1"}, {UNIMOD_UgiJoullieProGly, "spec_2_position", "Anywhere"}, {UNIMOD_UgiJoullieProGly, "spec_2_site", "E"}, {UNIMOD_UgiJoullieProGlyProGly, "approved", "0"}, {UNIMOD_UgiJoullieProGlyProGly, "delta_composition", "H(20) C(14) N(4) O(4)"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_1_classification", "Chemical derivative"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_1_hidden", "1"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_1_position", "Anywhere"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_1_site", "D"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_2_classification", "Chemical derivative"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_2_hidden", "1"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_2_position", "Anywhere"}, {UNIMOD_UgiJoullieProGlyProGly, "spec_2_site", "E"}, {UNIMOD_IMEHex_2_NeuAc_1_, "approved", "0"}, {UNIMOD_IMEHex_2_NeuAc_1_, "delta_composition", "H(3) C(2) N S Hex(2) NeuAc"}, {UNIMOD_IMEHex_2_NeuAc_1_, "spec_1_classification", "Other glycosylation"}, {UNIMOD_IMEHex_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_IMEHex_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_IMEHex_2_NeuAc_1_, "spec_1_site", "K"}, {UNIMOD_Arg_loss, "approved", "0"}, {UNIMOD_Arg_loss, "delta_composition", "H(-12) C(-6) N(-4) O(-1)"}, {UNIMOD_Arg_loss, "spec_1_classification", "Other"}, {UNIMOD_Arg_loss, "spec_1_hidden", "1"}, {UNIMOD_Arg_loss, "spec_1_position", "Any C-term"}, {UNIMOD_Arg_loss, "spec_1_site", "R"}, {UNIMOD_Arg, "approved", "0"}, {UNIMOD_Arg, "delta_composition", "H(12) C(6) N(4) O"}, {UNIMOD_Arg, "spec_1_classification", "Other"}, {UNIMOD_Arg, "spec_1_hidden", "1"}, {UNIMOD_Arg, "spec_1_position", "Any N-term"}, {UNIMOD_Arg, "spec_1_site", "N-term"}, {UNIMOD_Butyryl, "approved", "0"}, {UNIMOD_Butyryl, "delta_composition", "H(6) C(4) O"}, {UNIMOD_Butyryl, "spec_1_classification", "Post-translational"}, {UNIMOD_Butyryl, "spec_1_hidden", "1"}, {UNIMOD_Butyryl, "spec_1_position", "Anywhere"}, {UNIMOD_Butyryl, "spec_1_site", "K"}, {UNIMOD_Dicarbamidomethyl, "approved", "0"}, {UNIMOD_Dicarbamidomethyl, "delta_composition", "H(6) C(4) N(2) O(2)"}, {UNIMOD_Dicarbamidomethyl, "spec_1_classification", "Artefact"}, {UNIMOD_Dicarbamidomethyl, "spec_1_hidden", "1"}, {UNIMOD_Dicarbamidomethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dicarbamidomethyl, "spec_1_site", "C"}, {UNIMOD_Dicarbamidomethyl, "spec_2_classification", "Artefact"}, {UNIMOD_Dicarbamidomethyl, "spec_2_hidden", "1"}, {UNIMOD_Dicarbamidomethyl, "spec_2_position", "Anywhere"}, {UNIMOD_Dicarbamidomethyl, "spec_2_site", "H"}, {UNIMOD_Dicarbamidomethyl, "spec_3_classification", "Artefact"}, {UNIMOD_Dicarbamidomethyl, "spec_3_hidden", "1"}, {UNIMOD_Dicarbamidomethyl, "spec_3_position", "Anywhere"}, {UNIMOD_Dicarbamidomethyl, "spec_3_site", "K"}, {UNIMOD_Dicarbamidomethyl, "spec_4_classification", "Artefact"}, {UNIMOD_Dicarbamidomethyl, "spec_4_hidden", "1"}, {UNIMOD_Dicarbamidomethyl, "spec_4_position", "Anywhere"}, {UNIMOD_Dicarbamidomethyl, "spec_4_site", "R"}, {UNIMOD_Dicarbamidomethyl, "spec_5_classification", "Artefact"}, {UNIMOD_Dicarbamidomethyl, "spec_5_hidden", "1"}, {UNIMOD_Dicarbamidomethyl, "spec_5_position", "Any N-term"}, {UNIMOD_Dicarbamidomethyl, "spec_5_site", "N-term"}, {UNIMOD_Dimethyl_2H_6_, "approved", "0"}, {UNIMOD_Dimethyl_2H_6_, "delta_composition", "H(-2) 2H(6) C(2)"}, {UNIMOD_Dimethyl_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_6_, "spec_1_site", "K"}, {UNIMOD_Dimethyl_2H_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_, "spec_2_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_, "spec_2_position", "Any N-term"}, {UNIMOD_Dimethyl_2H_6_, "spec_2_site", "N-term"}, {UNIMOD_Dimethyl_2H_6_, "spec_3_classification", "Isotopic label"}, {UNIMOD_Dimethyl_2H_6_, "spec_3_hidden", "1"}, {UNIMOD_Dimethyl_2H_6_, "spec_3_position", "Anywhere"}, {UNIMOD_Dimethyl_2H_6_, "spec_3_site", "R"}, {UNIMOD_GGQ, "approved", "0"}, {UNIMOD_GGQ, "delta_composition", "H(14) C(9) N(4) O(4)"}, {UNIMOD_GGQ, "spec_1_classification", "Other"}, {UNIMOD_GGQ, "spec_1_hidden", "1"}, {UNIMOD_GGQ, "spec_1_position", "Anywhere"}, {UNIMOD_GGQ, "spec_1_site", "K"}, {UNIMOD_QTGG, "approved", "0"}, {UNIMOD_QTGG, "delta_composition", "H(21) C(13) N(5) O(6)"}, {UNIMOD_QTGG, "spec_1_classification", "Other"}, {UNIMOD_QTGG, "spec_1_hidden", "1"}, {UNIMOD_QTGG, "spec_1_position", "Anywhere"}, {UNIMOD_QTGG, "spec_1_site", "K"}, {UNIMOD_Label_13C_3_, "approved", "0"}, {UNIMOD_Label_13C_3_, "delta_composition", "C(-3) 13C(3)"}, {UNIMOD_Label_13C_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_3_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_3_, "spec_1_site", "A"}, {UNIMOD_Label_13C_3_15N_1_, "approved", "0"}, {UNIMOD_Label_13C_3_15N_1_, "delta_composition", "C(-3) 13C(3) N(-1) 15N"}, {UNIMOD_Label_13C_3_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_3_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_3_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_3_15N_1_, "spec_1_site", "A"}, {UNIMOD_Label_13C_3_15N_1_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Label_13C_3_15N_1_, "spec_2_hidden", "1"}, {UNIMOD_Label_13C_3_15N_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Label_13C_3_15N_1_, "spec_2_site", "S"}, {UNIMOD_Label_13C_4_15N_1_, "approved", "0"}, {UNIMOD_Label_13C_4_15N_1_, "delta_composition", "C(-4) 13C(4) N(-1) 15N"}, {UNIMOD_Label_13C_4_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_4_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_4_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_4_15N_1_, "spec_1_site", "D"}, {UNIMOD_Label_2H_10_, "approved", "0"}, {UNIMOD_Label_2H_10_, "delta_composition", "H(-10) 2H(10)"}, {UNIMOD_Label_2H_10_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_10_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_10_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_10_, "spec_1_site", "L"}, {UNIMOD_Label_2H_4_13C_1_, "approved", "0"}, {UNIMOD_Label_2H_4_13C_1_, "delta_composition", "H(-4) 2H(4) C(-1) 13C"}, {UNIMOD_Label_2H_4_13C_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_4_13C_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_4_13C_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_4_13C_1_, "spec_1_site", "R"}, {UNIMOD_Lys, "approved", "0"}, {UNIMOD_Lys, "delta_composition", "H(12) C(6) N(2) O"}, {UNIMOD_Lys, "spec_1_classification", "Other"}, {UNIMOD_Lys, "spec_1_hidden", "1"}, {UNIMOD_Lys, "spec_1_position", "Any N-term"}, {UNIMOD_Lys, "spec_1_site", "N-term"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "approved", "0"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "delta_composition", "H(12) C 13C(6) 15N(2) O"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_1_hidden", "0"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_1_site", "K"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_2_hidden", "0"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_2_position", "Any N-term"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_2_site", "N-term"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_3_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_3_hidden", "0"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_3_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_3_site", "Y"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_4_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_4_hidden", "1"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_4_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_4_site", "H"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_5_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_5_hidden", "1"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_5_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_5_site", "S"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_6_classification", "Isotopic label"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_6_hidden", "1"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_6_position", "Anywhere"}, {UNIMOD_mTRAQ_13C_6_15N_2_, "spec_6_site", "T"}, {UNIMOD_NeuAc, "approved", "0"}, {UNIMOD_NeuAc, "delta_composition", "NeuAc"}, {UNIMOD_NeuAc, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_NeuAc, "spec_1_hidden", "1"}, {UNIMOD_NeuAc, "spec_1_position", "Anywhere"}, {UNIMOD_NeuAc, "spec_1_site", "N"}, {UNIMOD_NeuAc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_NeuAc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_NeuAc, "spec_2_hidden", "1"}, {UNIMOD_NeuAc, "spec_2_hidden", "1"}, {UNIMOD_NeuAc, "spec_2_position", "Anywhere"}, {UNIMOD_NeuAc, "spec_2_position", "Anywhere"}, {UNIMOD_NeuAc, "spec_2_site", "T"}, {UNIMOD_NeuAc, "spec_2_site", "S"}, {UNIMOD_NeuGc, "approved", "0"}, {UNIMOD_NeuGc, "delta_composition", "NeuGc"}, {UNIMOD_NeuGc, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_NeuGc, "spec_1_hidden", "1"}, {UNIMOD_NeuGc, "spec_1_position", "Anywhere"}, {UNIMOD_NeuGc, "spec_1_site", "N"}, {UNIMOD_NeuGc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_NeuGc, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_NeuGc, "spec_2_hidden", "1"}, {UNIMOD_NeuGc, "spec_2_hidden", "1"}, {UNIMOD_NeuGc, "spec_2_position", "Anywhere"}, {UNIMOD_NeuGc, "spec_2_position", "Anywhere"}, {UNIMOD_NeuGc, "spec_2_site", "T"}, {UNIMOD_NeuGc, "spec_2_site", "S"}, {UNIMOD_Propyl, "approved", "0"}, {UNIMOD_Propyl, "delta_composition", "H(6) C(3)"}, {UNIMOD_Propyl, "spec_1_classification", "Isotopic label"}, {UNIMOD_Propyl, "spec_1_hidden", "1"}, {UNIMOD_Propyl, "spec_1_position", "Any N-term"}, {UNIMOD_Propyl, "spec_1_site", "N-term"}, {UNIMOD_Propyl, "spec_2_classification", "Isotopic label"}, {UNIMOD_Propyl, "spec_2_hidden", "1"}, {UNIMOD_Propyl, "spec_2_position", "Anywhere"}, {UNIMOD_Propyl, "spec_2_site", "K"}, {UNIMOD_Propyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Propyl, "spec_3_hidden", "1"}, {UNIMOD_Propyl, "spec_3_position", "Anywhere"}, {UNIMOD_Propyl, "spec_3_site", "D"}, {UNIMOD_Propyl, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Propyl, "spec_4_hidden", "1"}, {UNIMOD_Propyl, "spec_4_position", "Anywhere"}, {UNIMOD_Propyl, "spec_4_site", "E"}, {UNIMOD_Propyl, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Propyl, "spec_5_hidden", "1"}, {UNIMOD_Propyl, "spec_5_position", "Any C-term"}, {UNIMOD_Propyl, "spec_5_site", "C-term"}, {UNIMOD_Propyl, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Propyl, "spec_6_hidden", "1"}, {UNIMOD_Propyl, "spec_6_position", "Protein C-term"}, {UNIMOD_Propyl, "spec_6_site", "C-term"}, {UNIMOD_Propyl_2H_6_, "approved", "0"}, {UNIMOD_Propyl_2H_6_, "delta_composition", "2H(6) C(3)"}, {UNIMOD_Propyl_2H_6_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Propyl_2H_6_, "spec_1_hidden", "1"}, {UNIMOD_Propyl_2H_6_, "spec_1_position", "Any N-term"}, {UNIMOD_Propyl_2H_6_, "spec_1_site", "N-term"}, {UNIMOD_Propyl_2H_6_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Propyl_2H_6_, "spec_2_hidden", "1"}, {UNIMOD_Propyl_2H_6_, "spec_2_position", "Anywhere"}, {UNIMOD_Propyl_2H_6_, "spec_2_site", "K"}, {UNIMOD_Propiophenone, "approved", "0"}, {UNIMOD_Propiophenone, "delta_composition", "H(8) C(9) O"}, {UNIMOD_Propiophenone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_1_hidden", "1"}, {UNIMOD_Propiophenone, "spec_1_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_1_site", "H"}, {UNIMOD_Propiophenone, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_2_hidden", "1"}, {UNIMOD_Propiophenone, "spec_2_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_2_site", "K"}, {UNIMOD_Propiophenone, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_3_hidden", "1"}, {UNIMOD_Propiophenone, "spec_3_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_3_site", "R"}, {UNIMOD_Propiophenone, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_4_hidden", "1"}, {UNIMOD_Propiophenone, "spec_4_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_4_site", "S"}, {UNIMOD_Propiophenone, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_5_hidden", "1"}, {UNIMOD_Propiophenone, "spec_5_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_5_site", "T"}, {UNIMOD_Propiophenone, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_6_hidden", "1"}, {UNIMOD_Propiophenone, "spec_6_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_6_site", "W"}, {UNIMOD_Propiophenone, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Propiophenone, "spec_7_hidden", "1"}, {UNIMOD_Propiophenone, "spec_7_position", "Anywhere"}, {UNIMOD_Propiophenone, "spec_7_site", "C"}, {UNIMOD_Delta_H_6_C_3_O_1_, "approved", "0"}, {UNIMOD_Delta_H_6_C_3_O_1_, "delta_composition", "H(6) C(3) O"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_1_site", "C"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_2_site", "H"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_3_hidden", "1"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_3_position", "Anywhere"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_3_site", "K"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_4_hidden", "1"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_4_position", "Protein N-term"}, {UNIMOD_Delta_H_6_C_3_O_1_, "spec_4_site", "N-term"}, {UNIMOD_Delta_H_8_C_6_O_1_, "approved", "0"}, {UNIMOD_Delta_H_8_C_6_O_1_, "delta_composition", "H(8) C(6) O"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_1_site", "K"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_2_hidden", "1"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_2_position", "Protein N-term"}, {UNIMOD_Delta_H_8_C_6_O_1_, "spec_2_site", "N-term"}, {UNIMOD_biotinAcrolein298, "approved", "0"}, {UNIMOD_biotinAcrolein298, "delta_composition", "H(22) C(13) N(4) O(2) S"}, {UNIMOD_biotinAcrolein298, "spec_1_classification", "Chemical derivative"}, {UNIMOD_biotinAcrolein298, "spec_1_hidden", "1"}, {UNIMOD_biotinAcrolein298, "spec_1_position", "Anywhere"}, {UNIMOD_biotinAcrolein298, "spec_1_site", "C"}, {UNIMOD_biotinAcrolein298, "spec_2_classification", "Chemical derivative"}, {UNIMOD_biotinAcrolein298, "spec_2_hidden", "1"}, {UNIMOD_biotinAcrolein298, "spec_2_position", "Anywhere"}, {UNIMOD_biotinAcrolein298, "spec_2_site", "H"}, {UNIMOD_biotinAcrolein298, "spec_3_classification", "Chemical derivative"}, {UNIMOD_biotinAcrolein298, "spec_3_hidden", "1"}, {UNIMOD_biotinAcrolein298, "spec_3_position", "Anywhere"}, {UNIMOD_biotinAcrolein298, "spec_3_site", "K"}, {UNIMOD_biotinAcrolein298, "spec_4_classification", "Chemical derivative"}, {UNIMOD_biotinAcrolein298, "spec_4_hidden", "1"}, {UNIMOD_biotinAcrolein298, "spec_4_position", "Protein N-term"}, {UNIMOD_biotinAcrolein298, "spec_4_site", "N-term"}, {UNIMOD_MM_diphenylpentanone, "approved", "0"}, {UNIMOD_MM_diphenylpentanone, "delta_composition", "H(19) C(18) N O"}, {UNIMOD_MM_diphenylpentanone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MM_diphenylpentanone, "spec_1_hidden", "1"}, {UNIMOD_MM_diphenylpentanone, "spec_1_position", "Anywhere"}, {UNIMOD_MM_diphenylpentanone, "spec_1_site", "C"}, {UNIMOD_EHD_diphenylpentanone, "approved", "0"}, {UNIMOD_EHD_diphenylpentanone, "delta_composition", "H(18) C(18) O(2)"}, {UNIMOD_EHD_diphenylpentanone, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EHD_diphenylpentanone, "spec_1_hidden", "1"}, {UNIMOD_EHD_diphenylpentanone, "spec_1_position", "Anywhere"}, {UNIMOD_EHD_diphenylpentanone, "spec_1_site", "C"}, {UNIMOD_EHD_diphenylpentanone, "spec_2_classification", "Chemical derivative"}, {UNIMOD_EHD_diphenylpentanone, "spec_2_hidden", "1"}, {UNIMOD_EHD_diphenylpentanone, "spec_2_position", "Anywhere"}, {UNIMOD_EHD_diphenylpentanone, "spec_2_site", "M"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "approved", "0"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "delta_composition", "H(39) C(23) N(5) O(9) S"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21901_2H2O, "spec_1_site", "C"}, {UNIMOD_DiLeu4plex115, "approved", "0"}, {UNIMOD_DiLeu4plex115, "delta_composition", "H(15) C(7) 13C 15N 18O"}, {UNIMOD_DiLeu4plex115, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex115, "spec_1_hidden", "1"}, {UNIMOD_DiLeu4plex115, "spec_1_position", "Anywhere"}, {UNIMOD_DiLeu4plex115, "spec_1_site", "K"}, {UNIMOD_DiLeu4plex115, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex115, "spec_2_hidden", "1"}, {UNIMOD_DiLeu4plex115, "spec_2_position", "Any N-term"}, {UNIMOD_DiLeu4plex115, "spec_2_site", "N-term"}, {UNIMOD_DiLeu4plex115, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex115, "spec_3_hidden", "1"}, {UNIMOD_DiLeu4plex115, "spec_3_position", "Anywhere"}, {UNIMOD_DiLeu4plex115, "spec_3_site", "Y"}, {UNIMOD_DiLeu4plex, "approved", "0"}, {UNIMOD_DiLeu4plex, "delta_composition", "H(13) 2H(2) C(8) N 18O"}, {UNIMOD_DiLeu4plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex, "spec_1_hidden", "1"}, {UNIMOD_DiLeu4plex, "spec_1_position", "Anywhere"}, {UNIMOD_DiLeu4plex, "spec_1_site", "K"}, {UNIMOD_DiLeu4plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex, "spec_2_hidden", "1"}, {UNIMOD_DiLeu4plex, "spec_2_position", "Any N-term"}, {UNIMOD_DiLeu4plex, "spec_2_site", "N-term"}, {UNIMOD_DiLeu4plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex, "spec_3_hidden", "1"}, {UNIMOD_DiLeu4plex, "spec_3_position", "Anywhere"}, {UNIMOD_DiLeu4plex, "spec_3_site", "Y"}, {UNIMOD_DiLeu4plex117, "approved", "0"}, {UNIMOD_DiLeu4plex117, "delta_composition", "H(13) 2H(2) C(7) 13C 15N O"}, {UNIMOD_DiLeu4plex117, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex117, "spec_1_hidden", "1"}, {UNIMOD_DiLeu4plex117, "spec_1_position", "Anywhere"}, {UNIMOD_DiLeu4plex117, "spec_1_site", "K"}, {UNIMOD_DiLeu4plex117, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex117, "spec_2_hidden", "1"}, {UNIMOD_DiLeu4plex117, "spec_2_position", "Any N-term"}, {UNIMOD_DiLeu4plex117, "spec_2_site", "N-term"}, {UNIMOD_DiLeu4plex117, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex117, "spec_3_hidden", "1"}, {UNIMOD_DiLeu4plex117, "spec_3_position", "Anywhere"}, {UNIMOD_DiLeu4plex117, "spec_3_site", "Y"}, {UNIMOD_DiLeu4plex118, "approved", "0"}, {UNIMOD_DiLeu4plex118, "delta_composition", "H(11) 2H(4) C(8) N O"}, {UNIMOD_DiLeu4plex118, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex118, "spec_1_hidden", "1"}, {UNIMOD_DiLeu4plex118, "spec_1_position", "Anywhere"}, {UNIMOD_DiLeu4plex118, "spec_1_site", "K"}, {UNIMOD_DiLeu4plex118, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex118, "spec_2_hidden", "1"}, {UNIMOD_DiLeu4plex118, "spec_2_position", "Any N-term"}, {UNIMOD_DiLeu4plex118, "spec_2_site", "N-term"}, {UNIMOD_DiLeu4plex118, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiLeu4plex118, "spec_3_hidden", "1"}, {UNIMOD_DiLeu4plex118, "spec_3_position", "Anywhere"}, {UNIMOD_DiLeu4plex118, "spec_3_site", "Y"}, {UNIMOD_NEMsulfur, "approved", "0"}, {UNIMOD_NEMsulfur, "delta_composition", "H(7) C(6) N O(2) S"}, {UNIMOD_NEMsulfur, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NEMsulfur, "spec_1_hidden", "1"}, {UNIMOD_NEMsulfur, "spec_1_position", "Anywhere"}, {UNIMOD_NEMsulfur, "spec_1_site", "C"}, {UNIMOD_SulfurDioxide, "approved", "0"}, {UNIMOD_SulfurDioxide, "delta_composition", "O(2) S"}, {UNIMOD_SulfurDioxide, "spec_1_classification", "Post-translational"}, {UNIMOD_SulfurDioxide, "spec_1_hidden", "1"}, {UNIMOD_SulfurDioxide, "spec_1_position", "Anywhere"}, {UNIMOD_SulfurDioxide, "spec_1_site", "C"}, {UNIMOD_NEMsulfurWater, "approved", "0"}, {UNIMOD_NEMsulfurWater, "delta_composition", "H(9) C(6) N O(3) S"}, {UNIMOD_NEMsulfurWater, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NEMsulfurWater, "spec_1_hidden", "1"}, {UNIMOD_NEMsulfurWater, "spec_1_position", "Anywhere"}, {UNIMOD_NEMsulfurWater, "spec_1_site", "C"}, {UNIMOD_bisANS_sulfonates, "approved", "0"}, {UNIMOD_bisANS_sulfonates, "delta_composition", "H(25) C(32) N(2)"}, {UNIMOD_bisANS_sulfonates, "spec_1_classification", "Chemical derivative"}, {UNIMOD_bisANS_sulfonates, "spec_1_hidden", "1"}, {UNIMOD_bisANS_sulfonates, "spec_1_position", "Anywhere"}, {UNIMOD_bisANS_sulfonates, "spec_1_site", "K"}, {UNIMOD_bisANS_sulfonates, "spec_2_classification", "Chemical derivative"}, {UNIMOD_bisANS_sulfonates, "spec_2_hidden", "1"}, {UNIMOD_bisANS_sulfonates, "spec_2_position", "Anywhere"}, {UNIMOD_bisANS_sulfonates, "spec_2_site", "S"}, {UNIMOD_bisANS_sulfonates, "spec_3_classification", "Chemical derivative"}, {UNIMOD_bisANS_sulfonates, "spec_3_hidden", "1"}, {UNIMOD_bisANS_sulfonates, "spec_3_position", "Anywhere"}, {UNIMOD_bisANS_sulfonates, "spec_3_site", "T"}, {UNIMOD_DNCB_hapten, "approved", "0"}, {UNIMOD_DNCB_hapten, "delta_composition", "H(2) C(6) N(2) O(4)"}, {UNIMOD_DNCB_hapten, "spec_1_classification", "Chemical derivative"}, {UNIMOD_DNCB_hapten, "spec_1_hidden", "1"}, {UNIMOD_DNCB_hapten, "spec_1_position", "Anywhere"}, {UNIMOD_DNCB_hapten, "spec_1_site", "C"}, {UNIMOD_DNCB_hapten, "spec_2_classification", "Chemical derivative"}, {UNIMOD_DNCB_hapten, "spec_2_hidden", "1"}, {UNIMOD_DNCB_hapten, "spec_2_position", "Anywhere"}, {UNIMOD_DNCB_hapten, "spec_2_site", "H"}, {UNIMOD_DNCB_hapten, "spec_3_classification", "Chemical derivative"}, {UNIMOD_DNCB_hapten, "spec_3_hidden", "1"}, {UNIMOD_DNCB_hapten, "spec_3_position", "Anywhere"}, {UNIMOD_DNCB_hapten, "spec_3_site", "K"}, {UNIMOD_DNCB_hapten, "spec_4_classification", "Chemical derivative"}, {UNIMOD_DNCB_hapten, "spec_4_hidden", "1"}, {UNIMOD_DNCB_hapten, "spec_4_position", "Anywhere"}, {UNIMOD_DNCB_hapten, "spec_4_site", "Y"}, {UNIMOD_Biotin_Thermo_21911, "approved", "0"}, {UNIMOD_Biotin_Thermo_21911, "delta_composition", "H(71) C(41) N(5) O(16) S"}, {UNIMOD_Biotin_Thermo_21911, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21911, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21911, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21911, "spec_1_site", "C"}, {UNIMOD_iodoTMT, "approved", "0"}, {UNIMOD_iodoTMT, "delta_composition", "H(28) C(16) N(4) O(3)"}, {UNIMOD_iodoTMT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_iodoTMT, "spec_1_hidden", "1"}, {UNIMOD_iodoTMT, "spec_1_position", "Anywhere"}, {UNIMOD_iodoTMT, "spec_1_site", "C"}, {UNIMOD_iodoTMT, "spec_2_classification", "Chemical derivative"}, {UNIMOD_iodoTMT, "spec_2_hidden", "1"}, {UNIMOD_iodoTMT, "spec_2_position", "Anywhere"}, {UNIMOD_iodoTMT, "spec_2_site", "D"}, {UNIMOD_iodoTMT, "spec_3_classification", "Chemical derivative"}, {UNIMOD_iodoTMT, "spec_3_hidden", "1"}, {UNIMOD_iodoTMT, "spec_3_position", "Anywhere"}, {UNIMOD_iodoTMT, "spec_3_site", "E"}, {UNIMOD_iodoTMT, "spec_4_classification", "Chemical derivative"}, {UNIMOD_iodoTMT, "spec_4_hidden", "1"}, {UNIMOD_iodoTMT, "spec_4_position", "Anywhere"}, {UNIMOD_iodoTMT, "spec_4_site", "H"}, {UNIMOD_iodoTMT, "spec_5_classification", "Chemical derivative"}, {UNIMOD_iodoTMT, "spec_5_hidden", "1"}, {UNIMOD_iodoTMT, "spec_5_position", "Anywhere"}, {UNIMOD_iodoTMT, "spec_5_site", "K"}, {UNIMOD_iodoTMT6plex, "approved", "0"}, {UNIMOD_iodoTMT6plex, "delta_composition", "H(28) C(12) 13C(4) N(3) 15N O(3)"}, {UNIMOD_iodoTMT6plex, "spec_1_classification", "Chemical derivative"}, {UNIMOD_iodoTMT6plex, "spec_1_hidden", "1"}, {UNIMOD_iodoTMT6plex, "spec_1_position", "Anywhere"}, {UNIMOD_iodoTMT6plex, "spec_1_site", "C"}, {UNIMOD_iodoTMT6plex, "spec_2_classification", "Chemical derivative"}, {UNIMOD_iodoTMT6plex, "spec_2_hidden", "1"}, {UNIMOD_iodoTMT6plex, "spec_2_position", "Anywhere"}, {UNIMOD_iodoTMT6plex, "spec_2_site", "D"}, {UNIMOD_iodoTMT6plex, "spec_3_classification", "Chemical derivative"}, {UNIMOD_iodoTMT6plex, "spec_3_hidden", "1"}, {UNIMOD_iodoTMT6plex, "spec_3_position", "Anywhere"}, {UNIMOD_iodoTMT6plex, "spec_3_site", "E"}, {UNIMOD_iodoTMT6plex, "spec_4_classification", "Chemical derivative"}, {UNIMOD_iodoTMT6plex, "spec_4_hidden", "1"}, {UNIMOD_iodoTMT6plex, "spec_4_position", "Anywhere"}, {UNIMOD_iodoTMT6plex, "spec_4_site", "H"}, {UNIMOD_iodoTMT6plex, "spec_5_classification", "Chemical derivative"}, {UNIMOD_iodoTMT6plex, "spec_5_hidden", "1"}, {UNIMOD_iodoTMT6plex, "spec_5_position", "Anywhere"}, {UNIMOD_iodoTMT6plex, "spec_5_site", "K"}, {UNIMOD_Phosphogluconoylation, "approved", "0"}, {UNIMOD_Phosphogluconoylation, "delta_composition", "H(11) C(6) O(9) P"}, {UNIMOD_Phosphogluconoylation, "spec_1_classification", "Post-translational"}, {UNIMOD_Phosphogluconoylation, "spec_1_hidden", "1"}, {UNIMOD_Phosphogluconoylation, "spec_1_position", "Anywhere"}, {UNIMOD_Phosphogluconoylation, "spec_1_site", "K"}, {UNIMOD_Phosphogluconoylation, "spec_2_classification", "Post-translational"}, {UNIMOD_Phosphogluconoylation, "spec_2_hidden", "1"}, {UNIMOD_Phosphogluconoylation, "spec_2_position", "Any N-term"}, {UNIMOD_Phosphogluconoylation, "spec_2_site", "N-term"}, {UNIMOD_PS_Hapten, "approved", "0"}, {UNIMOD_PS_Hapten, "delta_composition", "H(4) C(7) O(2)"}, {UNIMOD_PS_Hapten, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PS_Hapten, "spec_1_hidden", "1"}, {UNIMOD_PS_Hapten, "spec_1_position", "Anywhere"}, {UNIMOD_PS_Hapten, "spec_1_site", "C"}, {UNIMOD_PS_Hapten, "spec_2_classification", "Chemical derivative"}, {UNIMOD_PS_Hapten, "spec_2_hidden", "1"}, {UNIMOD_PS_Hapten, "spec_2_position", "Anywhere"}, {UNIMOD_PS_Hapten, "spec_2_site", "H"}, {UNIMOD_PS_Hapten, "spec_3_classification", "Chemical derivative"}, {UNIMOD_PS_Hapten, "spec_3_hidden", "1"}, {UNIMOD_PS_Hapten, "spec_3_position", "Anywhere"}, {UNIMOD_PS_Hapten, "spec_3_site", "K"}, {UNIMOD_Cy3_maleimide, "approved", "0"}, {UNIMOD_Cy3_maleimide, "delta_composition", "H(45) C(37) N(4) O(9) S(2)"}, {UNIMOD_Cy3_maleimide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Cy3_maleimide, "spec_1_hidden", "1"}, {UNIMOD_Cy3_maleimide, "spec_1_position", "Anywhere"}, {UNIMOD_Cy3_maleimide, "spec_1_site", "C"}, {UNIMOD_benzylguanidine, "approved", "0"}, {UNIMOD_benzylguanidine, "delta_composition", "H(8) C(8) N(2)"}, {UNIMOD_benzylguanidine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_benzylguanidine, "spec_1_hidden", "1"}, {UNIMOD_benzylguanidine, "spec_1_position", "Anywhere"}, {UNIMOD_benzylguanidine, "spec_1_site", "K"}, {UNIMOD_CarboxymethylDMAP, "approved", "0"}, {UNIMOD_CarboxymethylDMAP, "delta_composition", "H(10) C(9) N(2) O"}, {UNIMOD_CarboxymethylDMAP, "spec_1_classification", "Chemical derivative"}, {UNIMOD_CarboxymethylDMAP, "spec_1_hidden", "1"}, {UNIMOD_CarboxymethylDMAP, "spec_1_position", "Any N-term"}, {UNIMOD_CarboxymethylDMAP, "spec_1_site", "N-term"}, {UNIMOD_azole, "approved", "0"}, {UNIMOD_azole, "delta_composition", "H(-4) O(-1)"}, {UNIMOD_azole, "spec_1_classification", "Post-translational"}, {UNIMOD_azole, "spec_1_hidden", "1"}, {UNIMOD_azole, "spec_1_position", "Anywhere"}, {UNIMOD_azole, "spec_1_site", "S"}, {UNIMOD_azole, "spec_2_classification", "Post-translational"}, {UNIMOD_azole, "spec_2_hidden", "1"}, {UNIMOD_azole, "spec_2_position", "Anywhere"}, {UNIMOD_azole, "spec_2_site", "C"}, {UNIMOD_phosphoRibosyl, "approved", "0"}, {UNIMOD_phosphoRibosyl, "delta_composition", "H(9) C(5) O(7) P"}, {UNIMOD_phosphoRibosyl, "spec_1_classification", "Post-translational"}, {UNIMOD_phosphoRibosyl, "spec_1_hidden", "1"}, {UNIMOD_phosphoRibosyl, "spec_1_position", "Anywhere"}, {UNIMOD_phosphoRibosyl, "spec_1_site", "D"}, {UNIMOD_phosphoRibosyl, "spec_2_classification", "Post-translational"}, {UNIMOD_phosphoRibosyl, "spec_2_hidden", "1"}, {UNIMOD_phosphoRibosyl, "spec_2_position", "Anywhere"}, {UNIMOD_phosphoRibosyl, "spec_2_site", "E"}, {UNIMOD_phosphoRibosyl, "spec_3_classification", "Post-translational"}, {UNIMOD_phosphoRibosyl, "spec_3_hidden", "1"}, {UNIMOD_phosphoRibosyl, "spec_3_position", "Anywhere"}, {UNIMOD_phosphoRibosyl, "spec_3_site", "R"}, {UNIMOD_NEM_2H_5__H2O, "approved", "0"}, {UNIMOD_NEM_2H_5__H2O, "delta_composition", "H(4) 2H(5) C(6) N O(3)"}, {UNIMOD_NEM_2H_5__H2O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NEM_2H_5__H2O, "spec_1_hidden", "1"}, {UNIMOD_NEM_2H_5__H2O, "spec_1_position", "Anywhere"}, {UNIMOD_NEM_2H_5__H2O, "spec_1_site", "C"}, {UNIMOD_Crotonyl, "approved", "0"}, {UNIMOD_Crotonyl, "delta_composition", "H(4) C(4) O"}, {UNIMOD_Crotonyl, "spec_1_classification", "Post-translational"}, {UNIMOD_Crotonyl, "spec_1_hidden", "1"}, {UNIMOD_Crotonyl, "spec_1_position", "Anywhere"}, {UNIMOD_Crotonyl, "spec_1_site", "K"}, {UNIMOD_O_Et_N_diMePhospho, "approved", "0"}, {UNIMOD_O_Et_N_diMePhospho, "delta_composition", "H(10) C(4) N O(2) P"}, {UNIMOD_O_Et_N_diMePhospho, "spec_1_classification", "Chemical derivative"}, {UNIMOD_O_Et_N_diMePhospho, "spec_1_hidden", "1"}, {UNIMOD_O_Et_N_diMePhospho, "spec_1_position", "Anywhere"}, {UNIMOD_O_Et_N_diMePhospho, "spec_1_site", "S"}, {UNIMOD_N_dimethylphosphate, "approved", "0"}, {UNIMOD_N_dimethylphosphate, "delta_composition", "H(6) C(2) N O(2) P"}, {UNIMOD_N_dimethylphosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_N_dimethylphosphate, "spec_1_hidden", "1"}, {UNIMOD_N_dimethylphosphate, "spec_1_position", "Anywhere"}, {UNIMOD_N_dimethylphosphate, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_, "delta_composition", "dHex Hex"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_, "spec_1_site", "S"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "approved", "0"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "delta_composition", "H(-2) 2H(6) C(3) O"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "spec_1_hidden", "1"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Methyl_2H_3__Acetyl_2H_3_, "spec_1_site", "K"}, {UNIMOD_Label_2H_3__Oxidation, "approved", "0"}, {UNIMOD_Label_2H_3__Oxidation, "delta_composition", "H(-3) 2H(3) O"}, {UNIMOD_Label_2H_3__Oxidation, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_3__Oxidation, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_3__Oxidation, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_3__Oxidation, "spec_1_site", "M"}, {UNIMOD_Trimethyl_2H_9_, "approved", "0"}, {UNIMOD_Trimethyl_2H_9_, "delta_composition", "H(-3) 2H(9) C(3)"}, {UNIMOD_Trimethyl_2H_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Trimethyl_2H_9_, "spec_1_hidden", "1"}, {UNIMOD_Trimethyl_2H_9_, "spec_1_position", "Anywhere"}, {UNIMOD_Trimethyl_2H_9_, "spec_1_site", "K"}, {UNIMOD_Trimethyl_2H_9_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Trimethyl_2H_9_, "spec_2_hidden", "1"}, {UNIMOD_Trimethyl_2H_9_, "spec_2_position", "Anywhere"}, {UNIMOD_Trimethyl_2H_9_, "spec_2_site", "R"}, {UNIMOD_Acetyl_13C_2_, "approved", "0"}, {UNIMOD_Acetyl_13C_2_, "delta_composition", "H(2) 13C(2) O"}, {UNIMOD_Acetyl_13C_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Acetyl_13C_2_, "spec_1_hidden", "1"}, {UNIMOD_Acetyl_13C_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Acetyl_13C_2_, "spec_1_site", "K"}, {UNIMOD_Acetyl_13C_2_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Acetyl_13C_2_, "spec_2_hidden", "1"}, {UNIMOD_Acetyl_13C_2_, "spec_2_position", "Protein N-term"}, {UNIMOD_Acetyl_13C_2_, "spec_2_site", "N-term"}, {UNIMOD_dHex_1_Hex_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_, "delta_composition", "dHex Hex(2)"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_, "delta_composition", "dHex Hex(3)"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_, "delta_composition", "dHex Hex(4)"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_5_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_, "delta_composition", "dHex Hex(5)"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_5_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_6_, "approved", "0"}, {UNIMOD_dHex_1_Hex_6_, "delta_composition", "dHex Hex(6)"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_6_, "spec_1_site", "S"}, {UNIMOD_methylsulfonylethyl, "approved", "0"}, {UNIMOD_methylsulfonylethyl, "delta_composition", "H(6) C(3) O(2) S"}, {UNIMOD_methylsulfonylethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_methylsulfonylethyl, "spec_1_hidden", "1"}, {UNIMOD_methylsulfonylethyl, "spec_1_position", "Anywhere"}, {UNIMOD_methylsulfonylethyl, "spec_1_site", "C"}, {UNIMOD_methylsulfonylethyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_methylsulfonylethyl, "spec_2_hidden", "1"}, {UNIMOD_methylsulfonylethyl, "spec_2_position", "Anywhere"}, {UNIMOD_methylsulfonylethyl, "spec_2_site", "H"}, {UNIMOD_methylsulfonylethyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_methylsulfonylethyl, "spec_3_hidden", "1"}, {UNIMOD_methylsulfonylethyl, "spec_3_position", "Anywhere"}, {UNIMOD_methylsulfonylethyl, "spec_3_site", "K"}, {UNIMOD_ethylsulfonylethyl, "approved", "0"}, {UNIMOD_ethylsulfonylethyl, "delta_composition", "H(8) C(4) O(2) S"}, {UNIMOD_ethylsulfonylethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_ethylsulfonylethyl, "spec_1_hidden", "1"}, {UNIMOD_ethylsulfonylethyl, "spec_1_position", "Anywhere"}, {UNIMOD_ethylsulfonylethyl, "spec_1_site", "C"}, {UNIMOD_ethylsulfonylethyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_ethylsulfonylethyl, "spec_2_hidden", "1"}, {UNIMOD_ethylsulfonylethyl, "spec_2_position", "Anywhere"}, {UNIMOD_ethylsulfonylethyl, "spec_2_site", "H"}, {UNIMOD_ethylsulfonylethyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_ethylsulfonylethyl, "spec_3_hidden", "1"}, {UNIMOD_ethylsulfonylethyl, "spec_3_position", "Anywhere"}, {UNIMOD_ethylsulfonylethyl, "spec_3_site", "K"}, {UNIMOD_phenylsulfonylethyl, "approved", "0"}, {UNIMOD_phenylsulfonylethyl, "delta_composition", "H(8) C(8) O(2) S"}, {UNIMOD_phenylsulfonylethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_phenylsulfonylethyl, "spec_1_hidden", "1"}, {UNIMOD_phenylsulfonylethyl, "spec_1_position", "Anywhere"}, {UNIMOD_phenylsulfonylethyl, "spec_1_site", "C"}, {UNIMOD_PyridoxalPhosphateH2, "approved", "0"}, {UNIMOD_PyridoxalPhosphateH2, "delta_composition", "H(10) C(8) N O(5) P"}, {UNIMOD_PyridoxalPhosphateH2, "spec_1_classification", "Chemical derivative"}, {UNIMOD_PyridoxalPhosphateH2, "spec_1_hidden", "1"}, {UNIMOD_PyridoxalPhosphateH2, "spec_1_position", "Anywhere"}, {UNIMOD_PyridoxalPhosphateH2, "spec_1_site", "K"}, {UNIMOD_Homocysteic_acid, "approved", "0"}, {UNIMOD_Homocysteic_acid, "delta_composition", "H(-2) C(-1) O(3)"}, {UNIMOD_Homocysteic_acid, "spec_1_classification", "Artefact"}, {UNIMOD_Homocysteic_acid, "spec_1_hidden", "1"}, {UNIMOD_Homocysteic_acid, "spec_1_position", "Anywhere"}, {UNIMOD_Homocysteic_acid, "spec_1_site", "M"}, {UNIMOD_Hydroxamic_acid, "approved", "0"}, {UNIMOD_Hydroxamic_acid, "delta_composition", "H N"}, {UNIMOD_Hydroxamic_acid, "spec_1_classification", "Artefact"}, {UNIMOD_Hydroxamic_acid, "spec_1_classification", "Artefact"}, {UNIMOD_Hydroxamic_acid, "spec_1_hidden", "1"}, {UNIMOD_Hydroxamic_acid, "spec_1_hidden", "1"}, {UNIMOD_Hydroxamic_acid, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxamic_acid, "spec_1_position", "Anywhere"}, {UNIMOD_Hydroxamic_acid, "spec_1_site", "E"}, {UNIMOD_Hydroxamic_acid, "spec_1_site", "D"}, {UNIMOD_3_phosphoglyceryl, "approved", "0"}, {UNIMOD_3_phosphoglyceryl, "delta_composition", "H(5) C(3) O(6) P"}, {UNIMOD_3_phosphoglyceryl, "spec_1_classification", "Post-translational"}, {UNIMOD_3_phosphoglyceryl, "spec_1_hidden", "1"}, {UNIMOD_3_phosphoglyceryl, "spec_1_position", "Anywhere"}, {UNIMOD_3_phosphoglyceryl, "spec_1_site", "K"}, {UNIMOD_HN2_mustard, "approved", "0"}, {UNIMOD_HN2_mustard, "delta_composition", "H(11) C(5) N O"}, {UNIMOD_HN2_mustard, "spec_1_classification", "Post-translational"}, {UNIMOD_HN2_mustard, "spec_1_hidden", "1"}, {UNIMOD_HN2_mustard, "spec_1_position", "Anywhere"}, {UNIMOD_HN2_mustard, "spec_1_site", "C"}, {UNIMOD_HN2_mustard, "spec_2_classification", "Post-translational"}, {UNIMOD_HN2_mustard, "spec_2_hidden", "1"}, {UNIMOD_HN2_mustard, "spec_2_position", "Anywhere"}, {UNIMOD_HN2_mustard, "spec_2_site", "H"}, {UNIMOD_HN2_mustard, "spec_3_classification", "Post-translational"}, {UNIMOD_HN2_mustard, "spec_3_hidden", "1"}, {UNIMOD_HN2_mustard, "spec_3_position", "Anywhere"}, {UNIMOD_HN2_mustard, "spec_3_site", "K"}, {UNIMOD_HN3_mustard, "approved", "0"}, {UNIMOD_HN3_mustard, "delta_composition", "H(13) C(6) N O(2)"}, {UNIMOD_HN3_mustard, "spec_1_classification", "Post-translational"}, {UNIMOD_HN3_mustard, "spec_1_hidden", "1"}, {UNIMOD_HN3_mustard, "spec_1_position", "Anywhere"}, {UNIMOD_HN3_mustard, "spec_1_site", "C"}, {UNIMOD_HN3_mustard, "spec_2_classification", "Post-translational"}, {UNIMOD_HN3_mustard, "spec_2_hidden", "1"}, {UNIMOD_HN3_mustard, "spec_2_position", "Anywhere"}, {UNIMOD_HN3_mustard, "spec_2_site", "H"}, {UNIMOD_HN3_mustard, "spec_3_classification", "Post-translational"}, {UNIMOD_HN3_mustard, "spec_3_hidden", "1"}, {UNIMOD_HN3_mustard, "spec_3_position", "Anywhere"}, {UNIMOD_HN3_mustard, "spec_3_site", "K"}, {UNIMOD_Oxidation_NEM, "approved", "0"}, {UNIMOD_Oxidation_NEM, "delta_composition", "H(7) C(6) N O(3)"}, {UNIMOD_Oxidation_NEM, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Oxidation_NEM, "spec_1_hidden", "1"}, {UNIMOD_Oxidation_NEM, "spec_1_position", "Anywhere"}, {UNIMOD_Oxidation_NEM, "spec_1_site", "C"}, {UNIMOD_NHS_fluorescein, "approved", "0"}, {UNIMOD_NHS_fluorescein, "delta_composition", "H(21) C(27) N O(7)"}, {UNIMOD_NHS_fluorescein, "spec_1_classification", "Chemical derivative"}, {UNIMOD_NHS_fluorescein, "spec_1_hidden", "1"}, {UNIMOD_NHS_fluorescein, "spec_1_position", "Anywhere"}, {UNIMOD_NHS_fluorescein, "spec_1_site", "K"}, {UNIMOD_DiART6plex, "approved", "0"}, {UNIMOD_DiART6plex, "delta_composition", "H(20) C(7) 13C(4) N 15N O(2)"}, {UNIMOD_DiART6plex, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiART6plex, "spec_1_hidden", "1"}, {UNIMOD_DiART6plex, "spec_1_position", "Anywhere"}, {UNIMOD_DiART6plex, "spec_1_site", "K"}, {UNIMOD_DiART6plex, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiART6plex, "spec_2_hidden", "1"}, {UNIMOD_DiART6plex, "spec_2_position", "Any N-term"}, {UNIMOD_DiART6plex, "spec_2_site", "N-term"}, {UNIMOD_DiART6plex, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiART6plex, "spec_3_hidden", "1"}, {UNIMOD_DiART6plex, "spec_3_position", "Protein N-term"}, {UNIMOD_DiART6plex, "spec_3_site", "N-term"}, {UNIMOD_DiART6plex, "spec_4_classification", "Isotopic label"}, {UNIMOD_DiART6plex, "spec_4_hidden", "1"}, {UNIMOD_DiART6plex, "spec_4_position", "Anywhere"}, {UNIMOD_DiART6plex, "spec_4_site", "Y"}, {UNIMOD_DiART6plex115, "approved", "0"}, {UNIMOD_DiART6plex115, "delta_composition", "H(20) C(8) 13C(3) 15N(2) O(2)"}, {UNIMOD_DiART6plex115, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiART6plex115, "spec_1_hidden", "1"}, {UNIMOD_DiART6plex115, "spec_1_position", "Anywhere"}, {UNIMOD_DiART6plex115, "spec_1_site", "K"}, {UNIMOD_DiART6plex115, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiART6plex115, "spec_2_hidden", "1"}, {UNIMOD_DiART6plex115, "spec_2_position", "Any N-term"}, {UNIMOD_DiART6plex115, "spec_2_site", "N-term"}, {UNIMOD_DiART6plex115, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiART6plex115, "spec_3_hidden", "1"}, {UNIMOD_DiART6plex115, "spec_3_position", "Protein N-term"}, {UNIMOD_DiART6plex115, "spec_3_site", "N-term"}, {UNIMOD_DiART6plex115, "spec_4_classification", "Isotopic label"}, {UNIMOD_DiART6plex115, "spec_4_hidden", "1"}, {UNIMOD_DiART6plex115, "spec_4_position", "Anywhere"}, {UNIMOD_DiART6plex115, "spec_4_site", "Y"}, {UNIMOD_DiART6plex116_119, "approved", "0"}, {UNIMOD_DiART6plex116_119, "delta_composition", "H(18) 2H(2) C(9) 13C(2) N 15N O(2)"}, {UNIMOD_DiART6plex116_119, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiART6plex116_119, "spec_1_hidden", "1"}, {UNIMOD_DiART6plex116_119, "spec_1_position", "Anywhere"}, {UNIMOD_DiART6plex116_119, "spec_1_site", "K"}, {UNIMOD_DiART6plex116_119, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiART6plex116_119, "spec_2_hidden", "1"}, {UNIMOD_DiART6plex116_119, "spec_2_position", "Any N-term"}, {UNIMOD_DiART6plex116_119, "spec_2_site", "N-term"}, {UNIMOD_DiART6plex116_119, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiART6plex116_119, "spec_3_hidden", "1"}, {UNIMOD_DiART6plex116_119, "spec_3_position", "Protein N-term"}, {UNIMOD_DiART6plex116_119, "spec_3_site", "N-term"}, {UNIMOD_DiART6plex116_119, "spec_4_classification", "Isotopic label"}, {UNIMOD_DiART6plex116_119, "spec_4_hidden", "1"}, {UNIMOD_DiART6plex116_119, "spec_4_position", "Anywhere"}, {UNIMOD_DiART6plex116_119, "spec_4_site", "Y"}, {UNIMOD_DiART6plex117, "approved", "0"}, {UNIMOD_DiART6plex117, "delta_composition", "H(18) 2H(2) C(10) 13C 15N(2) O(2)"}, {UNIMOD_DiART6plex117, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiART6plex117, "spec_1_hidden", "1"}, {UNIMOD_DiART6plex117, "spec_1_position", "Anywhere"}, {UNIMOD_DiART6plex117, "spec_1_site", "K"}, {UNIMOD_DiART6plex117, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiART6plex117, "spec_2_hidden", "1"}, {UNIMOD_DiART6plex117, "spec_2_position", "Any N-term"}, {UNIMOD_DiART6plex117, "spec_2_site", "N-term"}, {UNIMOD_DiART6plex117, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiART6plex117, "spec_3_hidden", "1"}, {UNIMOD_DiART6plex117, "spec_3_position", "Protein N-term"}, {UNIMOD_DiART6plex117, "spec_3_site", "N-term"}, {UNIMOD_DiART6plex117, "spec_4_classification", "Isotopic label"}, {UNIMOD_DiART6plex117, "spec_4_hidden", "1"}, {UNIMOD_DiART6plex117, "spec_4_position", "Anywhere"}, {UNIMOD_DiART6plex117, "spec_4_site", "Y"}, {UNIMOD_DiART6plex118, "approved", "0"}, {UNIMOD_DiART6plex118, "delta_composition", "H(18) 2H(2) C(8) 13C(3) N(2) O(2)"}, {UNIMOD_DiART6plex118, "spec_1_classification", "Isotopic label"}, {UNIMOD_DiART6plex118, "spec_1_hidden", "1"}, {UNIMOD_DiART6plex118, "spec_1_position", "Anywhere"}, {UNIMOD_DiART6plex118, "spec_1_site", "K"}, {UNIMOD_DiART6plex118, "spec_2_classification", "Isotopic label"}, {UNIMOD_DiART6plex118, "spec_2_hidden", "1"}, {UNIMOD_DiART6plex118, "spec_2_position", "Any N-term"}, {UNIMOD_DiART6plex118, "spec_2_site", "N-term"}, {UNIMOD_DiART6plex118, "spec_3_classification", "Isotopic label"}, {UNIMOD_DiART6plex118, "spec_3_hidden", "1"}, {UNIMOD_DiART6plex118, "spec_3_position", "Protein N-term"}, {UNIMOD_DiART6plex118, "spec_3_site", "N-term"}, {UNIMOD_DiART6plex118, "spec_4_classification", "Isotopic label"}, {UNIMOD_DiART6plex118, "spec_4_hidden", "1"}, {UNIMOD_DiART6plex118, "spec_4_position", "Anywhere"}, {UNIMOD_DiART6plex118, "spec_4_site", "Y"}, {UNIMOD_Iodoacetanilide, "approved", "0"}, {UNIMOD_Iodoacetanilide, "delta_composition", "H(7) C(8) N O"}, {UNIMOD_Iodoacetanilide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Iodoacetanilide, "spec_1_hidden", "1"}, {UNIMOD_Iodoacetanilide, "spec_1_position", "Anywhere"}, {UNIMOD_Iodoacetanilide, "spec_1_site", "C"}, {UNIMOD_Iodoacetanilide, "spec_2_classification", "Artefact"}, {UNIMOD_Iodoacetanilide, "spec_2_hidden", "1"}, {UNIMOD_Iodoacetanilide, "spec_2_position", "Anywhere"}, {UNIMOD_Iodoacetanilide, "spec_2_site", "K"}, {UNIMOD_Iodoacetanilide, "spec_3_classification", "Artefact"}, {UNIMOD_Iodoacetanilide, "spec_3_hidden", "1"}, {UNIMOD_Iodoacetanilide, "spec_3_position", "Any N-term"}, {UNIMOD_Iodoacetanilide, "spec_3_site", "N-term"}, {UNIMOD_Iodoacetanilide_13C_6_, "approved", "0"}, {UNIMOD_Iodoacetanilide_13C_6_, "delta_composition", "H(7) C(2) 13C(6) N O"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_1_hidden", "1"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_1_site", "C"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_2_classification", "Artefact"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_2_hidden", "1"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_2_position", "Anywhere"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_2_site", "K"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_3_classification", "Artefact"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_3_hidden", "1"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_3_position", "Any N-term"}, {UNIMOD_Iodoacetanilide_13C_6_, "spec_3_site", "N-term"}, {UNIMOD_Dap_DSP, "approved", "0"}, {UNIMOD_Dap_DSP, "delta_composition", "H(20) C(13) N(2) O(6) S(2)"}, {UNIMOD_Dap_DSP, "spec_1_classification", "Non-standard residue"}, {UNIMOD_Dap_DSP, "spec_1_hidden", "1"}, {UNIMOD_Dap_DSP, "spec_1_position", "Anywhere"}, {UNIMOD_Dap_DSP, "spec_1_site", "A"}, {UNIMOD_Dap_DSP, "spec_2_classification", "Non-standard residue"}, {UNIMOD_Dap_DSP, "spec_2_hidden", "1"}, {UNIMOD_Dap_DSP, "spec_2_position", "Anywhere"}, {UNIMOD_Dap_DSP, "spec_2_site", "E"}, {UNIMOD_Dap_DSP, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Dap_DSP, "spec_3_hidden", "1"}, {UNIMOD_Dap_DSP, "spec_3_position", "Anywhere"}, {UNIMOD_Dap_DSP, "spec_3_site", "K"}, {UNIMOD_MurNAc, "approved", "0"}, {UNIMOD_MurNAc, "delta_composition", "O(-1) NeuAc"}, {UNIMOD_MurNAc, "spec_1_classification", "Other glycosylation"}, {UNIMOD_MurNAc, "spec_1_hidden", "1"}, {UNIMOD_MurNAc, "spec_1_position", "Anywhere"}, {UNIMOD_MurNAc, "spec_1_site", "A"}, {UNIMOD_Label_2H_7_15N_4_, "approved", "0"}, {UNIMOD_Label_2H_7_15N_4_, "delta_composition", "H(-7) 2H(7) N(-4) 15N(4)"}, {UNIMOD_Label_2H_7_15N_4_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_7_15N_4_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_7_15N_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_7_15N_4_, "spec_1_site", "R"}, {UNIMOD_Label_2H_6_15N_1_, "approved", "0"}, {UNIMOD_Label_2H_6_15N_1_, "delta_composition", "H(-6) 2H(6) N(-1) 15N"}, {UNIMOD_Label_2H_6_15N_1_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_2H_6_15N_1_, "spec_1_hidden", "1"}, {UNIMOD_Label_2H_6_15N_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_2H_6_15N_1_, "spec_1_site", "P"}, {UNIMOD_EEEDVIEVYQEQTGG, "approved", "0"}, {UNIMOD_EEEDVIEVYQEQTGG, "delta_composition", "H(107) C(72) N(17) O(31)"}, {UNIMOD_EEEDVIEVYQEQTGG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EEEDVIEVYQEQTGG, "spec_1_hidden", "1"}, {UNIMOD_EEEDVIEVYQEQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_EEEDVIEVYQEQTGG, "spec_1_site", "K"}, {UNIMOD_EDEDTIDVFQQQTGG, "approved", "0"}, {UNIMOD_EDEDTIDVFQQQTGG, "delta_composition", "H(102) C(69) N(18) O(30)"}, {UNIMOD_EDEDTIDVFQQQTGG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_EDEDTIDVFQQQTGG, "spec_1_hidden", "1"}, {UNIMOD_EDEDTIDVFQQQTGG, "spec_1_position", "Anywhere"}, {UNIMOD_EDEDTIDVFQQQTGG, "spec_1_site", "K"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "delta_composition", "Hex(5) HexNAc(4) NeuAc(2)"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "delta_composition", "Hex(5) HexNAc(4) NeuAc"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "delta_composition", "dHex Hex(5) HexNAc(4) NeuAc"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "delta_composition", "dHex Hex(5) HexNAc(4) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "spec_1_site", "N"}, {UNIMOD_s_GlcNAc, "approved", "0"}, {UNIMOD_s_GlcNAc, "delta_composition", "O(3) S HexNAc"}, {UNIMOD_s_GlcNAc, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_s_GlcNAc, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_s_GlcNAc, "spec_1_hidden", "1"}, {UNIMOD_s_GlcNAc, "spec_1_hidden", "1"}, {UNIMOD_s_GlcNAc, "spec_1_position", "Anywhere"}, {UNIMOD_s_GlcNAc, "spec_1_position", "Anywhere"}, {UNIMOD_s_GlcNAc, "spec_1_site", "T"}, {UNIMOD_s_GlcNAc, "spec_1_site", "S"}, {UNIMOD_PhosphoHex_2_, "approved", "0"}, {UNIMOD_PhosphoHex_2_, "delta_composition", "H O(3) P Hex(2)"}, {UNIMOD_PhosphoHex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_PhosphoHex_2_, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHex_2_, "spec_1_hidden", "1"}, {UNIMOD_PhosphoHex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoHex_2_, "spec_1_site", "T"}, {UNIMOD_PhosphoHex_2_, "spec_1_site", "S"}, {UNIMOD_PhosphoHex_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_PhosphoHex_2_, "spec_2_hidden", "1"}, {UNIMOD_PhosphoHex_2_, "spec_2_position", "Anywhere"}, {UNIMOD_PhosphoHex_2_, "spec_2_site", "N"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "approved", "0"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "delta_composition", "H(-3) 2H(9) 13C(3)"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_1_hidden", "1"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_1_position", "Anywhere"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_1_site", "K"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_2_classification", "Isotopic label"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_2_hidden", "1"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_2_position", "Anywhere"}, {UNIMOD_Trimethyl_13C_3_2H_9_, "spec_2_site", "R"}, {UNIMOD_15N_oxobutanoic, "approved", "0"}, {UNIMOD_15N_oxobutanoic, "delta_composition", "H(-3) 15N(-1)"}, {UNIMOD_15N_oxobutanoic, "spec_1_classification", "Artefact"}, {UNIMOD_15N_oxobutanoic, "spec_1_hidden", "1"}, {UNIMOD_15N_oxobutanoic, "spec_1_position", "Any N-term"}, {UNIMOD_15N_oxobutanoic, "spec_1_site", "C"}, {UNIMOD_15N_oxobutanoic, "spec_2_classification", "Post-translational"}, {UNIMOD_15N_oxobutanoic, "spec_2_hidden", "1"}, {UNIMOD_15N_oxobutanoic, "spec_2_position", "Protein N-term"}, {UNIMOD_15N_oxobutanoic, "spec_2_site", "S"}, {UNIMOD_15N_oxobutanoic, "spec_3_classification", "Post-translational"}, {UNIMOD_15N_oxobutanoic, "spec_3_hidden", "1"}, {UNIMOD_15N_oxobutanoic, "spec_3_position", "Protein N-term"}, {UNIMOD_15N_oxobutanoic, "spec_3_site", "T"}, {UNIMOD_spermine, "approved", "0"}, {UNIMOD_spermine, "delta_composition", "H(23) C(10) N(3)"}, {UNIMOD_spermine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_spermine, "spec_1_hidden", "1"}, {UNIMOD_spermine, "spec_1_position", "Anywhere"}, {UNIMOD_spermine, "spec_1_site", "Q"}, {UNIMOD_spermidine, "approved", "0"}, {UNIMOD_spermidine, "delta_composition", "H(16) C(7) N(2)"}, {UNIMOD_spermidine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_spermidine, "spec_1_hidden", "1"}, {UNIMOD_spermidine, "spec_1_position", "Anywhere"}, {UNIMOD_spermidine, "spec_1_site", "Q"}, {UNIMOD_Biotin_Thermo_21330, "approved", "0"}, {UNIMOD_Biotin_Thermo_21330, "delta_composition", "H(35) C(21) N(3) O(7) S"}, {UNIMOD_Biotin_Thermo_21330, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21330, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21330, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21330, "spec_1_site", "K"}, {UNIMOD_Biotin_Thermo_21330, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21330, "spec_2_hidden", "1"}, {UNIMOD_Biotin_Thermo_21330, "spec_2_position", "Any N-term"}, {UNIMOD_Biotin_Thermo_21330, "spec_2_site", "N-term"}, {UNIMOD_Pentose, "approved", "0"}, {UNIMOD_Pentose, "delta_composition", "Pent"}, {UNIMOD_Pentose, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pentose, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pentose, "spec_1_hidden", "1"}, {UNIMOD_Pentose, "spec_1_hidden", "1"}, {UNIMOD_Pentose, "spec_1_position", "Anywhere"}, {UNIMOD_Pentose, "spec_1_position", "Anywhere"}, {UNIMOD_Pentose, "spec_1_site", "T"}, {UNIMOD_Pentose, "spec_1_site", "S"}, {UNIMOD_Hex_1_Pent_1_, "approved", "0"}, {UNIMOD_Hex_1_Pent_1_, "delta_composition", "Pent Hex"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_Pent_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexA_1_, "approved", "0"}, {UNIMOD_Hex_1_HexA_1_, "delta_composition", "Hex HexA"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_Pent_2_, "approved", "0"}, {UNIMOD_Hex_1_Pent_2_, "delta_composition", "Pent(2) Hex"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_site", "T"}, {UNIMOD_Hex_1_Pent_2_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "delta_composition", "H O(3) P Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_Phos_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_1_NeuAc_1_, "delta_composition", "Hex NeuAc"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_1_NeuGc_1_, "delta_composition", "Hex NeuGc"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_3_, "approved", "0"}, {UNIMOD_HexNAc_3_, "delta_composition", "HexNAc(3)"}, {UNIMOD_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_HexNAc_1_NeuAc_1_, "approved", "0"}, {UNIMOD_HexNAc_1_NeuAc_1_, "delta_composition", "HexNAc NeuAc"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_1_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_HexNAc_1_NeuGc_1_, "delta_composition", "HexNAc NeuGc"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "delta_composition", "Me dHex Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "delta_composition", "Me(2) dHex Hex HexNAc"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_, "spec_2_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_, "delta_composition", "Hex(2) HexNAc"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "delta_composition", "Hex HexA HexNAc"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexA_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "delta_composition", "Me Hex(2) HexNAc"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_Me_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_Pent_3_, "approved", "0"}, {UNIMOD_Hex_1_Pent_3_, "delta_composition", "Pent(3) Hex"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_site", "T"}, {UNIMOD_Hex_1_Pent_3_, "spec_1_site", "S"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "approved", "0"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "delta_composition", "Pent Hex NeuAc"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_NeuAc_1_Pent_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_2_NeuAc_1_, "delta_composition", "Hex(2) NeuAc"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_, "delta_composition", "dHex(2) Hex(2)"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "delta_composition", "dHex Hex(2) HexA"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_, "approved", "0"}, {UNIMOD_Hex_4_, "delta_composition", "Hex(4)"}, {UNIMOD_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_, "spec_1_site", "S"}, {UNIMOD_Hex_4_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "delta_composition", "dHex(1) Hex(2) HexNAc(2) Pent(1)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "delta_composition", "Hex(2) HexNAc(2) NeuAc"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_, "spec_2_site", "T"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "delta_composition", "Hex(3) HexNAc(2) Pent(1)"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_2_, "delta_composition", "Hex(4) HexNAc(2)"}, {UNIMOD_Hex_4_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "delta_composition", "dHex(1) Hex(4) HexNAc(1) Pent(1)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(2) Pent(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "delta_composition", "Hex(3) HexNAc(2) NeuAc(1)"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "delta_composition", "Hex(4) HexNAc(2) Pent(1)"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "delta_composition", "Hex(3) HexNAc(3) Pent(1)"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "delta_composition", "H O(3) P Hex(5) HexNAc(2)"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_2_Phos_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "delta_composition", "dHex(1) Hex(4) HexNAc(2) Pent(1)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_1_, "delta_composition", "Hex(7) HexNAc(1)"}, {UNIMOD_Hex_7_HexNAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "delta_composition", "Hex(4) HexNAc(2) NeuAc"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_site", "S"}, {UNIMOD_Hex_4_HexNAc_2_NeuAc_1_, "spec_2_site", "T"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "delta_composition", "dHex(1) Hex(5) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(4)"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_2_, "delta_composition", "Hex(6) HexNAc(2)"}, {UNIMOD_Hex_6_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "delta_composition", "Hex(4) HexNAc(3) Pent(1)"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "delta_composition", "dHex(1) Hex(4) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_3_, "delta_composition", "Hex(5) HexNAc(3)"}, {UNIMOD_Hex_5_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "delta_composition", "Hex(3) HexNAc(4) Pent(1)"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "delta_composition", "H O(3) P Hex(6) HexNAc(2)"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_2_Phos_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "delta_composition", "dHex(1) Hex(5) HexNAc(2) Pent(1)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_8_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_8_HexNAc_1_, "delta_composition", "Hex(8) HexNAc(1)"}, {UNIMOD_Hex_8_HexNAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_8_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_8_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_8_HexNAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "delta_composition", "dHex(1) Hex(3) HexNAc(3) Pent(2)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "delta_composition", "dHex(2) Hex(3) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "delta_composition", "dHex(1) Hex(6) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "delta_composition", "dHex(1) Hex(4) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S Hex(4) HexNAc(4)"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_2_, "delta_composition", "Hex(7) HexNAc(2)"}, {UNIMOD_Hex_7_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "delta_composition", "dHex(2) Hex(4) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "delta_composition", "Hex(5) HexNAc(3) Pent(1)"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "delta_composition", "Hex(4) HexNAc(3) NeuGc(1)"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "delta_composition", "dHex(1) Hex(5) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(5)"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_5_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_3_, "delta_composition", "Hex(6) HexNAc(3)"}, {UNIMOD_Hex_6_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "delta_composition", "Hex(3) HexNAc(4) NeuAc"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "delta_composition", "Hex(4) HexNAc(4) Pent(1)"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "delta_composition", "H O(3) P Hex(7) HexNAc(2)"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_2_Phos_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "delta_composition", "Hex(4) HexNAc(4) Me(2) Pent(1)"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "delta_composition", "Pent(3) dHex Hex(3) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(5) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "delta_composition", "dHex(2) Hex(3) HexNAc(3) Pent(2)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "delta_composition", "H O(3) P Hex(6) HexNAc(3)"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_3_Phos_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_5_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_5_, "delta_composition", "Hex(4) HexNAc(5)"}, {UNIMOD_Hex_4_HexNAc_5_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_5_, "spec_1_site", "N"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "delta_composition", "dHex(3) Hex(3) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "delta_composition", "dHex(2) Hex(4) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "delta_composition", "dHex(1) Hex(7) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_7_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "delta_composition", "dHex Hex(4) HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_site", "T"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "delta_composition", "H(2) O(6) P(2) Hex(7) HexNAc(2)"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_2_Phos_2_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S Hex(5) HexNAc(4)"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_8_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_8_HexNAc_2_, "delta_composition", "Hex(8) HexNAc(2)"}, {UNIMOD_Hex_8_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_8_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_8_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_8_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "delta_composition", "dHex(1) Hex(3) HexNAc(4) Pent(2)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "delta_composition", "dHex Hex(4) HexNAc(3) NeuGc"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "delta_composition", "dHex(2) Hex(3) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc(5)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "delta_composition", "dHex(1) Hex(6) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(4) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "delta_composition", "dHex(3) Hex(3) HexNAc(4)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "delta_composition", "dHex(1) Hex(4) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "delta_composition", "O(3) S Hex(4) HexNAc(5)"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_5_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_3_, "delta_composition", "Hex(7) HexNAc(3)"}, {UNIMOD_Hex_7_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "delta_composition", "Hex(5) HexNAc(4) Me(2) Pent(1)"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(6)"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(6) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "delta_composition", "dHex(1) Hex(4) HexNAc(5)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(5) HexA HexNAc(3)"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "delta_composition", "H O(3) P Hex(7) HexNAc(3)"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_3_Phos_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "delta_composition", "Hex(6) HexNAc(4) Me(3)"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(4) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "delta_composition", "Hex(4) HexNAc(3) NeuAc(2)"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "delta_composition", "dHex(1) Hex(3) HexNAc(4) Pent(3)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "delta_composition", "dHex(2) Hex(5) HexNAc(3) Pent(1)"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S dHex Hex(5) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "delta_composition", "dHex(2) Hex(3) HexNAc(4) Pent(2)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "delta_composition", "dHex(1) Hex(5) HexNAc(3) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "delta_composition", "O(6) S(2) Hex(3) HexNAc(6)"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_Sulf_2_, "spec_1_site", "N"}, {UNIMOD_Hex_9_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_9_HexNAc_2_, "delta_composition", "Hex(9) HexNAc(2)"}, {UNIMOD_Hex_9_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_9_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_9_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_9_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_6_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_6_, "delta_composition", "Hex(4) HexNAc(6)"}, {UNIMOD_Hex_4_HexNAc_6_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_6_, "spec_1_site", "N"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "delta_composition", "dHex(3) Hex(3) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "delta_composition", "dHex Hex(5) HexNAc(3) NeuGc"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "delta_composition", "dHex(2) Hex(4) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexNAc(5)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "delta_composition", "dHex(1) Hex(7) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "delta_composition", "dHex(1) Hex(5) HexNAc(4) Pent(1)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "delta_composition", "O(6) S(2) dHex Hex(5) HexA HexNAc(3)"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_7_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_7_, "delta_composition", "Hex(3) HexNAc(7)"}, {UNIMOD_Hex_3_HexNAc_7_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_7_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_7_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_7_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "delta_composition", "dHex(2) Hex(5) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_5_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(4) HexNAc(3) NeuAc"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "delta_composition", "O(6) S(2) dHex Hex(5) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "delta_composition", "dHex(1) Hex(5) HexNAc(4) Me(2) Pent(1)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "delta_composition", "Hex(5) HexNAc(4) NeuGc(1)"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuGc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc(6)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "delta_composition", "dHex(1) Hex(6) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_6_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(5) HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_4_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_4_, "delta_composition", "Hex(7) HexNAc(4)"}, {UNIMOD_Hex_7_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(5) HexNAc(3) NeuGc"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "delta_composition", "Hex(4) HexNAc(5) NeuAc(1)"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_5_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "delta_composition", "Hex(6) HexNAc(4) Me(3) Pent(1)"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(7) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "delta_composition", "H O(3) P dHex Hex(7) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "delta_composition", "dHex(1) Hex(5) HexNAc(5)"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_5_HexNAc_5_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexNAc(4) NeuAc"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "delta_composition", "O(3) S dHex(3) Hex(4) HexNAc(4)"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(7)"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_7_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_6_HexNAc_5_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_5_, "delta_composition", "Hex(6) HexNAc(5)"}, {UNIMOD_Hex_6_HexNAc_5_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_5_, "spec_1_site", "N"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(5) HexNAc(4) NeuAc"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "delta_composition", "Hex(3) HexNAc(6) NeuAc(1)"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "delta_composition", "dHex(2) Hex(3) HexNAc(6)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_6_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "delta_composition", "Hex(1) HexNAc(1) NeuGc(1)"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "delta_composition", "dHex(1) Hex(2) HexNAc(1)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S HexNAc(3)"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_1_, "delta_composition", "Hex(3) HexNAc"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc Kdn"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_HexNAc_2_NeuAc_1_, "delta_composition", "HexNAc(2) NeuAc(1)"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_1_Kdn_2_, "approved", "0"}, {UNIMOD_HexNAc_1_Kdn_2_, "delta_composition", "HexNAc Kdn(2)"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_site", "T"}, {UNIMOD_HexNAc_1_Kdn_2_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "delta_composition", "Hex(3) HexNAc(1) Me(1)"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "delta_composition", "O(3) S Pent Hex(2) HexA"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_HexNAc_2_NeuGc_1_, "delta_composition", "HexNAc(2) NeuGc(1)"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_Phos_1_, "approved", "0"}, {UNIMOD_Hex_4_Phos_1_, "delta_composition", "H O(3) P Hex(4)"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_Phos_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc NeuAc"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "approved", "0"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "delta_composition", "Hex(1) HexA(1) HexNAc(2)"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexA_1_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_HexNAc_3_, "delta_composition", "dHex(1) HexNAc(3)"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "delta_composition", "dHex Hex HexNAc Kdn"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_3_, "delta_composition", "Hex(1) HexNAc(3)"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S HexNAc(2) NeuAc"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_, "delta_composition", "dHex(2) Hex(3)"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexA HexNAc"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "delta_composition", "dHex(2) Hex(2) HexA(1)"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexA_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex Hex HexNAc(2)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "delta_composition", "dHex(1) Hex(1) HexNAc(1) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_5_, "approved", "0"}, {UNIMOD_Hex_5_, "delta_composition", "Hex(5)"}, {UNIMOD_Hex_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_, "spec_1_site", "S"}, {UNIMOD_Hex_5_, "spec_1_site", "T"}, {UNIMOD_HexNAc_4_, "approved", "0"}, {UNIMOD_HexNAc_4_, "delta_composition", "HexNAc(4)"}, {UNIMOD_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_HexNAc_1_NeuGc_2_, "approved", "0"}, {UNIMOD_HexNAc_1_NeuGc_2_, "delta_composition", "HexNAc(1) NeuGc(2)"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_site", "S"}, {UNIMOD_HexNAc_1_NeuGc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "delta_composition", "dHex Hex HexNAc NeuGc"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(1)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "delta_composition", "Hex(2) HexNAc(1) NeuGc(1)"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "delta_composition", "dHex(1) Hex(2) HexA(1) HexNAc(1)"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc(3)"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_1_, "delta_composition", "Hex(4) HexNAc"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_1_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "delta_composition", "Hex(1) HexNAc(2) NeuAc(1)"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "delta_composition", "Hex(1) HexNAc(2) NeuGc(1)"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_5_Phos_1_, "approved", "0"}, {UNIMOD_Hex_5_Phos_1_, "delta_composition", "H O(3) P Hex(5)"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_site", "T"}, {UNIMOD_Hex_5_Phos_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "delta_composition", "dHex(2) Hex HexNAc Kdn"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "delta_composition", "dHex(1) Hex(1) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexA HexNAc"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_, "delta_composition", "Hex(2) HexNAc(3)"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc(2) NeuAc"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_, "delta_composition", "dHex(2) Hex(4)"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_, "spec_1_site", "T"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "delta_composition", "dHex(2) HexNAc(2) Kdn"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_1_HexNAc_4_, "delta_composition", "dHex(1) HexNAc(4)"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "delta_composition", "Hex(1) HexNAc(1) NeuAc(1) NeuGc(1)"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "delta_composition", "dHex Hex HexNAc(2) Kdn"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "delta_composition", "Hex(1) HexNAc(1) NeuGc(2)"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "delta_composition", "Ac Hex HexNAc NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "delta_composition", "dHex(2) Hex(2) HexA(1) HexNAc(1)"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex HexNAc(3)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "delta_composition", "O(3) S Pent Hex(2) HexA NeuAc"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "delta_composition", "dHex(1) Hex(1) HexNAc(2) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "delta_composition", "dHex(1) Hex(3) HexA(1) HexNAc(1)"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc(3)"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_5_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_1_, "delta_composition", "Hex(5) HexNAc"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_1_, "spec_2_site", "N"}, {UNIMOD_HexNAc_5_, "approved", "0"}, {UNIMOD_HexNAc_5_, "delta_composition", "HexNAc(5)"}, {UNIMOD_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "delta_composition", "Ac(2) Hex HexNAc NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "delta_composition", "Hex(2) HexNAc(2) NeuGc(1)"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_5_Phos_3_, "approved", "0"}, {UNIMOD_Hex_5_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(5)"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_5_Phos_3_, "spec_1_site", "S"}, {UNIMOD_Hex_6_Phos_1_, "approved", "0"}, {UNIMOD_Hex_6_Phos_1_, "delta_composition", "H O(3) P Hex(6)"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_site", "T"}, {UNIMOD_Hex_6_Phos_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "delta_composition", "dHex(1) Hex(2) HexA(1) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(3) HexNAc"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "delta_composition", "Hex(1) HexNAc(3) NeuAc(1)"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "delta_composition", "dHex(2) Hex(1) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_1_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "delta_composition", "Hex(1) HexNAc(3) NeuGc(1)"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex HexNAc(2) NeuAc"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexA HexNAc"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "delta_composition", "dHex(1) Hex(1) HexA(1) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc(2) NeuAc"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(2) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "delta_composition", "dHex(2) Hex HexNAc(2) Kdn"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "delta_composition", "dHex(1) Hex(1) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_4_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_4_, "delta_composition", "Hex(2) HexNAc(4)"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "delta_composition", "Hex(2) HexNAc(1) NeuGc(2)"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "delta_composition", "dHex(2) Hex(4) HexNAc(1)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "delta_composition", "Hex(1) HexNAc(2) NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "delta_composition", "dHex(2) Hex(1) HexNAc(2) NeuAc(1)"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_1_HexNAc_5_, "delta_composition", "dHex(1) HexNAc(5)"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_1_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "delta_composition", "dHex(2) Hex HexNAc(2) NeuGc"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "delta_composition", "dHex(3) Hex(2) HexNAc(2)"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(3)"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_Sulf_1_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "delta_composition", "O(6) S(2) dHex(2) Hex(2) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "delta_composition", "dHex Hex(2) HexNAc(2) NeuGc"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "delta_composition", "dHex Hex HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_6_Phos_3_, "approved", "0"}, {UNIMOD_Hex_6_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(6)"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_6_Phos_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "delta_composition", "dHex(1) Hex(3) HexA(1) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "delta_composition", "dHex Hex HexNAc(3) NeuGc"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "delta_composition", "O(3) S Hex HexNAc(2) NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(3) HexA HexNAc"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "delta_composition", "Hex(1) HexNAc(1) NeuAc(3)"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "delta_composition", "Hex(2) HexNAc(3) NeuGc(1)"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc(2) NeuAc"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "delta_composition", "dHex(3) Hex HexNAc(2) Kdn"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(3) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(2) Kdn"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(2) HexA HexNAc(2)"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "delta_composition", "dHex Hex(2) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "delta_composition", "Hex(1) HexNAc(1) NeuGc(3)"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexA HexNAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "delta_composition", "dHex(1) Hex(1) HexNAc(2) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "delta_composition", "dHex(3) HexNAc(3) Kdn"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_HexNAc_3_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc(3) NeuAc"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(2) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_2_HexNAc_5_, "delta_composition", "dHex(2) HexNAc(5)"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_2_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "delta_composition", "Hex(2) HexNAc(2) NeuAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(2) NeuAc"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(2) NeuGc"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_5_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_5_, "delta_composition", "Hex(2) HexNAc(5)"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(2) NeuGc(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "delta_composition", "Hex(1) HexNAc(3) NeuAc(2)"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_3_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "delta_composition", "dHex(1) Hex(2) HexNAc(3) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "delta_composition", "dHex(3) Hex(2) HexNAc(3)"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_7_Phos_3_, "approved", "0"}, {UNIMOD_Hex_7_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(7)"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_7_Phos_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "delta_composition", "dHex(1) Hex(4) HexA(1) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "delta_composition", "Hex(3) HexNAc(3) NeuAc"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "delta_composition", "dHex(1) Hex(3) HexA(2) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "delta_composition", "O(3) S Hex(2) HexNAc(2) NeuAc(2)"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(2) HexNAc(2) NeuAc"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "delta_composition", "Hex(3) HexNAc(3) NeuGc(1)"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "delta_composition", "dHex(4) Hex HexNAc(2) Kdn"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "delta_composition", "dHex(3) Hex(2) HexNAc(2) Kdn"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex(3) Hex(2) HexA HexNAc(2)"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "delta_composition", "Hex(2) HexNAc(4) NeuAc(1)"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "delta_composition", "dHex(2) Hex(2) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(3) HexA HexNAc(2)"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "delta_composition", "dHex(4) HexNAc(3) Kdn"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_HexNAc_3_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "delta_composition", "Hex(2) HexNAc(1) NeuGc(3)"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "approved", "0"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "delta_composition", "dHex(4) Hex HexNAc Kdn(2)"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc(3) NeuAc"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "delta_composition", "dHex(1) Hex(2) HexNAc(2) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "delta_composition", "dHex(3) Hex HexNAc(3) Kdn"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(3) NeuAc"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "delta_composition", "Hex(3) HexNAc(2) NeuAc(2)"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_2_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(3) NeuGc"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "delta_composition", "dHex(1) Hex(2) HexNAc(2) NeuGc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "delta_composition", "dHex(2) Hex(3) HexNAc(2) NeuGc"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexA HexNAc(3)"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "delta_composition", "Hex(2) HexNAc(3) NeuAc(2)"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(3) NeuAc(1)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "delta_composition", "dHex(4) Hex(2) HexNAc(3)"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_4_Hex_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "delta_composition", "Hex(2) HexNAc(3) NeuAc(1) NeuGc(1)"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "delta_composition", "dHex(2) Hex(2) HexNAc(3) NeuGc"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "delta_composition", "dHex(3) Hex(3) HexNAc(3)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_8_Phos_3_, "approved", "0"}, {UNIMOD_Hex_8_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(8)"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_8_Phos_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "delta_composition", "O(3) S dHex Hex(2) HexNAc(2) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "delta_composition", "Hex(2) HexNAc(3) NeuGc(2)"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "delta_composition", "dHex(4) Hex(2) HexNAc(2) Kdn"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "delta_composition", "dHex(1) Hex(2) HexNAc(4) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "delta_composition", "dHex(3) Hex(2) HexNAc(4)"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "delta_composition", "Hex(1) HexNAc(1) NeuGc(4)"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "delta_composition", "dHex(4) Hex HexNAc(3) Kdn"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "delta_composition", "O(6) S(2) Hex(4) HexNAc(4)"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "delta_composition", "dHex(3) Hex(2) HexNAc(3) Kdn"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "delta_composition", "dHex(2) Hex(2) HexNAc(5)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(3) HexA HexNAc(3)"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex Hex(4) HexA HexNAc(3)"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "delta_composition", "Hex(3) HexNAc(3) NeuAc(2)"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "delta_composition", "dHex(2) Hex(3) HexNAc(3) NeuAc"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "delta_composition", "dHex(4) Hex(3) HexNAc(3)"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_4_Hex_3_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_9_Phos_3_, "approved", "0"}, {UNIMOD_Hex_9_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(9)"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_9_Phos_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_HexNAc_7_, "approved", "0"}, {UNIMOD_dHex_2_HexNAc_7_, "delta_composition", "dHex(2) HexNAc(7)"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_site", "S"}, {UNIMOD_dHex_2_HexNAc_7_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "delta_composition", "Hex(2) HexNAc(1) NeuGc(4)"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_NeuGc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "delta_composition", "O(3) S Hex(3) HexNAc(3) NeuAc(2)"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "delta_composition", "dHex(2) Hex(3) HexNAc(5)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_5_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "delta_composition", "dHex(1) Hex(2) HexNAc(2) NeuGc(3)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex(4) HexA HexNAc(3)"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "delta_composition", "Hex(2) HexNAc(3) NeuAc(3)"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "delta_composition", "dHex(1) Hex(3) HexNAc(3) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "delta_composition", "dHex(3) Hex(3) HexNAc(3) NeuAc(1)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "delta_composition", "Hex(2) HexNAc(3) NeuGc(3)"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_3_NeuGc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_10_Phos_3_, "approved", "0"}, {UNIMOD_Hex_10_Phos_3_, "delta_composition", "H(3) O(9) P(3) Hex(10)"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_site", "T"}, {UNIMOD_Hex_10_Phos_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "delta_composition", "dHex(1) Hex(2) HexNAc(4) NeuAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "delta_composition", "Hex(1) HexNAc(1) NeuGc(5)"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_1_NeuGc_5_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "delta_composition", "O(6) S(2) Hex(4) HexNAc(4) NeuAc"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "delta_composition", "O(6) S(2) Hex(4) HexNAc(4) NeuGc"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "delta_composition", "dHex(2) Hex(3) HexNAc(3) NeuAc(2)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "delta_composition", "O(9) S(3) Hex(4) HexNAc(4) NeuAc"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "delta_composition", "dHex(2) Hex(2) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_2_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "delta_composition", "dHex(1) Hex(3) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "delta_composition", "dHex(1) Hex(2) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_Hex_3_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_, "delta_composition", "Hex(3) HexNAc(3)"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S dHex Hex(3) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "delta_composition", "dHex(2) Hex(3) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_2_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "delta_composition", "dHex(1) Hex(4) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_2_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "delta_composition", "dHex(2) Hex(2) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "delta_composition", "dHex(1) Hex(3) HexNAc(3)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_Hex_4_HexNAc_3_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_3_, "delta_composition", "Hex(4) HexNAc(3)"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "delta_composition", "dHex(2) Hex(4) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_2_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "delta_composition", "dHex(2) Hex(3) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_, "spec_2_site", "N"}, {UNIMOD_Hex_3_HexNAc_5_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_5_, "delta_composition", "Hex(3) HexNAc(5)"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_5_, "spec_2_site", "N"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "delta_composition", "Hex(4) HexNAc(3) NeuAc"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_3_NeuAc_1_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "delta_composition", "dHex(2) Hex(3) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "delta_composition", "dHex(1) Hex(3) HexNAc(5)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_, "spec_2_site", "N"}, {UNIMOD_Hex_3_HexNAc_6_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_6_, "delta_composition", "Hex(3) HexNAc(6)"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_2_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_6_, "spec_2_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "delta_composition", "Hex(4) HexNAc(4) NeuAc(1)"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "delta_composition", "dHex(2) Hex(4) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_Hex_6_HexNAc_4_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_4_, "delta_composition", "Hex(6) HexNAc(4)"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_Hex_5_HexNAc_5_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_5_, "delta_composition", "Hex(5) HexNAc(5)"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_2_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_5_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "delta_composition", "dHex(1) Hex(3) HexNAc(6)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_6_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "delta_composition", "dHex Hex(4) HexNAc(4) NeuAc"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_, "spec_2_site", "N"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "delta_composition", "dHex(3) Hex(4) HexNAc(4)"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_2_hidden", "1"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_4_HexNAc_4_, "spec_2_site", "N"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "delta_composition", "dHex(1) Hex(3) HexNAc(5) NeuAc(1)"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_2_hidden", "1"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_, "spec_2_site", "N"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "approved", "0"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "delta_composition", "dHex(2) Hex(4) HexNAc(5)"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_2_hidden", "1"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_2_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_4_HexNAc_5_, "spec_2_site", "N"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "delta_composition", "Ac Hex HexNAc NeuAc"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_, "spec_1_site", "S"}, {UNIMOD_Label_13C_2_15N_2_, "approved", "0"}, {UNIMOD_Label_13C_2_15N_2_, "delta_composition", "C(-2) 13C(2) N(-2) 15N(2)"}, {UNIMOD_Label_13C_2_15N_2_, "spec_1_classification", "Isotopic label"}, {UNIMOD_Label_13C_2_15N_2_, "spec_1_hidden", "1"}, {UNIMOD_Label_13C_2_15N_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Label_13C_2_15N_2_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSS_155_, "approved", "0"}, {UNIMOD_Xlink_DSS_155_, "delta_composition", "H(13) C(8) N O(2)"}, {UNIMOD_Xlink_DSS_155_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_155_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSS_155_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSS_155_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSS_155_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_155_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSS_155_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSS_155_, "spec_2_site", "N-term"}, {UNIMOD_NQIGG, "approved", "0"}, {UNIMOD_NQIGG, "delta_composition", "H(31) C(19) N(7) O(7)"}, {UNIMOD_NQIGG, "spec_1_classification", "Post-translational"}, {UNIMOD_NQIGG, "spec_1_hidden", "1"}, {UNIMOD_NQIGG, "spec_1_position", "Anywhere"}, {UNIMOD_NQIGG, "spec_1_site", "K"}, {UNIMOD_Carboxyethylpyrrole, "approved", "0"}, {UNIMOD_Carboxyethylpyrrole, "delta_composition", "H(6) C(7) O(2)"}, {UNIMOD_Carboxyethylpyrrole, "spec_1_classification", "Other"}, {UNIMOD_Carboxyethylpyrrole, "spec_1_hidden", "1"}, {UNIMOD_Carboxyethylpyrrole, "spec_1_position", "Anywhere"}, {UNIMOD_Carboxyethylpyrrole, "spec_1_site", "K"}, {UNIMOD_Fluorescein_tyramine, "approved", "0"}, {UNIMOD_Fluorescein_tyramine, "delta_composition", "H(19) C(29) N O(7)"}, {UNIMOD_Fluorescein_tyramine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Fluorescein_tyramine, "spec_1_hidden", "1"}, {UNIMOD_Fluorescein_tyramine, "spec_1_position", "Anywhere"}, {UNIMOD_Fluorescein_tyramine, "spec_1_site", "Y"}, {UNIMOD_GEE, "approved", "0"}, {UNIMOD_GEE, "delta_composition", "H(6) C(4) O(2)"}, {UNIMOD_GEE, "spec_1_classification", "Chemical derivative"}, {UNIMOD_GEE, "spec_1_hidden", "1"}, {UNIMOD_GEE, "spec_1_position", "Anywhere"}, {UNIMOD_GEE, "spec_1_site", "Q"}, {UNIMOD_RNPXL, "approved", "0"}, {UNIMOD_RNPXL, "delta_composition", "H(13) C(9) N(2) O(9) P"}, {UNIMOD_RNPXL, "spec_1_classification", "Other"}, {UNIMOD_RNPXL, "spec_1_hidden", "1"}, {UNIMOD_RNPXL, "spec_1_position", "Any N-term"}, {UNIMOD_RNPXL, "spec_1_site", "K"}, {UNIMOD_RNPXL, "spec_2_classification", "Other"}, {UNIMOD_RNPXL, "spec_2_hidden", "1"}, {UNIMOD_RNPXL, "spec_2_position", "Any N-term"}, {UNIMOD_RNPXL, "spec_2_site", "R"}, {UNIMOD_Glu__pyro_Glu_Methyl, "approved", "0"}, {UNIMOD_Glu__pyro_Glu_Methyl, "delta_composition", "C O(-1)"}, {UNIMOD_Glu__pyro_Glu_Methyl, "spec_1_classification", "Artefact"}, {UNIMOD_Glu__pyro_Glu_Methyl, "spec_1_hidden", "1"}, {UNIMOD_Glu__pyro_Glu_Methyl, "spec_1_position", "Any N-term"}, {UNIMOD_Glu__pyro_Glu_Methyl, "spec_1_site", "E"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "approved", "0"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "delta_composition", "H(-2) 2H(2) 13C O(-1)"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "spec_1_classification", "Artefact"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "spec_1_hidden", "1"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "spec_1_position", "Any N-term"}, {UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_, "spec_1_site", "E"}, {UNIMOD_LRGG_methyl, "approved", "0"}, {UNIMOD_LRGG_methyl, "delta_composition", "H(31) C(17) N(7) O(4)"}, {UNIMOD_LRGG_methyl, "spec_1_classification", "Post-translational"}, {UNIMOD_LRGG_methyl, "spec_1_hidden", "1"}, {UNIMOD_LRGG_methyl, "spec_1_position", "Anywhere"}, {UNIMOD_LRGG_methyl, "spec_1_site", "K"}, {UNIMOD_LRGG_dimethyl, "approved", "0"}, {UNIMOD_LRGG_dimethyl, "delta_composition", "H(33) C(18) N(7) O(4)"}, {UNIMOD_LRGG_dimethyl, "spec_1_classification", "Post-translational"}, {UNIMOD_LRGG_dimethyl, "spec_1_hidden", "1"}, {UNIMOD_LRGG_dimethyl, "spec_1_position", "Anywhere"}, {UNIMOD_LRGG_dimethyl, "spec_1_site", "K"}, {UNIMOD_Biotin_tyramide, "approved", "0"}, {UNIMOD_Biotin_tyramide, "delta_composition", "H(23) C(18) N(3) O(3) S"}, {UNIMOD_Biotin_tyramide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_tyramide, "spec_1_hidden", "1"}, {UNIMOD_Biotin_tyramide, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_tyramide, "spec_1_site", "Y"}, {UNIMOD_Tris, "approved", "0"}, {UNIMOD_Tris, "delta_composition", "H(10) C(4) N O(2)"}, {UNIMOD_Tris, "spec_1_classification", "Artefact"}, {UNIMOD_Tris, "spec_1_hidden", "1"}, {UNIMOD_Tris, "spec_1_position", "Anywhere"}, {UNIMOD_Tris, "spec_1_site", "N"}, {UNIMOD_IASD, "approved", "0"}, {UNIMOD_IASD, "delta_composition", "H(16) C(18) N(2) O(8) S(2)"}, {UNIMOD_IASD, "spec_1_classification", "Chemical derivative"}, {UNIMOD_IASD, "spec_1_hidden", "1"}, {UNIMOD_IASD, "spec_1_position", "Anywhere"}, {UNIMOD_IASD, "spec_1_site", "C"}, {UNIMOD_NP40, "approved", "0"}, {UNIMOD_NP40, "delta_composition", "H(24) C(15) O"}, {UNIMOD_NP40, "spec_1_classification", "Other"}, {UNIMOD_NP40, "spec_1_hidden", "1"}, {UNIMOD_NP40, "spec_1_position", "Any N-term"}, {UNIMOD_NP40, "spec_1_site", "N-term"}, {UNIMOD_Tween20, "approved", "0"}, {UNIMOD_Tween20, "delta_composition", "H(21) C(12)"}, {UNIMOD_Tween20, "spec_1_classification", "Other"}, {UNIMOD_Tween20, "spec_1_hidden", "1"}, {UNIMOD_Tween20, "spec_1_position", "Any N-term"}, {UNIMOD_Tween20, "spec_1_site", "N-term"}, {UNIMOD_Tween80, "approved", "0"}, {UNIMOD_Tween80, "delta_composition", "H(31) C(18) O"}, {UNIMOD_Tween80, "spec_1_classification", "Other"}, {UNIMOD_Tween80, "spec_1_hidden", "1"}, {UNIMOD_Tween80, "spec_1_position", "Any C-term"}, {UNIMOD_Tween80, "spec_1_site", "C-term"}, {UNIMOD_Triton, "approved", "0"}, {UNIMOD_Triton, "delta_composition", "H(20) C(14)"}, {UNIMOD_Triton, "spec_1_classification", "Other"}, {UNIMOD_Triton, "spec_1_hidden", "1"}, {UNIMOD_Triton, "spec_1_position", "Any C-term"}, {UNIMOD_Triton, "spec_1_site", "C-term"}, {UNIMOD_Triton, "spec_2_classification", "Other"}, {UNIMOD_Triton, "spec_2_hidden", "1"}, {UNIMOD_Triton, "spec_2_position", "Any N-term"}, {UNIMOD_Triton, "spec_2_site", "N-term"}, {UNIMOD_Brij35, "approved", "0"}, {UNIMOD_Brij35, "delta_composition", "H(24) C(12)"}, {UNIMOD_Brij35, "spec_1_classification", "Other"}, {UNIMOD_Brij35, "spec_1_hidden", "1"}, {UNIMOD_Brij35, "spec_1_position", "Any N-term"}, {UNIMOD_Brij35, "spec_1_site", "N-term"}, {UNIMOD_Brij58, "approved", "0"}, {UNIMOD_Brij58, "delta_composition", "H(32) C(16)"}, {UNIMOD_Brij58, "spec_1_classification", "Other"}, {UNIMOD_Brij58, "spec_1_hidden", "1"}, {UNIMOD_Brij58, "spec_1_position", "Any N-term"}, {UNIMOD_Brij58, "spec_1_site", "N-term"}, {UNIMOD_betaFNA, "approved", "0"}, {UNIMOD_betaFNA, "delta_composition", "H(30) C(25) N(2) O(6)"}, {UNIMOD_betaFNA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_betaFNA, "spec_1_hidden", "1"}, {UNIMOD_betaFNA, "spec_1_position", "Anywhere"}, {UNIMOD_betaFNA, "spec_1_site", "C"}, {UNIMOD_betaFNA, "spec_2_classification", "Chemical derivative"}, {UNIMOD_betaFNA, "spec_2_hidden", "1"}, {UNIMOD_betaFNA, "spec_2_position", "Anywhere"}, {UNIMOD_betaFNA, "spec_2_site", "K"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "approved", "0"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "delta_composition", "dHex Hex(7) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_7_HexNAc_4_, "spec_1_site", "N"}, {UNIMOD_Biotin_Thermo_21328, "approved", "0"}, {UNIMOD_Biotin_Thermo_21328, "delta_composition", "H(23) C(15) N(3) O(3) S(3)"}, {UNIMOD_Biotin_Thermo_21328, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21328, "spec_1_hidden", "1"}, {UNIMOD_Biotin_Thermo_21328, "spec_1_position", "Anywhere"}, {UNIMOD_Biotin_Thermo_21328, "spec_1_site", "K"}, {UNIMOD_Biotin_Thermo_21328, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Biotin_Thermo_21328, "spec_2_hidden", "1"}, {UNIMOD_Biotin_Thermo_21328, "spec_2_position", "Any N-term"}, {UNIMOD_Biotin_Thermo_21328, "spec_2_site", "N-term"}, {UNIMOD_PhosphoCytidine, "approved", "0"}, {UNIMOD_PhosphoCytidine, "delta_composition", "H(12) C(9) N(3) O(7) P"}, {UNIMOD_PhosphoCytidine, "spec_1_classification", "Post-translational"}, {UNIMOD_PhosphoCytidine, "spec_1_hidden", "1"}, {UNIMOD_PhosphoCytidine, "spec_1_position", "Anywhere"}, {UNIMOD_PhosphoCytidine, "spec_1_site", "S"}, {UNIMOD_PhosphoCytidine, "spec_2_classification", "Post-translational"}, {UNIMOD_PhosphoCytidine, "spec_2_hidden", "1"}, {UNIMOD_PhosphoCytidine, "spec_2_position", "Anywhere"}, {UNIMOD_PhosphoCytidine, "spec_2_site", "T"}, {UNIMOD_PhosphoCytidine, "spec_3_classification", "Post-translational"}, {UNIMOD_PhosphoCytidine, "spec_3_hidden", "1"}, {UNIMOD_PhosphoCytidine, "spec_3_position", "Anywhere"}, {UNIMOD_PhosphoCytidine, "spec_3_site", "Y"}, {UNIMOD_AzidoF, "approved", "0"}, {UNIMOD_AzidoF, "delta_composition", "H(-1) N(3)"}, {UNIMOD_AzidoF, "spec_1_classification", "Chemical derivative"}, {UNIMOD_AzidoF, "spec_1_hidden", "1"}, {UNIMOD_AzidoF, "spec_1_position", "Anywhere"}, {UNIMOD_AzidoF, "spec_1_site", "F"}, {UNIMOD_Dimethylaminoethyl, "approved", "0"}, {UNIMOD_Dimethylaminoethyl, "delta_composition", "H(9) C(4) N"}, {UNIMOD_Dimethylaminoethyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Dimethylaminoethyl, "spec_1_hidden", "1"}, {UNIMOD_Dimethylaminoethyl, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethylaminoethyl, "spec_1_site", "C"}, {UNIMOD_Gluratylation, "approved", "0"}, {UNIMOD_Gluratylation, "delta_composition", "H(6) C(5) O(3)"}, {UNIMOD_Gluratylation, "spec_1_classification", "Post-translational"}, {UNIMOD_Gluratylation, "spec_1_hidden", "1"}, {UNIMOD_Gluratylation, "spec_1_position", "Anywhere"}, {UNIMOD_Gluratylation, "spec_1_site", "K"}, {UNIMOD_hydroxyisobutyryl, "approved", "0"}, {UNIMOD_hydroxyisobutyryl, "delta_composition", "H(6) C(4) O(2)"}, {UNIMOD_hydroxyisobutyryl, "spec_1_classification", "Post-translational"}, {UNIMOD_hydroxyisobutyryl, "spec_1_hidden", "1"}, {UNIMOD_hydroxyisobutyryl, "spec_1_position", "Anywhere"}, {UNIMOD_hydroxyisobutyryl, "spec_1_site", "K"}, {UNIMOD_MeMePhosphorothioate, "approved", "0"}, {UNIMOD_MeMePhosphorothioate, "delta_composition", "H(5) C(2) O P S"}, {UNIMOD_MeMePhosphorothioate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MeMePhosphorothioate, "spec_1_hidden", "1"}, {UNIMOD_MeMePhosphorothioate, "spec_1_position", "Anywhere"}, {UNIMOD_MeMePhosphorothioate, "spec_1_site", "S"}, {UNIMOD_Cation_Fe_III_, "approved", "0"}, {UNIMOD_Cation_Fe_III_, "delta_composition", "H(-3) Fe"}, {UNIMOD_Cation_Fe_III_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Fe_III_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Fe_III_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Fe_III_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Fe_III_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Fe_III_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Fe_III_, "spec_1_site", "D"}, {UNIMOD_Cation_Fe_III_, "spec_1_site", "E"}, {UNIMOD_Cation_Fe_III_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Fe_III_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Fe_III_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Fe_III_, "spec_2_site", "C-term"}, {UNIMOD_DTT, "approved", "0"}, {UNIMOD_DTT, "delta_composition", "H(8) C(4) O(2) S(2)"}, {UNIMOD_DTT, "spec_1_classification", "Artefact"}, {UNIMOD_DTT, "spec_1_hidden", "1"}, {UNIMOD_DTT, "spec_1_position", "Anywhere"}, {UNIMOD_DTT, "spec_1_site", "C"}, {UNIMOD_DYn_2, "approved", "0"}, {UNIMOD_DYn_2, "delta_composition", "H(13) C(11) O"}, {UNIMOD_DYn_2, "spec_1_classification", "Other"}, {UNIMOD_DYn_2, "spec_1_hidden", "1"}, {UNIMOD_DYn_2, "spec_1_position", "Anywhere"}, {UNIMOD_DYn_2, "spec_1_site", "C"}, {UNIMOD_MesitylOxide, "approved", "0"}, {UNIMOD_MesitylOxide, "delta_composition", "H(10) C(6) O"}, {UNIMOD_MesitylOxide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MesitylOxide, "spec_1_hidden", "1"}, {UNIMOD_MesitylOxide, "spec_1_position", "Anywhere"}, {UNIMOD_MesitylOxide, "spec_1_site", "H"}, {UNIMOD_MesitylOxide, "spec_2_classification", "Chemical derivative"}, {UNIMOD_MesitylOxide, "spec_2_hidden", "1"}, {UNIMOD_MesitylOxide, "spec_2_position", "Anywhere"}, {UNIMOD_MesitylOxide, "spec_2_site", "K"}, {UNIMOD_MesitylOxide, "spec_3_classification", "Chemical derivative"}, {UNIMOD_MesitylOxide, "spec_3_hidden", "1"}, {UNIMOD_MesitylOxide, "spec_3_position", "Protein N-term"}, {UNIMOD_MesitylOxide, "spec_3_site", "N-term"}, {UNIMOD_methylol, "approved", "0"}, {UNIMOD_methylol, "delta_composition", "H(2) C O"}, {UNIMOD_methylol, "spec_1_classification", "Chemical derivative"}, {UNIMOD_methylol, "spec_1_hidden", "1"}, {UNIMOD_methylol, "spec_1_position", "Anywhere"}, {UNIMOD_methylol, "spec_1_site", "K"}, {UNIMOD_methylol, "spec_2_classification", "Chemical derivative"}, {UNIMOD_methylol, "spec_2_hidden", "1"}, {UNIMOD_methylol, "spec_2_position", "Anywhere"}, {UNIMOD_methylol, "spec_2_site", "W"}, {UNIMOD_methylol, "spec_3_classification", "Chemical derivative"}, {UNIMOD_methylol, "spec_3_hidden", "1"}, {UNIMOD_methylol, "spec_3_position", "Anywhere"}, {UNIMOD_methylol, "spec_3_site", "Y"}, {UNIMOD_Xlink_DSS_259_, "approved", "0"}, {UNIMOD_Xlink_DSS_259_, "delta_composition", "H(21) C(12) N O(5)"}, {UNIMOD_Xlink_DSS_259_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_259_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSS_259_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSS_259_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSS_259_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_259_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSS_259_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSS_259_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_176_, "approved", "0"}, {UNIMOD_Xlink_DSSO_176_, "delta_composition", "H(8) C(6) O(4) S"}, {UNIMOD_Xlink_DSSO_176_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_176_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_176_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_176_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_176_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_176_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_176_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_176_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_175_, "approved", "0"}, {UNIMOD_Xlink_DSSO_175_, "delta_composition", "H(9) C(6) N O(3) S"}, {UNIMOD_Xlink_DSSO_175_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_175_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_175_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_175_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_175_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_175_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_175_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_175_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_279_, "approved", "0"}, {UNIMOD_Xlink_DSSO_279_, "delta_composition", "H(17) C(10) N O(6) S"}, {UNIMOD_Xlink_DSSO_279_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_279_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_279_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_279_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_279_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_279_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_279_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_279_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_54_, "approved", "0"}, {UNIMOD_Xlink_DSSO_54_, "delta_composition", "H(2) C(3) O"}, {UNIMOD_Xlink_DSSO_54_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_54_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_54_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_54_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_54_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_54_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_54_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_54_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_86_, "approved", "0"}, {UNIMOD_Xlink_DSSO_86_, "delta_composition", "H(2) C(3) O S"}, {UNIMOD_Xlink_DSSO_86_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_86_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_86_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_86_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_86_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_86_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_86_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_86_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_104_, "approved", "0"}, {UNIMOD_Xlink_DSSO_104_, "delta_composition", "H(4) C(3) O(2) S"}, {UNIMOD_Xlink_DSSO_104_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_104_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_104_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_104_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_104_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_104_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_104_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_104_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_111_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_111_, "delta_composition", "H(5) C(5) N O(2)"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_111_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_85_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_85_, "delta_composition", "H(7) C(4) N O"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_85_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_213_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_213_, "delta_composition", "H(15) C(9) N(3) O(3)"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_213_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_214_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_214_, "delta_composition", "H(14) C(9) N(2) O(4)"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_214_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_317_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_317_, "delta_composition", "H(23) C(13) N(3) O(6)"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_317_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSSO_158_, "approved", "0"}, {UNIMOD_Xlink_DSSO_158_, "delta_composition", "H(6) C(6) O(3) S"}, {UNIMOD_Xlink_DSSO_158_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_158_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSSO_158_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSSO_158_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSSO_158_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSSO_158_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSSO_158_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSSO_158_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_EGS_226_, "approved", "0"}, {UNIMOD_Xlink_EGS_226_, "delta_composition", "H(10) C(10) O(6)"}, {UNIMOD_Xlink_EGS_226_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_226_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_EGS_226_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_EGS_226_, "spec_1_site", "K"}, {UNIMOD_Xlink_EGS_226_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_EGS_226_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_EGS_226_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_EGS_226_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DSS_138_, "approved", "0"}, {UNIMOD_Xlink_DSS_138_, "delta_composition", "H(10) C(8) O(2)"}, {UNIMOD_Xlink_DSS_138_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_138_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DSS_138_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DSS_138_, "spec_1_site", "K"}, {UNIMOD_Xlink_DSS_138_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DSS_138_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DSS_138_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DSS_138_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BuUrBu_196_, "approved", "0"}, {UNIMOD_Xlink_BuUrBu_196_, "delta_composition", "H(12) C(9) N(2) O(3)"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_1_site", "K"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BuUrBu_196_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DTBP_172_, "approved", "0"}, {UNIMOD_Xlink_DTBP_172_, "delta_composition", "H(8) C(6) N(2) S(2)"}, {UNIMOD_Xlink_DTBP_172_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTBP_172_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DTBP_172_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DTBP_172_, "spec_1_site", "K"}, {UNIMOD_Xlink_DTBP_172_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTBP_172_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DTBP_172_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DTBP_172_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DST_114_, "approved", "0"}, {UNIMOD_Xlink_DST_114_, "delta_composition", "H(2) C(4) O(4)"}, {UNIMOD_Xlink_DST_114_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_114_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DST_114_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DST_114_, "spec_1_site", "K"}, {UNIMOD_Xlink_DST_114_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_114_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DST_114_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DST_114_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DTSSP_174_, "approved", "0"}, {UNIMOD_Xlink_DTSSP_174_, "delta_composition", "H(6) C(6) O(2) S(2)"}, {UNIMOD_Xlink_DTSSP_174_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_174_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DTSSP_174_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DTSSP_174_, "spec_1_site", "K"}, {UNIMOD_Xlink_DTSSP_174_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DTSSP_174_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DTSSP_174_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DTSSP_174_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_SMCC_219_, "approved", "0"}, {UNIMOD_Xlink_SMCC_219_, "delta_composition", "H(13) C(12) N O(3)"}, {UNIMOD_Xlink_SMCC_219_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_219_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_SMCC_219_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_SMCC_219_, "spec_1_site", "C"}, {UNIMOD_Xlink_SMCC_219_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_219_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_SMCC_219_, "spec_2_position", "Anywhere"}, {UNIMOD_Xlink_SMCC_219_, "spec_2_site", "K"}, {UNIMOD_Xlink_SMCC_219_, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Xlink_SMCC_219_, "spec_3_hidden", "1"}, {UNIMOD_Xlink_SMCC_219_, "spec_3_position", "Protein N-term"}, {UNIMOD_Xlink_SMCC_219_, "spec_3_site", "N-term"}, {UNIMOD_Xlink_BS2G_96_, "approved", "0"}, {UNIMOD_Xlink_BS2G_96_, "delta_composition", "H(4) C(5) O(2)"}, {UNIMOD_Xlink_BS2G_96_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_96_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BS2G_96_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BS2G_96_, "spec_1_site", "K"}, {UNIMOD_Xlink_BS2G_96_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_96_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BS2G_96_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BS2G_96_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BS2G_113_, "approved", "0"}, {UNIMOD_Xlink_BS2G_113_, "delta_composition", "H(7) C(5) N O(2)"}, {UNIMOD_Xlink_BS2G_113_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_113_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BS2G_113_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BS2G_113_, "spec_1_site", "K"}, {UNIMOD_Xlink_BS2G_113_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_113_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BS2G_113_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BS2G_113_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BS2G_114_, "approved", "0"}, {UNIMOD_Xlink_BS2G_114_, "delta_composition", "H(6) C(5) O(3)"}, {UNIMOD_Xlink_BS2G_114_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_114_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BS2G_114_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BS2G_114_, "spec_1_site", "K"}, {UNIMOD_Xlink_BS2G_114_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_114_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BS2G_114_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BS2G_114_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_BS2G_217_, "approved", "0"}, {UNIMOD_Xlink_BS2G_217_, "delta_composition", "H(15) C(9) N O(5)"}, {UNIMOD_Xlink_BS2G_217_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_217_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_BS2G_217_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_BS2G_217_, "spec_1_site", "K"}, {UNIMOD_Xlink_BS2G_217_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_BS2G_217_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_BS2G_217_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_BS2G_217_, "spec_2_site", "N-term"}, {UNIMOD_Cation_Al_III_, "approved", "0"}, {UNIMOD_Cation_Al_III_, "delta_composition", "H(-3) Al"}, {UNIMOD_Cation_Al_III_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Al_III_, "spec_1_classification", "Artefact"}, {UNIMOD_Cation_Al_III_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Al_III_, "spec_1_hidden", "1"}, {UNIMOD_Cation_Al_III_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Al_III_, "spec_1_position", "Anywhere"}, {UNIMOD_Cation_Al_III_, "spec_1_site", "D"}, {UNIMOD_Cation_Al_III_, "spec_1_site", "E"}, {UNIMOD_Cation_Al_III_, "spec_2_classification", "Artefact"}, {UNIMOD_Cation_Al_III_, "spec_2_hidden", "1"}, {UNIMOD_Cation_Al_III_, "spec_2_position", "Any C-term"}, {UNIMOD_Cation_Al_III_, "spec_2_site", "C-term"}, {UNIMOD_Xlink_DMP_139_, "approved", "0"}, {UNIMOD_Xlink_DMP_139_, "delta_composition", "H(13) C(7) N(3)"}, {UNIMOD_Xlink_DMP_139_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_139_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DMP_139_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DMP_139_, "spec_1_site", "K"}, {UNIMOD_Xlink_DMP_139_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_139_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DMP_139_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DMP_139_, "spec_2_site", "N-term"}, {UNIMOD_Xlink_DMP_122_, "approved", "0"}, {UNIMOD_Xlink_DMP_122_, "delta_composition", "H(10) C(7) N(2)"}, {UNIMOD_Xlink_DMP_122_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_122_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DMP_122_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DMP_122_, "spec_1_site", "K"}, {UNIMOD_Xlink_DMP_122_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DMP_122_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DMP_122_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DMP_122_, "spec_2_site", "N-term"}, {UNIMOD_glyoxalAGE, "approved", "0"}, {UNIMOD_glyoxalAGE, "delta_composition", "H(-2) C(2)"}, {UNIMOD_glyoxalAGE, "spec_1_classification", "Post-translational"}, {UNIMOD_glyoxalAGE, "spec_1_hidden", "1"}, {UNIMOD_glyoxalAGE, "spec_1_position", "Anywhere"}, {UNIMOD_glyoxalAGE, "spec_1_site", "R"}, {UNIMOD_Met__AspSA, "approved", "0"}, {UNIMOD_Met__AspSA, "delta_composition", "H(-4) C(-1) O S(-1)"}, {UNIMOD_Met__AspSA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Met__AspSA, "spec_1_hidden", "1"}, {UNIMOD_Met__AspSA, "spec_1_position", "Anywhere"}, {UNIMOD_Met__AspSA, "spec_1_site", "M"}, {UNIMOD_Decarboxylation, "approved", "0"}, {UNIMOD_Decarboxylation, "delta_composition", "H(-2) C(-1) O(-1)"}, {UNIMOD_Decarboxylation, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Decarboxylation, "spec_1_hidden", "1"}, {UNIMOD_Decarboxylation, "spec_1_position", "Anywhere"}, {UNIMOD_Decarboxylation, "spec_1_site", "D"}, {UNIMOD_Decarboxylation, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Decarboxylation, "spec_2_hidden", "1"}, {UNIMOD_Decarboxylation, "spec_2_position", "Anywhere"}, {UNIMOD_Decarboxylation, "spec_2_site", "E"}, {UNIMOD_Aspartylurea, "approved", "0"}, {UNIMOD_Aspartylurea, "delta_composition", "H(-2) C(-1) N(-2) O(2)"}, {UNIMOD_Aspartylurea, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Aspartylurea, "spec_1_hidden", "1"}, {UNIMOD_Aspartylurea, "spec_1_position", "Anywhere"}, {UNIMOD_Aspartylurea, "spec_1_site", "H"}, {UNIMOD_Formylasparagine, "approved", "0"}, {UNIMOD_Formylasparagine, "delta_composition", "H(-1) C(-1) N(-1) O(2)"}, {UNIMOD_Formylasparagine, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Formylasparagine, "spec_1_hidden", "1"}, {UNIMOD_Formylasparagine, "spec_1_position", "Anywhere"}, {UNIMOD_Formylasparagine, "spec_1_site", "H"}, {UNIMOD_Carbonyl, "approved", "0"}, {UNIMOD_Carbonyl, "delta_composition", "H(-2) O"}, {UNIMOD_Carbonyl, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_1_hidden", "1"}, {UNIMOD_Carbonyl, "spec_1_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_1_site", "A"}, {UNIMOD_Carbonyl, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_2_hidden", "1"}, {UNIMOD_Carbonyl, "spec_2_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_2_site", "E"}, {UNIMOD_Carbonyl, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_3_hidden", "1"}, {UNIMOD_Carbonyl, "spec_3_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_3_site", "I"}, {UNIMOD_Carbonyl, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_4_hidden", "1"}, {UNIMOD_Carbonyl, "spec_4_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_4_site", "L"}, {UNIMOD_Carbonyl, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_5_hidden", "1"}, {UNIMOD_Carbonyl, "spec_5_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_5_site", "Q"}, {UNIMOD_Carbonyl, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_6_hidden", "1"}, {UNIMOD_Carbonyl, "spec_6_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_6_site", "R"}, {UNIMOD_Carbonyl, "spec_7_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_7_hidden", "1"}, {UNIMOD_Carbonyl, "spec_7_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_7_site", "S"}, {UNIMOD_Carbonyl, "spec_8_classification", "Chemical derivative"}, {UNIMOD_Carbonyl, "spec_8_hidden", "1"}, {UNIMOD_Carbonyl, "spec_8_position", "Anywhere"}, {UNIMOD_Carbonyl, "spec_8_site", "V"}, {UNIMOD_AFB1_Dialdehyde, "approved", "0"}, {UNIMOD_AFB1_Dialdehyde, "delta_composition", "H(10) C(17) O(6)"}, {UNIMOD_AFB1_Dialdehyde, "spec_1_classification", "Post-translational"}, {UNIMOD_AFB1_Dialdehyde, "spec_1_hidden", "1"}, {UNIMOD_AFB1_Dialdehyde, "spec_1_position", "Anywhere"}, {UNIMOD_AFB1_Dialdehyde, "spec_1_site", "K"}, {UNIMOD_Pro__HAVA, "approved", "0"}, {UNIMOD_Pro__HAVA, "delta_composition", "H(2) O"}, {UNIMOD_Pro__HAVA, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Pro__HAVA, "spec_1_hidden", "1"}, {UNIMOD_Pro__HAVA, "spec_1_position", "Anywhere"}, {UNIMOD_Pro__HAVA, "spec_1_site", "P"}, {UNIMOD_Delta_H__4_O_2_, "approved", "0"}, {UNIMOD_Delta_H__4_O_2_, "delta_composition", "H(-4) O(2)"}, {UNIMOD_Delta_H__4_O_2_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H__4_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H__4_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H__4_O_2_, "spec_1_site", "W"}, {UNIMOD_Delta_H__4_O_3_, "approved", "0"}, {UNIMOD_Delta_H__4_O_3_, "delta_composition", "H(-4) O(3)"}, {UNIMOD_Delta_H__4_O_3_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H__4_O_3_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H__4_O_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H__4_O_3_, "spec_1_site", "W"}, {UNIMOD_Delta_O_4_, "approved", "0"}, {UNIMOD_Delta_O_4_, "delta_composition", "O(4)"}, {UNIMOD_Delta_O_4_, "spec_1_classification", "Artefact"}, {UNIMOD_Delta_O_4_, "spec_1_hidden", "1"}, {UNIMOD_Delta_O_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_O_4_, "spec_1_site", "W"}, {UNIMOD_Delta_H_3_C_3_O_2_, "approved", "0"}, {UNIMOD_Delta_H_3_C_3_O_2_, "delta_composition", "H(3) C(3) O(2)"}, {UNIMOD_Delta_H_3_C_3_O_2_, "spec_1_classification", "Artefact"}, {UNIMOD_Delta_H_3_C_3_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_3_C_3_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_3_C_3_O_2_, "spec_1_site", "K"}, {UNIMOD_Delta_H_4_C_5_O_1_, "approved", "0"}, {UNIMOD_Delta_H_4_C_5_O_1_, "delta_composition", "H(4) C(5) O"}, {UNIMOD_Delta_H_4_C_5_O_1_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_4_C_5_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_4_C_5_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_4_C_5_O_1_, "spec_1_site", "R"}, {UNIMOD_Delta_H_10_C_8_O_1_, "approved", "0"}, {UNIMOD_Delta_H_10_C_8_O_1_, "delta_composition", "H(10) C(8) O"}, {UNIMOD_Delta_H_10_C_8_O_1_, "spec_1_classification", "Artefact"}, {UNIMOD_Delta_H_10_C_8_O_1_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_10_C_8_O_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_10_C_8_O_1_, "spec_1_site", "K"}, {UNIMOD_Delta_H_6_C_7_O_4_, "approved", "0"}, {UNIMOD_Delta_H_6_C_7_O_4_, "delta_composition", "H(6) C(7) O(4)"}, {UNIMOD_Delta_H_6_C_7_O_4_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Delta_H_6_C_7_O_4_, "spec_1_hidden", "1"}, {UNIMOD_Delta_H_6_C_7_O_4_, "spec_1_position", "Anywhere"}, {UNIMOD_Delta_H_6_C_7_O_4_, "spec_1_site", "R"}, {UNIMOD_Pent_2_, "approved", "0"}, {UNIMOD_Pent_2_, "delta_composition", "Pent(2)"}, {UNIMOD_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Pent_2_, "spec_1_site", "T"}, {UNIMOD_Pent_2_, "spec_1_site", "S"}, {UNIMOD_Pent_1_HexNAc_1_, "approved", "0"}, {UNIMOD_Pent_1_HexNAc_1_, "delta_composition", "Pent HexNAc"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Pent_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_2_Sulf_1_, "delta_composition", "O(3) S Hex(2)"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "approved", "0"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "delta_composition", "Me Pent(2) Hex"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_Pent_2_Me_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_Sulf_1_, "approved", "0"}, {UNIMOD_HexNAc_2_Sulf_1_, "delta_composition", "O(3) S HexNAc(2)"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_HexNAc_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "approved", "0"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "delta_composition", "Me Pent(3) Hex"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_Pent_3_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_Pent_2_, "approved", "0"}, {UNIMOD_Hex_2_Pent_2_, "delta_composition", "Pent(2) Hex(2)"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_site", "S"}, {UNIMOD_Hex_2_Pent_2_, "spec_1_site", "T"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "approved", "0"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "delta_composition", "Me Pent(2) Hex(2)"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_Pent_2_Me_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexA_1_, "approved", "0"}, {UNIMOD_Hex_4_HexA_1_, "delta_composition", "Hex(4) HexA"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_4_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "approved", "0"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "delta_composition", "Pent Hex(2) HexA HexNAc"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "delta_composition", "Hex(3) HexA HexNAc"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_1_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "delta_composition", "O(3) S dHex(2) Hex HexNAc(2)"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_HexA_2_HexNAc_3_, "approved", "0"}, {UNIMOD_HexA_2_HexNAc_3_, "delta_composition", "HexA(2) HexNAc(3)"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_hidden", "1"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_site", "S"}, {UNIMOD_HexA_2_HexNAc_3_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "approved", "0"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "delta_composition", "dHex Hex(4) HexA"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_4_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_5_HexA_1_, "approved", "0"}, {UNIMOD_Hex_5_HexA_1_, "delta_composition", "Hex(5) HexA"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_site", "S"}, {UNIMOD_Hex_5_HexA_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "delta_composition", "Hex(4) HexA HexNAc"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexA_1_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "delta_composition", "dHex(3) Hex(3) HexNAc"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_3_HexNAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_6_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_1_, "delta_composition", "Hex(6) HexNAc"}, {UNIMOD_Hex_6_HexNAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "approved", "0"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "delta_composition", "Sulf dHex Hex HexNAc(4)"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "delta_composition", "dHex Hex(2) HexNAc NeuAc(2)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "delta_composition", "dHex(3) Hex(3) HexNAc(2)"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_site", "T"}, {UNIMOD_dHex_3_Hex_3_HexNAc_2_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "delta_composition", "Sulf dHex(2) Hex HexNAc(4)"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "delta_composition", "Sulf(2) dHex Hex(2) HexNAc(4)"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_Hex_9_, "approved", "0"}, {UNIMOD_Hex_9_, "delta_composition", "Hex(9)"}, {UNIMOD_Hex_9_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_9_, "spec_1_hidden", "1"}, {UNIMOD_Hex_9_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_9_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "delta_composition", "Sulf dHex(2) Hex(3) HexNAc(3)"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "delta_composition", "Me dHex(2) Hex(5) HexNAc(2)"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "delta_composition", "Sulf(2) dHex(2) Hex(2) HexNAc(4)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_Hex_9_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_9_HexNAc_1_, "delta_composition", "Hex(9) HexNAc"}, {UNIMOD_Hex_9_HexNAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_9_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_9_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_9_HexNAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "approved", "0"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "delta_composition", "Sulf(2) dHex(3) Hex(2) HexNAc(4)"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "S"}, {UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_, "spec_1_site", "T"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "approved", "0"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "delta_composition", "Hex(4) HexNAc(4) NeuGc"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_classification", "O-linked glycosylation"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_hidden", "1"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_site", "S"}, {UNIMOD_Hex_4_HexNAc_4_NeuGc_1_, "spec_2_site", "T"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "delta_composition", "dHex(4) Hex(3) HexNAc(2) NeuAc"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_site", "T"}, {UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "delta_composition", "Hex(3) HexNAc(5) NeuAc"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_5_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_Hex_10_HexNAc_1_, "approved", "0"}, {UNIMOD_Hex_10_HexNAc_1_, "delta_composition", "Hex(10) HexNAc"}, {UNIMOD_Hex_10_HexNAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_10_HexNAc_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_10_HexNAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_10_HexNAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "approved", "0"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "delta_composition", "dHex Hex(8) HexNAc(2)"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "spec_1_hidden", "1"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_1_Hex_8_HexNAc_2_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "delta_composition", "Hex(3) HexNAc(4) NeuAc(2)"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_4_NeuAc_2_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "delta_composition", "dHex(2) Hex(3) HexNAc(4) NeuAc"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_, "spec_1_site", "N"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "approved", "0"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "delta_composition", "Sulf dHex(2) Hex(2) HexNAc(6)"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_hidden", "1"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_position", "Anywhere"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_site", "S"}, {UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_, "spec_1_site", "T"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "delta_composition", "Ac Hex(5) HexNAc(4) NeuAc"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_, "spec_1_site", "N"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "approved", "0"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "delta_composition", "Hex(3) HexNAc(3) NeuAc(3)"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_site", "S"}, {UNIMOD_Hex_3_HexNAc_3_NeuAc_3_, "spec_1_site", "T"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "approved", "0"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "delta_composition", "Ac(2) Hex(5) HexNAc(4) NeuAc"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "spec_1_hidden", "1"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_, "spec_1_site", "N"}, {UNIMOD_Unknown_162, "approved", "0"}, {UNIMOD_Unknown_162, "delta_composition", "H(18) C(8) O(3)"}, {UNIMOD_Unknown_162, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_162, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_162, "spec_1_hidden", "1"}, {UNIMOD_Unknown_162, "spec_1_hidden", "1"}, {UNIMOD_Unknown_162, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_162, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_162, "spec_1_site", "E"}, {UNIMOD_Unknown_162, "spec_1_site", "D"}, {UNIMOD_Unknown_162, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_162, "spec_2_hidden", "1"}, {UNIMOD_Unknown_162, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_162, "spec_2_site", "C-term"}, {UNIMOD_Unknown_162, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_162, "spec_3_hidden", "1"}, {UNIMOD_Unknown_162, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_162, "spec_3_site", "N-term"}, {UNIMOD_Unknown_177, "approved", "0"}, {UNIMOD_Unknown_177, "delta_composition", "H(-7) O Fe(3)"}, {UNIMOD_Unknown_177, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_177, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_177, "spec_1_hidden", "1"}, {UNIMOD_Unknown_177, "spec_1_hidden", "1"}, {UNIMOD_Unknown_177, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_177, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_177, "spec_1_site", "D"}, {UNIMOD_Unknown_177, "spec_1_site", "E"}, {UNIMOD_Unknown_177, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_177, "spec_2_hidden", "1"}, {UNIMOD_Unknown_177, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_177, "spec_2_site", "C-term"}, {UNIMOD_Unknown_177, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_177, "spec_3_hidden", "1"}, {UNIMOD_Unknown_177, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_177, "spec_3_site", "N-term"}, {UNIMOD_Unknown_210, "approved", "0"}, {UNIMOD_Unknown_210, "delta_composition", "H(22) C(13) O(2)"}, {UNIMOD_Unknown_210, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_210, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_210, "spec_1_hidden", "1"}, {UNIMOD_Unknown_210, "spec_1_hidden", "1"}, {UNIMOD_Unknown_210, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_210, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_210, "spec_1_site", "D"}, {UNIMOD_Unknown_210, "spec_1_site", "E"}, {UNIMOD_Unknown_210, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_210, "spec_2_hidden", "1"}, {UNIMOD_Unknown_210, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_210, "spec_2_site", "C-term"}, {UNIMOD_Unknown_210, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_210, "spec_3_hidden", "1"}, {UNIMOD_Unknown_210, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_210, "spec_3_site", "N-term"}, {UNIMOD_Unknown_216, "approved", "0"}, {UNIMOD_Unknown_216, "delta_composition", "H(16) C(10) O(5)"}, {UNIMOD_Unknown_216, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_216, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_216, "spec_1_hidden", "1"}, {UNIMOD_Unknown_216, "spec_1_hidden", "1"}, {UNIMOD_Unknown_216, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_216, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_216, "spec_1_site", "D"}, {UNIMOD_Unknown_216, "spec_1_site", "E"}, {UNIMOD_Unknown_216, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_216, "spec_2_hidden", "1"}, {UNIMOD_Unknown_216, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_216, "spec_2_site", "C-term"}, {UNIMOD_Unknown_216, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_216, "spec_3_hidden", "1"}, {UNIMOD_Unknown_216, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_216, "spec_3_site", "N-term"}, {UNIMOD_Unknown_234, "approved", "0"}, {UNIMOD_Unknown_234, "delta_composition", "H(14) C(9) O(7)"}, {UNIMOD_Unknown_234, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_234, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_234, "spec_1_hidden", "1"}, {UNIMOD_Unknown_234, "spec_1_hidden", "1"}, {UNIMOD_Unknown_234, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_234, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_234, "spec_1_site", "D"}, {UNIMOD_Unknown_234, "spec_1_site", "E"}, {UNIMOD_Unknown_234, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_234, "spec_2_hidden", "1"}, {UNIMOD_Unknown_234, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_234, "spec_2_site", "C-term"}, {UNIMOD_Unknown_234, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_234, "spec_3_hidden", "1"}, {UNIMOD_Unknown_234, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_234, "spec_3_site", "N-term"}, {UNIMOD_Unknown_248, "approved", "0"}, {UNIMOD_Unknown_248, "delta_composition", "H(28) C(13) O(4)"}, {UNIMOD_Unknown_248, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_248, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_248, "spec_1_hidden", "1"}, {UNIMOD_Unknown_248, "spec_1_hidden", "1"}, {UNIMOD_Unknown_248, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_248, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_248, "spec_1_site", "D"}, {UNIMOD_Unknown_248, "spec_1_site", "E"}, {UNIMOD_Unknown_248, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_248, "spec_2_hidden", "1"}, {UNIMOD_Unknown_248, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_248, "spec_2_site", "C-term"}, {UNIMOD_Unknown_248, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_248, "spec_3_hidden", "1"}, {UNIMOD_Unknown_248, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_248, "spec_3_site", "N-term"}, {UNIMOD_Unknown_250, "approved", "0"}, {UNIMOD_Unknown_250, "delta_composition", "H(4) C(10) N O(5) S"}, {UNIMOD_Unknown_250, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_250, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_250, "spec_1_hidden", "1"}, {UNIMOD_Unknown_250, "spec_1_hidden", "1"}, {UNIMOD_Unknown_250, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_250, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_250, "spec_1_site", "D"}, {UNIMOD_Unknown_250, "spec_1_site", "E"}, {UNIMOD_Unknown_250, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_250, "spec_2_hidden", "1"}, {UNIMOD_Unknown_250, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_250, "spec_2_site", "C-term"}, {UNIMOD_Unknown_250, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_250, "spec_3_hidden", "1"}, {UNIMOD_Unknown_250, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_250, "spec_3_site", "N-term"}, {UNIMOD_Unknown_302, "approved", "0"}, {UNIMOD_Unknown_302, "delta_composition", "H(8) C(4) N(5) O(7) S(2)"}, {UNIMOD_Unknown_302, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_302, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_302, "spec_1_hidden", "1"}, {UNIMOD_Unknown_302, "spec_1_hidden", "1"}, {UNIMOD_Unknown_302, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_302, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_302, "spec_1_site", "D"}, {UNIMOD_Unknown_302, "spec_1_site", "E"}, {UNIMOD_Unknown_302, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_302, "spec_2_hidden", "1"}, {UNIMOD_Unknown_302, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_302, "spec_2_site", "C-term"}, {UNIMOD_Unknown_302, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_302, "spec_3_hidden", "1"}, {UNIMOD_Unknown_302, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_302, "spec_3_site", "N-term"}, {UNIMOD_Unknown_306, "approved", "0"}, {UNIMOD_Unknown_306, "delta_composition", "H(18) C(12) O(9)"}, {UNIMOD_Unknown_306, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_306, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_306, "spec_1_hidden", "1"}, {UNIMOD_Unknown_306, "spec_1_hidden", "1"}, {UNIMOD_Unknown_306, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_306, "spec_1_position", "Anywhere"}, {UNIMOD_Unknown_306, "spec_1_site", "D"}, {UNIMOD_Unknown_306, "spec_1_site", "E"}, {UNIMOD_Unknown_306, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_306, "spec_2_hidden", "1"}, {UNIMOD_Unknown_306, "spec_2_position", "Any C-term"}, {UNIMOD_Unknown_306, "spec_2_site", "C-term"}, {UNIMOD_Unknown_306, "spec_3_classification", "Artefact"}, {UNIMOD_Unknown_306, "spec_3_hidden", "1"}, {UNIMOD_Unknown_306, "spec_3_position", "Any N-term"}, {UNIMOD_Unknown_306, "spec_3_site", "N-term"}, {UNIMOD_Unknown_420, "approved", "0"}, {UNIMOD_Unknown_420, "delta_composition", "H(24) C(12) N(2) O(6) S(4)"}, {UNIMOD_Unknown_420, "spec_1_classification", "Artefact"}, {UNIMOD_Unknown_420, "spec_1_hidden", "1"}, {UNIMOD_Unknown_420, "spec_1_position", "Any C-term"}, {UNIMOD_Unknown_420, "spec_1_site", "C-term"}, {UNIMOD_Unknown_420, "spec_2_classification", "Artefact"}, {UNIMOD_Unknown_420, "spec_2_hidden", "1"}, {UNIMOD_Unknown_420, "spec_2_position", "Any N-term"}, {UNIMOD_Unknown_420, "spec_2_site", "N-term"}, {UNIMOD_Diethylphosphothione, "approved", "0"}, {UNIMOD_Diethylphosphothione, "delta_composition", "H(9) C(4) O(2) P S"}, {UNIMOD_Diethylphosphothione, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_1_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_1_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_1_site", "C"}, {UNIMOD_Diethylphosphothione, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_2_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_2_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_2_site", "H"}, {UNIMOD_Diethylphosphothione, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_3_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_3_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_3_site", "K"}, {UNIMOD_Diethylphosphothione, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_4_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_4_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_4_site", "S"}, {UNIMOD_Diethylphosphothione, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_5_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_5_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_5_site", "T"}, {UNIMOD_Diethylphosphothione, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Diethylphosphothione, "spec_6_hidden", "1"}, {UNIMOD_Diethylphosphothione, "spec_6_position", "Anywhere"}, {UNIMOD_Diethylphosphothione, "spec_6_site", "Y"}, {UNIMOD_Dimethylphosphothione, "approved", "0"}, {UNIMOD_Dimethylphosphothione, "delta_composition", "H(5) C(2) O(2) P S"}, {UNIMOD_Dimethylphosphothione, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_1_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_1_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_1_site", "C"}, {UNIMOD_Dimethylphosphothione, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_2_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_2_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_2_site", "H"}, {UNIMOD_Dimethylphosphothione, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_3_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_3_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_3_site", "K"}, {UNIMOD_Dimethylphosphothione, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_4_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_4_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_4_site", "S"}, {UNIMOD_Dimethylphosphothione, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_5_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_5_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_5_site", "T"}, {UNIMOD_Dimethylphosphothione, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Dimethylphosphothione, "spec_6_hidden", "1"}, {UNIMOD_Dimethylphosphothione, "spec_6_position", "Anywhere"}, {UNIMOD_Dimethylphosphothione, "spec_6_site", "Y"}, {UNIMOD_monomethylphosphothione, "approved", "0"}, {UNIMOD_monomethylphosphothione, "delta_composition", "H(3) C O(2) P S"}, {UNIMOD_monomethylphosphothione, "spec_1_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_1_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_1_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_1_site", "C"}, {UNIMOD_monomethylphosphothione, "spec_2_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_2_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_2_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_2_site", "H"}, {UNIMOD_monomethylphosphothione, "spec_3_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_3_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_3_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_3_site", "K"}, {UNIMOD_monomethylphosphothione, "spec_4_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_4_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_4_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_4_site", "S"}, {UNIMOD_monomethylphosphothione, "spec_5_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_5_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_5_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_5_site", "T"}, {UNIMOD_monomethylphosphothione, "spec_6_classification", "Chemical derivative"}, {UNIMOD_monomethylphosphothione, "spec_6_hidden", "1"}, {UNIMOD_monomethylphosphothione, "spec_6_position", "Anywhere"}, {UNIMOD_monomethylphosphothione, "spec_6_site", "Y"}, {UNIMOD_CIGG, "approved", "0"}, {UNIMOD_CIGG, "delta_composition", "H(22) C(13) N(4) O(4) S"}, {UNIMOD_CIGG, "spec_1_classification", "Post-translational"}, {UNIMOD_CIGG, "spec_1_hidden", "1"}, {UNIMOD_CIGG, "spec_1_position", "Anywhere"}, {UNIMOD_CIGG, "spec_1_site", "K"}, {UNIMOD_GNLLFLACYCIGG, "approved", "0"}, {UNIMOD_GNLLFLACYCIGG, "delta_composition", "H(92) C(61) N(14) O(15) S(2)"}, {UNIMOD_GNLLFLACYCIGG, "spec_1_classification", "Post-translational"}, {UNIMOD_GNLLFLACYCIGG, "spec_1_hidden", "1"}, {UNIMOD_GNLLFLACYCIGG, "spec_1_position", "Anywhere"}, {UNIMOD_GNLLFLACYCIGG, "spec_1_site", "K"}, {UNIMOD_serotonylation, "approved", "0"}, {UNIMOD_serotonylation, "delta_composition", "H(9) C(10) N O"}, {UNIMOD_serotonylation, "spec_1_classification", "Post-translational"}, {UNIMOD_serotonylation, "spec_1_hidden", "1"}, {UNIMOD_serotonylation, "spec_1_position", "Anywhere"}, {UNIMOD_serotonylation, "spec_1_site", "Q"}, {UNIMOD_TMPP_Ac_13C_9_, "approved", "0"}, {UNIMOD_TMPP_Ac_13C_9_, "delta_composition", "H(33) C(20) 13C(9) O(10) P"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_1_hidden", "1"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_1_position", "Any N-term"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_1_site", "N-term"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_2_classification", "Artefact"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_2_hidden", "1"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_2_position", "Anywhere"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_2_site", "K"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_3_classification", "Artefact"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_3_hidden", "1"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_3_position", "Anywhere"}, {UNIMOD_TMPP_Ac_13C_9_, "spec_3_site", "Y"}, {UNIMOD_Xlink_DST_56_, "approved", "0"}, {UNIMOD_Xlink_DST_56_, "delta_composition", "C(2) O(2)"}, {UNIMOD_Xlink_DST_56_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_56_, "spec_1_hidden", "1"}, {UNIMOD_Xlink_DST_56_, "spec_1_position", "Anywhere"}, {UNIMOD_Xlink_DST_56_, "spec_1_site", "K"}, {UNIMOD_Xlink_DST_56_, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Xlink_DST_56_, "spec_2_hidden", "1"}, {UNIMOD_Xlink_DST_56_, "spec_2_position", "Protein N-term"}, {UNIMOD_Xlink_DST_56_, "spec_2_site", "N-term"}, {UNIMOD_ZQG, "approved", "0"}, {UNIMOD_ZQG, "delta_composition", "H(16) C(15) N(2) O(6)"}, {UNIMOD_ZQG, "spec_1_classification", "Chemical derivative"}, {UNIMOD_ZQG, "spec_1_hidden", "1"}, {UNIMOD_ZQG, "spec_1_position", "Anywhere"}, {UNIMOD_ZQG, "spec_1_site", "K"}, {UNIMOD_Haloxon, "approved", "0"}, {UNIMOD_Haloxon, "delta_composition", "H(7) C(4) O(3) P Cl(2)"}, {UNIMOD_Haloxon, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_1_hidden", "1"}, {UNIMOD_Haloxon, "spec_1_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_1_site", "C"}, {UNIMOD_Haloxon, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_2_hidden", "1"}, {UNIMOD_Haloxon, "spec_2_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_2_site", "H"}, {UNIMOD_Haloxon, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_3_hidden", "1"}, {UNIMOD_Haloxon, "spec_3_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_3_site", "K"}, {UNIMOD_Haloxon, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_4_hidden", "1"}, {UNIMOD_Haloxon, "spec_4_hidden", "1"}, {UNIMOD_Haloxon, "spec_4_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_4_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_4_site", "T"}, {UNIMOD_Haloxon, "spec_4_site", "S"}, {UNIMOD_Haloxon, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Haloxon, "spec_5_hidden", "1"}, {UNIMOD_Haloxon, "spec_5_position", "Anywhere"}, {UNIMOD_Haloxon, "spec_5_site", "Y"}, {UNIMOD_Methamidophos_S, "approved", "0"}, {UNIMOD_Methamidophos_S, "delta_composition", "H(4) C N O P S"}, {UNIMOD_Methamidophos_S, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_1_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_1_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_1_site", "C"}, {UNIMOD_Methamidophos_S, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_2_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_2_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_2_site", "H"}, {UNIMOD_Methamidophos_S, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_3_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_3_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_3_site", "K"}, {UNIMOD_Methamidophos_S, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_4_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_4_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_4_site", "S"}, {UNIMOD_Methamidophos_S, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_5_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_5_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_5_site", "T"}, {UNIMOD_Methamidophos_S, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_S, "spec_6_hidden", "1"}, {UNIMOD_Methamidophos_S, "spec_6_position", "Anywhere"}, {UNIMOD_Methamidophos_S, "spec_6_site", "Y"}, {UNIMOD_Methamidophos_O, "approved", "0"}, {UNIMOD_Methamidophos_O, "delta_composition", "H(4) C N O(2) P"}, {UNIMOD_Methamidophos_O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_1_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_1_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_1_site", "C"}, {UNIMOD_Methamidophos_O, "spec_2_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_2_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_2_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_2_site", "H"}, {UNIMOD_Methamidophos_O, "spec_3_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_3_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_3_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_3_site", "K"}, {UNIMOD_Methamidophos_O, "spec_4_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_4_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_4_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_4_site", "S"}, {UNIMOD_Methamidophos_O, "spec_5_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_5_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_5_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_5_site", "T"}, {UNIMOD_Methamidophos_O, "spec_6_classification", "Chemical derivative"}, {UNIMOD_Methamidophos_O, "spec_6_hidden", "1"}, {UNIMOD_Methamidophos_O, "spec_6_position", "Anywhere"}, {UNIMOD_Methamidophos_O, "spec_6_site", "Y"}, {UNIMOD_Nitrene, "approved", "0"}, {UNIMOD_Nitrene, "delta_composition", "H(-1) N"}, {UNIMOD_Nitrene, "spec_1_classification", "Artefact"}, {UNIMOD_Nitrene, "spec_1_hidden", "1"}, {UNIMOD_Nitrene, "spec_1_position", "Anywhere"}, {UNIMOD_Nitrene, "spec_1_site", "Y"}, {UNIMOD_shTMT, "approved", "0"}, {UNIMOD_shTMT, "delta_composition", "H(20) C(3) 13C(9) 15N(2) O(2)"}, {UNIMOD_shTMT, "spec_1_classification", "Chemical derivative"}, {UNIMOD_shTMT, "spec_1_hidden", "1"}, {UNIMOD_shTMT, "spec_1_position", "Anywhere"}, {UNIMOD_shTMT, "spec_1_site", "K"}, {UNIMOD_shTMT, "spec_2_classification", "Chemical derivative"}, {UNIMOD_shTMT, "spec_2_hidden", "1"}, {UNIMOD_shTMT, "spec_2_position", "Protein N-term"}, {UNIMOD_shTMT, "spec_2_site", "N-term"}, {UNIMOD_shTMT, "spec_3_classification", "Chemical derivative"}, {UNIMOD_shTMT, "spec_3_hidden", "1"}, {UNIMOD_shTMT, "spec_3_position", "Any N-term"}, {UNIMOD_shTMT, "spec_3_site", "N-term"}, {UNIMOD_TMTpro, "approved", "0"}, {UNIMOD_TMTpro, "delta_composition", "H(25) C(8) 13C(7) N 15N(2) O(3)"}, {UNIMOD_TMTpro, "spec_1_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_1_hidden", "0"}, {UNIMOD_TMTpro, "spec_1_position", "Anywhere"}, {UNIMOD_TMTpro, "spec_1_site", "K"}, {UNIMOD_TMTpro, "spec_2_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_2_hidden", "0"}, {UNIMOD_TMTpro, "spec_2_position", "Any N-term"}, {UNIMOD_TMTpro, "spec_2_site", "N-term"}, {UNIMOD_TMTpro, "spec_3_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_3_hidden", "1"}, {UNIMOD_TMTpro, "spec_3_position", "Protein N-term"}, {UNIMOD_TMTpro, "spec_3_site", "N-term"}, {UNIMOD_TMTpro, "spec_4_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_4_hidden", "1"}, {UNIMOD_TMTpro, "spec_4_position", "Anywhere"}, {UNIMOD_TMTpro, "spec_4_site", "H"}, {UNIMOD_TMTpro, "spec_5_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_5_hidden", "1"}, {UNIMOD_TMTpro, "spec_5_position", "Anywhere"}, {UNIMOD_TMTpro, "spec_5_site", "S"}, {UNIMOD_TMTpro, "spec_6_classification", "Isotopic label"}, {UNIMOD_TMTpro, "spec_6_hidden", "1"}, {UNIMOD_TMTpro, "spec_6_position", "Anywhere"}, {UNIMOD_TMTpro, "spec_6_site", "T"}, {UNIMOD_TMTpro_zero, "approved", "0"}, {UNIMOD_TMTpro_zero, "delta_composition", "H(25) C(15) N(3) O(3)"}, {UNIMOD_TMTpro_zero, "spec_1_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_1_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_1_position", "Anywhere"}, {UNIMOD_TMTpro_zero, "spec_1_site", "K"}, {UNIMOD_TMTpro_zero, "spec_2_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_2_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_2_position", "Any N-term"}, {UNIMOD_TMTpro_zero, "spec_2_site", "N-term"}, {UNIMOD_TMTpro_zero, "spec_3_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_3_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_3_position", "Protein N-term"}, {UNIMOD_TMTpro_zero, "spec_3_site", "N-term"}, {UNIMOD_TMTpro_zero, "spec_4_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_4_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_4_position", "Anywhere"}, {UNIMOD_TMTpro_zero, "spec_4_site", "H"}, {UNIMOD_TMTpro_zero, "spec_5_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_5_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_5_position", "Anywhere"}, {UNIMOD_TMTpro_zero, "spec_5_site", "S"}, {UNIMOD_TMTpro_zero, "spec_6_classification", "Chemical derivative"}, {UNIMOD_TMTpro_zero, "spec_6_hidden", "1"}, {UNIMOD_TMTpro_zero, "spec_6_position", "Anywhere"}, {UNIMOD_TMTpro_zero, "spec_6_site", "T"}, {UNIMOD_Kdo, "approved", "0"}, {UNIMOD_Kdo, "delta_composition", "H(12) C(8) O(7)"}, {UNIMOD_Kdo, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Kdo, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Kdo, "spec_1_hidden", "1"}, {UNIMOD_Kdo, "spec_1_hidden", "1"}, {UNIMOD_Kdo, "spec_1_position", "Anywhere"}, {UNIMOD_Kdo, "spec_1_position", "Anywhere"}, {UNIMOD_Kdo, "spec_1_site", "T"}, {UNIMOD_Kdo, "spec_1_site", "S"}, {UNIMOD_Andro_H2O, "approved", "0"}, {UNIMOD_Andro_H2O, "delta_composition", "H(28) C(20) O(4)"}, {UNIMOD_Andro_H2O, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Andro_H2O, "spec_1_hidden", "1"}, {UNIMOD_Andro_H2O, "spec_1_position", "Anywhere"}, {UNIMOD_Andro_H2O, "spec_1_site", "C"}, {UNIMOD_His_O_2_, "approved", "0"}, {UNIMOD_His_O_2_, "delta_composition", "H(7) C(6) N(3) O(3)"}, {UNIMOD_His_O_2_, "spec_1_classification", "Post-translational"}, {UNIMOD_His_O_2_, "spec_1_hidden", "1"}, {UNIMOD_His_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_His_O_2_, "spec_1_site", "H"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "approved", "0"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "delta_composition", "Hex(6) HexNAc(5) NeuAc(3)"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "spec_1_classification", "N-linked glycosylation"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "spec_1_hidden", "1"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_6_HexNAc_5_NeuAc_3_, "spec_1_site", "N"}, {UNIMOD_Hex_7_HexNAc_6_, "approved", "0"}, {UNIMOD_Hex_7_HexNAc_6_, "delta_composition", "Hex(7) HexNAc(6)"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_classification", "O-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_site", "S"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_1_site", "T"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_2_classification", "N-linked glycosylation"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_2_hidden", "1"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_2_position", "Anywhere"}, {UNIMOD_Hex_7_HexNAc_6_, "spec_2_site", "N"}, {UNIMOD_Met_O_2_, "approved", "0"}, {UNIMOD_Met_O_2_, "delta_composition", "H(9) C(5) N O(3) S"}, {UNIMOD_Met_O_2_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Met_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Met_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Met_O_2_, "spec_1_site", "H"}, {UNIMOD_Gly_O_2_, "approved", "0"}, {UNIMOD_Gly_O_2_, "delta_composition", "H(3) C(2) N O(3)"}, {UNIMOD_Gly_O_2_, "spec_1_classification", "Chemical derivative"}, {UNIMOD_Gly_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Gly_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Gly_O_2_, "spec_1_site", "H"}, {UNIMOD_Pro_O_2_, "approved", "0"}, {UNIMOD_Pro_O_2_, "delta_composition", "H(7) C(5) N O(3)"}, {UNIMOD_Pro_O_2_, "spec_1_classification", "Post-translational"}, {UNIMOD_Pro_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Pro_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Pro_O_2_, "spec_1_site", "H"}, {UNIMOD_Lys_O_2_, "approved", "0"}, {UNIMOD_Lys_O_2_, "delta_composition", "H(12) C(6) N(2) O(3)"}, {UNIMOD_Lys_O_2_, "spec_1_classification", "Post-translational"}, {UNIMOD_Lys_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Lys_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Lys_O_2_, "spec_1_site", "H"}, {UNIMOD_Glu_O_2_, "approved", "0"}, {UNIMOD_Glu_O_2_, "delta_composition", "H(7) C(5) N O(5)"}, {UNIMOD_Glu_O_2_, "spec_1_classification", "Post-translational"}, {UNIMOD_Glu_O_2_, "spec_1_hidden", "1"}, {UNIMOD_Glu_O_2_, "spec_1_position", "Anywhere"}, {UNIMOD_Glu_O_2_, "spec_1_site", "H"}, {UNIMOD_LTX_Lophotoxin, "approved", "0"}, {UNIMOD_LTX_Lophotoxin, "delta_composition", "H(24) C(22) O(8)"}, {UNIMOD_LTX_Lophotoxin, "spec_1_classification", "Post-translational"}, {UNIMOD_LTX_Lophotoxin, "spec_1_hidden", "1"}, {UNIMOD_LTX_Lophotoxin, "spec_1_position", "Anywhere"}, {UNIMOD_LTX_Lophotoxin, "spec_1_site", "Y"}, {UNIMOD_MBS_peptide, "approved", "0"}, {UNIMOD_MBS_peptide, "delta_composition", "H(108) C(81) N(7) O(19)"}, {UNIMOD_MBS_peptide, "spec_1_classification", "Chemical derivative"}, {UNIMOD_MBS_peptide, "spec_1_hidden", "1"}, {UNIMOD_MBS_peptide, "spec_1_position", "Anywhere"}, {UNIMOD_MBS_peptide, "spec_1_site", "C"}, {UNIMOD_3_hydroxybenzyl_phosphate, "approved", "0"}, {UNIMOD_3_hydroxybenzyl_phosphate, "delta_composition", "H(7) C(7) O(4) P"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_1_hidden", "1"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_1_position", "Anywhere"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_1_site", "K"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_2_hidden", "1"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_2_position", "Anywhere"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_2_site", "S"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_3_hidden", "1"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_3_position", "Anywhere"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_3_site", "T"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_4_hidden", "1"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_4_position", "Anywhere"}, {UNIMOD_3_hydroxybenzyl_phosphate, "spec_4_site", "Y"}, {UNIMOD_phenyl_phosphate, "approved", "0"}, {UNIMOD_phenyl_phosphate, "delta_composition", "H(5) C(6) O(3) P"}, {UNIMOD_phenyl_phosphate, "spec_1_classification", "Chemical derivative"}, {UNIMOD_phenyl_phosphate, "spec_1_hidden", "1"}, {UNIMOD_phenyl_phosphate, "spec_1_position", "Anywhere"}, {UNIMOD_phenyl_phosphate, "spec_1_site", "K"}, {UNIMOD_phenyl_phosphate, "spec_2_classification", "Chemical derivative"}, {UNIMOD_phenyl_phosphate, "spec_2_hidden", "1"}, {UNIMOD_phenyl_phosphate, "spec_2_position", "Anywhere"}, {UNIMOD_phenyl_phosphate, "spec_2_site", "S"}, {UNIMOD_phenyl_phosphate, "spec_3_classification", "Chemical derivative"}, {UNIMOD_phenyl_phosphate, "spec_3_hidden", "1"}, {UNIMOD_phenyl_phosphate, "spec_3_position", "Anywhere"}, {UNIMOD_phenyl_phosphate, "spec_3_site", "T"}, {UNIMOD_phenyl_phosphate, "spec_4_classification", "Chemical derivative"}, {UNIMOD_phenyl_phosphate, "spec_4_hidden", "1"}, {UNIMOD_phenyl_phosphate, "spec_4_position", "Anywhere"}, {UNIMOD_phenyl_phosphate, "spec_4_site", "Y"}, }; // propertyValue_ const size_t propertyValueSize_ = sizeof(propertyValue_)/sizeof(PropertyValuePair); class CVTermData : public boost::singleton { public: CVTermData(boost::restricted) { for (const TermInfo* it=termInfos_; it!=termInfos_+termInfosSize_; ++it) { CVTermInfo temp; temp.cvid = it->cvid; temp.id = it->id; temp.name = it->name; temp.def = it->def; temp.isObsolete = it->isObsolete; infoMap_[temp.cvid] = temp; cvids_.push_back(it->cvid); } for (const CVIDPair* it=relationsIsA_; it!=relationsIsA_+relationsIsASize_; ++it) infoMap_[it->first].parentsIsA.push_back(it->second); for (const CVIDPair* it=relationsPartOf_; it!=relationsPartOf_+relationsPartOfSize_; ++it) infoMap_[it->first].parentsPartOf.push_back(it->second); for (const OtherRelationPair* it=relationsOther_; it!=relationsOther_+relationsOtherSize_; ++it) infoMap_[it->subject].otherRelations.insert(make_pair(it->relation, it->object)); for (const CVIDStringPair* it=relationsExactSynonym_; it!=relationsExactSynonym_+relationsExactSynonymSize_; ++it) infoMap_[it->first].exactSynonyms.push_back(it->second); for (const PropertyValuePair* it=propertyValue_; it!=propertyValue_+propertyValueSize_; ++it) infoMap_[it->term].propertyValues.insert(make_pair(it->name, it->value)); cvMap_["MS"].fullName = "Proteomics Standards Initiative Mass Spectrometry Ontology"; cvMap_["MS"].URI = "https://raw.githubusercontent.com/HUPO-PSI/psi-ms-CV/master/psi-ms.obo"; cvMap_["UO"].fullName = "Unit Ontology"; cvMap_["UO"].URI = "https://raw.githubusercontent.com/bio-ontology-research-group/unit-ontology/master/unit.obo"; cvMap_["UNIMOD"].fullName = "UNIMOD"; cvMap_["UNIMOD"].URI = "http://www.unimod.org/obo/unimod.obo"; cvMap_["PEFF"].fullName = "PEFF"; cvMap_["PEFF"].URI = cvMap_["MS"].URI; cvMap_["MS"].id = "MS"; cvMap_["MS"].version = "4.1.56"; cvMap_["PEFF"].id = "PEFF"; cvMap_["PEFF"].version = "4.1.56"; cvMap_["UNIMOD"].id = "UNIMOD"; cvMap_["UNIMOD"].version = "2021-03-11"; cvMap_["UO"].id = "UO"; cvMap_["UO"].version = "09:04:2014"; } inline const map& infoMap() const {return infoMap_;} inline const map& cvMap() const {return cvMap_;} inline const vector& cvids() const {return cvids_;} private: map infoMap_; map cvMap_; vector cvids_; }; const char* oboPrefixes_[] = { "MS", "PEFF", "UNIMOD", "UO", }; const size_t oboPrefixesSize_ = sizeof(oboPrefixes_)/sizeof(const char*); const size_t enumBlockSize_ = 100000000; struct StringEquals { bool operator()(const string& yours) {return mine==yours;} string mine; StringEquals(const string& _mine) : mine(_mine) {} }; } // namespace #include "cv.inl" // code and data that doesn't change with CV releases } // namespace cv } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/common/cv.hpp000066400000000000000000027133131444255175000212000ustar00rootroot00000000000000// // $Id$ // // // Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // This file was generated by cvgen. // // Do not edit this file! Your changes will be lost next time cvgen is run - // see pwiz/scripts/misc/update_cv.bat for info on how that works. // Instead, edit cvgen.cpp itself, or the cv.inl include file if adding static // code or data. // #ifndef _CV_HPP_ #define _CV_HPP_ #include #include #include #include "pwiz/utility/misc/Export.hpp" // [psi-ms.obo] #define _PSI_MS_OBO_ // format-version: 1.2 // data-version: 4.1.56 // date: 25:06:2021 00:00 // saved-by: Chris Bielow // auto-generated-by: OBO-Edit 2.3.1 // import: http://ontologies.berkeleybop.org/pato.obo // import: http://ontologies.berkeleybop.org/uo.obo // default-namespace: MS // namespace-id-rule: * MS:$sequence(7,0,9999999)$ // namespace-id-rule: * PEFF:$sequence(7,0,9999999)$ // remark: namespace: MS // remark: namespace: PEFF // remark: coverage: Mass spectrometer output files and spectra interpretation // remark: creator: Yasset Perez-Riverol ebi.ac.uk> // remark: creator: Matt Chambers vanderbilt.edu> // remark: creator: Andreas Bertsch informatik.uni-tuebingen.de> // remark: creator: Marius Kallhardt bdal.de> // remark: creator: Eric Deutsch systemsbiology.org> // remark: creator: Fredrik Levander immun.lth.se> // remark: creator: Pierre-Alain Binz chuv.ch> // remark: creator: Gerhard Mayer rub.de> // remark: creator: Joshua Klein bu.edu> // remark: publisher: HUPO Proteomics Standards Initiative Mass Spectrometry Standards Working Group and HUPO Proteomics Standards Initiative Proteomics Informatics Working Group // remark: When appropriate the definition and synonyms of a term are reported exactly as in the chapter 12 of IUPAC orange book. See http://www.iupac.org/projects/2003/2003-056-2-500.html and http://mass-spec.lsu.edu/msterms/index.php/Main_Page // remark: For any queries contact psidev-ms-vocab@lists.sourceforge.net // remark: URL: https://raw.githubusercontent.com/HUPO-PSI/psi-ms-CV/master/psi-ms.obo // remark: This work is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) license. // remark: To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. // ontology: ms // // [unimod.obo] #define _UNIMOD_OBO_ // format-version: 1.2 // date: 2021:03:11 13:32 // // [unit.obo] #define _UNIT_OBO_ // format-version: 1.2 // date: 09:04:2014 13:37 // saved-by: gkoutos // auto-generated-by: OBO-Edit 2.1-beta19 // subsetdef: abnormal_slim "Abnormal/normal slim" // subsetdef: absent_slim "Absent/present slim" // subsetdef: attribute_slim "Attribute slim" // subsetdef: cell_quality "cell_quality" // subsetdef: disposition_slim "Disposition slim" // subsetdef: mpath_slim "Pathology slim" // subsetdef: prefix_slim "prefix slim" // subsetdef: relational_slim "Relational slim: types of quality that require an additional entity in order to exist" // subsetdef: scalar_slim "Scalar slim" // subsetdef: unit_group_slim "unit group slim" // subsetdef: unit_slim "unit slim" // subsetdef: value_slim "Value slim" // default-namespace: quality // namespace-id-rule: * UO:$sequence(7,0,9999999)$ // remark: Filtered by Ancestor ID equals "UO:0000000" // ontology: uo // ontology: pato // ontology: pato // ontology: pato // ontology: pato // ontology: pato // ontology: pato // namespace pwiz { namespace cv { /// enumeration of controlled vocabulary (CV) terms, generated from OBO file(s) enum PWIZ_API_DECL CVID { CVID_Unknown = -1, /// Proteomics Standards Initiative Mass Spectrometry Vocabularies: Proteomics Standards Initiative Mass Spectrometry Vocabularies. MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies = 0, /// PEFF CV term: PSI Extended FASTA Format controlled vocabulary term. PEFF_PEFF_CV_term = 100000001, /// PEFF file header section term: CV term that may appear in a PEFF file header section. PEFF_PEFF_file_header_section_term = 100000002, /// PEFF file sequence entry term: CV term that may appear in a description line of a PEFF file individual sequence entry. PEFF_PEFF_file_sequence_entry_term = 100000003, /// DbName: PEFF keyword for the sequence database name. PEFF_DbName = 100000008, /// Prefix: PEFF keyword for the sequence database prefix. PEFF_Prefix = 100000009, /// DbDescription: PEFF keyword for the sequence database short description. PEFF_DbDescription = 100000010, /// Decoy: PEFF keyword for the specifying whether the sequence database is a decoy database. PEFF_Decoy = 100000011, /// DbSource: PEFF keyword for the source of the database file. PEFF_DbSource = 100000012, /// DbVersion: PEFF keyword for the database version (release date) according to database provider. PEFF_DbVersion = 100000013, /// DbDate: PEFF keyword for the database date (release or file date of the source) according to database provider. PEFF_DbDate_OBSOLETE = 100000014, /// NumberOfEntries: PEFF keyword for the sumber of sequence entries in the database. PEFF_NumberOfEntries = 100000015, /// Conversion: PEFF keyword for the description of the conversion from original format to this current one. PEFF_Conversion = 100000016, /// SequenceType: PEFF keyword for the molecular type of the sequences. PEFF_SequenceType = 100000017, /// SpecificKey: PEFF keyword for database specific keywords not included in the current controlled vocabulary. PEFF_SpecificKey = 100000018, /// SpecificValue: PEFF keyword for the specific values for a custom key. PEFF_SpecificValue = 100000019, /// DatabaseDescription: PEFF keyword for the short description of the PEFF file. PEFF_DatabaseDescription = 100000020, /// GeneralComment: PEFF keyword for a general comment. PEFF_GeneralComment = 100000021, /// ProteoformDb: PEFF keyword that when set to 'true' indicates that the database contains complete proteoforms. PEFF_ProteoformDb = 100000022, /// OptionalTagDef: PEFF keyword for the short tag (abbreviation) and longer definition used to annotate a sequence annotation (such as variant or modification) in the OptionalTag location. PEFF_OptionalTagDef = 100000023, /// HasAnnotationIdentifiers: PEFF keyword that when set to 'true' indicates that entries in the database have identifiers for each annotation. PEFF_HasAnnotationIdentifiers = 100000024, /// DbUniqueId: Sequence database unique identifier. PEFF_DbUniqueId_OBSOLETE = 100001001, /// PName: PEFF keyword for the protein full name. PEFF_PName = 100001002, /// NcbiTaxId: PEFF keyword for the NCBI taxonomy identifier. PEFF_NcbiTaxId = 100001003, /// TaxName: PEFF keyword for the taxonomy name (latin or common name). PEFF_TaxName = 100001004, /// GName: PEFF keyword for the gene name. PEFF_GName = 100001005, /// Length: PEFF keyword for the sequence length. PEFF_Length = 100001006, /// SV: PEFF keyword for the sequence version. PEFF_SV = 100001007, /// EV: PEFF keyword for the entry version. PEFF_EV = 100001008, /// PE: PEFF keyword for the Protein Evidence; A UniProtKB code 1-5. PEFF_PE = 100001009, /// Processed: PEFF keyword for information on how the full length original protein sequence can be processed into shorter components such as signal peptides and chains. PEFF_Processed = 100001010, /// Variant: Sequence variation (substitution, insertion, deletion). PEFF_Variant_OBSOLETE = 100001011, /// ModResPsi: PEFF keyword for the modified residue with PSI-MOD identifier. PEFF_ModResPsi = 100001012, /// ModRes: PEFF keyword for the modified residue without aPSI-MOD or UniMod identifier. PEFF_ModRes = 100001013, /// AltAC: PEFF keyword for the Alternative Accession Code. PEFF_AltAC = 100001014, /// SeqStatus: PEFF keyword for the sequence status. Complete or Fragment. PEFF_SeqStatus = 100001015, /// CC: PEFF keyword for the entry associated comment. PEFF_CC = 100001016, /// KW: PEFF keyword for the entry associated keyword(s). PEFF_KW = 100001017, /// GO: PEFF keyword for the Gene Ontology code. PEFF_GO = 100001018, /// XRef: PEFF keyword for the cross-reference to an external resource. PEFF_XRef = 100001019, /// mature protein: Portion of a newly synthesized protein that contributes to a final structure after other components such as signal peptides are removed. PEFF_mature_protein = 100001020, /// signal peptide: Short peptide present at the N-terminus of a newly synthesized protein that is cleaved off and is not part of the final mature protein. PEFF_signal_peptide = 100001021, /// transit peptide: Short peptide present at the N-terminus of a newly synthesized protein that helps the protein through the membrane of its destination organelle. PEFF_transit_peptide = 100001022, /// Conflict: PEFF keyword for the sequence conflict; a UniProtKB term. PEFF_Conflict = 100001023, /// Crc64: PEFF keyword for the Sequence checksum in crc64. PEFF_Crc64 = 100001024, /// Domain: PEFF keyword for the sequence range of a domain. PEFF_Domain = 100001025, /// ID: PEFF keyword for the UniProtKB specific Protein identifier ID; a UniProtKB term. PEFF_ID = 100001026, /// ModResUnimod: PEFF keyword for the modified residue with UniMod identifier. PEFF_ModResUnimod = 100001027, /// VariantSimple: PEFF keyword for the simple sequence variation of a single amino acid change. A change to a stop codon is permitted with a * symbol. More complex variations must be encoded with the VariantComplex term. PEFF_VariantSimple = 100001028, /// VariantComplex: PEFF keyword for a sequence variation that is more complex than a single amino acid change or change to a stop codon. PEFF_VariantComplex = 100001029, /// Proteoform: PEFF keyword for the proteoforms of this protein, constructed as a set of annotation identifiers. PEFF_Proteoform = 100001030, /// DisulfideBond: PEFF keyword for the disulfide bonds in this protein, constructed as a sets of annotation identifiers of two half-cystine modifications. PEFF_DisulfideBond = 100001031, /// PEFF molecule processing keyword: PEFF keyword describing the type of processing event being described. PEFF_PEFF_molecule_processing_keyword = 100001032, /// Comment: PEFF keyword for the individual protein entry comment. It is discouraged to put parsable information here. This is only for free-text commentary. PEFF_Comment = 100001033, /// propeptide: Short peptide that is cleaved off a newly synthesized protein and generally immediately degraded in the process of protein maturation, and is not a signal peptide or transit peptide. PEFF_propeptide = 100001034, /// initiator methionine: N-terminal methionine residue of a protein that can be co-translationally cleaved. PEFF_initiator_methionine = 100001035, /// sample number: A reference number relevant to the sample under study. MS_sample_number = 1000001, /// sample name: A reference string relevant to the sample under study. MS_sample_name = 1000002, /// sample state: The chemical phase of a pure sample, or the state of a mixed sample. MS_sample_state = 1000003, /// sample mass: Total mass of sample used. MS_sample_mass = 1000004, /// sample volume: Total volume of solution used. MS_sample_volume = 1000005, /// sample concentration: Concentration of sample in picomol/ul, femtomol/ul or attomol/ul solution used. MS_sample_concentration = 1000006, /// inlet type: The nature of the sample inlet. MS_inlet_type = 1000007, /// ionization type: The method by which gas phase ions are generated from the sample. MS_ionization_type = 1000008, /// ionization mode: Whether positive or negative ions are selected for analysis by the spectrometer. MS_ionization_mode_OBSOLETE = 1000009, /// analyzer type: The common name of the particular analyzer stage being described. Synonym of mass analyzer, should be obsoleted. MS_analyzer_type_OBSOLETE = 1000010, /// mass resolution: Smallest mass difference between two equal magnitude peaks so that the valley between them is a specified fraction of the peak height. MS_mass_resolution = 1000011, /// resolution measurement method: Which of the available standard measures is used to define whether two peaks are separate. MS_resolution_measurement_method = 1000012, /// resolution type: Specify the nature of resolution for the mass analyzer. Resolution is usually either constant with respect to m/z or proportional to m/z. MS_resolution_type_OBSOLETE = 1000013, /// accuracy: Accuracy is the degree of conformity of a measured mass to its actual value. MS_accuracy = 1000014, /// scan rate: Rate in Th/sec for scanning analyzers. MS_scan_rate = 1000015, /// scan start time: The time that an analyzer started a scan, relative to the start of the MS run. MS_scan_start_time = 1000016, /// Scan Function: Describes the type of mass analysis being performed. Two primary modes are: typical acquisition over a range of masses (Mass Scan), and Selected Ion Detection. The primary difference is that Selected Ion Detection produces a single value for the signal at the selected mass rather than producing a mass spectrum. MS_Scan_Function_OBSOLETE = 1000017, /// scan direction: Direction in terms of m/z of the scan for scanning analyzers (low to high, or high to low). MS_scan_direction = 1000018, /// scan law: Describes the function in control of the m/z scan (for scanning instruments). Commonly the scan function is linear, but in principle any function can be used. MS_scan_law = 1000019, /// scanning method: Describes the acquisition data type produced by a tandem mass spectrometry experiment. MS_scanning_method_OBSOLETE = 1000020, /// reflectron state: Status of the reflectron, turned on or off. MS_reflectron_state = 1000021, /// TOF Total Path Length: The length of the field free drift space in a time of flight mass spectrometer. MS_TOF_Total_Path_Length = 1000022, /// isolation width: The total width (i.e. not half for plus-or-minus) of the gate applied around a selected precursor ion. MS_isolation_width_OBSOLETE = 1000023, /// final MS exponent: Final MS level achieved when performing PFF with the ion trap (e.g. MS E10). MS_final_MS_exponent = 1000024, /// magnetic field strength: A property of space that produces a force on a charged particle equal to qv x B where q is the particle charge and v its velocity. MS_magnetic_field_strength = 1000025, /// B (magnetic field strength): A property of space that produces a force on a charged particle equal to qv x B where q is the particle charge and v its velocity. MS_B = MS_magnetic_field_strength, /// detector type: Type of detector used in the mass spectrometer. MS_detector_type = 1000026, /// detector acquisition mode: Method by which detector signal is acquired by the data system. MS_detector_acquisition_mode = 1000027, /// detector resolution: The resolving power of the detector to detect the smallest difference between two ions so that the valley between them is a specified fraction of the peak height. MS_detector_resolution = 1000028, /// sampling frequency: The rate of signal sampling (measurement) with respect to time. MS_sampling_frequency = 1000029, /// vendor: Name of instrument vendor. MS_vendor_OBSOLETE = 1000030, /// instrument model: Instrument model name not including the vendor's name. MS_instrument_model = 1000031, /// customization: Free text description of a single customization made to the instrument; for several modifications, use several entries. MS_customization = 1000032, /// deisotoping: The removal of isotope peaks to represent the fragment ion as one data point and is commonly done to reduce complexity. It is done in conjunction with the charge state deconvolution. MS_deisotoping = 1000033, /// charge deconvolution: The determination of the mass of an ion based on the mass spectral peaks that represent multiple-charge ions. MS_charge_deconvolution = 1000034, /// peak picking: Spectral peak processing conducted on the acquired data to convert profile data to centroided data. MS_peak_picking = 1000035, /// scan mode: OBSOLETE. MS_scan_mode_OBSOLETE = 1000036, /// polarity: Terms to describe the polarity setting of the instrument. MS_polarity_OBSOLETE = 1000037, /// minute: Acquisition time in minutes. MS_minute_OBSOLETE = 1000038, /// second: Acquisition time in seconds. MS_second_OBSOLETE = 1000039, /// m/z: Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit thomson (Th) is deprecated. MS_m_z = 1000040, /// mass-to-charge ratio (m/z): Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit thomson (Th) is deprecated. MS_mass_to_charge_ratio = MS_m_z, /// Th (m/z): Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit thomson (Th) is deprecated. MS_Th = MS_m_z, /// thomson (m/z): Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit thomson (Th) is deprecated. MS_thomson = MS_m_z, /// charge state: Number of net charges, positive or negative, on an ion. MS_charge_state = 1000041, /// z (charge state): Number of net charges, positive or negative, on an ion. MS_z = MS_charge_state, /// peak intensity: Intensity of ions as measured by the height or area of a peak in a mass spectrum. MS_peak_intensity = 1000042, /// intensity unit: Intensity units are commonly arbitrary. Detected in counts per second (cps) when using counting detectors, but measured in volts when using analog detectors. MS_intensity_unit = 1000043, /// dissociation method: Fragmentation method used for dissociation or fragmentation. MS_dissociation_method = 1000044, /// collision energy: Energy for an ion experiencing collision with a stationary gas particle resulting in dissociation of the ion. MS_collision_energy = 1000045, /// energy unit: Energy units are represented in either eV or Joules. MS_energy_unit_OBSOLETE = 1000046, /// emulsion: State if the sample is in emulsion form. MS_emulsion = 1000047, /// gaseous sample state: State if the sample is in gaseous form. MS_gaseous_sample_state = 1000048, /// liquid sample state: State if the sample is in liquid form. MS_liquid_sample_state = 1000049, /// solid sample state: State if the sample is in solid form. MS_solid_sample_state = 1000050, /// solution: State if the sample is in solution form. MS_solution = 1000051, /// suspension: State if the sample is in suspension form. MS_suspension = 1000052, /// sample batch: Sample batch lot identifier. MS_sample_batch = 1000053, /// chromatography: Chromatographic conditions used to obtain the sample. MS_chromatography_OBSOLETE = 1000054, /// continuous flow fast atom bombardment: Fast atom bombardment ionization in which the analyte in solution is entrained in a flowing liquid matrix. MS_continuous_flow_fast_atom_bombardment = 1000055, /// CF-FAB (continuous flow fast atom bombardment): Fast atom bombardment ionization in which the analyte in solution is entrained in a flowing liquid matrix. MS_CF_FAB = MS_continuous_flow_fast_atom_bombardment, /// direct inlet: The sample is directly inserted into the ion source, usually on the end of a heatable probe. MS_direct_inlet = 1000056, /// electrospray inlet: Inlet used for introducing the liquid sample into an electrospray ionization source. MS_electrospray_inlet = 1000057, /// flow injection analysis: Sample is directly injected or infused into the ionization source. MS_flow_injection_analysis = 1000058, /// inductively coupled plasma: A gas discharge ion source in which the energy to the plasma is supplied by electromagnetic induction. MS_inductively_coupled_plasma = 1000059, /// infusion: The continuous flow of solution of a sample into the ionization source. MS_infusion = 1000060, /// jet separator: A device that separates carrier gas from gaseous analyte molecules on the basis of diffusivity. MS_jet_separator = 1000061, /// membrane separator: A device to separate carrier molecules from analyte molecules on the basis of ease of diffusion across a semipermeable membrane. MS_membrane_separator = 1000062, /// moving belt: Continuous moving surface in the form of a belt which passes through an ion source carrying analyte molecules. MS_moving_belt = 1000063, /// moving wire: Continuous moving surface in the form of a wire which passes through an ion source carrying analyte molecules. MS_moving_wire = 1000064, /// open split: A division of flowing stream of liquid into two streams. MS_open_split = 1000065, /// particle beam: Method for generating ions from a solution of an analyte. MS_particle_beam = 1000066, /// reservoir: A sample inlet method involving a reservoir. MS_reservoir = 1000067, /// septum: A disc composed of a flexible material that seals the entrance to the reservoir. Can also be entrance to the vacuum chamber. MS_septum = 1000068, /// thermospray inlet: A method for generating gas phase ions from a solution of an analyte by rapid heating of the sample. MS_thermospray_inlet = 1000069, /// atmospheric pressure chemical ionization: Chemical ionization that takes place at atmospheric pressure as opposed to the reduced pressure is normally used for chemical ionization. MS_atmospheric_pressure_chemical_ionization = 1000070, /// APCI (atmospheric pressure chemical ionization): Chemical ionization that takes place at atmospheric pressure as opposed to the reduced pressure is normally used for chemical ionization. MS_APCI = MS_atmospheric_pressure_chemical_ionization, /// chemical ionization: The formation of a new ion by the reaction of a neutral species with an ion. The process may involve transfer of an electron, a proton or other charged species between the reactants. When a positive ion results from chemical ionization the term may be used without qualification. When a negative ion results the term negative ion chemical ionization should be used. Note that this term is not synonymous with chemi-ionization. MS_chemical_ionization = 1000071, /// CI (chemical ionization): The formation of a new ion by the reaction of a neutral species with an ion. The process may involve transfer of an electron, a proton or other charged species between the reactants. When a positive ion results from chemical ionization the term may be used without qualification. When a negative ion results the term negative ion chemical ionization should be used. Note that this term is not synonymous with chemi-ionization. MS_CI = MS_chemical_ionization, /// Electronic Ionization: The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended. MS_Electronic_Ionization_OBSOLETE = 1000072, /// EI (Electronic Ionization): The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended. MS_EI_OBSOLETE = MS_Electronic_Ionization_OBSOLETE, /// electrospray ionization: A process in which ionized species in the gas phase are produced from an analyte-containing solution via highly charged fine droplets, by means of spraying the solution from a narrow-bore needle tip at atmospheric pressure in the presence of a high electric field. When a pressurized gas is used to aid in the formation of a stable spray, the term pneumatically assisted electrospray ionization is used. The term ion spray is not recommended. MS_electrospray_ionization = 1000073, /// ESI (electrospray ionization): A process in which ionized species in the gas phase are produced from an analyte-containing solution via highly charged fine droplets, by means of spraying the solution from a narrow-bore needle tip at atmospheric pressure in the presence of a high electric field. When a pressurized gas is used to aid in the formation of a stable spray, the term pneumatically assisted electrospray ionization is used. The term ion spray is not recommended. MS_ESI = MS_electrospray_ionization, /// fast atom bombardment ionization: The ionization of any species by the interaction of a focused beam of neutral atoms having a translational energy of several thousand eV with a sample that is typically dissolved in a solvent matrix. See also secondary ionization. MS_fast_atom_bombardment_ionization = 1000074, /// FAB (fast atom bombardment ionization): The ionization of any species by the interaction of a focused beam of neutral atoms having a translational energy of several thousand eV with a sample that is typically dissolved in a solvent matrix. See also secondary ionization. MS_FAB = MS_fast_atom_bombardment_ionization, /// matrix-assisted laser desorption ionization: The formation of gas-phase ions from molecules that are present in a solid or solvent matrix that is irradiated with a pulsed laser. See also laser desorption/ionization. MS_matrix_assisted_laser_desorption_ionization = 1000075, /// MALDI (matrix-assisted laser desorption ionization): The formation of gas-phase ions from molecules that are present in a solid or solvent matrix that is irradiated with a pulsed laser. See also laser desorption/ionization. MS_MALDI = MS_matrix_assisted_laser_desorption_ionization, /// negative ion mode: OBSOLETE. MS_negative_ion_mode_OBSOLETE = 1000076, /// positive ion mode: OBSOLETE. MS_positive_ion_mode_OBSOLETE = 1000077, /// axial ejection linear ion trap: A linear ion trap mass spectrometer where ions are ejected along the axis of the analyzer. MS_axial_ejection_linear_ion_trap = 1000078, /// fourier transform ion cyclotron resonance mass spectrometer: A mass spectrometer based on the principle of ion cyclotron resonance in which an ion in a magnetic field moves in a circular orbit at a frequency characteristic of its m/z value. Ions are coherently excited to a larger radius orbit using a pulse of radio frequency energy and their image charge is detected on receiver plates as a time domain signal. Fourier transformation of the time domain signal results in a frequency domain signal which is converted to a mass spectrum based in the inverse relationship between frequency and m/z. MS_fourier_transform_ion_cyclotron_resonance_mass_spectrometer = 1000079, /// FT_ICR (fourier transform ion cyclotron resonance mass spectrometer): A mass spectrometer based on the principle of ion cyclotron resonance in which an ion in a magnetic field moves in a circular orbit at a frequency characteristic of its m/z value. Ions are coherently excited to a larger radius orbit using a pulse of radio frequency energy and their image charge is detected on receiver plates as a time domain signal. Fourier transformation of the time domain signal results in a frequency domain signal which is converted to a mass spectrum based in the inverse relationship between frequency and m/z. MS_FT_ICR = MS_fourier_transform_ion_cyclotron_resonance_mass_spectrometer, /// magnetic sector: A device that produces a magnetic field perpendicular to a charged particle beam that deflects the beam to an extent that is proportional to the particle momentum per unit charge. For a monoenergetic beam, the deflection is proportional to m/z. MS_magnetic_sector = 1000080, /// quadrupole: A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis. MS_quadrupole = 1000081, /// quadrupole ion trap: Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials. MS_quadrupole_ion_trap = 1000082, /// Paul Ion trap (quadrupole ion trap): Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials. MS_Paul_Ion_trap = MS_quadrupole_ion_trap, /// QIT (quadrupole ion trap): Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials. MS_QIT = MS_quadrupole_ion_trap, /// Quistor (quadrupole ion trap): Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials. MS_Quistor = MS_quadrupole_ion_trap, /// radial ejection linear ion trap: A linear ion trap mass spectrometer where ions are ejected along the radius of the analyzer. MS_radial_ejection_linear_ion_trap = 1000083, /// time-of-flight: Instrument that separates ions by m/z in a field-free region after acceleration to a fixed acceleration energy. MS_time_of_flight = 1000084, /// TOF (time-of-flight): Instrument that separates ions by m/z in a field-free region after acceleration to a fixed acceleration energy. MS_TOF = MS_time_of_flight, /// baseline: An attribute of resolution when recording the detector response in absence of the analyte. MS_baseline = 1000085, /// full width at half-maximum: A measure of resolution represented as width of the peak at half peak height. MS_full_width_at_half_maximum = 1000086, /// FWHM (full width at half-maximum): A measure of resolution represented as width of the peak at half peak height. MS_FWHM = MS_full_width_at_half_maximum, /// ten percent valley: An attribute of resolution when the ratio between adjacent signals is 10% of the signal height. MS_ten_percent_valley = 1000087, /// constant: When resolution is constant with respect to m/z. MS_constant_OBSOLETE = 1000088, /// proportional: When resolution is proportional with respect to m/z. MS_proportional_OBSOLETE = 1000089, /// mass scan: A variation of instrument where a selected mass is scanned. MS_mass_scan_OBSOLETE = 1000090, /// selected ion detection: Please see Single Ion Monitoring. MS_selected_ion_detection_OBSOLETE = 1000091, /// decreasing m/z scan: High to low direction in terms of m/z of the scan for scanning analyzers. MS_decreasing_m_z_scan = 1000092, /// increasing m/z scan: Low to high direction in terms of m/z of the scan for scanning analyzers. MS_increasing_m_z_scan = 1000093, /// exponential: The mass scan is done in exponential mode. MS_exponential = 1000094, /// linear: The mass scan is done in linear mode. MS_linear_OBSOLETE = 1000095, /// quadratic: The mass scan is done in quadratic mode. MS_quadratic = 1000096, /// constant neutral mass loss: A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum. MS_constant_neutral_mass_loss_OBSOLETE = 1000097, /// multiple ion monitoring: Data acquired when monitoring the ion current of a few specific m/z values. Remap to MS:1000205 -Selected Ion Monitoring. MS_multiple_ion_monitoring_OBSOLETE = 1000098, /// multiple reaction monitoring: This term is not recommended. See Selected Reaction Monitoring. MS_multiple_reaction_monitoring_OBSOLETE = 1000099, /// MRM (multiple reaction monitoring): This term is not recommended. See Selected Reaction Monitoring. MS_MRM_OBSOLETE = MS_multiple_reaction_monitoring_OBSOLETE, /// precursor ion scan: The specific scan function or process that will record a precursor ion spectrum. MS_precursor_ion_scan_OBSOLETE = 1000100, /// product ion scan: The specific scan function or process that records product ion spectrum. MS_product_ion_scan_OBSOLETE = 1000101, /// single ion monitoring: The operation of a mass spectrometer to monitor a single ion rather than scanning entire mass spectrum. MS_single_ion_monitoring_OBSOLETE = 1000102, /// single reaction monitoring: This term is not recommended. See Selected Reaction Monitoring. MS_single_reaction_monitoring_OBSOLETE = 1000103, /// None ??: None. MS_None____OBSOLETE = 1000104, /// reflectron off: Reflectron is off. MS_reflectron_off = 1000105, /// reflectron on: Reflectron is on. MS_reflectron_on = 1000106, /// channeltron: A horn-shaped (or cone-shaped) continuous dynode particle multiplier. The ion strikes the inner surface of the device and induces the production of secondary electrons that in turn impinge on the inner surfaces to produce more secondary electrons. This avalanche effect produces an increase in signal in the final measured current pulse. MS_channeltron = 1000107, /// Channeltron Detector (channeltron): A horn-shaped (or cone-shaped) continuous dynode particle multiplier. The ion strikes the inner surface of the device and induces the production of secondary electrons that in turn impinge on the inner surfaces to produce more secondary electrons. This avalanche effect produces an increase in signal in the final measured current pulse. MS_Channeltron_Detector = MS_channeltron, /// conversion dynode electron multiplier: A surface that is held at high potential so that ions striking the surface produce electrons that are subsequently detected. MS_conversion_dynode_electron_multiplier = 1000108, /// conversion dynode photomultiplier: A detector in which ions strike a conversion dynode to produce electrons that in turn generate photons through a phosphorescent screen that are detected by a photomultiplier. MS_conversion_dynode_photomultiplier = 1000109, /// daly detector: Detector consisting of a conversion dynode, scintillator and photomultiplier. The metal knob at high potential emits secondary electrons when ions impinge on the surface. The secondary electrons are accelerated onto the scintillator that produces light that is then detected by the photomultiplier detector. MS_daly_detector = 1000110, /// Daly (daly detector): Detector consisting of a conversion dynode, scintillator and photomultiplier. The metal knob at high potential emits secondary electrons when ions impinge on the surface. The secondary electrons are accelerated onto the scintillator that produces light that is then detected by the photomultiplier detector. MS_Daly = MS_daly_detector, /// electron multiplier tube: A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. MS_electron_multiplier_tube = 1000111, /// EMT (electron multiplier tube): A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. MS_EMT = MS_electron_multiplier_tube, /// faraday cup: A conducting cup or chamber that intercepts a charged particle beam and is electrically connected to a current measuring device. MS_faraday_cup = 1000112, /// focal plane array: An array of detectors for spatially disperse ion beams in which all ions simultaneously impinge on the detector plane. MS_focal_plane_array = 1000113, /// microchannel plate detector: A thin plate that contains a closely spaced array of channels that each act as a continuous dynode particle multiplier. A charged particle, fast neutral particle, or photon striking the plate causes a cascade of secondary electrons that ultimately exits the opposite side of the plate. MS_microchannel_plate_detector = 1000114, /// multichannel plate (microchannel plate detector): A thin plate that contains a closely spaced array of channels that each act as a continuous dynode particle multiplier. A charged particle, fast neutral particle, or photon striking the plate causes a cascade of secondary electrons that ultimately exits the opposite side of the plate. MS_multichannel_plate = MS_microchannel_plate_detector, /// multi-collector: A detector system commonly used in inductively coupled plasma mass spectrometers. MS_multi_collector = 1000115, /// photomultiplier: A detector for conversion of the ion/electron signal into photon(s) which are then amplified and detected. MS_photomultiplier = 1000116, /// PMT (photomultiplier): A detector for conversion of the ion/electron signal into photon(s) which are then amplified and detected. MS_PMT = MS_photomultiplier, /// analog-digital converter: Analog-to-digital converter (abbreviated ADC, A/D or A to D) is an electronic integrated circuit (i/c) that converts continuous signals to discrete digital numbers. MS_analog_digital_converter = 1000117, /// ADC (analog-digital converter): Analog-to-digital converter (abbreviated ADC, A/D or A to D) is an electronic integrated circuit (i/c) that converts continuous signals to discrete digital numbers. MS_ADC = MS_analog_digital_converter, /// pulse counting: Definition to do. MS_pulse_counting = 1000118, /// time-digital converter: A device for converting a signal of sporadic pluses into a digital representation of their time indices. MS_time_digital_converter = 1000119, /// TDC (time-digital converter): A device for converting a signal of sporadic pluses into a digital representation of their time indices. MS_TDC = MS_time_digital_converter, /// transient recorder: A detector acquisition mode used for detecting transient signals. MS_transient_recorder = 1000120, /// SCIEX instrument model: The brand of instruments from the joint venture between Applied Biosystems and MDS Analytical Technologies (formerly MDS SCIEX). Previously branded as \"Applied Biosystems|MDS SCIEX\". MS_SCIEX_instrument_model = 1000121, /// Bruker Daltonics instrument model: Bruker Daltonics' instrument model. MS_Bruker_Daltonics_instrument_model = 1000122, /// IonSpec instrument model: IonSpec corporation instrument model. MS_IonSpec_instrument_model = 1000123, /// Shimadzu instrument model: Shimadzu corporation instrument model. MS_Shimadzu_instrument_model = 1000124, /// Thermo Finnigan instrument model: ThermoFinnigan from Thermo Electron Corporation instrument model. MS_Thermo_Finnigan_instrument_model = 1000125, /// Waters instrument model: Waters Corporation instrument model. MS_Waters_instrument_model = 1000126, /// centroid spectrum: Processing of profile data to produce spectra that contains discrete peaks of zero width. Often used to reduce the size of dataset. MS_centroid_spectrum = 1000127, /// Discrete Mass Spectrum (centroid spectrum): Processing of profile data to produce spectra that contains discrete peaks of zero width. Often used to reduce the size of dataset. MS_Discrete_Mass_Spectrum = MS_centroid_spectrum, /// profile spectrum: A profile mass spectrum is created when data is recorded with ion current (counts per second) on one axis and mass/charge ratio on another axis. MS_profile_spectrum = 1000128, /// continuous mass spectrum (profile spectrum): A profile mass spectrum is created when data is recorded with ion current (counts per second) on one axis and mass/charge ratio on another axis. MS_continuous_mass_spectrum = MS_profile_spectrum, /// Continuum Mass Spectrum (profile spectrum): A profile mass spectrum is created when data is recorded with ion current (counts per second) on one axis and mass/charge ratio on another axis. MS_Continuum_Mass_Spectrum = MS_profile_spectrum, /// negative scan: Polarity of the scan is negative. MS_negative_scan = 1000129, /// positive scan: Polarity of the scan is positive. MS_positive_scan = 1000130, /// number of detector counts: The number of counted events observed in one or a group of elements of a detector. MS_number_of_detector_counts = 1000131, /// percent of base peak: The magnitude of a peak or measurement element expressed in terms of the percentage of the magnitude of the base peak intensity. MS_percent_of_base_peak = 1000132, /// collision-induced dissociation: The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended. MS_collision_induced_dissociation = 1000133, /// CID (collision-induced dissociation): The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended. MS_CID = MS_collision_induced_dissociation, /// CAD (collision-induced dissociation): The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended. MS_CAD = MS_collision_induced_dissociation, /// collisionally activated dissociation (collision-induced dissociation): The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended. MS_collisionally_activated_dissociation = MS_collision_induced_dissociation, /// plasma desorption: The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization. MS_plasma_desorption = 1000134, /// PD (plasma desorption): The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization. MS_PD = MS_plasma_desorption, /// post-source decay: A technique specific to reflectron time-of-flight mass spectrometers where product ions of metastable transitions or collision-induced dissociations generated in the drift tube prior to entering the reflectron are m/z separated to yield product ion spectra. MS_post_source_decay = 1000135, /// PSD (post-source decay): A technique specific to reflectron time-of-flight mass spectrometers where product ions of metastable transitions or collision-induced dissociations generated in the drift tube prior to entering the reflectron are m/z separated to yield product ion spectra. MS_PSD = MS_post_source_decay, /// surface-induced dissociation: Fragmentation that results from the collision of an ion with a surface. MS_surface_induced_dissociation = 1000136, /// SID (surface-induced dissociation): Fragmentation that results from the collision of an ion with a surface. MS_SID = MS_surface_induced_dissociation, /// electron volt: A non-SI unit of energy (eV) defined as the energy acquired by a particle containing one unit of charge through a potential difference of one volt. An electron-volt is equal to 1.602 176 53(14) x 10^-19 J. MS_electron_volt_OBSOLETE = 1000137, /// normalized collision energy: Instrument setting, expressed in percent, for adjusting collisional energies of ions in an effort to provide equivalent excitation of all ions. MS_normalized_collision_energy = 1000138, /// 4000 QTRAP: Applied Biosystems/MDS SCIEX Q 4000 TRAP MS. MS_4000_QTRAP = 1000139, /// 4700 Proteomics Analyzer: Applied Biosystems/MDS SCIEX 4700 Proteomics Analyzer MS. MS_4700_Proteomics_Analyzer = 1000140, /// apex IV: Bruker Daltonics' apex IV: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR. MS_apex_IV = 1000141, /// apex Q: Bruker Daltonics' apex Q: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR. MS_apex_Q = 1000142, /// API 150EX: Applied Biosystems/MDS SCIEX API 150EX MS. MS_API_150EX = 1000143, /// API 150EX Prep: Applied Biosystems/MDS SCIEX API 150EX Prep MS. MS_API_150EX_Prep = 1000144, /// API 2000: Applied Biosystems/MDS SCIEX API 2000 MS. MS_API_2000 = 1000145, /// API 3000: Applied Biosystems/MDS SCIEX API 3000 MS. MS_API_3000 = 1000146, /// API 4000: Applied Biosystems/MDS SCIEX API 4000 MS. MS_API_4000 = 1000147, /// autoflex II: Bruker Daltonics' autoflex II: MALDI TOF. MS_autoflex_II = 1000148, /// autoflex TOF/TOF: Bruker Daltonics' autoflex TOF/TOF MS: MALDI TOF. MS_autoflex_TOF_TOF = 1000149, /// Auto Spec Ultima NT: Waters magnetic sector based AutoSpec Ultima NT MS. MS_Auto_Spec_Ultima_NT = 1000150, /// BioTOF II: Bruker Daltonics' BioTOF II: ESI TOF. MS_BioTOF_II = 1000151, /// BioTOF-Q: Bruker Daltonics' BioTOF-Q: ESI Q-TOF. MS_BioTOF_Q = 1000152, /// DELTA plusAdvantage: ThermoFinnigan DELTA plusAdvantage MS. MS_DELTA_plusAdvantage = 1000153, /// DELTAplusXP: ThermoFinnigan DELTAplusXP MS. MS_DELTAplusXP = 1000154, /// ELEMENT2: ThermoFinnigan ELEMENT2 MS. MS_ELEMENT2_OBSOLETE = 1000155, /// esquire 4000: Bruker Daltonics' esquire 4000: linear ion trap, ESI, MALDI, Nanospray, APCI, APPI. MS_esquire_4000 = 1000156, /// esquire 6000: Bruker Daltonics' esquire 6000: linear ion trap, ESI, MALDI, Nanospray, APCI, APPI. MS_esquire_6000 = 1000157, /// explorer: IonSpec Explorer MS. MS_explorer = 1000158, /// GCT: Waters oa-ToF based GCT. MS_GCT = 1000159, /// HCT: Bruker Daltonics' HCT: ESI Q-TOF, Nanospray, APCI, APPI. MS_HCT = 1000160, /// HCTplus: Bruker Daltonics' HCTplus: ESI Q-TOF, Nanospray, APCI, APPI. MS_HCTplus = 1000161, /// HiRes ESI: IonSpec HiResESI MS. MS_HiRes_ESI = 1000162, /// HiRes MALDI: IonSpec HiResMALDI MS. MS_HiRes_MALDI = 1000163, /// IsoPrime: Waters IsoPrime MS. MS_IsoPrime = 1000164, /// IsoProbe: Waters IsoProbe MS. MS_IsoProbe = 1000165, /// IsoProbe T: Waters IsoProbe T MS. MS_IsoProbe_T = 1000166, /// LCQ Advantage: ThermoFinnigan LCQ Advantage MS. MS_LCQ_Advantage = 1000167, /// LCQ Classic: ThermoFinnigan LCQ Classic MS. MS_LCQ_Classic = 1000168, /// LCQ Deca XP Plus: ThermoFinnigan LCQ Deca XP Plus MS. MS_LCQ_Deca_XP_Plus = 1000169, /// M@LDI L: Waters oa-ToF based MALDI L. MS_M_LDI_L = 1000170, /// M@LDI LR: Waters oa-ToF based MALDI LR. MS_M_LDI_LR = 1000171, /// MAT253: ThermoFinnigan MAT253 MS. MS_MAT253 = 1000172, /// MAT900XP: ThermoFinnigan MAT900XP MS. MS_MAT900XP = 1000173, /// MAT900XP Trap: ThermoFinnigan MAT900XP Trap MS. MS_MAT900XP_Trap = 1000174, /// MAT95XP: ThermoFinnigan MAT95XP MS. MS_MAT95XP = 1000175, /// MAT95XP Trap: ThermoFinnigan MAT95XP Trap MS. MS_MAT95XP_Trap = 1000176, /// microflex: Bruker Daltonics' microflex: MALDI TOF. MS_microflex = 1000177, /// microTOF LC: Bruker Daltonics' microTOF LC: ESI TOF, Nanospray, APCI, APPI. MS_microTOF_LC = 1000178, /// neptune: ThermoFinnigan NEPTUNE MS. MS_neptune = 1000179, /// NG-5400: Waters NG-5400 MS. MS_NG_5400 = 1000180, /// OMEGA: IonSpec OMEGA MS. MS_OMEGA = 1000181, /// OMEGA-2001: IonSpec OMEGA-2001 MS. MS_OMEGA_2001 = 1000182, /// OmniFlex: Bruker Daltonics' OmniFlex: MALDI TOF. MS_OmniFlex = 1000183, /// Platform ICP: Waters Platform ICP MS. MS_Platform_ICP = 1000184, /// PolarisQ: ThermoFinnigan PolarisQ MS. MS_PolarisQ = 1000185, /// proteomics solution 1: Applied Biosystems/MDS SCIEX Proteomics Solution 1 MS. MS_proteomics_solution_1 = 1000186, /// Q TRAP: Applied Biosystems/MDS SCIEX Q TRAP MS. MS_Q_TRAP = 1000187, /// Q-Tof micro: Waters oa-ToF based Q-Tof micro. MS_Q_Tof_micro = 1000188, /// Q-Tof Ultima: Waters oa-ToF based Q-Tof Ultima. MS_Q_Tof_Ultima = 1000189, /// QSTAR: Applied Biosystems/MDS SCIEX QSTAR MS. MS_QSTAR = 1000190, /// quattro micro: Waters (triple) quadrupole based micro. MS_quattro_micro = 1000191, /// Quattro Ultima: Waters (triple) quadrupole based Ultima. MS_Quattro_Ultima = 1000192, /// Surveyor MSQ: ThermoFinnigan Surveyor MSQ MS. MS_Surveyor_MSQ = 1000193, /// SymBiot I: Applied Biosystems/MDS SCIEX SymBiot I MS. MS_SymBiot_I = 1000194, /// SymBiot XVI: Applied Biosystems/MDS SCIEX SymBiot XVI MS. MS_SymBiot_XVI = 1000195, /// TEMPUS TOF: ThermoFinnigan TEMPUS TOF MS. MS_TEMPUS_TOF = 1000196, /// TRACE DSQ: ThermoFinnigan TRACE DSQ MS. MS_TRACE_DSQ = 1000197, /// TRITON: ThermoFinnigan TRITON MS. MS_TRITON = 1000198, /// TSQ Quantum: ThermoFinnigan TSQ Quantum MS. MS_TSQ_Quantum = 1000199, /// ultima: IonSpec Ultima MS. MS_ultima = 1000200, /// ultraflex: Bruker Daltonics' ultraflex: MALDI TOF. MS_ultraflex = 1000201, /// ultraflex TOF/TOF: Bruker Daltonics' ultraflex TOF/TOF: MALDI TOF. MS_ultraflex_TOF_TOF = 1000202, /// Voyager-DE PRO: Applied Biosystems/MDS SCIEX Voyager-DE PRO MS. MS_Voyager_DE_PRO = 1000203, /// Voyager-DE STR: Applied Biosystems/MDS SCIEX Voyager-DE STR MS. MS_Voyager_DE_STR = 1000204, /// selected ion monitoring: The operation of a mass spectrometer in which the intensities of several specific m/z values are recorded rather than the entire mass spectrum. MS_selected_ion_monitoring = 1000205, /// Multiple Ion Monitoring (selected ion monitoring): The operation of a mass spectrometer in which the intensities of several specific m/z values are recorded rather than the entire mass spectrum. MS_Multiple_Ion_Monitoring = MS_selected_ion_monitoring, /// SIM (selected ion monitoring): The operation of a mass spectrometer in which the intensities of several specific m/z values are recorded rather than the entire mass spectrum. MS_SIM = MS_selected_ion_monitoring, /// selected reaction monitoring: Data acquired from specific product ions corresponding to m/z selected precursor ions recorded via multiple stages of mass spectrometry. Selected reaction monitoring can be performed in time or in space. MS_selected_reaction_monitoring = 1000206, /// SRM (selected reaction monitoring): Data acquired from specific product ions corresponding to m/z selected precursor ions recorded via multiple stages of mass spectrometry. Selected reaction monitoring can be performed in time or in space. MS_SRM = MS_selected_reaction_monitoring, /// accurate mass: An experimentally determined mass that is can be to determine a unique elemental formula. For ions less than 200 u, a measurement with 5 ppm accuracy is sufficient to determine the elemental composition. MS_accurate_mass_OBSOLETE = 1000207, /// average mass: The mass of an ion or molecule calculated using the average mass of each element weighted for its natural isotopic abundance. MS_average_mass_OBSOLETE = 1000208, /// appearance energy: The minimum energy that must be imparted to an atom or molecule to produce a specified ion. The term appearance potential is not recommended. MS_appearance_energy_OBSOLETE = 1000209, /// AE (appearance energy): The minimum energy that must be imparted to an atom or molecule to produce a specified ion. The term appearance potential is not recommended. MS_AE_OBSOLETE = MS_appearance_energy_OBSOLETE, /// base peak: The peak in a mass spectrum that has the greatest intensity. This term may be applied to the spectra of pure substances or mixtures. MS_base_peak = 1000210, /// BP (base peak): The peak in a mass spectrum that has the greatest intensity. This term may be applied to the spectra of pure substances or mixtures. MS_BP = MS_base_peak, /// OBSOLETE charge number: The total charge on an ion divided by the electron charge e. OBSOLETED 2009-10-27 since this was viewed as a duplication of 00041 charge state. MS_OBSOLETE_charge_number_OBSOLETE = 1000211, /// dalton: A non-SI unit of mass (symbol Da) that is equal to the unified atomic mass unit: 1.660 538 86(28) x 10^-27 kg. MS_dalton_OBSOLETE = 1000212, /// electron affinity: The electron affinity of M is the minimum energy required for the process M- ? M + e where M- and M are in their ground rotational, vibrational and electronic states and the electron has zero kinetic energy. MS_electron_affinity_OBSOLETE = 1000213, /// EA (electron affinity): The electron affinity of M is the minimum energy required for the process M- ? M + e where M- and M are in their ground rotational, vibrational and electronic states and the electron has zero kinetic energy. MS_EA_OBSOLETE = MS_electron_affinity_OBSOLETE, /// electron energy obsolete: The potential difference through which electrons are accelerated before they are used to bring about electron ionization. MS_electron_energy_obsolete_OBSOLETE = 1000214, /// exact mass: The calculated mass of an ion or molecule containing a single isotope of each atom. MS_exact_mass_OBSOLETE = 1000215, /// field-free region: A section of a mass spectrometer in which there are no electric or magnetic fields. MS_field_free_region = 1000216, /// FFR (field-free region): A section of a mass spectrometer in which there are no electric or magnetic fields. MS_FFR = MS_field_free_region, /// ionization cross section: A measure of the probability that a given ionization process will occur when an atom or molecule interacts with a photon, electron, atom or molecule. MS_ionization_cross_section_OBSOLETE = 1000217, /// ionization efficiency: The ratio of the number of ions formed to the number of electrons, molecules or photons used. MS_ionization_efficiency_OBSOLETE = 1000218, /// ionization energy: The minimum energy required to remove an electron from an atom or molecule to produce a positive ion. MS_ionization_energy_OBSOLETE = 1000219, /// IE (ionization energy): The minimum energy required to remove an electron from an atom or molecule to produce a positive ion. MS_IE_OBSOLETE = MS_ionization_energy_OBSOLETE, /// isotope dilution mass spectrometry: A quantitative mass spectrometry technique in which an isotopically enriched compound is used as an internal standard. MS_isotope_dilution_mass_spectrometry_OBSOLETE = 1000220, /// IDMS (isotope dilution mass spectrometry): A quantitative mass spectrometry technique in which an isotopically enriched compound is used as an internal standard. MS_IDMS_OBSOLETE = MS_isotope_dilution_mass_spectrometry_OBSOLETE, /// magnetic deflection: The deflection of charged particles in a magnetic field due to a force equal to qvxB where q is the particle charge, v its velocity and B the magnetic field. Magnetic deflection of an ion beam is used for m/z separation in a magnetic sector mass spectrometer. MS_magnetic_deflection = 1000221, /// mass defect: The difference between the monoisotopic and nominal mass of a molecule or atom. MS_mass_defect_OBSOLETE = 1000222, /// mass number: The sum of the protons and neutrons in an atom, molecule or ion. MS_mass_number_OBSOLETE = 1000223, /// molecular mass: Mass of a molecule measured in unified atomic mass units (u or Da). MS_molecular_mass = 1000224, /// monoisotopic mass: The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element. MS_monoisotopic_mass_OBSOLETE = 1000225, /// molecular beam mass spectrometry: A mass spectrometry technique in which the sample is introduced into the mass spectrometer as a molecular beam. MS_molecular_beam_mass_spectrometry_OBSOLETE = 1000226, /// MBMS (molecular beam mass spectrometry): A mass spectrometry technique in which the sample is introduced into the mass spectrometer as a molecular beam. MS_MBMS_OBSOLETE = MS_molecular_beam_mass_spectrometry_OBSOLETE, /// multiphoton ionization: Photoionization of an atom or molecule in which in two or more photons are absorbed. MS_multiphoton_ionization = 1000227, /// MPI (multiphoton ionization): Photoionization of an atom or molecule in which in two or more photons are absorbed. MS_MPI = MS_multiphoton_ionization, /// nitrogen rule: An organic molecule containing the elements C, H, O, S, P, or halogen has an odd nominal mass if it contains an odd number of nitrogen atoms. MS_nitrogen_rule_OBSOLETE = 1000228, /// nominal mass: The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element rounded to the nearest integer value. MS_nominal_mass_OBSOLETE = 1000229, /// odd-electron rule: Odd-electron ions may dissociate to form either odd or even-electron ions, whereas even-electron ions generally form even-electron fragment ions. MS_odd_electron_rule_OBSOLETE = 1000230, /// peak: A localized region of relatively large ion signal in a mass spectrum. Although peaks are often associated with particular ions, the terms peak and ion should not be used interchangeably. MS_peak = 1000231, /// peak intensity: The height or area of a peak in a mass spectrum. MS_peak_intensity_OBSOLETE = 1000232, /// proton affinity: The proton affinity of a species M is defined as the negative of the enthalpy change for the reaction M + H+ ->[M+H]+, where all species are in their ground rotational, vibrational and electronic states. MS_proton_affinity_OBSOLETE = 1000233, /// PA (proton affinity): The proton affinity of a species M is defined as the negative of the enthalpy change for the reaction M + H+ ->[M+H]+, where all species are in their ground rotational, vibrational and electronic states. MS_PA_OBSOLETE = MS_proton_affinity_OBSOLETE, /// mass resolving power: In a mass spectrum, the observed mass divided by the difference between two masses that can be separated. The method by which delta m was obtained and the mass at which the measurement was made should be reported. MS_mass_resolving_power_OBSOLETE = 1000234, /// total ion current chromatogram: Representation of the total ion current detected in each of a series of mass spectra versus time. MS_total_ion_current_chromatogram = 1000235, /// TIC chromatogram (total ion current chromatogram): Representation of the total ion current detected in each of a series of mass spectra versus time. MS_TIC_chromatogram = MS_total_ion_current_chromatogram, /// transmission: The ratio of the number of ions leaving a region of a mass spectrometer to the number entering that region. MS_transmission = 1000236, /// unified atomic mass unit: A non-SI unit of mass (u) defined as one twelfth of ^12 C in its ground state and equal to 1.660 538 86(28) x 10^-27 kg. MS_unified_atomic_mass_unit_OBSOLETE = 1000237, /// u (unified atomic mass unit): A non-SI unit of mass (u) defined as one twelfth of ^12 C in its ground state and equal to 1.660 538 86(28) x 10^-27 kg. MS_u_OBSOLETE = MS_unified_atomic_mass_unit_OBSOLETE, /// accelerator mass spectrometry: A mass spectrometry technique in which atoms extracted from a sample are ionized, accelerated to MeV energies and separated according to their momentum, charge and energy. MS_accelerator_mass_spectrometry_OBSOLETE = 1000238, /// AMS (accelerator mass spectrometry): A mass spectrometry technique in which atoms extracted from a sample are ionized, accelerated to MeV energies and separated according to their momentum, charge and energy. MS_AMS_OBSOLETE = MS_accelerator_mass_spectrometry_OBSOLETE, /// atmospheric pressure matrix-assisted laser desorption ionization: Matrix-assisted laser desorption ionization in which the sample target is at atmospheric pressure and the ions formed by the pulsed laser are sampled through a small aperture into the mass spectrometer. MS_atmospheric_pressure_matrix_assisted_laser_desorption_ionization = 1000239, /// AP MALDI (atmospheric pressure matrix-assisted laser desorption ionization): Matrix-assisted laser desorption ionization in which the sample target is at atmospheric pressure and the ions formed by the pulsed laser are sampled through a small aperture into the mass spectrometer. MS_AP_MALDI = MS_atmospheric_pressure_matrix_assisted_laser_desorption_ionization, /// atmospheric pressure ionization: Any ionization process in which ions are formed in the gas phase at atmospheric pressure. MS_atmospheric_pressure_ionization = 1000240, /// API (atmospheric pressure ionization): Any ionization process in which ions are formed in the gas phase at atmospheric pressure. MS_API = MS_atmospheric_pressure_ionization, /// Atmostpheric Pressure Photoionization: Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization. MS_Atmostpheric_Pressure_Photoionization_OBSOLETE = 1000241, /// APPI (Atmostpheric Pressure Photoionization): Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization. MS_APPI_OBSOLETE = MS_Atmostpheric_Pressure_Photoionization_OBSOLETE, /// blackbody infrared radiative dissociation: A special case of infrared multiphoton dissociation wherein excitation of the reactant ion is caused by absorption of infrared photons radiating from heated blackbody surroundings, which are usually the walls of a vacuum chamber. See also infrared multiphoton dissociation. MS_blackbody_infrared_radiative_dissociation = 1000242, /// BIRD (blackbody infrared radiative dissociation): A special case of infrared multiphoton dissociation wherein excitation of the reactant ion is caused by absorption of infrared photons radiating from heated blackbody surroundings, which are usually the walls of a vacuum chamber. See also infrared multiphoton dissociation. MS_BIRD = MS_blackbody_infrared_radiative_dissociation, /// charge-remote fragmentation: A fragmentation of an even-electron ion in which the cleaved bond is not adjacent to the apparent charge site. MS_charge_remote_fragmentation_OBSOLETE = 1000243, /// CRF (charge-remote fragmentation): A fragmentation of an even-electron ion in which the cleaved bond is not adjacent to the apparent charge site. MS_CRF_OBSOLETE = MS_charge_remote_fragmentation_OBSOLETE, /// consecutive reaction monitoring: MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored. MS_consecutive_reaction_monitoring_OBSOLETE_1000244 = 1000244, /// CRM (consecutive reaction monitoring): MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored. MS_CRM_OBSOLETE = MS_consecutive_reaction_monitoring_OBSOLETE_1000244, /// charge stripping: The reaction of a positive ion with an atom or molecule that results in the removal of one or more electrons from the ion. MS_charge_stripping = 1000245, /// CS (charge stripping): The reaction of a positive ion with an atom or molecule that results in the removal of one or more electrons from the ion. MS_CS = MS_charge_stripping, /// delayed extraction: The application of the accelerating voltage pulse after a time delay in desorption ionization from a surface. The extraction delay can produce energy focusing in a time-of-flight mass spectrometer. MS_delayed_extraction = 1000246, /// DE (delayed extraction): The application of the accelerating voltage pulse after a time delay in desorption ionization from a surface. The extraction delay can produce energy focusing in a time-of-flight mass spectrometer. MS_DE = MS_delayed_extraction, /// desorption ionization: The formation of ions from a solid or liquid material after the rapid vaporization of that sample. MS_desorption_ionization = 1000247, /// DI (desorption ionization): The formation of ions from a solid or liquid material after the rapid vaporization of that sample. MS_DI = MS_desorption_ionization, /// direct insertion probe: A device for introducing a solid or liquid sample into a mass spectrometer ion source for desorption ionization. MS_direct_insertion_probe = 1000248, /// DIP (direct insertion probe): A device for introducing a solid or liquid sample into a mass spectrometer ion source for desorption ionization. MS_DIP = MS_direct_insertion_probe, /// direct liquid introduction: The delivery of a liquid sample into a mass spectrometer for spray or desorption ionization. MS_direct_liquid_introduction = 1000249, /// DLI (direct liquid introduction): The delivery of a liquid sample into a mass spectrometer for spray or desorption ionization. MS_DLI = MS_direct_liquid_introduction, /// electron capture dissociation: A process in which a multiply protonated molecules interacts with a low energy electrons. Capture of the electron leads the liberation of energy and a reduction in charge state of the ion with the production of the (M + nH) (n-1)+ odd electron ion, which readily fragments. MS_electron_capture_dissociation = 1000250, /// ECD (electron capture dissociation): A process in which a multiply protonated molecules interacts with a low energy electrons. Capture of the electron leads the liberation of energy and a reduction in charge state of the ion with the production of the (M + nH) (n-1)+ odd electron ion, which readily fragments. MS_ECD = MS_electron_capture_dissociation, /// even-electron ion: An ion containing no unpaired electrons in its ground electronic state, e.g. CH3+ in its ground state. MS_even_electron_ion_OBSOLETE = 1000251, /// EE (even-electron ion): An ion containing no unpaired electrons in its ground electronic state, e.g. CH3+ in its ground state. MS_EE_OBSOLETE = MS_even_electron_ion_OBSOLETE, /// electron-induced excitation in organics: The reaction of an ion with an electron in which the translational energy of the collision is converted into internal energy of the ion. MS_electron_induced_excitation_in_organics_OBSOLETE = 1000252, /// EIEIO (electron-induced excitation in organics): The reaction of an ion with an electron in which the translational energy of the collision is converted into internal energy of the ion. MS_EIEIO_OBSOLETE = MS_electron_induced_excitation_in_organics_OBSOLETE, /// electron multiplier: A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. The secondary electrons are then accelerated to other electrodes or parts of a continuous electrode to produce further secondary electrons. MS_electron_multiplier = 1000253, /// EM (electron multiplier): A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. The secondary electrons are then accelerated to other electrodes or parts of a continuous electrode to produce further secondary electrons. MS_EM = MS_electron_multiplier, /// electrostatic energy analyzer: A device consisting of conducting parallel plates, concentric cylinders or concentric spheres that separates charged particles according to their kinetic energy by means of an electric field that is constant in time. MS_electrostatic_energy_analyzer = 1000254, /// ESA (electrostatic energy analyzer): A device consisting of conducting parallel plates, concentric cylinders or concentric spheres that separates charged particles according to their kinetic energy by means of an electric field that is constant in time. MS_ESA = MS_electrostatic_energy_analyzer, /// flowing afterglow: An ion source immersed in a flow of helium or other inert buffer gas that carries the ions through a meter-long reactor at pressures around 100 Pa. MS_flowing_afterglow = 1000255, /// FA (flowing afterglow): An ion source immersed in a flow of helium or other inert buffer gas that carries the ions through a meter-long reactor at pressures around 100 Pa. MS_FA = MS_flowing_afterglow, /// high-field asymmetric waveform ion mobility spectrometry: The separation of ions between two concentric cylindrical electrodes due to application of a high voltage asymmetric waveform whereby ions migrate towards one of the two electrodes depending on the ratio of the high- to low-field mobility of the ion. MS_high_field_asymmetric_waveform_ion_mobility_spectrometry_OBSOLETE = 1000256, /// FAIMS (high-field asymmetric waveform ion mobility spectrometry): The separation of ions between two concentric cylindrical electrodes due to application of a high voltage asymmetric waveform whereby ions migrate towards one of the two electrodes depending on the ratio of the high- to low-field mobility of the ion. MS_FAIMS_OBSOLETE = MS_high_field_asymmetric_waveform_ion_mobility_spectrometry_OBSOLETE, /// field desorption: The formation of gas-phase ions from a material deposited on a solid surface in the presence of a high electric field. Because this process may encompass ionization by field ionization or other mechanisms, it is not recommended as a synonym for field desorption ionization. MS_field_desorption = 1000257, /// FD (field desorption): The formation of gas-phase ions from a material deposited on a solid surface in the presence of a high electric field. Because this process may encompass ionization by field ionization or other mechanisms, it is not recommended as a synonym for field desorption ionization. MS_FD = MS_field_desorption, /// field ionization: The removal of electrons from any species by interaction with a high electric field. MS_field_ionization = 1000258, /// FI (field ionization): The removal of electrons from any species by interaction with a high electric field. MS_FI = MS_field_ionization, /// glow discharge ionization: The formation of ions in the gas phase and from solid samples at the cathode by application of a voltage to a low pressure gas. MS_glow_discharge_ionization = 1000259, /// GD-MS (glow discharge ionization): The formation of ions in the gas phase and from solid samples at the cathode by application of a voltage to a low pressure gas. MS_GD_MS = MS_glow_discharge_ionization, /// ion kinetic energy spectrometry: A method of analysis in which a beam of ions is separated according to the ratio of its translational energy to charge. MS_ion_kinetic_energy_spectrometry_OBSOLETE = 1000260, /// IKES (ion kinetic energy spectrometry): A method of analysis in which a beam of ions is separated according to the ratio of its translational energy to charge. MS_IKES_OBSOLETE = MS_ion_kinetic_energy_spectrometry_OBSOLETE, /// ion mobility spectrometry: The separation of ions according to their velocity through a buffer gas under the influence of an electric field. MS_ion_mobility_spectrometry_OBSOLETE = 1000261, /// IMS (ion mobility spectrometry): The separation of ions according to their velocity through a buffer gas under the influence of an electric field. MS_IMS_OBSOLETE = MS_ion_mobility_spectrometry_OBSOLETE, /// infrared multiphoton dissociation: Multiphoton ionization where the reactant ion dissociates as a result of the absorption of multiple infrared photons. MS_infrared_multiphoton_dissociation = 1000262, /// IRMPD (infrared multiphoton dissociation): Multiphoton ionization where the reactant ion dissociates as a result of the absorption of multiple infrared photons. MS_IRMPD = MS_infrared_multiphoton_dissociation, /// isotope ratio mass spectrometry: The measurement of the relative quantity of the different isotopes of an element in a material with a mass spectrometer. MS_isotope_ratio_mass_spectrometry_OBSOLETE = 1000263, /// IRMS (isotope ratio mass spectrometry): The measurement of the relative quantity of the different isotopes of an element in a material with a mass spectrometer. MS_IRMS_OBSOLETE = MS_isotope_ratio_mass_spectrometry_OBSOLETE, /// ion trap: A device for spatially confining ions using electric and magnetic fields alone or in combination. MS_ion_trap = 1000264, /// IT (ion trap): A device for spatially confining ions using electric and magnetic fields alone or in combination. MS_IT = MS_ion_trap, /// kinetic energy release distribution: Distribution of values of translational kinetic energy release for an ensemble of metastable ions undergoing a specific dissociation reaction. MS_kinetic_energy_release_distribution_OBSOLETE = 1000265, /// KERD (kinetic energy release distribution): Distribution of values of translational kinetic energy release for an ensemble of metastable ions undergoing a specific dissociation reaction. MS_KERD_OBSOLETE = MS_kinetic_energy_release_distribution_OBSOLETE, /// Laser Desorption: The formation of ions through the interaction of a laser with a material or with gas-phase ions or molecules. MS_Laser_Desorption_OBSOLETE = 1000266, /// Laser Ionization MERGE (Laser Desorption): The formation of ions through the interaction of a laser with a material or with gas-phase ions or molecules. MS_Laser_Ionization_MERGE_OBSOLETE = MS_Laser_Desorption_OBSOLETE, /// LD (Laser Desorption): The formation of ions through the interaction of a laser with a material or with gas-phase ions or molecules. MS_LD_OBSOLETE = MS_Laser_Desorption_OBSOLETE, /// mass analyzed ion kinetic energy spectrometry: Spectra that are obtained from a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector in reverse geometry. The accelerating voltage, V, and the magnetic sector field, B, are set at fixed values to select the precursor ions, which are then allowed to dissociate or to react in a field free region between the two sectors. The kinetic energy product ions of m/z selected precursor ions is analyzed by scanning the electric sector field, E. The width of the product ion spectrum peaks is related to the kinetic energy release distribution (KERD) for the dissociation process. MS_mass_analyzed_ion_kinetic_energy_spectrometry_OBSOLETE = 1000267, /// MIKES (mass analyzed ion kinetic energy spectrometry): Spectra that are obtained from a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector in reverse geometry. The accelerating voltage, V, and the magnetic sector field, B, are set at fixed values to select the precursor ions, which are then allowed to dissociate or to react in a field free region between the two sectors. The kinetic energy product ions of m/z selected precursor ions is analyzed by scanning the electric sector field, E. The width of the product ion spectrum peaks is related to the kinetic energy release distribution (KERD) for the dissociation process. MS_MIKES_OBSOLETE = MS_mass_analyzed_ion_kinetic_energy_spectrometry_OBSOLETE, /// mass spectrometry: The branch of science that deals with all aspects of mass spectrometers and the results obtained with these instruments. MS_mass_spectrometry_OBSOLETE = 1000268, /// MS (mass spectrometry): The branch of science that deals with all aspects of mass spectrometers and the results obtained with these instruments. MS_MS_OBSOLETE = MS_mass_spectrometry_OBSOLETE, /// mass spectrometry/mass spectrometry: The acquisition, study and spectra of the electrically charged products or precursors of a m/z selected ion or ions. MS_mass_spectrometry_mass_spectrometry_OBSOLETE = 1000269, /// MS/MS (mass spectrometry/mass spectrometry): The acquisition, study and spectra of the electrically charged products or precursors of a m/z selected ion or ions. MS_MS_MS_OBSOLETE = MS_mass_spectrometry_mass_spectrometry_OBSOLETE, /// multiple stage mass spectrometry: Multiple stages of precursor ion m/z selection followed by product ion detection for successive progeny ions. MS_multiple_stage_mass_spectrometry_OBSOLETE = 1000270, /// MSn (multiple stage mass spectrometry): Multiple stages of precursor ion m/z selection followed by product ion detection for successive progeny ions. MS_MSn_OBSOLETE = MS_multiple_stage_mass_spectrometry_OBSOLETE, /// Negative Ion chemical ionization: Chemical ionization that results in the formation of negative ions. MS_Negative_Ion_chemical_ionization = 1000271, /// NICI (Negative Ion chemical ionization): Chemical ionization that results in the formation of negative ions. MS_NICI = MS_Negative_Ion_chemical_ionization, /// neutralization reionization mass spectrometry: With this technique, m/z selected ions form neutrals by charge transfer to a collision gas or by dissociation. The neutrals are separated from the remaining ions and ionized in collisions with a second gas. This method is used to investigate reaction intermediates and other unstable species. MS_neutralization_reionization_mass_spectrometry = 1000272, /// NRMS (neutralization reionization mass spectrometry): With this technique, m/z selected ions form neutrals by charge transfer to a collision gas or by dissociation. The neutrals are separated from the remaining ions and ionized in collisions with a second gas. This method is used to investigate reaction intermediates and other unstable species. MS_NRMS = MS_neutralization_reionization_mass_spectrometry, /// photoionization: The ionization of an atom or molecule by a photon, written M + h? ? M^+ + e. The term photon impact is not recommended. MS_photoionization = 1000273, /// PI (photoionization): The ionization of an atom or molecule by a photon, written M + h? ? M^+ + e. The term photon impact is not recommended. MS_PI = MS_photoionization, /// pyrolysis mass spectrometry: A mass spectrometry technique in which the sample is heated to the point of decomposition and the gaseous decomposition products are introduced into the ion source. MS_pyrolysis_mass_spectrometry = 1000274, /// PyMS (pyrolysis mass spectrometry): A mass spectrometry technique in which the sample is heated to the point of decomposition and the gaseous decomposition products are introduced into the ion source. MS_PyMS = MS_pyrolysis_mass_spectrometry, /// collision quadrupole: A transmission quadrupole to which an oscillating potential is applied so as to focus a beam of ions through a collision gas with no m/z separation. MS_collision_quadrupole = 1000275, /// q (collision quadrupole): A transmission quadrupole to which an oscillating potential is applied so as to focus a beam of ions through a collision gas with no m/z separation. MS_q = MS_collision_quadrupole, /// resonance enhanced multiphoton ionization: Multiphoton ionization in which the ionization cross section is significantly enhanced because the energy of the incident photons is resonant with an intermediate excited state of the neutral species. MS_resonance_enhanced_multiphoton_ionization = 1000276, /// REMPI (resonance enhanced multiphoton ionization): Multiphoton ionization in which the ionization cross section is significantly enhanced because the energy of the incident photons is resonant with an intermediate excited state of the neutral species. MS_REMPI = MS_resonance_enhanced_multiphoton_ionization, /// residual gas analyzer: A mass spectrometer used to measure the composition and pressure of gasses in an evacuated chamber. MS_residual_gas_analyzer_OBSOLETE = 1000277, /// RGA (residual gas analyzer): A mass spectrometer used to measure the composition and pressure of gasses in an evacuated chamber. MS_RGA_OBSOLETE = MS_residual_gas_analyzer_OBSOLETE, /// surface enhanced laser desorption ionization: The formation of ionized species in the gas phase from analytes deposited on a particular surface substrate which is irradiated with a laser beam of which wavelength is absorbed by the surface. See also desorption/ionization on silicon and laser desorption/ionization. MS_surface_enhanced_laser_desorption_ionization = 1000278, /// SELDI (surface enhanced laser desorption ionization): The formation of ionized species in the gas phase from analytes deposited on a particular surface substrate which is irradiated with a laser beam of which wavelength is absorbed by the surface. See also desorption/ionization on silicon and laser desorption/ionization. MS_SELDI = MS_surface_enhanced_laser_desorption_ionization, /// surface enhanced neat desorption: Matrix-assisted laser desorption ionization in which the matrix is covalently linked to the target surface. MS_surface_enhanced_neat_desorption = 1000279, /// SEND (surface enhanced neat desorption): Matrix-assisted laser desorption ionization in which the matrix is covalently linked to the target surface. MS_SEND = MS_surface_enhanced_neat_desorption, /// suface ionization: The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature. MS_suface_ionization_OBSOLETE = 1000280, /// SI (suface ionization): The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature. MS_SI_OBSOLETE = MS_suface_ionization_OBSOLETE, /// selected ion flow tube: A device in which m/z selected ions are entrained in an inert carrier gas and undergo ion-molecule reactions. MS_selected_ion_flow_tube = 1000281, /// SIFT (selected ion flow tube): A device in which m/z selected ions are entrained in an inert carrier gas and undergo ion-molecule reactions. MS_SIFT = MS_selected_ion_flow_tube, /// sustained off-resonance irradiation: A technique associated with Fourier transform ion cyclotron resonance (FT-ICR) mass spectrometry to carry out ion/neutral reactions such as low-energy collision-induced dissociation. A radio-frequency electric field of slightly off-resonance to the cyclotron frequency of the reactant ion cyclically accelerates and decelerates the reactant ion that is confined in the Penning ion trap. The ion's orbit does not exceed the dimensions of ion trap while the ion undergoes an ion/neutral species process that produces a high average translational energy for an extended time. MS_sustained_off_resonance_irradiation = 1000282, /// SORI (sustained off-resonance irradiation): A technique associated with Fourier transform ion cyclotron resonance (FT-ICR) mass spectrometry to carry out ion/neutral reactions such as low-energy collision-induced dissociation. A radio-frequency electric field of slightly off-resonance to the cyclotron frequency of the reactant ion cyclically accelerates and decelerates the reactant ion that is confined in the Penning ion trap. The ion's orbit does not exceed the dimensions of ion trap while the ion undergoes an ion/neutral species process that produces a high average translational energy for an extended time. MS_SORI = MS_sustained_off_resonance_irradiation, /// Spark Source Mass Spectrometry: Mass spectrometry using spark ionization. MS_Spark_Source_Mass_Spectrometry_OBSOLETE = 1000283, /// SSMS (Spark Source Mass Spectrometry): Mass spectrometry using spark ionization. MS_SSMS_OBSOLETE = MS_Spark_Source_Mass_Spectrometry_OBSOLETE, /// stored waveform inverse fourier transform: A technique to create excitation waveforms for ions in FT-ICR mass spectrometer or Paul ion trap. An excitation waveform in the time-domain is generated by taking the inverse Fourier transform of an appropriate frequency-domain programmed excitation spectrum, in which the resonance frequencies of ions to be excited are included. This technique may be used for selection of precursor ions in MS2 experiments. MS_stored_waveform_inverse_fourier_transform = 1000284, /// SWIFT (stored waveform inverse fourier transform): A technique to create excitation waveforms for ions in FT-ICR mass spectrometer or Paul ion trap. An excitation waveform in the time-domain is generated by taking the inverse Fourier transform of an appropriate frequency-domain programmed excitation spectrum, in which the resonance frequencies of ions to be excited are included. This technique may be used for selection of precursor ions in MS2 experiments. MS_SWIFT = MS_stored_waveform_inverse_fourier_transform, /// total ion current: The sum of all the separate ion currents carried by the ions of different m/z contributing to a complete mass spectrum or in a specified m/z range of a mass spectrum. MS_total_ion_current = 1000285, /// TIC (total ion current): The sum of all the separate ion currents carried by the ions of different m/z contributing to a complete mass spectrum or in a specified m/z range of a mass spectrum. MS_TIC = MS_total_ion_current, /// time lag focusing: Energy focusing in a time-of-flight mass spectrometer that is accomplished by introducing a time delay between the formation of the ions and the application of the accelerating voltage pulse. MS_time_lag_focusing = 1000286, /// TLF (time lag focusing): Energy focusing in a time-of-flight mass spectrometer that is accomplished by introducing a time delay between the formation of the ions and the application of the accelerating voltage pulse. MS_TLF = MS_time_lag_focusing, /// time-of-flight mass spectrometer: An instrument that separates ions by m/z in a field-free region after acceleration to a fixed kinetic energy. MS_time_of_flight_mass_spectrometer_OBSOLETE = 1000287, /// TOF-MS (time-of-flight mass spectrometer): An instrument that separates ions by m/z in a field-free region after acceleration to a fixed kinetic energy. MS_TOF_MS_OBSOLETE = MS_time_of_flight_mass_spectrometer_OBSOLETE, /// cyclotron: A device that uses an oscillating electric field and magnetic field to accelerate charged particles. MS_cyclotron = 1000288, /// double-focusing mass spectrometer: A mass spectrometer that uses a magnetic sector for m/z focusing and an electric sector for energy focusing of an ion beam. MS_double_focusing_mass_spectrometer_OBSOLETE = 1000289, /// hybrid mass spectrometer: A mass spectrometer that combines m/z analyzers of different types to perform tandem mass spectrometry. MS_hybrid_mass_spectrometer_OBSOLETE = 1000290, /// linear ion trap: A two dimensional Paul ion trap in which ions are confined in the axial dimension by means of an electric field at the ends of the trap. MS_linear_ion_trap = 1000291, /// mass spectrograph obsolete: An instrument that separates a beam of ions according to their mass-to-charge ratio in which the ions are directed onto a focal plane detector such as a photographic plate. MS_mass_spectrograph_obsolete_OBSOLETE = 1000292, /// mass spectrometer: An instrument that measures the mass-to-charge ratio and relative abundances of ions. MS_mass_spectrometer_OBSOLETE = 1000293, /// mass spectrum: A plot of the relative abundance of a beam or other collection of ions as a function of the mass-to-charge ratio (m/z). MS_mass_spectrum = 1000294, /// mattauch-herzog geometry: An arrangement for a double-focusing mass spectrometer in which a deflection of ?/(4 ?(2)) radians in a radial electric field is followed by a magnetic deflection of ?/2 radians. MS_mattauch_herzog_geometry_OBSOLETE = 1000295, /// nier-johnson geometry: An arrangement for a double-focusing mass spectrometer in which a deflection of ?/2 radians in a radial electric field analyzer is followed by a magnetic deflection of ?/3 radians. MS_nier_johnson_geometry_OBSOLETE = 1000296, /// paul ion trap: A device that permits the trapping of ions by means of an alternating current voltage. The ejection of ions with a m/z less than a prescribed value and retention of those with higher mass depends on the application of radio frequency voltages between a ring electrode and two end-cap electrodes to confine the ions in a circular path. The choice of these voltages determines the m/z below which ions are ejected. MS_paul_ion_trap_OBSOLETE = 1000297, /// prolate traochoidal mass spectrometer: A mass spectrometer in which the ions of different m/z are separated by means of crossed electric and magnetic fields in such a way that the selected ions follow a prolate trochoidal path. MS_prolate_traochoidal_mass_spectrometer_OBSOLETE = 1000298, /// quistor: An abbreviation of quadrupole ion storage trap. This term is synonymous with Paul Ion Trap. If so then add a synonym to paul and obsolete this term. MS_quistor_OBSOLETE = 1000299, /// reflectron: A time-of-flight mass spectrometer that uses a static electric field to reverse the direction of travel of the ions entering it. A reflectron improves mass resolution by assuring that ions of the same m/z but different kinetic energy arrive at the detector at the same time. MS_reflectron = 1000300, /// sector mass spectrometer: A mass spectrometer consisting of one or more magnetic sectors for m/z selection in a beam of ions. Such instruments may also have one or more electric sectors for energy selection. MS_sector_mass_spectrometer_OBSOLETE = 1000301, /// tandem mass spectrometer: A mass spectrometer designed for mass spectrometry/mass spectrometry. MS_tandem_mass_spectrometer_OBSOLETE = 1000302, /// transmission quadrupole mass spectrometer: A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis. MS_transmission_quadrupole_mass_spectrometer_OBSOLETE = 1000303, /// accelerating voltage: The electrical potential used to impart kinetic energy to ions in a mass spectrometer. MS_accelerating_voltage = 1000304, /// cyclotron motion: The circular motion of a charged particle moving at velocity v in a magnetic field B that results from the force qvB. MS_cyclotron_motion_OBSOLETE = 1000305, /// dynamic mass spectrometry: A mass spectrometer in which m/z separation using one or more electric fields that vary with time. MS_dynamic_mass_spectrometry_OBSOLETE = 1000306, /// einzel lens: Three element charged particle lens in which the first and third elements are held at the same voltage. Such a lens produces focusing without changing the translational energy of the particle. MS_einzel_lens = 1000307, /// electric field strength: The magnitude of the force per unit charge at a given point in space. MS_electric_field_strength = 1000308, /// first stability region: The region of a Mathieu stability diagram closest to the origin. Ions within this region can traverse the full length of a transmission quadrupole. MS_first_stability_region = 1000309, /// fringing field: The electric or magnetic field that extends from the edge of a sector, lens or other ion optics element. MS_fringing_field = 1000310, /// kinetic energy analyzer: A device for measuring the kinetic energy of charged particles using a retarding field, time-of-flight, or the extent of deflection in an electric or magnetic field. MS_kinetic_energy_analyzer = 1000311, /// mass limit: The m/z value above which ions cannot be detected in a mass spectrometer. MS_mass_limit_OBSOLETE = 1000312, /// scan m/z range?: The limit of m/z over which a mass spectrometer can detect ions. MS_scan_m_z_range__OBSOLETE = 1000313, /// mass selective axial ejection: The use of mass selective instability to eject ions of selected m/z values from an ion trap. MS_mass_selective_axial_ejection_OBSOLETE = 1000314, /// mass selective instability: A method for selective ejection of ions according to their m/z value in an ion trap. MS_mass_selective_instability_OBSOLETE = 1000315, /// mathieu stability diagram: A graphical representation expressed in terms of reduced coordinates that describes charged particle motion in a quadrupole mass filter or quadrupole ion trap mass spectrometer. MS_mathieu_stability_diagram_OBSOLETE = 1000316, /// orthogonal extraction: The pulsed acceleration of ions perpendicular to their direction of travel into a time-of-flight mass spectrometer. Ions may be extracted from a directional ion source, drift tube or m/z separation stage. MS_orthogonal_extraction_OBSOLETE = 1000317, /// resonance ion ejection: A mode of ion ejection in a quadrupole ion trap that relies on a auxiliary radio frequency voltage that is applied to the end-cap electrodes. The voltage is tuned to the secular frequency of a particular ion to eject it. MS_resonance_ion_ejection_OBSOLETE = 1000318, /// space charge effect: The mutual repulsion of particles of like charge that limits the current in a charged-particle beam and causes beams or packets of charged particles to expand radially over time. MS_space_charge_effect = 1000319, /// static field: An electric or magnetic field that does not change in time. MS_static_field = 1000320, /// 2E Mass Spectrum: A mass spectrum obtained by setting the electric sector field E to twice the value required to transmit the main ion-beam thereby allowing ions with a kinetic energy-to-charge ratio twice that of the main ion-beam to be transmitted. Product ions resulting from partial charge transfer reactions such as m^2+ + N ? m^+ + N^+ that occur in a collision cell (containing a gas, N) located in a field-free region preceding a magnetic and electric sector combination are detected. When the magnetic sector field B is scanned, a mass spectrum of singly charged product ions of doubly charged precursor ions is obtained. MS_2E_Mass_Spectrum_OBSOLETE = 1000321, /// charge inversion mass spectrum: The measurement of the relative abundance of ions that result from a charge inversion reaction as a function of m/z. MS_charge_inversion_mass_spectrum = 1000322, /// constant neutral loss scan: Spectrum of all precursor ions that undergo a selected m/z decrement. MS_constant_neutral_loss_scan_OBSOLETE = 1000323, /// constant neutral gain scan: Spectrum of all precursor ions that undergo a selected m/z increment. MS_constant_neutral_gain_scan_OBSOLETE = 1000324, /// Constant Neutral Mass Gain Scan (constant neutral gain scan): Spectrum of all precursor ions that undergo a selected m/z increment. MS_Constant_Neutral_Mass_Gain_Scan_OBSOLETE = MS_constant_neutral_gain_scan_OBSOLETE, /// constant neutral gain spectrum: A spectrum formed of all product ions that have been produced by gain of a pre-selected neutral mass following the reaction with and addition of the gas in a collision cell. MS_constant_neutral_gain_spectrum = 1000325, /// constant neutral mass gain spectrum (constant neutral gain spectrum): A spectrum formed of all product ions that have been produced by gain of a pre-selected neutral mass following the reaction with and addition of the gas in a collision cell. MS_constant_neutral_mass_gain_spectrum = MS_constant_neutral_gain_spectrum, /// constant neutral loss spectrum: A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum. MS_constant_neutral_loss_spectrum = 1000326, /// constant neutral mass loss spectrum (constant neutral loss spectrum): A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum. MS_constant_neutral_mass_loss_spectrum = MS_constant_neutral_loss_spectrum, /// consecutive reaction monitoring: A type of MS2 experiments with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored. MS_consecutive_reaction_monitoring_OBSOLETE_1000327 = 1000327, /// e/2 mass spectrum: A mass spectrum obtained using a sector mass spectrometer in which the electric sector field E is set to half the value required to transmit the main ion-beam. This spectrum records the signal from doubly charged product ions of charge-stripping reactions. MS_e_2_mass_spectrum = 1000328, /// linked scan: A scan in an instrument with two or more m/z analysers or in a sector mass spectrometer that incorporates at least one magnetic sector and one electric sector. Two or more of the analyzers are scanned simultaneously so as to preserve a predetermined relationship between scan parameters to produce a product ion, precursor ion or constant neutral loss spectrum. MS_linked_scan_OBSOLETE = 1000329, /// linked scan at constant b/e: A linked scan at constant B/E may be performed on a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector. The magnetic field B and the electric field E are scanned simultaneously while the accelerating voltage V is held constant, so as to maintain the ratio of the two fields constant. This linked scan may record a product ion spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors. MS_linked_scan_at_constant_b_e_OBSOLETE = 1000330, /// Linked Scan at Constant E2/V: A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector. The electric sector field, E, and the accelerating voltage, V, are scanned simultaneously, so as to maintain the ratio E2/V at a constant value. This linked scan recordss a product ion spectrum of dissociation or other reactions occurring in a field free region (FFR) preceding the two sectors. MS_Linked_Scan_at_Constant_E2_V_OBSOLETE = 1000331, /// Linked Scan at Constant B2/E: A linked scan performed on a sector mass spectrometer that incorporates at least one electric sector plus one magnetic sector in either order. The accelerating voltage is fixed and the magnetic field, B, and the electric field, E, are scanned simultaneously so as to maintain the ratio B2/E at a constant value. This linked scan records a precursor ion spectrum of dissociation or other reactions occurring in the field free region preceding the two sectors. The term B2/E linked scan is not recommended. MS_Linked_Scan_at_Constant_B2_E_OBSOLETE = 1000332, /// Linked Scan at Constant B[1-(E/E0)]^1/2 / E: A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector placed in either order. The accelerating voltage is fixed while scanning the magnetic field, B, and electric field, E, simultaneously, so as to maintain the quantity B[1-(E/E0)]1/2/E at a constant value. This linked scan records a constant neutral mass loss (or gain) spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors. E0 is the electric field required to transmit the singly charged analog of the desired neutral fragment. The term B[1-(E/E0)]1/2/E linked scan. MS_Linked_Scan_at_Constant_B_1__E_E0___1_2___E_OBSOLETE = 1000333, /// MS/MS in Time: A tandem mass spectrometry method in which product ion spectra are recorded in a single m/z analyzer (such as a Paul Ion Trap or FTMS) in discreet steps over time. Ions in a specific m/z range are selected, dissociated, and the product ions analyzed sequentially in time. MS_MS_MS_in_Time_OBSOLETE = 1000334, /// MS/MS in Space: A tandem mass spectrometry method in which product ion spectra are recorded in m/z analyzers separated in space. Specific m/z separation functions are designed such that in one section of the instrument ions are selected, dissociated in an intermediate region, and the product ions are then transmitted to another analyser for m/z separation and data acquisition. MS_MS_MS_in_Space_OBSOLETE = 1000335, /// neutral loss: The loss of an uncharged species during a rearrangement process. The value slot holds the molecular formula in Hill notation of the neutral loss molecule, see PMID: 21182243. This term must be used in conjunction with a child of the term MS:1002307 (fragmentation ion type). MS_neutral_loss = 1000336, /// nth generation product ion: Serial product ions from dissociation of selected precursor ions where n refers to the number of stages of dissociation. The term granddaughter ion is deprecated. MS_nth_generation_product_ion_OBSOLETE = 1000337, /// nth generation product ion scan: The specific scan functions or processes that record the appropriate generation of product ion or ions of any m/z selected precursor ions. MS_nth_generation_product_ion_scan_OBSOLETE = 1000338, /// nth generation product ion spectrum: The mass spectrum recorded from any mass spectrometer in which the appropriate scan function can be set to record the appropriate generation product ion or ions of m/z selected precursor ions. MS_nth_generation_product_ion_spectrum_OBSOLETE = 1000339, /// precursor ion: An ion that reacts to form particular product ions. The reaction can be unimolecular dissociation, ion/molecule reaction, isomerization, or change in charge state. The term parent ion is deprecated. MS_precursor_ion_OBSOLETE = 1000340, /// precursor ion spectrum: Spectrum generated by scanning precursor m/z while monitoring a fixed product m/z. MS_precursor_ion_spectrum = 1000341, /// product ion: An ion formed as the product of a reaction involving a particular precursor ion. The reaction can be unimolecular dissociation to form fragment ions, an ion/molecule reaction, or simply involve a change in the number of charges. The term fragment ion is deprecated. The term daughter ion is deprecated. MS_product_ion_OBSOLETE = 1000342, /// product ion spectrum: A mass spectrum recorded from any spectrometer in which the appropriate m/z separation scan function is set to record the product ion or ions of selected precursor ions. MS_product_ion_spectrum_OBSOLETE = 1000343, /// progeny ion: A charged product of a series of consecutive reactions that includes product ions, 1st generation product ions, 2nd generation product ions, etc. Given the sequential fragmentation scheme: M1+ -> M2+ -> M3+ -> M4+ -> M5+. M4+ is the precursor ion of M5+, a 1st generation product ion of M3+, a 2nd generation product ion of M2+ and a 3rd generation product ion of M1+. MS_progeny_ion_OBSOLETE = 1000344, /// Progeny Fragment Ion (progeny ion): A charged product of a series of consecutive reactions that includes product ions, 1st generation product ions, 2nd generation product ions, etc. Given the sequential fragmentation scheme: M1+ -> M2+ -> M3+ -> M4+ -> M5+. M4+ is the precursor ion of M5+, a 1st generation product ion of M3+, a 2nd generation product ion of M2+ and a 3rd generation product ion of M1+. MS_Progeny_Fragment_Ion_OBSOLETE = MS_progeny_ion_OBSOLETE, /// array detector: Detector comprising several ion collection elements, arranged in a line or grid where each element is an individual detector. MS_array_detector = 1000345, /// conversion dynode: A surface that is held at high potential such that ions striking the surface produce electrons that are subsequently detected. MS_conversion_dynode = 1000346, /// dynode: One of a series of electrodes in a photomultiplier tube. Such an arrangement is able to amplify the current emitted by the photocathode. MS_dynode = 1000347, /// focal plane collector: A detector for spatially disperse ion beams in which all ions simultaneously impinge on the detector plane. MS_focal_plane_collector = 1000348, /// ion-to-photon detector: A detector in which ions strike a conversion dynode to produce electrons that in turn strike a phosphor and the resulting photons are detected by a photomultiplier. MS_ion_to_photon_detector = 1000349, /// point collector: A detector in which the ion beam is focused onto a point and the individual ions arrive sequentially. MS_point_collector = 1000350, /// postacceleration detector: A detector in which the charged particles are accelerated to a high velocity and impinge on a conversion dynode, emitting secondary electrons. The electrons are accelerated onto a phosphor screen, which emits photons that are in turn detected using a photomultiplier or other photon detector. MS_postacceleration_detector = 1000351, /// secondary electron: Electrons that are ejected from a sample surface as a result of bombardment by a primary beam of atoms, ions or photons. WAS IN DETECTOR TYPE. Where should it go. MS_secondary_electron_OBSOLETE = 1000352, /// adduct ion: Ion formed by the interaction of an ion with one or more atoms or molecules to form an ion containing all the constituent atoms of the precursor ion as well as the additional atoms from the associated atoms or molecules. MS_adduct_ion = 1000353, /// aromatic ion: A planar cyclic ion that obeys the Hueckel (4n + 2) rule where n is a positive integer representing the number of conjugated Pi electrons. Charge delocalization leads to greater stability compared to a hypothetical localized structure. MS_aromatic_ion_OBSOLETE = 1000354, /// analog ion: Ions that have similar chemical valence, for example the acetyl cation CH3-CO+ and the thioacetyl cation CH3-CS+. MS_analog_ion_OBSOLETE = 1000355, /// anti-aromatic ion: A planar cyclic ion with 4n ? electrons and is therefore not aromatic. MS_anti_aromatic_ion_OBSOLETE = 1000356, /// cationized molecule: An ion formed by the association of a cation with a neutral molecule, M, for example [M+ Na]+ and [M + K]+. The terms quasi-molecular ion and pseudo-molecular ion should not be used. MS_cationized_molecule_OBSOLETE = 1000357, /// cluster ion: An ion formed by a multi-component atomic or molecular assembly of one or more ions with atoms or molecules, such as [(H20)nH]+, [(NaCl)nNa]+ and [(H3PO3)nHPO3]-. MS_cluster_ion_OBSOLETE = 1000358, /// Conventional ion: A radical cation or anion in which the charge site and the unpaired electron spin are both formally located in the same atom or group of atoms, as opposed to the spatially separate electronic configuration of distonic ions. The radical cation of methanol, CH3OH+, in which the charge and spin sites are formally located at the O atom is an example of a conventional ion, whereas .CH2-OH2+ is a distonic ion. MS_Conventional_ion_OBSOLETE = 1000359, /// diagnostic ion: A product ion whose formation reveals structural or compositional information of its precursor. For instance, the phenyl cation in an electron ionization mass spectrum is a diagnostic ion for benzene and derivatives. MS_diagnostic_ion_OBSOLETE = 1000360, /// dimeric ion: An ion formed by ionization of a dimer or by the association of an ion with its neutral counterpart such as [M2]+ or [M-H-M]+. MS_dimeric_ion_OBSOLETE = 1000361, /// distonic ion: A radical cation or anion in which the charge site and the unpaired electron spin cannot be both formally located in the same atom or group of atoms as it can be with a conventional ion. For example, CH2-OH2+ is a distonic ion whereas the radical cation of methanol, CH3OH+ is a conventional ion. MS_distonic_ion_OBSOLETE = 1000362, /// enium ion: A positively charged lower-valency ion of the nonmetallic elements. The methenium ion is CH3+. Other examples are the oxenium, sulfenium, nitrenium, phosphenium, and halenium ions. MS_enium_ion_OBSOLETE = 1000363, /// fragment ion: A product ion that results from the dissociation of a precursor ion. MS_fragment_ion_OBSOLETE = 1000364, /// ion?: An atomic or molecular species having a net positive or negative electric charge. MS_ion__OBSOLETE = 1000365, /// Isotopologue ion: An ion that differs only in the isotopic composition of one or more of its constituent atoms. For example CH4+ and CH3D+ or 10BF3 and 11BF3. The term isotopologue is a contraction of isotopic homologue. MS_Isotopologue_ion_OBSOLETE = 1000366, /// Isotopomeric ion: Isomeric ion having the same numbers of each isotopic atom but differing in their positions. Isotopomeric ions can be either configurational isomers in which two atomic isotopes exchange positions or isotopic stereoisomers. The term isotopomer is a shortening of isotopic isomer. MS_Isotopomeric_ion_OBSOLETE = 1000367, /// metastable ion: An ion that is formed with internal energy higher than the threshold for dissociation but with a lifetime great enough to allow it to exit the ion source and enter the mass spectrometer where it dissociates before detection. MS_metastable_ion_OBSOLETE = 1000368, /// molecular ion: An ion formed by the removal of one or more electrons to form a positive ion or the addition off one or more electrons to form a negative ion. MS_molecular_ion_OBSOLETE = 1000369, /// negative ion: An atomic or molecular species having a net negative electric charge. MS_negative_ion_OBSOLETE = 1000370, /// non-classical ion: Hyper-coordinated carbonium ion such as the penta-coordinated norbornyl cation. Note: Tri-coordinated carbenium ions are termed classical ions. MS_non_classical_ion_OBSOLETE = 1000371, /// onium ion: A positively charged hypervalent ion of the nonmetallic elements. Examples are the methonium ion CH5+, the hydrogenonium ion H3+ and the hydronium ion H3O+. Other examples are the carbonium, oxonium, sulfonium, nitronium, diazonium, phosphonium, and halonium ions. Onium ions are not limited to monopositive ions; multiply-charged onium ions exist such as the gitonic (proximal) oxonium dication H4O2+ and the distonic oxonium dication H2O+-CH2-CH2-OH2+. MS_onium_ion_OBSOLETE = 1000372, /// principal ion: Most abundant ion of an isotope cluster, such as the 11B79Br2 81Br+ ion of m/z 250 of the cluster of isotopologue molecular ions of BBr3. The term principal ion has also been used to describe ions that have been artificially isotopically enriched in one or more positions such as CH3 13CH3+ or CH2D2 +, but those are best defined as isotopologue ions. MS_principal_ion_OBSOLETE = 1000373, /// positive ion: An atomic or molecular species having a net positive electric charge. MS_positive_ion_OBSOLETE = 1000374, /// protonated molecule: An ion formed by interaction of a neutral molecule with a proton and represented by the symbol [M + H]+, where M is the neutral molecule. The term 'protonated molecular ion,' 'quasi-molecular ion' and 'pseudo-molecular ion' are not recommended. MS_protonated_molecule_OBSOLETE = 1000375, /// radical ion: An ion, either a cation or anion, containing unpaired electrons in its ground state. The unpaired electron is denoted by a superscript dot alongside the superscript symbol for charge, such as for the molecular ion of a molecule M, that is, M+. Radical ions with more than one charge and/or more than one unpaired electron are denoted such as M(2+)(2). Unless the positions of the unpaired electron and charge can be associated with specific atoms, superscript charge designation should be placed before the superscript dot designation. MS_radical_ion_OBSOLETE = 1000376, /// reference ion: A stable ion whose structure is known with certainty. These ions are usually formed by direct ionization of a neutral molecule of known structure and are used to verify by comparison the structure of an unknown ion. MS_reference_ion_OBSOLETE = 1000377, /// stable ion: An ion with internal energy sufficiently low that it does not rearrange or dissociate prior to detection in a mass spectrometer. MS_stable_ion_OBSOLETE = 1000378, /// unstable ion: An ion with sufficient energy to dissociate within the ion source. MS_unstable_ion_OBSOLETE = 1000379, /// adiabatic ionization: A process whereby an electron is removed from an atom, ion, or molecule to produce an ion in its lowest energy state. MS_adiabatic_ionization = 1000380, /// associative ionization: An ionization process in which two excited atoms or molecules react to form a single positive ion and an electron. MS_associative_ionization = 1000381, /// atmospheric pressure photoionization: Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization. MS_atmospheric_pressure_photoionization = 1000382, /// autodetachment: The formation of a neutral when a negative ion in a discrete state with an energy greater than the detachment threshold loses an electron spontaneously without further interaction with an energy source. MS_autodetachment = 1000383, /// autoionization: The formation of an ion when an atom or molecule in a discrete state with an energy greater than the ionization threshold loses an electron spontaneously without further interaction with an energy source. MS_autoionization = 1000384, /// charge exchange ionization: The interaction of an ion with an atom or molecule in which the charge on the ion is transferred to the neutral without the dissociation of either. Synonymous with charge transfer ionization. MS_charge_exchange_ionization = 1000385, /// chemi-ionization: The reaction of a neutral molecule with an internally excited molecule to form an ion. Note that this term is not synonymous with chemical ionization. MS_chemi_ionization = 1000386, /// desorption/ionization on silicon: The formation of ions by laser desorption ionization of a sample deposited on a porous silicon surface. MS_desorption_ionization_on_silicon = 1000387, /// dissociative ionization: The reaction of a gas-phase molecule that results in its decomposition to form products, one of which is an ion. MS_dissociative_ionization = 1000388, /// electron ionization: The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended. MS_electron_ionization = 1000389, /// ion desolvation: The removal of solvent molecules clustered around a gas-phase ion by means of heating and/or collisions with gas molecules. MS_ion_desolvation_OBSOLETE = 1000390, /// ion-pair formation: The reaction of a molecule to form both a positive ion and negative ion fragment among the products. MS_ion_pair_formation_OBSOLETE = 1000391, /// ionization efficiency: The ratio of the number of ions formed to the number of electrons, molecules or photons used. MS_ionization_efficiency = 1000392, /// laser desorption ionization: The formation of gas-phase ions by the interaction of a pulsed laser with a solid or liquid material. MS_laser_desorption_ionization = 1000393, /// liquid secondary ionization: The ionization of any species by the interaction of a focused beam of ions with a sample that is dissolved in a solvent matrix. See also fast atom bombardment and secondary ionization. MS_liquid_secondary_ionization = 1000395, /// membrane inlet: A semi-permeable membrane separator that permits the passage of gas sample directly to the mass spectrometer ion source. MS_membrane_inlet = 1000396, /// microelectrospray: Electrospray ionization at a solvent flow rate of 300-800 nL/min where the flow is a result of a mechanical pump. See nanoelectrospray. MS_microelectrospray = 1000397, /// nanoelectrospray: Electrospray ionization at a flow rate less than ~25 nL/min. Nanoelectrospray is synonymous with nanospray. The flow is dependent on the potenial on the tip of the electrospray needle and/or a gas presure to push the sample through the needle. See also electrospray ionization and microelectrospray. MS_nanoelectrospray = 1000398, /// nanospray (nanoelectrospray): Electrospray ionization at a flow rate less than ~25 nL/min. Nanoelectrospray is synonymous with nanospray. The flow is dependent on the potenial on the tip of the electrospray needle and/or a gas presure to push the sample through the needle. See also electrospray ionization and microelectrospray. MS_nanospray = MS_nanoelectrospray, /// penning ionization: Ionization that occurs through the interaction of two or more neutral gaseous species, at least one of which is internally excited. MS_penning_ionization = 1000399, /// plasma desorption ionization: The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization. MS_plasma_desorption_ionization = 1000400, /// pre-ionization state: An electronic state capable of undergoing auto-Ionization. MS_pre_ionization_state_OBSOLETE = 1000401, /// secondary ionization: The process in which ions are ejected from a sample surface as a result of bombardment by a primary beam of atoms or ions. MS_secondary_ionization = 1000402, /// soft ionization: The formation of gas-phase ions without extensive fragmentation. MS_soft_ionization = 1000403, /// spark ionization: The formation of ions from a solid material by an intermittent electrical discharge. MS_spark_ionization = 1000404, /// surface-assisted laser desorption ionization: The formation of gas-phase ions from molecules that are deposited on a particular surface substrate that is irradiated with a pulsed laser. See also matrix-assisted laser desorption ionization. MS_surface_assisted_laser_desorption_ionization = 1000405, /// surface ionization: The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature. MS_surface_ionization = 1000406, /// thermal ionization: The ionization of a neutral species through contact with a high temperature surface. MS_thermal_ionization = 1000407, /// vertical ionization: A process in which an electron is removed from or added to a molecule without a change in the positions of the atoms. The resulting ion is typically in an excited vibrational state. MS_vertical_ionization = 1000408, /// association reaction: The reaction of an ion with a neutral species in which the reactants combine to form a single ion. MS_association_reaction_OBSOLETE = 1000409, /// alpha-cleavage: A homolytic cleavage where the bond fission occurs between at the atom adjacent to the atom at the apparent charge site and an atom removed from the aparent charge site by two bonds. MS_alpha_cleavage_OBSOLETE = 1000410, /// beta-cleavage: A homolytic cleavage where the bond fission occurs between at an atom removed from the apparent charge site atom by two bonds and an atom adjacent to that atom and removed from the aparent charge site by three bonds. MS_beta_cleavage_OBSOLETE = 1000411, /// buffer gas: An inert gas used for collisional deactivation of internally excited ions. MS_buffer_gas = 1000412, /// charge-induced fragmentation: Fragmentation of an odd electron ion in which the cleaved bond is adjacent to the apparent charge site. Synonymous with charge mediated fragmentation. MS_charge_induced_fragmentation_OBSOLETE = 1000413, /// charge inversion reaction: Reaction of an ion with a neutral species in which the charge on the product ion is reversed in sign with respect to the reactant ion. MS_charge_inversion_reaction_OBSOLETE = 1000414, /// charge permutation reaction: The reaction of an ion with a neutral species with a resulting change in the magnitude or sign of the charge on the reactant ion. MS_charge_permutation_reaction_OBSOLETE = 1000415, /// charge stripping reaction: Reaction of a positive ion with a neutral species in which the positive charge on the product ion is greater than that on the reactant ion. MS_charge_stripping_reaction_OBSOLETE = 1000416, /// charge transfer reaction: The reaction of an ion with a neutral species in which some or all of the charge of the reactant ion is transferred to the neutral species. MS_charge_transfer_reaction_OBSOLETE = 1000417, /// collisional excitation: The reaction of an ion with a neutral species in which the translational energy of the collision is converted into internal energy of the ion. MS_collisional_excitation_OBSOLETE = 1000418, /// collision gas: An inert gas used for collisional excitation. The term target gas is not recommended. MS_collision_gas = 1000419, /// heterolytic cleavage: Fragmentation of a molecule or ion in which both electrons forming the single bond that is broken remain on one of the atoms that were originally bonded. This term is synonymous with heterolysis. MS_heterolytic_cleavage_OBSOLETE = 1000420, /// high energy collision: Collision-induced dissociation process wherein the projectile ion has laboratory-frame translational energy higher than 1 keV. MS_high_energy_collision_OBSOLETE = 1000421, /// beam-type collision-induced dissociation: A collision-induced dissociation process that occurs in a beam-type collision cell. MS_beam_type_collision_induced_dissociation = 1000422, /// HCD (beam-type collision-induced dissociation): A collision-induced dissociation process that occurs in a beam-type collision cell. MS_HCD = MS_beam_type_collision_induced_dissociation, /// homolytic cleavage: Fragmentation of an odd electron ion that results from one of a pair of electrons that form a bond between two atoms moving to form a pair with the odd electron on the atom at the apparent charge site. Fragmentation results in the formation of an even electron ion and a radical. This reaction involves the movement of a single electron and is symbolized by a single-barbed arrow. Synonymous with Homolysis. MS_homolytic_cleavage_OBSOLETE = 1000423, /// hydrogen/deuterium exchange: Exchange of hydrogen atoms with deuterium atoms in a molecule or pre-formed ion in solution prior to introduction into a mass spectrometer, or by reaction of an ion with a deuterated collision gas inside a mass spectrometer. MS_hydrogen_deuterium_exchange_OBSOLETE = 1000424, /// ion energy loss spectrum: A plot of the relative abundance of a beam or other collection of ions as a function their loss of translational energy in reactions with neutral species. MS_ion_energy_loss_spectrum_OBSOLETE = 1000425, /// ionizing collision: The reaction of an ion with a neutral species in which one or more electrons are removed from either the ion or neutral. MS_ionizing_collision_OBSOLETE = 1000426, /// ion/molecule reaction: The reaction of an ion with a neutral molecule. The term ion-molecule reaction is not recommended because the hyphen suggests a single species that is that is both an ion and a molecule. MS_ion_molecule_reaction_OBSOLETE = 1000427, /// ion/neutral complex: A particular type of transition state that lies between precursor and product ions on the reaction coordinate of some ion reactions. MS_ion_neutral_complex_OBSOLETE = 1000428, /// ion/neutral species reaction: A process wherein a charged species interacts with a neutral reactant to produce either chemically different species or changes in the internal energy of one or both of the reactants. MS_ion_neutral_species_reaction_OBSOLETE = 1000429, /// ion/neutral species exchange reaction: In this reaction an association reaction is accompanied by the subsequent or simultaneous liberation of a different neutral species as a product. MS_ion_neutral_species_exchange_reaction_OBSOLETE = 1000430, /// kinetic method: An approach to determination of ion thermodynamic quantities by a bracketing procedure in which the relative probabilities of competing ion fragmentations are measured via the relative abundances of the reaction products. The extended kinetic method takes the associated entropy changes into account. MS_kinetic_method_OBSOLETE = 1000431, /// low energy collisions: A collision between an ion and neutral species with translational energy approximately 1000 eV or lower. MS_low_energy_collisions_OBSOLETE = 1000432, /// low-energy collision-induced dissociation: A collision-induced dissociation process wherein the precursor ion has the translational energy lower than approximately 1000 eV. This process typically requires multiple collisions and the collisional excitation is cumulative. MS_low_energy_collision_induced_dissociation = 1000433, /// McLafferty Rearrangement: A dissociation reaction triggered by transfer of a hydrogen atom via a 6-member transition state to the formal radical/charge site from a carbon atom four atoms removed from the charge/radical site (the gamma-carbon); subsequent rearrangement of electron density leads to expulsion of an olefin molecule. This term was originally applied to ketone ions where the charge/radical site is the carbonyl oxygen, but it is now more widely applied. MS_McLafferty_Rearrangement_OBSOLETE = 1000434, /// photodissociation: A process wherein the reactant ion is dissociated as a result of absorption of one or more photons. MS_photodissociation = 1000435, /// multiphoton dissociation (photodissociation): A process wherein the reactant ion is dissociated as a result of absorption of one or more photons. MS_multiphoton_dissociation = MS_photodissociation, /// MPD (photodissociation): A process wherein the reactant ion is dissociated as a result of absorption of one or more photons. MS_MPD = MS_photodissociation, /// partial charge transfer reaction: Reaction of an ion with a neutral species in which some but not all of the ion charge is transferred to the neutral. MS_partial_charge_transfer_reaction_OBSOLETE = 1000436, /// ion reaction: Chemical transformation involving an ion. MS_ion_reaction_OBSOLETE = 1000437, /// superelastic collision: Collision in which the translational energy of the fast-moving collision partner is increased at the expense of internal energy of one or both collision partners. MS_superelastic_collision_OBSOLETE = 1000438, /// surface-induced reaction: A process wherein a reactant ion interacts with a surface to produce either chemically different species or a change in the internal energy of the reactant ion. MS_surface_induced_reaction_OBSOLETE = 1000439, /// unimolecular dissociation: Fragmentation reaction in which the molecularity is treated as one, irrespective of whether the dissociative state is that of a metastable ion produced in the ion source or results from collisional excitation of a stable ion. MS_unimolecular_dissociation_OBSOLETE = 1000440, /// scan: Function or process of the mass spectrometer where it records a spectrum. MS_scan = 1000441, /// spectrum: Representation of intensity values corresponding to a range of measurement space. MS_spectrum = 1000442, /// mass analyzer type: Mass analyzer separates the ions according to their mass-to-charge ratio. MS_mass_analyzer_type = 1000443, /// m/z Separation Method: Mass/charge separation Method. MS_m_z_Separation_Method_OBSOLETE = 1000444, /// sequential m/z separation method: Sequential m/z separation method. MS_sequential_m_z_separation_method_OBSOLETE = 1000445, /// fast ion bombardment: The ionization of any species by the interaction of a focused beam of ions having a translational energy of several thousand eV with a solid sample. MS_fast_ion_bombardment = 1000446, /// FIB (fast ion bombardment): The ionization of any species by the interaction of a focused beam of ions having a translational energy of several thousand eV with a solid sample. MS_FIB = MS_fast_ion_bombardment, /// LTQ: Finnigan LTQ MS. MS_LTQ = 1000447, /// LTQ FT: Finnigan LTQ FT MS. MS_LTQ_FT = 1000448, /// LTQ Orbitrap: Finnigan LTQ Orbitrap MS. MS_LTQ_Orbitrap = 1000449, /// LXQ: Finnigan LXQ MS. MS_LXQ = 1000450, /// mass analyzer: Terms used to describe the Analyzer. MS_mass_analyzer = 1000451, /// analyzer (mass analyzer): Terms used to describe the Analyzer. MS_analyzer = MS_mass_analyzer, /// data transformation: Terms used to describe types of data processing. MS_data_transformation = 1000452, /// data processing (data transformation): Terms used to describe types of data processing. MS_data_processing = MS_data_transformation, /// detector: The device that detects ions. MS_detector = 1000453, /// instrument additional description: Additional terms to describe the instrument as outlined in the mass spec doc, Appendix 1, section 1.5. MS_instrument_additional_description_OBSOLETE = 1000454, /// ion selection attribute: Ion selection properties that are associated with a value. MS_ion_selection_attribute = 1000455, /// precursor activation: Terms to describe the precursor activation. MS_precursor_activation = 1000456, /// activation (precursor activation): Terms to describe the precursor activation. MS_activation = MS_precursor_activation, /// sample: Terms to describe the sample. MS_sample = 1000457, /// source: Terms to describe the source. MS_source = 1000458, /// spectrum instrument description: Terms used to describe the spectrum. MS_spectrum_instrument_description_OBSOLETE = 1000459, /// unit: Terms to describe units. MS_unit_OBSOLETE = 1000460, /// additional description: Terms to describe Additional. MS_additional_description_OBSOLETE = 1000461, /// ion optics: Device used in the construction of a mass spectrometer to focus, contain or otherwise manipulate ions. MS_ion_optics = 1000462, /// instrument: Description of the instrument or the mass spectrometer. MS_instrument = 1000463, /// instrument configuration (instrument): Description of the instrument or the mass spectrometer. MS_instrument_configuration = MS_instrument, /// mass unit: A unit of measurement for mass. MS_mass_unit_OBSOLETE = 1000464, /// scan polarity: Relative orientation of the electromagnetic field during the selection and detection of ions in the mass spectrometer. MS_scan_polarity = 1000465, /// alternating: Alternating. MS_alternating_OBSOLETE = 1000466, /// 1200 series LC/MSD SL: The 1200 Series LC/MSD SL ion trap belongs to the Agilent LC/MSD ion trap family. It provides fast polarity switching and multisignal data acquisition capabilities in a single run while also providing 5 stages of automated data dependent MS2 and 11 stages of manual MS2. MS_1200_series_LC_MSD_SL = 1000467, /// 6110 Quadrupole LC/MS: The 6110 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with an entry level single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6110 Quadrupole mass spectrometer has m/z range of 10-1500 and 2500 u/s scan speed. It proves useful for wide range of SIM quantitative applications. MS_6110_Quadrupole_LC_MS = 1000468, /// 6120A Quadrupole LC/MS: The 6120A Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers. 6120 quadrupole mass spectrometer has m/z range of 10-1500, 2500 u/s scan speed and utilizes multiple signal acquisition. MS_6120A_Quadrupole_LC_MS = 1000469, /// 6130 Quadrupole LC/MS: The 6130 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 series of Agilent mass spectrometers. The 6130 quadrupole mass spectrometer has m/z range of 2-3000, 2500 u/s scan speed in standard mode and 5250 u/s speed in fast-scan mode. It also uses multiple signal acquisition. MS_6130_Quadrupole_LC_MS = 1000470, /// 6140 Quadrupole LC/MS: The 6140 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6140 Quadrupole mass spectrometer has m/z range of 10-1350, 2500 u/s scan speed in standard mode and 10000 u/s speed in fast-scan mode. It also uses multiple signal acquisition. MS_6140_Quadrupole_LC_MS = 1000471, /// 6210 Time-of-Flight LC/MS: The 6210 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources. MS_6210_Time_of_Flight_LC_MS = 1000472, /// 6310 Ion Trap LC/MS: The 6310 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.35 resolution and mass range of 200-4000 with resolution of 3-4. The scan speed varies from 1650-27000 for the respective mass ranges. MS_6310_Ion_Trap_LC_MS = 1000473, /// 6320 Ion Trap LC/MS: The 6320 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges. MS_6320_Ion_Trap_LC_MS = 1000474, /// 6330 Ion Trap LC/MS: The 6330 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges. MS_6330_Ion_Trap_LC_MS = 1000475, /// 6340 Ion Trap LC/MS: The 6340 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges. MS_6340_Ion_Trap_LC_MS = 1000476, /// 6410 Triple Quadrupole LC/MS: The 6410 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. Mass range of the mass spectrometer is 15-1650 m/z, resolution is at three settings of 0.7 u (unit), 1.2 u (wide) and 2.5 u (widest). The mass accuracy for 6410 mass spectrometer is 0.1 across the mass range. The collision cell is a hexapole with linear acceleration. MS_6410_Triple_Quadrupole_LC_MS = 1000477, /// 6410 Triple Quad LC/MS (6410 Triple Quadrupole LC/MS): The 6410 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. Mass range of the mass spectrometer is 15-1650 m/z, resolution is at three settings of 0.7 u (unit), 1.2 u (wide) and 2.5 u (widest). The mass accuracy for 6410 mass spectrometer is 0.1 across the mass range. The collision cell is a hexapole with linear acceleration. MS_6410_Triple_Quad_LC_MS = MS_6410_Triple_Quadrupole_LC_MS, /// 1200 series LC/MSD VL: The LC/MSD VL ion trap is part of the family of Agilent ion trap mass spectrometers. It has ESI, APCI and APPI ion sources and is a useful ion trap when the amount of sample is not the limiting factor. MS_1200_series_LC_MSD_VL = 1000478, /// purgatory: Terms that will likely become obsolete unless there are wails of dissent. MS_purgatory_OBSOLETE = 1000479, /// mass analyzer attribute: Analyzer properties that are associated with a value. MS_mass_analyzer_attribute = 1000480, /// detector attribute: Detector attribute recognized as a value. MS_detector_attribute = 1000481, /// source attribute: Property of a source device that need a value. MS_source_attribute = 1000482, /// Thermo Fisher Scientific instrument model: Thermo Fisher Scientific instrument model. The company has gone through several names including Thermo Finnigan, Thermo Scientific. MS_Thermo_Fisher_Scientific_instrument_model = 1000483, /// orbitrap: An ion trapping device that consists of an outer barrel-like electrode and a coaxial inner spindle-like electrode that form an electrostatic field with quadro-logarithmic potential distribution. The frequency of harmonic oscillations of the orbitally trapped ions along the axis of the electrostatic field is independent of the ion velocity and is inversely proportional to the square root of m/z so that the trap can be used as a mass analyzer. MS_orbitrap = 1000484, /// nanospray inlet: Nanospray Inlet. MS_nanospray_inlet = 1000485, /// source potential: Potential difference at the MS source in volts. MS_source_potential = 1000486, /// ion optics attribute: Ion optics involves components that help focus ion streams in mass spectrometry. MS_ion_optics_attribute = 1000487, /// Hitachi instrument model: Hitachi instrument model. MS_Hitachi_instrument_model = 1000488, /// Varian instrument model: Varian instrument model. MS_Varian_instrument_model = 1000489, /// Agilent instrument model: Agilent instrument model. MS_Agilent_instrument_model = 1000490, /// Dionex instrument model: Dionex instrument model. MS_Dionex_instrument_model = 1000491, /// Thermo Electron instrument model: Thermo Electron Corporation instrument model. MS_Thermo_Electron_instrument_model = 1000492, /// Finnigan MAT instrument model: Finnigan MAT instrument model. MS_Finnigan_MAT_instrument_model = 1000493, /// Thermo Scientific instrument model: Thermo Scientific instrument model. MS_Thermo_Scientific_instrument_model = 1000494, /// Applied Biosystems instrument model: Applied Biosystems instrument model. MS_Applied_Biosystems_instrument_model = 1000495, /// ABI (Applied Biosystems instrument model): Applied Biosystems instrument model. MS_ABI = MS_Applied_Biosystems_instrument_model, /// instrument attribute: Instrument properties that are associated with a value. MS_instrument_attribute = 1000496, /// zoom scan: Special scan mode where data with improved resolution is acquired. This is typically achieved by scanning a more narrow m/z window or scanning with a lower scan rate. MS_zoom_scan = 1000497, /// enhanced resolution scan (zoom scan): Special scan mode where data with improved resolution is acquired. This is typically achieved by scanning a more narrow m/z window or scanning with a lower scan rate. MS_enhanced_resolution_scan = MS_zoom_scan, /// full scan: Feature of the ion trap mass spectrometer where MS data is acquired over a mass range. MS_full_scan_OBSOLETE = 1000498, /// spectrum attribute: Nonphysical characteristic attributed to a spectrum. MS_spectrum_attribute = 1000499, /// scan window upper limit: The lower m/z bound of a mass spectrometer scan window. MS_scan_window_upper_limit = 1000500, /// scan window lower limit: The upper m/z bound of a mass spectrometer scan window. MS_scan_window_lower_limit = 1000501, /// dwell time: The time spent gathering data across a peak. MS_dwell_time = 1000502, /// scan attribute: Nonphysical characteristic attributed to a spectrum acquisition scan. MS_scan_attribute = 1000503, /// base peak m/z: M/z value of the signal of highest intensity in the mass spectrum. MS_base_peak_m_z = 1000504, /// base peak intensity: The intensity of the greatest peak in the mass spectrum. MS_base_peak_intensity = 1000505, /// ion role: Ion Role. MS_ion_role_OBSOLETE = 1000506, /// ion property: Nonphysical characteristic attributed to an ion. MS_ion_property = 1000507, /// ion chemical type: Ion Type. MS_ion_chemical_type_OBSOLETE = 1000508, /// activation energy: Activation Energy. MS_activation_energy = 1000509, /// precursor activation attribute: Precursor Activation Attribute. MS_precursor_activation_attribute = 1000510, /// ms level: Stage number achieved in a multi stage mass spectrometry acquisition. MS_ms_level = 1000511, /// filter string: A string unique to Thermo instrument describing instrument settings for the scan. MS_filter_string = 1000512, /// binary data array: A data array of values. MS_binary_data_array = 1000513, /// m/z array: A data array of m/z values. MS_m_z_array = 1000514, /// intensity array: A data array of intensity values. MS_intensity_array = 1000515, /// charge array: A data array of charge values. MS_charge_array = 1000516, /// signal to noise array: A data array of signal-to-noise values. MS_signal_to_noise_array = 1000517, /// binary data type: Encoding type of binary data specifying the binary representation and precision, e.g. 64-bit float. MS_binary_data_type = 1000518, /// 32-bit integer: Signed 32-bit little-endian integer. MS_32_bit_integer = 1000519, /// 16-bit float: Signed 16-bit float. MS_16_bit_float_OBSOLETE = 1000520, /// 32-bit float: 32-bit precision little-endian floating point conforming to IEEE-754. MS_32_bit_float = 1000521, /// 64-bit integer: Signed 64-bit little-endian integer. MS_64_bit_integer = 1000522, /// 64-bit float: 64-bit precision little-endian floating point conforming to IEEE-754. MS_64_bit_float = 1000523, /// data file content: Describes the data content on the file. MS_data_file_content = 1000524, /// spectrum representation: Way in which the spectrum is represented, either with regularly spaced data points or with a list of centroided peaks. MS_spectrum_representation = 1000525, /// Waters raw format: Waters data file format found in a Waters RAW directory, generated from an MS acquisition. MS_Waters_raw_format = 1000526, /// highest observed m/z: Highest m/z value observed in the m/z array. MS_highest_observed_m_z = 1000527, /// lowest observed m/z: Lowest m/z value observed in the m/z array. MS_lowest_observed_m_z = 1000528, /// instrument serial number: Serial Number of the instrument. MS_instrument_serial_number = 1000529, /// file format conversion: Conversion of one file format to another. MS_file_format_conversion = 1000530, /// software: Software related to the recording or transformation of spectra. MS_software = 1000531, /// Xcalibur: Thermo Finnigan software for data acquisition and analysis. MS_Xcalibur = 1000532, /// Bioworks: Thermo Finnigan software for data analysis of peptides and proteins. MS_Bioworks = 1000533, /// MassLynx: Micromass software for data acquisition and analysis. MS_MassLynx = 1000534, /// FlexAnalysis: Bruker software for data analysis. MS_FlexAnalysis = 1000535, /// Data Explorer: Applied Biosystems software for data acquisition and analysis. MS_Data_Explorer = 1000536, /// 4700 Explorer: Applied Biosystems software for data acquisition and analysis. MS_4700_Explorer = 1000537, /// massWolf: A software for converting Waters raw directory format to mzXML or mzML. MassWolf was originally developed at the Institute for Systems Biology. MS_massWolf = 1000538, /// wolf (massWolf): A software for converting Waters raw directory format to mzXML or mzML. MassWolf was originally developed at the Institute for Systems Biology. MS_wolf = MS_massWolf, /// Voyager Biospectrometry Workstation System: Applied Biosystems MALDI-TOF data acquisition and analysis system. MS_Voyager_Biospectrometry_Workstation_System = 1000539, /// FlexControl: Bruker software for data acquisition. MS_FlexControl = 1000540, /// ReAdW: A software program for converting Thermo Finnigan RAW file format to mzXML or mzML. ReAdW was originally developed at the Institute for Systems Biology. Its whimsical interleaved spelling and capitalization is pronounced \"readraw\". MS_ReAdW = 1000541, /// MzStar: A software program for converting Applied Biosystems wiff file format to mzXML format. MzStar was originally developed at the Institute for Systems Biology. It is now obsoleted by the MzWiff program. MS_MzStar = 1000542, /// data processing action: Data processing attribute used to describe the type of data processing performed on the data file. MS_data_processing_action = 1000543, /// Conversion to mzML: Conversion of a file format to Proteomics Standards Initiative mzML file format. MS_Conversion_to_mzML = 1000544, /// Conversion to mzXML: Conversion of a file format to Institute of Systems Biology mzXML file format. MS_Conversion_to_mzXML = 1000545, /// Conversion to mzData: Conversion of a file format to Proteomics Standards Initiative mzData file format. MS_Conversion_to_mzData = 1000546, /// object attribute: Object Attribute. MS_object_attribute = 1000547, /// sample attribute: Sample properties that are associated with a value. MS_sample_attribute = 1000548, /// selection window attribute: Selection window properties that are associated with a value. MS_selection_window_attribute = 1000549, /// time unit: Time Unit. MS_time_unit_OBSOLETE = 1000550, /// Analyst: SCIEX or Applied Biosystems|MDS SCIEX software for data acquisition. MS_Analyst = 1000551, /// maldi spot identifier: Maldi Spot Identifier. MS_maldi_spot_identifier_OBSOLETE = 1000552, /// Trapper: A software program for converting Agilent MassHunter format to mzXML or mzML. Trapper was originally developed at the Institute for Systems Biology. MS_Trapper = 1000553, /// LCQ Deca: ThermoFinnigan LCQ Deca. MS_LCQ_Deca = 1000554, /// LTQ Orbitrap Discovery: LTQ Orbitrap Discovery. MS_LTQ_Orbitrap_Discovery = 1000555, /// LTQ Orbitrap XL: LTQ Orbitrap XL. MS_LTQ_Orbitrap_XL = 1000556, /// LTQ FT Ultra: LTQ FT Ultra. MS_LTQ_FT_Ultra = 1000557, /// GC Quantum: GC Quantum. MS_GC_Quantum = 1000558, /// spectrum type: Spectrum type. MS_spectrum_type = 1000559, /// mass spectrometer file format: The format of the file being used. This could be a instrument or vendor specific proprietary file format or a converted open file format. MS_mass_spectrometer_file_format = 1000560, /// data file checksum type: Checksum is a form of redundancy check, a simple way to protect the integrity of data by detecting errors in data. MS_data_file_checksum_type = 1000561, /// ABI WIFF format: Applied Biosystems WIFF file format. MS_ABI_WIFF_format = 1000562, /// Thermo RAW format: Thermo Scientific RAW file format. MS_Thermo_RAW_format = 1000563, /// PSI mzData format: Proteomics Standards Inititative mzData file format. MS_PSI_mzData_format = 1000564, /// Micromass PKL format: Micromass PKL file format. MS_Micromass_PKL_format = 1000565, /// ISB mzXML format: Institute of Systems Biology mzXML file format. MS_ISB_mzXML_format = 1000566, /// Bruker/Agilent YEP format: Bruker/Agilent YEP file format. MS_Bruker_Agilent_YEP_format = 1000567, /// MD5: MD5 (Message-Digest algorithm 5) is a (now deprecated) cryptographic hash function with a 128-bit hash value used to check the integrity of files. MS_MD5 = 1000568, /// SHA-1: SHA-1 (Secure Hash Algorithm-1) is a cryptographic hash function designed by the National Security Agency (NSA). It is also used to verify file integrity. Since 2011 it has been deprecated by the NIST as a U. S. government standard. MS_SHA_1 = 1000569, /// spectra combination: Method used to combine the mass spectra. MS_spectra_combination = 1000570, /// sum of spectra: Spectra Sum. MS_sum_of_spectra = 1000571, /// binary data compression type: Compression Type. MS_binary_data_compression_type = 1000572, /// median of spectra: Spectra is combined by calculating the median of the spectra. MS_median_of_spectra = 1000573, /// zlib compression: Zlib. MS_zlib_compression = 1000574, /// mean of spectra: Spectra is combined by calculating the mean of the spectra. MS_mean_of_spectra = 1000575, /// no compression: No Compression. MS_no_compression = 1000576, /// source data file: Data file from which an entity is sourced. MS_source_data_file = 1000577, /// source file (source data file): Data file from which an entity is sourced. MS_source_file = MS_source_data_file, /// LCQ Fleet: LCQ Fleet. MS_LCQ_Fleet = 1000578, /// MS1 spectrum: Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment. MS_MS1_spectrum = 1000579, /// full spectrum (MS1 spectrum): Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment. MS_full_spectrum = MS_MS1_spectrum, /// Q1 spectrum (MS1 spectrum): Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment. MS_Q1_spectrum = MS_MS1_spectrum, /// Q3 spectrum (MS1 spectrum): Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment. MS_Q3_spectrum = MS_MS1_spectrum, /// Single-Stage Mass Spectrometry (MS1 spectrum): Mass spectrum created by a single-stage MS experiment or the first stage of a multi-stage experiment. MS_Single_Stage_Mass_Spectrometry = MS_MS1_spectrum, /// MSn spectrum: MSn refers to multi-stage MS2 experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n=2. Use the term ms level (MS:1000511) for specifying n. MS_MSn_spectrum = 1000580, /// multiple-stage mass spectrometry spectrum (MSn spectrum): MSn refers to multi-stage MS2 experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n=2. Use the term ms level (MS:1000511) for specifying n. MS_multiple_stage_mass_spectrometry_spectrum = MS_MSn_spectrum, /// nth generation product ion spectrum (MSn spectrum): MSn refers to multi-stage MS2 experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n=2. Use the term ms level (MS:1000511) for specifying n. MS_nth_generation_product_ion_spectrum = MS_MSn_spectrum, /// product ion spectrum (MSn spectrum): MSn refers to multi-stage MS2 experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n=2. Use the term ms level (MS:1000511) for specifying n. MS_product_ion_spectrum = MS_MSn_spectrum, /// CRM spectrum: Spectrum generated from MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored. MS_CRM_spectrum = 1000581, /// SIM spectrum: Spectrum obtained with the operation of a mass spectrometer in which the abundances of one ion or several ions of specific m/z values are recorded rather than the entire mass spectrum (Selected Ion Monitoring). MS_SIM_spectrum = 1000582, /// MIM spectrum (SIM spectrum): Spectrum obtained with the operation of a mass spectrometer in which the abundances of one ion or several ions of specific m/z values are recorded rather than the entire mass spectrum (Selected Ion Monitoring). MS_MIM_spectrum = MS_SIM_spectrum, /// multiple ion monitoring spectrum (SIM spectrum): Spectrum obtained with the operation of a mass spectrometer in which the abundances of one ion or several ions of specific m/z values are recorded rather than the entire mass spectrum (Selected Ion Monitoring). MS_multiple_ion_monitoring_spectrum = MS_SIM_spectrum, /// selected ion monitoring spectrum (SIM spectrum): Spectrum obtained with the operation of a mass spectrometer in which the abundances of one ion or several ions of specific m/z values are recorded rather than the entire mass spectrum (Selected Ion Monitoring). MS_selected_ion_monitoring_spectrum = MS_SIM_spectrum, /// SRM spectrum: Spectrum obtained when data are acquired from specific product ions corresponding to m/z values of selected precursor ions a recorded via two or more stages of mass spectrometry. The precursor/product ion pair is called a transition pair. Data can be obtained for a single transition pair or multiple transition pairs. Multiple time segments of different transition pairs can exist in a single file. Single precursor ions can have multiple product ions consitituting multiple transition pairs. Selected reaction monitoring can be performed as tandem mass spectrometry in time or tandem mass spectrometry in space. MS_SRM_spectrum = 1000583, /// MRM spectrum (SRM spectrum): Spectrum obtained when data are acquired from specific product ions corresponding to m/z values of selected precursor ions a recorded via two or more stages of mass spectrometry. The precursor/product ion pair is called a transition pair. Data can be obtained for a single transition pair or multiple transition pairs. Multiple time segments of different transition pairs can exist in a single file. Single precursor ions can have multiple product ions consitituting multiple transition pairs. Selected reaction monitoring can be performed as tandem mass spectrometry in time or tandem mass spectrometry in space. MS_MRM_spectrum = MS_SRM_spectrum, /// multiple reaction monitoring spectrum (SRM spectrum): Spectrum obtained when data are acquired from specific product ions corresponding to m/z values of selected precursor ions a recorded via two or more stages of mass spectrometry. The precursor/product ion pair is called a transition pair. Data can be obtained for a single transition pair or multiple transition pairs. Multiple time segments of different transition pairs can exist in a single file. Single precursor ions can have multiple product ions consitituting multiple transition pairs. Selected reaction monitoring can be performed as tandem mass spectrometry in time or tandem mass spectrometry in space. MS_multiple_reaction_monitoring_spectrum = MS_SRM_spectrum, /// selected reaction monitoring spectrum (SRM spectrum): Spectrum obtained when data are acquired from specific product ions corresponding to m/z values of selected precursor ions a recorded via two or more stages of mass spectrometry. The precursor/product ion pair is called a transition pair. Data can be obtained for a single transition pair or multiple transition pairs. Multiple time segments of different transition pairs can exist in a single file. Single precursor ions can have multiple product ions consitituting multiple transition pairs. Selected reaction monitoring can be performed as tandem mass spectrometry in time or tandem mass spectrometry in space. MS_selected_reaction_monitoring_spectrum = MS_SRM_spectrum, /// mzML format: Proteomics Standards Inititative mzML file format. MS_mzML_format = 1000584, /// contact attribute: Details about a person or organization to contact in case of concern or discussion about the file. MS_contact_attribute = 1000585, /// contact name: Name of the contact person or organization. MS_contact_name = 1000586, /// contact address: Postal address of the contact person or organization. MS_contact_address = 1000587, /// contact URL: Uniform Resource Locator related to the contact person or organization. MS_contact_URL = 1000588, /// contact email: Email address of the contact person or organization. MS_contact_email = 1000589, /// contact affiliation: Home institution of the contact person. MS_contact_affiliation = 1000590, /// MzWiff: A software program for converting Applied Biosystems wiff file format to the mzXML or mzML format. MzWiff is currently maintained at the Institute for Systems Biology. It replaces the slower mzStar program. MS_MzWiff = 1000591, /// smoothing: A process of reducing spikes of intensity in order to reduce noise while preserving real peak signal. Many algorithms can be applied for this process. MS_smoothing = 1000592, /// baseline reduction: A process of removal of varying intensities generated due to variable energy absorption before further processing can take place. Baseline reduction facilitates meaningful comparision between intensities of m/z values. MS_baseline_reduction = 1000593, /// low intensity data point removal: The removal of very low intensity data points that are likely to be spurious noise rather than real signal. MS_low_intensity_data_point_removal = 1000594, /// thresholding (low intensity data point removal): The removal of very low intensity data points that are likely to be spurious noise rather than real signal. MS_thresholding = MS_low_intensity_data_point_removal, /// time array: A data array of relative time offset values from a reference time. MS_time_array = 1000595, /// measurement method: An attribute of resolution when recording the detector response in absence of the analyte. MS_measurement_method = 1000596, /// ion optics type: The electrical potential used to impart kinetic energy to ions in a mass spectrometer. MS_ion_optics_type = 1000597, /// electron transfer dissociation: A process to fragment ions in a mass spectrometer by inducing fragmentation of cations (e.g. peptides or proteins) by transferring electrons to them. MS_electron_transfer_dissociation = 1000598, /// ETD (electron transfer dissociation): A process to fragment ions in a mass spectrometer by inducing fragmentation of cations (e.g. peptides or proteins) by transferring electrons to them. MS_ETD = MS_electron_transfer_dissociation, /// pulsed q dissociation: A process that involves precursor ion activation at high Q, a time delay to allow the precursor to fragment, then a rapid pulse to low Q where all fragment ions are trapped. The product ions can then be scanned out of the ion trap and detected. MS_pulsed_q_dissociation = 1000599, /// PQD (pulsed q dissociation): A process that involves precursor ion activation at high Q, a time delay to allow the precursor to fragment, then a rapid pulse to low Q where all fragment ions are trapped. The product ions can then be scanned out of the ion trap and detected. MS_PQD = MS_pulsed_q_dissociation, /// Proteios: Database application and analysis platform for proteomics. MS_Proteios = 1000600, /// ProteinLynx Global Server: Waters software for data analysis. MS_ProteinLynx_Global_Server = 1000601, /// Shimadzu MALDI-TOF instrument model: Shimadzu MALDI-TOF instrument model. MS_Shimadzu_MALDI_TOF_instrument_model = 1000602, /// Shimadzu Scientific Instruments instrument model: Shimadzu Scientific Instruments instrument model. MS_Shimadzu_Scientific_Instruments_instrument_model = 1000603, /// LCMS-IT-TOF: Shimadzu Scientific Instruments LCMS-IT-TOF MS. MS_LCMS_IT_TOF = 1000604, /// LCMS-2010EV: Shimadzu Scientific Instruments LCMS-2010EV MS. MS_LCMS_2010EV = 1000605, /// LCMS-2010A: Shimadzu Scientific Instruments LCMS-2010A MS. MS_LCMS_2010A = 1000606, /// AXIMA CFR MALDI-TOF: Shimadzu Biotech AXIMA CFR MALDI-TOF MS. MS_AXIMA_CFR_MALDI_TOF = 1000607, /// AXIMA-QIT: Shimadzu Biotech AXIMA-QIT MS. MS_AXIMA_QIT = 1000608, /// AXIMA-CFR plus: Shimadzu Biotech AXIMA-CFR plus MS. MS_AXIMA_CFR_plus = 1000609, /// AXIMA Performance MALDI-TOF/TOF: Shimadzu Biotech AXIMA Performance MALDI-TOF/TOF MS. MS_AXIMA_Performance_MALDI_TOF_TOF = 1000610, /// AXIMA Confidence MALDI-TOF: Shimadzu Biotech AXIMA Confidence MALDI-TOF (curved field reflectron) MS. MS_AXIMA_Confidence_MALDI_TOF = 1000611, /// AXIMA Assurance Linear MALDI-TOF: Shimadzu Biotech AXIMA Assurance Linear MALDI-TOF MS. MS_AXIMA_Assurance_Linear_MALDI_TOF = 1000612, /// DTA format: SEQUEST DTA file format. MS_DTA_format = 1000613, /// ProteinLynx Global Server mass spectrum XML format: Peak list file format used by ProteinLynx Global Server. MS_ProteinLynx_Global_Server_mass_spectrum_XML_format = 1000614, /// ProteoWizard software: ProteoWizard software for data processing and analysis. Primarily developed by the labs of P. Malick and D. Tabb. MS_ProteoWizard_software = 1000615, /// pwiz (ProteoWizard software): ProteoWizard software for data processing and analysis. Primarily developed by the labs of P. Malick and D. Tabb. MS_pwiz = MS_ProteoWizard_software, /// preset scan configuration: A user-defined scan configuration that specifies the instrumental settings in which a spectrum is acquired. An instrument may cycle through a list of preset scan configurations to acquire data. This is a more generic term for the Thermo \"scan event\", which is defined in the Thermo Xcalibur glossary as: a mass spectrometer scan that is defined by choosing the necessary scan parameter settings. Multiple scan events can be defined for each segment of time. MS_preset_scan_configuration = 1000616, /// wavelength array: A data array of electromagnetic radiation wavelength values. MS_wavelength_array = 1000617, /// highest observed wavelength: Highest wavelength observed in an EMR spectrum. MS_highest_observed_wavelength = 1000618, /// lowest observed wavelength: Lowest wavelength observed in an EMR spectrum. MS_lowest_observed_wavelength = 1000619, /// PDA spectrum: Spectrum generated from a photodiode array detector (ultraviolet/visible spectrum). MS_PDA_spectrum_OBSOLETE = 1000620, /// photodiode array detector: An array detector used to record spectra in the ultraviolet and visible region of light. MS_photodiode_array_detector = 1000621, /// PDA (photodiode array detector): An array detector used to record spectra in the ultraviolet and visible region of light. MS_PDA = MS_photodiode_array_detector, /// Surveyor PDA: Surveyor PDA. MS_Surveyor_PDA = 1000622, /// Accela PDA: Accela PDA. MS_Accela_PDA = 1000623, /// inductive detector: Inductive detector. MS_inductive_detector = 1000624, /// image current detector (inductive detector): Inductive detector. MS_image_current_detector = MS_inductive_detector, /// chromatogram: Representation of a chromatographic separation attribute measurement versus time. MS_chromatogram = 1000625, /// chromatogram type: Type of chromatogram measurement being represented. MS_chromatogram_type = 1000626, /// selected ion current chromatogram: Representation of an array of the measurements of a specific single ion current versus time. MS_selected_ion_current_chromatogram = 1000627, /// SIC chromatogram (selected ion current chromatogram): Representation of an array of the measurements of a specific single ion current versus time. MS_SIC_chromatogram = MS_selected_ion_current_chromatogram, /// basepeak chromatogram: Representation of an array of the most intense peaks versus time. MS_basepeak_chromatogram = 1000628, /// low intensity threshold: Threshold below which some action is taken. MS_low_intensity_threshold = 1000629, /// data processing parameter: Data processing parameter used in the data processing performed on the data file. MS_data_processing_parameter = 1000630, /// high intensity threshold: Threshold above which some action is taken. MS_high_intensity_threshold = 1000631, /// Q-Tof Premier: Waters oa-ToF based Q-Tof Premier. MS_Q_Tof_Premier = 1000632, /// possible charge state: A possible charge state of the ion in a situation where the charge of an ion is known to be one of several possible values rather than a completely unknown value or determined to be a specific charge with reasonable certainty. MS_possible_charge_state = 1000633, /// DSQ: ThermoFinnigan DSQ GC-MS. MS_DSQ = 1000634, /// ITQ 700: Thermo Scientific ITQ 700 GC-MS. MS_ITQ_700 = 1000635, /// ITQ 900: Thermo Scientific ITQ 900 GC-MS. MS_ITQ_900 = 1000636, /// ITQ 1100: Thermo Scientific ITQ 1100 GC-MS. MS_ITQ_1100 = 1000637, /// LTQ XL ETD: Thermo Scientific LTQ XL MS with ETD. MS_LTQ_XL_ETD = 1000638, /// LTQ Orbitrap XL ETD: Thermo Scientific LTQ Orbitrap XL MS with ETD. MS_LTQ_Orbitrap_XL_ETD = 1000639, /// DFS: Thermo Scientific DFS HR GC-MS. MS_DFS = 1000640, /// DSQ II: Thermo Scientific DSQ II GC-MS. MS_DSQ_II = 1000641, /// MALDI LTQ XL: Thermo Scientific MALDI LTQ XL MS. MS_MALDI_LTQ_XL = 1000642, /// MALDI LTQ Orbitrap: Thermo Scientific MALDI LTQ Orbitrap MS. MS_MALDI_LTQ_Orbitrap = 1000643, /// TSQ Quantum Access: Thermo Scientific TSQ Quantum Access MS. MS_TSQ_Quantum_Access = 1000644, /// Element XR: Thermo Scientific Element XR HR-ICP-MS. MS_Element_XR = 1000645, /// Element 2: Thermo Scientific Element 2 HR-ICP-MS. MS_Element_2 = 1000646, /// Element GD: Thermo Scientific Element GD Glow Discharge MS. MS_Element_GD = 1000647, /// GC IsoLink: Thermo Scientific GC IsoLink Isotope Ratio MS. MS_GC_IsoLink = 1000648, /// Exactive: Thermo Scientific Exactive MS. MS_Exactive = 1000649, /// Proteome Discoverer: Thermo Scientific software for data analysis of peptides and proteins. MS_Proteome_Discoverer = 1000650, /// 3200 QTRAP: SCIEX or Applied Biosystems|MDS SCIEX QTRAP 3200. MS_3200_QTRAP = 1000651, /// 4800 Plus MALDI TOF/TOF: SCIEX or Applied Biosystems|MDS SCIEX 4800 Plus MALDI TOF-TOF Analyzer. MS_4800_Plus_MALDI_TOF_TOF = 1000652, /// API 3200: SCIEX or Applied Biosystems|MDS SCIEX API 3200 MS. MS_API_3200 = 1000653, /// API 5000: SCIEX or Applied Biosystems|MDS SCIEX API 5000 MS. MS_API_5000 = 1000654, /// QSTAR Elite: SCIEX or Applied Biosystems|MDS SCIEX QSTAR Elite. MS_QSTAR_Elite = 1000655, /// QSTAR Pulsar: Applied Biosystems|MDS SCIEX QSTAR Pulsar. MS_QSTAR_Pulsar = 1000656, /// QSTAR XL: Applied Biosystems|MDS SCIEX QSTAR XL. MS_QSTAR_XL = 1000657, /// 4800 Proteomics Analyzer: Applied Biosystems|MDS SCIEX 4800 Proteomics Analyzer. MS_4800_Proteomics_Analyzer = 1000658, /// 4000 Series Explorer Software: SCIEX or Applied Biosystems software for data acquisition and analysis. MS_4000_Series_Explorer_Software = 1000659, /// GPS Explorer: SCIEX or Applied Biosystems software for data acquisition and analysis. MS_GPS_Explorer = 1000661, /// LightSight Software: SCIEX or Applied Biosystems|MDS SCIEX software metabolite identification. MS_LightSight_Software = 1000662, /// ProteinPilot Software: SCIEX or Applied Biosystems|MDS SCIEX software for protein ID and quant. MS_ProteinPilot_Software = 1000663, /// TissueView Software: Applied Biosystems|MDS SCIEX software for tissue imaging. MS_TissueView_Software = 1000664, /// MarkerView Software: Applied Biosystems|MDS SCIEX software for metabolomics and biomarker profiling. MS_MarkerView_Software = 1000665, /// MRMPilot Software: Applied Biosystems|MDS SCIEX software for MRM assay development. MS_MRMPilot_Software = 1000666, /// BioAnalyst: Applied Biosystems|MDS SCIEX software for bio-related data exploration. MS_BioAnalyst = 1000667, /// Pro ID: Applied Biosystems|MDS SCIEX software for protein identification. MS_Pro_ID = 1000668, /// Pro ICAT: Applied Biosystems|MDS SCIEX software for protein ID and quant by ICAT. MS_Pro_ICAT = 1000669, /// Pro Quant: Applied Biosystems|MDS SCIEX software for protein ID and quant by iTRAQ. MS_Pro_Quant = 1000670, /// Pro BLAST: Applied Biosystems|MDS SCIEX software for MS-BLAST identification. MS_Pro_BLAST = 1000671, /// Cliquid: SCIEX Cliquid software for data analysis and quantitation. MS_Cliquid = 1000672, /// MIDAS Workflow Designer: Applied Biosystems|MDS SCIEX software for MRM assay development. MS_MIDAS_Workflow_Designer = 1000673, /// MultiQuant: Applied Biosystems|MDS SCIEX software for MRM-based quantitation. MS_MultiQuant = 1000674, /// 6220 Time-of-Flight LC/MS: The 6220 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources. MS_6220_Time_of_Flight_LC_MS = 1000675, /// 6510 Quadrupole Time-of-Flight LC/MS: The 6510 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources. MS_6510_Quadrupole_Time_of_Flight_LC_MS = 1000676, /// 6520A Quadrupole Time-of-Flight LC/MS: The 6520A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 26,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources. MS_6520A_Quadrupole_Time_of_Flight_LC_MS = 1000677, /// MassHunter Data Acquisition: Software for data acquisition of 6000 series instruments. MS_MassHunter_Data_Acquisition = 1000678, /// MassHunter Easy Access: Software for open access data acquisition. MS_MassHunter_Easy_Access = 1000679, /// MassHunter Qualitative Analysis: Software for data analysis of data from 6000 series instruments. MS_MassHunter_Qualitative_Analysis = 1000680, /// MassHunter Quantitative Analysis: Software for quantitation of Triple Quadrupole and Quadrupole Time-of-Flight data. MS_MassHunter_Quantitative_Analysis = 1000681, /// MassHunter Metabolite ID: Software for identification of metabolites. MS_MassHunter_Metabolite_ID = 1000682, /// MassHunter BioConfirm: Software for protein characterization. MS_MassHunter_BioConfirm = 1000683, /// Genespring MS: Software for quantitation and statistical analysis of TOF and Q-TOF LC/MS data. MS_Genespring_MS = 1000684, /// MassHunter Mass Profiler: Software for quantitation and statistical analysis of TOF and Q-TOF LC/MS data. MS_MassHunter_Mass_Profiler = 1000685, /// METLIN: Personal Metabolite Database for MassHunter Workstation. Software for identification of human metabolites. MS_METLIN = 1000686, /// Spectrum Mill for MassHunter Workstation: Software for protein identification and characterization of complex protein digest mixtures. MS_Spectrum_Mill_for_MassHunter_Workstation = 1000687, /// 6300 Series Ion Trap Data Analysis Software: Software for data analysis of 6300 series ion trap mass spectrometers. MS_6300_Series_Ion_Trap_Data_Analysis_Software = 1000688, /// Agilent software: Agilent software for data acquisition and analysis. MS_Agilent_software = 1000689, /// SCIEX software: SCIEX or Applied Biosystems software for data acquisition and analysis. MS_SCIEX_software = 1000690, /// Applied Biosystems software: Applied Biosystems|MDS SCIEX software for data acquisition and analysis. MS_Applied_Biosystems_software = 1000691, /// Bruker software: Bruker software for data acquisition and analysis. MS_Bruker_software = 1000692, /// Thermo Finnigan software: Thermo Finnigan software for data acquisition and analysis. MS_Thermo_Finnigan_software = 1000693, /// Waters software: Waters software for data acquisition and analysis. MS_Waters_software = 1000694, /// apex ultra: Bruker Daltonics' apex ultra: ESI, MALDI, Nanospray, APCI, APPI, Qh-FT_ICR. MS_apex_ultra = 1000695, /// autoflex III smartbeam: Bruker Daltonics' autoflex III smartbeam: MALDI TOF. MS_autoflex_III_smartbeam = 1000696, /// Bruker Daltonics HCT Series: Bruker Daltonics' HCT Series. MS_Bruker_Daltonics_HCT_Series = 1000697, /// HCTultra: Bruker Daltonics' HCTultra: ESI TOF, Nanospray, APCI, APPI. MS_HCTultra = 1000698, /// HCTultra PTM: Bruker Daltonics' HCTultra PTM: ESI TOF, Nanospray, APCI, APPI, PTR. MS_HCTultra_PTM = 1000699, /// HCTultra ETD II: Bruker Daltonics' HCTultra ETD II: ESI Q-TOF, Nanospray, APCI, APPI, ETD. MS_HCTultra_ETD_II = 1000700, /// microflex LT: Bruker Daltonics' microflex LT: MALDI TOF. MS_microflex_LT = 1000701, /// micrOTOF: Bruker Daltonics' micrOTOF: ESI TOF, APCI, APPI. MS_micrOTOF = 1000702, /// micrOTOF-Q: Bruker Daltonics' micrOTOF-Q: ESI Q-TOF, Nanospray, APCI, APPI. MS_micrOTOF_Q = 1000703, /// micrOTOF-Q II: Bruker Daltonics' micrOTOF-Q II: ESI Q-TOF, Nanospray, APCI, APPI. MS_micrOTOF_Q_II = 1000704, /// ultraflex III TOF/TOF: Bruker Daltonics' ultraflex III TOF/TOF: MALDI TOF. MS_ultraflex_III_TOF_TOF = 1000705, /// apexControl: Bruker software for data acquisition. MS_apexControl = 1000706, /// BioTools: Bruker software for data analysis. MS_BioTools = 1000707, /// CLINPROT: Bruker CLINPROT software. MS_CLINPROT = 1000708, /// CLINPROT micro: Bruker CLINPROT micro software. MS_CLINPROT_micro = 1000709, /// CLINPROT robot: Bruker CLINPROT robot software. MS_CLINPROT_robot = 1000710, /// ClinProTools: Bruker ClinProTools software. MS_ClinProTools = 1000711, /// Compass: Bruker Compass software. MS_Compass = 1000712, /// Compass for HCT/esquire: Bruker Compass for HCT/esquire software. MS_Compass_for_HCT_esquire = 1000713, /// Compass for micrOTOF: Bruker Compass for micrOTOF software. MS_Compass_for_micrOTOF = 1000714, /// Compass OpenAccess: Bruker compass OpenAccess software. MS_Compass_OpenAccess = 1000715, /// Compass Security Pack: Bruker compass Security Pack software. MS_Compass_Security_Pack = 1000716, /// CompassXport: Bruker stand-alone software for data conversion. MS_CompassXport = 1000717, /// CompassXtract: Bruker software library for data access. MS_CompassXtract = 1000718, /// DataAnalysis: Bruker software for data analysis. MS_DataAnalysis = 1000719, /// dpControl: Bruker software for data acquisition. MS_dpControl = 1000720, /// esquireControl: Bruker software for data acquisition. MS_esquireControl = 1000721, /// flexImaging: Bruker software for data analysis. MS_flexImaging = 1000722, /// GENOLINK: Bruker GENOLINK software. MS_GENOLINK = 1000723, /// GenoTools: Bruker GenoTools software. MS_GenoTools = 1000724, /// HCTcontrol: Bruker software for data acquisition. MS_HCTcontrol = 1000725, /// micrOTOFcontrol: Bruker software for data acquisition. MS_micrOTOFcontrol = 1000726, /// PolyTools: Bruker PolyTools software. MS_PolyTools = 1000727, /// ProfileAnalysis: Bruker software for data analysis. MS_ProfileAnalysis = 1000728, /// PROTEINEER: Bruker PROTEINEER software. MS_PROTEINEER = 1000729, /// PROTEINEER dp: Bruker PROTEINEER dp software. MS_PROTEINEER_dp = 1000730, /// PROTEINEER fc: Bruker PROTEINEER fc software. MS_PROTEINEER_fc = 1000731, /// PROTEINEER spII: Bruker PROTEINEER spII software. MS_PROTEINEER_spII = 1000732, /// PROTEINEER-LC: Bruker PROTEINEER-LC software. MS_PROTEINEER_LC = 1000733, /// ProteinScape: Bruker ProteinScape software. MS_ProteinScape = 1000734, /// PureDisk: BrukerPureDisk software. MS_PureDisk = 1000735, /// QuantAnalysis: Bruker software for data analysis. MS_QuantAnalysis = 1000736, /// spControl: Bruker software for data acquisition. MS_spControl = 1000737, /// TargetAnalysis: Bruker TargetAnalysis software. MS_TargetAnalysis = 1000738, /// WARP-LC: Bruker WARP-LC software. MS_WARP_LC = 1000739, /// parameter file: Parameter file used to configure the acquisition of raw data on the instrument. MS_parameter_file = 1000740, /// Conversion to dta: Conversion to dta format. MS_Conversion_to_dta = 1000741, /// Bioworks SRF format: Thermo Finnigan SRF file format. MS_Bioworks_SRF_format = 1000742, /// TSQ Quantum Ultra AM: Thermo Scientific TSQ Quantum Ultra AM. MS_TSQ_Quantum_Ultra_AM = 1000743, /// selected ion m/z: Mass-to-charge ratio of an selected ion. MS_selected_ion_m_z = 1000744, /// retention time alignment: The correction of the spectrum scan times, as used e.g. in label-free proteomics. MS_retention_time_alignment = 1000745, /// high intensity data point removal: The removal of very high intensity data points. MS_high_intensity_data_point_removal = 1000746, /// completion time: The time that a data processing action was finished. MS_completion_time = 1000747, /// SSQ 7000: ThermoFinnigan SSQ 7000 MS. MS_SSQ_7000 = 1000748, /// TSQ 7000: ThermoFinnigan TSQ 7000 MS. MS_TSQ_7000 = 1000749, /// TSQ: ThermoFinnigan TSQ MS. MS_TSQ = 1000750, /// TSQ Quantum Ultra: Thermo Scientific TSQ Quantum Ultra. MS_TSQ_Quantum_Ultra = 1000751, /// TOPP software: TOPP (The OpenMS proteomics pipeline) software. MS_TOPP_software = 1000752, /// BaselineFilter: Removes the baseline from profile spectra using a top-hat filter. MS_BaselineFilter = 1000753, /// DBExporter: Exports data from an OpenMS database to a file. MS_DBExporter = 1000754, /// DBImporter: Imports data to an OpenMS database. MS_DBImporter = 1000755, /// FileConverter: Converts between different MS file formats. MS_FileConverter = 1000756, /// FileFilter: Extracts or manipulates portions of data from peak, feature or consensus feature files. MS_FileFilter = 1000757, /// FileMerger: Merges several MS files into one file. MS_FileMerger = 1000758, /// InternalCalibration: Applies an internal calibration. MS_InternalCalibration = 1000759, /// MapAligner: Corrects retention time distortions between maps. MS_MapAligner_OBSOLETE = 1000760, /// MapNormalizer: Normalizes peak intensities in an MS run. MS_MapNormalizer = 1000761, /// NoiseFilter: Removes noise from profile spectra by using different smoothing techniques. MS_NoiseFilter_OBSOLETE = 1000762, /// PeakPicker: Finds mass spectrometric peaks in profile mass spectra. MS_PeakPicker_OBSOLETE = 1000763, /// Resampler: Transforms an LC/MS map into a resampled map or a png image. MS_Resampler = 1000764, /// SpectraFilter: Applies a filter to peak spectra. MS_SpectraFilter_OBSOLETE = 1000765, /// TOFCalibration: Applies time of flight calibration. MS_TOFCalibration = 1000766, /// native spectrum identifier format: Describes how the native spectrum identifiers are formated. MS_native_spectrum_identifier_format = 1000767, /// nativeID format (native spectrum identifier format): Describes how the native spectrum identifiers are formated. MS_nativeID_format = MS_native_spectrum_identifier_format, /// Thermo nativeID format: Native format defined by controllerType=xsd:nonNegativeInteger controllerNumber=xsd:positiveInteger scan=xsd:positiveInteger. MS_Thermo_nativeID_format = 1000768, /// Waters nativeID format: Native format defined by function=xsd:positiveInteger process=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger. MS_Waters_nativeID_format = 1000769, /// WIFF nativeID format: Native format defined by sample=xsd:nonNegativeInteger period=xsd:nonNegativeInteger cycle=xsd:nonNegativeInteger experiment=xsd:nonNegativeInteger. MS_WIFF_nativeID_format = 1000770, /// Bruker/Agilent YEP nativeID format: Native format defined by scan=xsd:nonNegativeInteger. MS_Bruker_Agilent_YEP_nativeID_format = 1000771, /// Bruker BAF nativeID format: Native format defined by scan=xsd:nonNegativeInteger. MS_Bruker_BAF_nativeID_format = 1000772, /// Bruker FID nativeID format: Native format defined by file=xsd:IDREF. MS_Bruker_FID_nativeID_format = 1000773, /// multiple peak list nativeID format: Native format defined by index=xsd:nonNegativeInteger. MS_multiple_peak_list_nativeID_format = 1000774, /// single peak list nativeID format: Native format defined by file=xsd:IDREF. MS_single_peak_list_nativeID_format = 1000775, /// scan number only nativeID format: Native format defined by scan=xsd:nonNegativeInteger. MS_scan_number_only_nativeID_format = 1000776, /// spectrum identifier nativeID format: Native format defined by spectrum=xsd:nonNegativeInteger. MS_spectrum_identifier_nativeID_format = 1000777, /// charge state calculation: A process that infers the charge state of an MSn spectrum's precursor(s) by the application of some algorithm. MS_charge_state_calculation = 1000778, /// below precursor intensity dominance charge state calculation: Infers charge state as single or ambiguously multiple by determining the fraction of intensity below the precursor m/z. MS_below_precursor_intensity_dominance_charge_state_calculation = 1000779, /// precursor recalculation: A process that recalculates existing precursor selected ions with one or more algorithmically determined precursor selected ions. MS_precursor_recalculation = 1000780, /// msPrefix precursor recalculation: Recalculates one or more precursor selected ions by peak detection in the isolation windows of high accuracy MS precursor scans. MS_msPrefix_precursor_recalculation = 1000781, /// Savitzky-Golay smoothing: Reduces intensity spikes by applying local polynomial regression (of degree k) on a distribution (of at least k+1 equally spaced points) to determine the smoothed value for each point. It tends to preserve features of the distribution such as relative maxima, minima and width, which are usually 'flattened' by other adjacent averaging techniques. MS_Savitzky_Golay_smoothing = 1000782, /// LOWESS smoothing: Reduces intensity spikes by applying a modelling method known as locally weighted polynomial regression. At each point in the data set a low-degree polynomial is fit to a subset of the data, with explanatory variable values near the point whose response is being estimated. The polynomial is fit using weighted least squares, giving more weight to points near the point whose response is being estimated and less weight to points further away. The value of the regression function for the point is then obtained by evaluating the local polynomial using the explanatory variable values for that data point. The LOESS fit is complete after regression function values have been computed for each of the n data points. Many of the details of this method, such as the degree of the polynomial model and the weights, are flexible. MS_LOWESS_smoothing = 1000783, /// Gaussian smoothing: Reduces intensity spikes by convolving the data with a one-dimensional Gaussian function. MS_Gaussian_smoothing = 1000784, /// binomial smoothing (Gaussian smoothing): Reduces intensity spikes by convolving the data with a one-dimensional Gaussian function. MS_binomial_smoothing = MS_Gaussian_smoothing, /// Weierstrass transform (Gaussian smoothing): Reduces intensity spikes by convolving the data with a one-dimensional Gaussian function. MS_Weierstrass_transform = MS_Gaussian_smoothing, /// moving average smoothing: Reduces intensity spikes by averaging each point with two or more adjacent points. The more adjacent points that used, the stronger the smoothing effect. MS_moving_average_smoothing = 1000785, /// box smoothing (moving average smoothing): Reduces intensity spikes by averaging each point with two or more adjacent points. The more adjacent points that used, the stronger the smoothing effect. MS_box_smoothing = MS_moving_average_smoothing, /// boxcar smoothing (moving average smoothing): Reduces intensity spikes by averaging each point with two or more adjacent points. The more adjacent points that used, the stronger the smoothing effect. MS_boxcar_smoothing = MS_moving_average_smoothing, /// sliding average smoothing (moving average smoothing): Reduces intensity spikes by averaging each point with two or more adjacent points. The more adjacent points that used, the stronger the smoothing effect. MS_sliding_average_smoothing = MS_moving_average_smoothing, /// non-standard data array: A data array that contains data not covered by any other term in this group. Please do not use this term, if the binary data array type might be commonly used - contact the PSI-MS working group in order to have another CV term added. MS_non_standard_data_array = 1000786, /// inclusive low intensity threshold: Threshold at or below which some action is taken. MS_inclusive_low_intensity_threshold = 1000787, /// inclusive high intensity threshold: Threshold at or above which some action is taken. MS_inclusive_high_intensity_threshold = 1000788, /// enhanced multiply charged spectrum: MS1 spectrum that is enriched in multiply-charged ions compared to singly-charged ions. MS_enhanced_multiply_charged_spectrum = 1000789, /// time-delayed fragmentation spectrum: MSn spectrum in which the product ions are collected after a time delay, which allows the observation of lower energy fragmentation processes after precursor ion activation. MS_time_delayed_fragmentation_spectrum = 1000790, /// enhanced resolution scan: Scan with enhanced resolution. MS_enhanced_resolution_scan_OBSOLETE = 1000791, /// isolation window attribute: Isolation window parameter. MS_isolation_window_attribute = 1000792, /// isolation window upper limit: The highest m/z being isolated in an isolation window. MS_isolation_window_upper_limit_OBSOLETE = 1000793, /// isolation window lower limit: The lowest m/z being isolated in an isolation window. MS_isolation_window_lower_limit_OBSOLETE = 1000794, /// no combination: Use this term if only one scan was recorded or there is no information about scans available. MS_no_combination = 1000795, /// spectrum title: Free-form text title describing a spectrum, usually a series of key value pairs as used in an MGF file. MS_spectrum_title = 1000796, /// peak list scans: A list of scan numbers and or scan ranges associated with a peak list. If possible the list of scans should be converted to native spectrum identifiers instead of using this term. MS_peak_list_scans = 1000797, /// peak list raw scans: A list of raw scans and or scan ranges used to generate a peak list. If possible the list of scans should be converted to native spectrum identifiers instead of using this term. MS_peak_list_raw_scans = 1000798, /// custom unreleased software tool: A software tool that has not yet been released. The value should describe the software. Please do not use this term for publicly available software - contact the PSI-MS working group in order to have another CV term added. MS_custom_unreleased_software_tool = 1000799, /// mass resolving power: The observed mass divided by the difference between two masses that can be separated: m/dm. The procedure by which dm was obtained and the mass at which the measurement was made should be reported. MS_mass_resolving_power = 1000800, /// area peak picking: Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The area defined by all raw data points that belong to the peak is reported. MS_area_peak_picking = 1000801, /// sum peak picking (area peak picking): Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The area defined by all raw data points that belong to the peak is reported. MS_sum_peak_picking = MS_area_peak_picking, /// height peak picking: Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The maximum intensity of all raw data points that belong to the peak is reported. MS_height_peak_picking = 1000802, /// max peak picking (height peak picking): Spectral peak processing conducted on the acquired data to convert profile data to centroided data. The maximum intensity of all raw data points that belong to the peak is reported. MS_max_peak_picking = MS_height_peak_picking, /// analyzer scan offset: Offset between two analyzers in a constant neutral loss or neutral gain scan. The value corresponds to the neutral loss or neutral gain value. MS_analyzer_scan_offset = 1000803, /// electromagnetic radiation spectrum: A plot of the relative intensity of electromagnetic radiation as a function of the wavelength. MS_electromagnetic_radiation_spectrum = 1000804, /// EMR spectrum (electromagnetic radiation spectrum): A plot of the relative intensity of electromagnetic radiation as a function of the wavelength. MS_EMR_spectrum = MS_electromagnetic_radiation_spectrum, /// emission spectrum: A plot of the relative intensity of electromagnetic radiation emitted by atoms or molecules when excited. MS_emission_spectrum = 1000805, /// absorption spectrum: A plot of the relative intensity of electromagnetic radiation absorbed by atoms or molecules when excited. MS_absorption_spectrum = 1000806, /// Th/s: Unit describing the scan rate of a spectrum in Thomson per second. MS_Th_s = 1000807, /// chromatogram attribute: Chromatogram properties that are associated with a value. MS_chromatogram_attribute = 1000808, /// chromatogram title: A free-form text title describing a chromatogram. MS_chromatogram_title = 1000809, /// ion current chromatogram: Representation of the current of ions versus time. MS_ion_current_chromatogram = 1000810, /// electromagnetic radiation chromatogram: Representation of electromagnetic properties versus time. MS_electromagnetic_radiation_chromatogram = 1000811, /// EMR radiation chromatogram (electromagnetic radiation chromatogram): Representation of electromagnetic properties versus time. MS_EMR_radiation_chromatogram = MS_electromagnetic_radiation_chromatogram, /// absorption chromatogram: Representation of light absorbed by the sample versus time. MS_absorption_chromatogram = 1000812, /// emission chromatogram: Representation of light emitted by the sample versus time. MS_emission_chromatogram = 1000813, /// counts per second: The number of counted events observed per second in one or a group of elements of a detector. MS_counts_per_second = 1000814, /// Bruker BAF format: Bruker BAF raw file format. MS_Bruker_BAF_format = 1000815, /// Bruker U2 format: Bruker HyStar U2 file format. MS_Bruker_U2_format = 1000816, /// HyStar: Bruker software for hyphenated experiments. MS_HyStar = 1000817, /// Acquity UPLC PDA: Acquity UPLC Photodiode Array Detector. MS_Acquity_UPLC_PDA = 1000818, /// Acquity UPLC FLR: Acquity UPLC Fluorescence Detector. MS_Acquity_UPLC_FLR = 1000819, /// flow rate array: A data array of flow rate measurements. MS_flow_rate_array = 1000820, /// pressure array: A data array of pressure measurements. MS_pressure_array = 1000821, /// temperature array: A data array of temperature measurements. MS_temperature_array = 1000822, /// Bruker U2 nativeID format: Native format defined by declaration=xsd:nonNegativeInteger collection=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger. MS_Bruker_U2_nativeID_format = 1000823, /// no nativeID format: No nativeID format indicates that the file tagged with this term does not contain spectra that can have a nativeID format. MS_no_nativeID_format = 1000824, /// Bruker FID format: Bruker FID file format. MS_Bruker_FID_format = 1000825, /// elution time: The time of elution from all used chromatographic columns (one or more) in the chromatographic separation step, relative to the start of the chromatography. MS_elution_time = 1000826, /// isolation window target m/z: The primary or reference m/z about which the isolation window is defined. MS_isolation_window_target_m_z = 1000827, /// isolation window lower offset: The extent of the isolation window in m/z below the isolation window target m/z. The lower and upper offsets may be asymmetric about the target m/z. MS_isolation_window_lower_offset = 1000828, /// isolation window upper offset: The extent of the isolation window in m/z above the isolation window target m/z. The lower and upper offsets may be asymmetric about the target m/z. MS_isolation_window_upper_offset = 1000829, /// sample preparation: Properties of the preparation steps which took place before the measurement was performed. MS_sample_preparation = 1000831, /// MALDI matrix application: Attributes to describe the technique how the sample is prepared with the matrix solution. MS_MALDI_matrix_application = 1000832, /// matrix application type: Describes the technique how the matrix is put on the sample target. MS_matrix_application_type = 1000833, /// matrix solution: Describes the chemical solution used as matrix. MS_matrix_solution = 1000834, /// matrix solution concentration: Concentration of the chemical solution used as matrix. MS_matrix_solution_concentration = 1000835, /// dried droplet MALDI matrix preparation: Dried droplet in MALDI matrix preparation. MS_dried_droplet_MALDI_matrix_preparation = 1000836, /// printed MALDI matrix preparation: Printed MALDI matrix preparation. MS_printed_MALDI_matrix_preparation = 1000837, /// sprayed MALDI matrix preparation: Sprayed MALDI matrix preparation. MS_sprayed_MALDI_matrix_preparation = 1000838, /// precoated MALDI sample plate: Precoated MALDI sample plate. MS_precoated_MALDI_sample_plate = 1000839, /// laser: Device that emits light (electromagnetic radiation) through a process called stimulated emission. The term is an acronym for Light Amplification by Stimulated Emission of Radiation. MS_laser = 1000840, /// laser attribute: Laser properties that are associated with a value. MS_laser_attribute = 1000841, /// laser type: Type of laser used for desorption purpose. MS_laser_type = 1000842, /// wavelength: The distance between two peaks of the emitted laser beam. MS_wavelength_OBSOLETE = 1000843, /// focus diameter x: Describes the diameter of the laser beam in x direction. MS_focus_diameter_x = 1000844, /// focus diameter y: Describes the diameter of the laser beam in y direction. MS_focus_diameter_y = 1000845, /// pulse energy: Describes output energy of the laser system. May be attenuated by filters or other means. MS_pulse_energy = 1000846, /// pulse duration: Describes how long the laser beam was emitted from the laser device. MS_pulse_duration = 1000847, /// attenuation: Describes the reduction of the intensity of the laser beam energy. MS_attenuation = 1000848, /// impact angle: Describes the angle between the laser beam and the sample target. MS_impact_angle = 1000849, /// gas laser: Laser which is powered by a gaseous medium. MS_gas_laser = 1000850, /// solid-state laser: Solid state laser materials are commonly made by doping a crystalline solid host with ions that provide the required energy states. MS_solid_state_laser = 1000851, /// dye-laser: Dye lasers use an organic dye as the gain medium. MS_dye_laser = 1000852, /// free electron laser: Free electron laser uses a relativistic electron beam as the lasing medium which move freely through a magnetic structure, hence the term. MS_free_electron_laser = 1000853, /// LTQ XL: Thermo Scientific LTQ XL MS. MS_LTQ_XL = 1000854, /// LTQ Velos: Thermo Scientific LTQ Velos MS. MS_LTQ_Velos = 1000855, /// LTQ Velos ETD: Thermo Scientific LTQ Velos MS with ETD. MS_LTQ_Velos_ETD = 1000856, /// run attribute: Properties of the described run. MS_run_attribute = 1000857, /// fraction identifier: Identier string that describes the sample fraction. This identifier should contain the fraction number(s) or similar information. MS_fraction_identifier = 1000858, /// molecule: Group of two or more atoms held together by chemical bonds. MS_molecule = 1000859, /// peptide: A molecule of low molecular weight that is composed of two or more amino acid residues. MS_peptide = 1000860, /// molecular entity property: A physical characteristic of a molecular entity. MS_molecular_entity_property = 1000861, /// isoelectric point: The pH of a solution at which a charged molecule does not migrate in an electric field. MS_isoelectric_point = 1000862, /// pI (isoelectric point): The pH of a solution at which a charged molecule does not migrate in an electric field. MS_pI = MS_isoelectric_point, /// predicted isoelectric point: The pH of a solution at which a charged molecule would not migrate in an electric field, as predicted by a software algorithm. MS_predicted_isoelectric_point = 1000863, /// predicted pI (predicted isoelectric point): The pH of a solution at which a charged molecule would not migrate in an electric field, as predicted by a software algorithm. MS_predicted_pI = MS_predicted_isoelectric_point, /// chemical formula: A combination of symbols used to express the chemical composition of a molecule. MS_chemical_formula = 1000864, /// empirical formula: A chemical formula which expresses the proportions of the elements present in a substance. MS_empirical_formula = 1000865, /// molecular formula: A chemical compound formula expressing the number of atoms of each element present in a compound, without indicating how they are linked. MS_molecular_formula = 1000866, /// structural formula: A chemical formula showing the number of atoms of each element in a molecule, their spatial arrangement, and their linkage to each other. MS_structural_formula = 1000867, /// SMILES formula: The simplified molecular input line entry specification or SMILES is a specification for unambiguously describing the structure of a chemical compound using a short ASCII string. MS_SMILES_formula = 1000868, /// collision gas pressure: The gas pressure of the collision gas used for collisional excitation. MS_collision_gas_pressure = 1000869, /// 4000 QTRAP: SCIEX or Applied Biosystems|MDS SCIEX QTRAP 4000. MS_4000_QTRAP_OBSOLETE = 1000870, /// SRM software: Software used to predict, select, or optimize transitions or analyze the results of selected reaction monitoring runs. MS_SRM_software = 1000871, /// MaRiMba: Software used to predict transitions for selected reaction monitoring experiments based on observed spectrum libraries developed and distributed by the Institute for Systems Biology. MS_MaRiMba = 1000872, /// peptide attribute calculation software: Software used to predict or calculate numerical attributes of peptides. MS_peptide_attribute_calculation_software = 1000873, /// SSRCalc: Sequence Specific Retention Calculator estimates the retention time of peptides based on their sequence. MS_SSRCalc = 1000874, /// declustering potential: Potential difference between the orifice and the skimmer in volts. MS_declustering_potential = 1000875, /// cone voltage: Potential difference between the sampling cone/orifice in volts. MS_cone_voltage = 1000876, /// tube lens voltage: Potential difference setting of the tube lens in volts. MS_tube_lens_voltage = 1000877, /// external reference identifier: An identifier/accession number to an external reference database. MS_external_reference_identifier = 1000878, /// PubMed identifier: A unique identifier for a publication in the PubMed database (MIR:00000015). MS_PubMed_identifier = 1000879, /// interchannel delay: The duration of intervals between scanning, during which the instrument configuration is switched. MS_interchannel_delay = 1000880, /// molecular entity: Constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer, etc., identifiable as a separately distinguishable entity. MS_molecular_entity = 1000881, /// protein: A compound composed of one or more chains of amino acids in a specific order determined by the base sequence of nucleotides in the DNA of a gene. MS_protein = 1000882, /// protein short name: A short name or symbol of a protein (e.g., HSF 1 or HSF1_HUMAN). MS_protein_short_name = 1000883, /// protein attribute: An nonphysical characterstic attributed to a specific protein. MS_protein_attribute = 1000884, /// protein accession: Identifier for a specific protein in a database. MS_protein_accession = 1000885, /// protein name: A long name describing the function of the protein. MS_protein_name = 1000886, /// peptide attribute: Nonphysical characteristic attributed to a peptide. MS_peptide_attribute = 1000887, /// stripped peptide sequence: Sequence of letter symbols denoting the order of amino acids that compose the peptide, with any amino acid mass modifications that might be present having been stripped away. MS_stripped_peptide_sequence = 1000888, /// peptidoform sequence: Sequence of letter symbols denoting the order of amino acid residues that compose the peptidoform including the encoding of any residue modifications that are present. MS_peptidoform_sequence = 1000889, /// peptidoform labeling state: A state description of how a peptide might be isotopically or isobarically labelled. MS_peptidoform_labeling_state = 1000890, /// heavy labeled peptidoform: A peptide that has been created or labelled with some heavier-than-usual isotopes. MS_heavy_labeled_peptidoform = 1000891, /// unlabeled peptidoform: A peptide that has not been labelled with heavier-than-usual isotopes. This is often referred to as \"light\" to distinguish from \"heavy\". MS_unlabeled_peptidoform = 1000892, /// light labeled peptide (unlabeled peptidoform): A peptide that has not been labelled with heavier-than-usual isotopes. This is often referred to as \"light\" to distinguish from \"heavy\". MS_light_labeled_peptide = MS_unlabeled_peptidoform, /// peptidoform group label: An arbitrary string label used to mark a set of peptides that belong together in a set, whereby the members are differentiated by different isotopic labels. For example, the heavy and light forms of the same peptide will both be assigned the same peptide group label. MS_peptidoform_group_label = 1000893, /// retention time: A time interval from the start of chromatography when an analyte exits a chromatographic column. MS_retention_time = 1000894, /// local retention time: A time interval from the start of chromatography when an analyte exits an unspecified local chromatographic column and instrumental setup. MS_local_retention_time = 1000895, /// normalized retention time: A time interval from the start of chromatography when an analyte exits a standardized reference chromatographic column and instrumental setup. MS_normalized_retention_time = 1000896, /// predicted retention time: A time interval from the start of chromatography when an analyte exits a chromatographic column as predicted by a referenced software application. MS_predicted_retention_time = 1000897, /// standard: Something, such as a practice or a product, that is widely recognized or employed, especially because of its excellence. MS_standard = 1000898, /// de facto standard: A practice or product that has become a standard not because it has been approved by a standards organization but because it is widely used and recognized by the industry as being standard. MS_de_facto_standard = 1000899, /// minimum information standard: A specification of a minimum amount of information needed to reproduce or fully interpret a scientific result. MS_minimum_information_standard = 1000900, /// retention time normalization standard: A standard providing the retention times at which a set of reference compounds exit the reference chromatographic column. MS_retention_time_normalization_standard = 1000901, /// H-PINS retention time normalization standard: The de facto standard providing the retention times at which a set of halogenated reference peptides exit the reference chromatographic column. MS_H_PINS_retention_time_normalization_standard = 1000902, /// product ion series ordinal: The ordinal of the fragment within a specified ion series. (e.g. 8 for a y8 ion). MS_product_ion_series_ordinal = 1000903, /// product ion m/z delta: The difference in m/z of the predicted m/z based on the assigned product ion minus the actual observed peak m/z. MS_product_ion_m_z_delta = 1000904, /// percent of base peak times 100: The magnitude of a peak expressed in terms of the percentage of the magnitude of the base peak intensity multiplied by 100. The base peak is therefore 10000. This unit is common in normalized spectrum libraries. MS_percent_of_base_peak_times_100 = 1000905, /// peak intensity rank: Ordinal specifying the rank in intensity of a peak in a spectrum. Base peak is 1. The next most intense peak is 2, etc. MS_peak_intensity_rank = 1000906, /// peak targeting suitability rank: Ordinal specifying the rank of a peak in a spectrum in terms of suitability for targeting. The most suitable peak is 1. The next most suitability peak is 2, etc. Suitability is algorithm and context dependant. MS_peak_targeting_suitability_rank = 1000907, /// transition: A set of two m/z values corresponding to the precursor m/z and a fragment m/z that in combination can be used to identify or quantify a specific ion, although not necessarily uniquely. MS_transition = 1000908, /// reaction (transition): A set of two m/z values corresponding to the precursor m/z and a fragment m/z that in combination can be used to identify or quantify a specific ion, although not necessarily uniquely. MS_reaction = MS_transition, /// transition validation method: The strategy used to validate that a transition is effective. MS_transition_validation_method = 1000909, /// transition optimized on specified instrument: The transition has been optimized by direct injection of the peptide into an instrument specified in a separate term, and the optimum voltages and fragmentation energies have been determined. MS_transition_optimized_on_specified_instrument = 1000910, /// transition validated with an MS/MS spectrum on specified instrument: The transition has been validated by obtaining an MS2 spectrum and demonstrating that the peak is detectable on the instrument specified with a separate term. MS_transition_validated_with_an_MS_MS_spectrum_on_specified_instrument = 1000911, /// transition purported from an MS/MS spectrum on a different, specified instrument: The transition has been purported by obtaining an MS2 spectrum and demonstrating that the peak is detectable on the instrument specified with a separate term. However, the detecting instrument is of a different type (e.g. ion trap) than the instrument that the transition will eventually be used on (e.g. triple quad). MS_transition_purported_from_an_MS_MS_spectrum_on_a_different__specified_instrument = 1000912, /// transition predicted by informatic analysis: The transition has been predicted by informatics software without any direct spectral evidence. MS_transition_predicted_by_informatic_analysis = 1000913, /// tab delimited text format: A file format that has two or more columns of tabular data where each column is separated by a TAB character. MS_tab_delimited_text_format = 1000914, /// retention time window attribute: An attribute of a window in time about which a peptide might elute from the column. MS_retention_time_window_attribute = 1000915, /// retention time window lower offset: The extent of the retention time window in time units below the target retention time. The lower and upper offsets may be asymmetric about the target time. MS_retention_time_window_lower_offset = 1000916, /// retention time window upper offset: The extent of the retention time window in time units above the target retention time. The lower and upper offsets may be asymmetric about the target time. MS_retention_time_window_upper_offset = 1000917, /// target list: A list of peptides or compounds and their expected m/z coordinates that can be used to cause a mass spectrometry to obtain spectra of those molecules specifically. MS_target_list = 1000918, /// target inclusion exclusion priority: A priority setting specifying whether included or excluded targets have priority over the other. MS_target_inclusion_exclusion_priority = 1000919, /// includes supersede excludes: A priority setting specifying that included targets have priority over the excluded targets if there is a conflict. MS_includes_supersede_excludes = 1000920, /// excludes supersede includes: A priority setting specifying that excluded targets have priority over the included targets if there is a conflict. MS_excludes_supersede_includes = 1000921, /// Skyline: Software used to predict, select, and optimize transitions as well as analyze the results of selected reaction monitoring runs developed and distributed by the MacCoss lab at the University of Washington. MS_Skyline = 1000922, /// TIQAM: Software used to predict, select, and optimize transitions for selected reaction monitoring experiments developed and distributed by the Institute for Systems Biology. MS_TIQAM = 1000923, /// MaRiMba: Software used to predict transitions for selected reaction monitoring experiments based on observed spectrum libraries developed and distributed by the Institute for Systems Biology. MS_MaRiMba_OBSOLETE = 1000924, /// ATAQS: Software suite used to predict, select, and optimize transitions as well as analyze the results of selected reaction monitoring runs developed and distributed by the Institute for Systems Biology. MS_ATAQS = 1000925, /// product interpretation rank: The integer rank given an interpretation of an observed product ion. For example, if y8 is selected as the most likely interpretation of a peak, then it is assigned a rank of 1. MS_product_interpretation_rank = 1000926, /// ion injection time: The length of time spent filling an ion trapping device. MS_ion_injection_time = 1000927, /// calibration spectrum: A spectrum derived from a special calibration source, rather than from the primary injected sample. A calibration spectrum is typically derived from a substance that can be used to correct systematic shift in m/z for spectra of the primary inject sample. MS_calibration_spectrum = 1000928, /// Shimadzu Biotech nativeID format: Native format defined by source=xsd:string start=xsd:nonNegativeInteger end=xsd:nonNegativeInteger. MS_Shimadzu_Biotech_nativeID_format = 1000929, /// Shimadzu Biotech database entity: Shimadzu Biotech format. MS_Shimadzu_Biotech_database_entity = 1000930, /// QTRAP 5500: Applied Biosystems|MDS SCIEX QTRAP 5500. MS_QTRAP_5500 = 1000931, /// TripleTOF 5600: SCIEX TripleTOF 5600, a quadrupole - quadrupole - time-of-flight mass spectrometer. MS_TripleTOF_5600 = 1000932, /// protein modifications: Encoding of modifications of the protein sequence from the specified accession, written in PEFF notation. MS_protein_modifications = 1000933, /// gene name: Name of the gene from which the protein is translated. MS_gene_name = 1000934, /// spectrum interpretation: Collection of terms from the PSI Proteome Informatics standards describing the interpretation of spectra. MS_spectrum_interpretation = 1001000, /// SEQUEST:CleavesAt: MS_SEQUEST_CleavesAt = 1001005, /// SEQUEST:ViewCV: SEQUEST View Input Parameters. MS_SEQUEST_ViewCV = 1001006, /// SEQUEST:OutputLines: Number of peptide results to show. MS_SEQUEST_OutputLines = 1001007, /// SEQUEST:DescriptionLines: Number of full protein descriptions to show for top N peptides. MS_SEQUEST_DescriptionLines = 1001009, /// de novo search: A de novo sequencing search (without database). MS_de_novo_search = 1001010, /// search database details: Details about the database searched. MS_search_database_details = 1001011, /// database source: The organisation, project or laboratory from where the database is obtained (UniProt, NCBI, EBI, other). MS_database_source = 1001012, /// database name: The name of the search database (nr, SwissProt or est_human). MS_database_name = 1001013, /// database local file path: OBSOLETE: Use attribute in mzIdentML instead. Local file path of the search database from the search engine's point of view. MS_database_local_file_path_OBSOLETE = 1001014, /// database original uri: URI, from where the search database was originally downloaded. MS_database_original_uri = 1001015, /// database version: Version of the search database. In mzIdentML use the attribute instead. MS_database_version = 1001016, /// database release date: OBSOLETE: Use attribute in mzIdentML instead. Release date of the search database. MS_database_release_date_OBSOLETE = 1001017, /// database type: Database containing amino acid or nucleic acid sequences. MS_database_type = 1001018, /// database filtering: Was there filtering used on the database. MS_database_filtering = 1001019, /// DB filter taxonomy: A taxonomy filter was to the database search. MS_DB_filter_taxonomy = 1001020, /// DB filter on accession numbers: Filtering applied specifically by accession number pattern. MS_DB_filter_on_accession_numbers = 1001021, /// DB MW filter: Filtering applied specifically by protein molecular weight, specified as either a range or above/below a threshold value. MS_DB_MW_filter = 1001022, /// DB PI filter: Filtering applied specifically by predicted protein isoelectric focussing point (pI), specified as either a range or above/below a threshold value. MS_DB_PI_filter = 1001023, /// translation frame: The translated open reading frames from a nucleotide database considered in the search (range: 1-6). MS_translation_frame = 1001024, /// translation table: The translation table used to translate the nucleotides to amino acids. MS_translation_table = 1001025, /// SEQUEST:NormalizeXCorrValues: MS_SEQUEST_NormalizeXCorrValues = 1001026, /// DB filter on sequence pattern: Filtering applied specifically by amino acid sequence pattern. MS_DB_filter_on_sequence_pattern = 1001027, /// SEQUEST:SequenceHeaderFilter: String in the header of a sequence entry for that entry to be searched. MS_SEQUEST_SequenceHeaderFilter = 1001028, /// number of sequences searched: The number of sequences (proteins / nucleotides) from the database search after filtering. MS_number_of_sequences_searched = 1001029, /// number of peptide seqs compared to each spectrum: Number of peptide seqs compared to each spectrum. MS_number_of_peptide_seqs_compared_to_each_spectrum = 1001030, /// spectral library search: A search using a library of spectra. MS_spectral_library_search = 1001031, /// SEQUEST:SequencePartialFilter: MS_SEQUEST_SequencePartialFilter = 1001032, /// date / time search performed: OBSOLETE: use attribute in mzIdentML instead. Date and time of the actual search run. MS_date___time_search_performed_OBSOLETE = 1001035, /// search time taken: The time taken to complete the search in seconds. MS_search_time_taken = 1001036, /// SEQUEST:ShowFragmentIons: Flag indicating that fragment ions should be shown. MS_SEQUEST_ShowFragmentIons = 1001037, /// SEQUEST:Consensus: Specify depth as value of the CVParam. MS_SEQUEST_Consensus = 1001038, /// intermediate analysis format: Type of the source file, the mzIdentML was created from. MS_intermediate_analysis_format = 1001040, /// SEQUEST:sortCV: SEQUEST View / Sort Input Parameters. MS_SEQUEST_sortCV = 1001041, /// SEQUEST:LimitTo: Specify \"number of dtas shown\" as value of the CVParam. MS_SEQUEST_LimitTo = 1001042, /// cleavage agent details: Details of cleavage agent (enzyme). MS_cleavage_agent_details = 1001044, /// cleavage agent name: The name of the cleavage agent. MS_cleavage_agent_name = 1001045, /// SEQUEST:sort by dCn: Sort order of SEQUEST search results by the delta of the normalized correlation score. MS_SEQUEST_sort_by_dCn = 1001046, /// SEQUEST:sort by dM: Sort order of SEQUEST search results by the difference between a theoretically calculated and the corresponding experimentally measured molecular mass M. MS_SEQUEST_sort_by_dM = 1001047, /// SEQUEST:sort by Ions: Sort order of SEQUEST search results given by the ions. MS_SEQUEST_sort_by_Ions = 1001048, /// SEQUEST:sort by MH+: Sort order of SEQUEST search results given by the mass of the protonated ion. MS_SEQUEST_sort_by_MH_ = 1001049, /// SEQUEST:sort by P: Sort order of SEQUEST search results given by the probability. MS_SEQUEST_sort_by_P = 1001050, /// multiple enzyme combination rules: OBSOLETE: use attribute independent in mzIdentML instead. Description of multiple enzyme digestion protocol, if any. MS_multiple_enzyme_combination_rules_OBSOLETE = 1001051, /// SEQUEST:sort by PreviousAminoAcid: Sort order of SEQUEST search results given by the previous amino acid. MS_SEQUEST_sort_by_PreviousAminoAcid = 1001052, /// SEQUEST:sort by Ref: Sort order of SEQUEST search results given by the reference. MS_SEQUEST_sort_by_Ref = 1001053, /// modification parameters: Modification parameters for the search engine run. MS_modification_parameters = 1001055, /// modification specificity rule: The specificity rules for the modifications applied by the search engine. MS_modification_specificity_rule = 1001056, /// tolerance on types: OBSOLETE: Tolerance on types. MS_tolerance_on_types_OBSOLETE = 1001057, /// quality estimation by manual validation: The quality estimation was done manually. MS_quality_estimation_by_manual_validation = 1001058, /// SEQUEST:sort by RSp: Sort order of SEQUEST search results given by the result 'Sp' of 'Rank/Sp' in the out file (peptide). MS_SEQUEST_sort_by_RSp = 1001059, /// quality estimation method details: Method for quality estimation (manually or with decoy database). MS_quality_estimation_method_details = 1001060, /// neutral loss: OBSOLETE: replaced by MS:1000336 (neutral loss): Leave this to PSI-MOD. MS_neutral_loss_OBSOLETE = 1001061, /// Mascot MGF format: Mascot MGF file format. MS_Mascot_MGF_format = 1001062, /// TODOscoring model: OBSOLETE: There is Phenyx:ScoringModel for Phenyx! Scoring model (more detailed granularity). TODO: add some child terms. MS_TODOscoring_model_OBSOLETE = 1001065, /// ions series considered in search: The description of the DEPRECATED ion fragment series (including charges and neutral losses) that are considered by the search engine. MS_ions_series_considered_in_search = 1001066, /// SEQUEST:sort by Sp: Sort order of SEQUEST search results by the Sp score. MS_SEQUEST_sort_by_Sp = 1001068, /// SEQUEST:sort by TIC: Sort order of SEQUEST search results given by the total ion current. MS_SEQUEST_sort_by_TIC = 1001069, /// SEQUEST:sort by Scan: Sort order of SEQUEST search results given by the scan number. MS_SEQUEST_sort_by_Scan = 1001070, /// SEQUEST:sort by Sequence: Sort order of SEQUEST search results given by the sequence. MS_SEQUEST_sort_by_Sequence = 1001071, /// SEQUEST:sort by Sf: Sort order of SEQUEST search results given by the SEQUEST result 'Sf'. MS_SEQUEST_sort_by_Sf = 1001072, /// database type amino acid: Database contains amino acid sequences. MS_database_type_amino_acid = 1001073, /// database type nucleotide: Database contains nucleic acid sequences. MS_database_type_nucleotide = 1001079, /// search type: Enumeration of type of search value (i.e. from PMF, sequence tag, MS2). MS_search_type = 1001080, /// pmf search: A peptide mass fingerprint search. MS_pmf_search = 1001081, /// tag search: A sequence tag search. MS_tag_search = 1001082, /// ms-ms search: An MS2 search (with fragment ions). MS_ms_ms_search = 1001083, /// database nr: Non-redundant GenBank sequence database. MS_database_nr = 1001084, /// protein-level identification attribute: Protein level information. MS_protein_level_identification_attribute = 1001085, /// SEQUEST:sort by XCorr: Sort order of SEQUEST search results by the correlation score. MS_SEQUEST_sort_by_XCorr = 1001086, /// SEQUEST:ProcessCV: SEQUEST View / Process Input Parameters. MS_SEQUEST_ProcessCV = 1001087, /// protein description: The protein description line from the sequence entry in the source database FASTA file. MS_protein_description = 1001088, /// molecule taxonomy: The taxonomy of the resultant molecule from the search. MS_molecule_taxonomy = 1001089, /// taxonomy nomenclature: OBSOLETE: The system used to indicate taxonomy. There should be an enumerated list of options: latin name, NCBI TaxID, common name, Swiss-Prot species ID (ex. RABIT from the full protein ID ALBU_RABIT). MS_taxonomy_nomenclature_OBSOLETE = 1001090, /// NoEnzyme: MS_NoEnzyme_OBSOLETE = 1001091, /// peptide sequence-level identification statistic: Identification confidence metric for a peptide. MS_peptide_sequence_level_identification_statistic = 1001092, /// sequence coverage: The percent coverage for the protein based upon the matched peptide sequences (can be calculated). MS_sequence_coverage = 1001093, /// SEQUEST:sort by z: Sort order of SEQUEST search results given by the charge. MS_SEQUEST_sort_by_z = 1001094, /// SEQUEST:ProcessAll: MS_SEQUEST_ProcessAll = 1001095, /// SEQUEST:TopPercentMostIntense: Specify \"percentage\" as value of the CVParam. MS_SEQUEST_TopPercentMostIntense = 1001096, /// distinct peptide sequences: This counts distinct sequences hitting the protein without regard to a minimal confidence threshold. MS_distinct_peptide_sequences = 1001097, /// confident distinct peptide sequences: This counts the number of distinct peptide sequences. Multiple charge states and multiple modification states do NOT count as multiple sequences. The definition of 'confident' must be qualified elsewhere. MS_confident_distinct_peptide_sequences = 1001098, /// confident peptide qualification: The point of this entry is to define what is meant by confident for the term Confident distinct peptide sequence and/or Confident peptides. Example 1 - metric=Paragon:Confidence value=95 sense=greater than Example 2 - metric=Mascot:Eval value=0.05 sense=less than. MS_confident_peptide_qualification = 1001099, /// confident peptide sequence number: This counts the number of peptide sequences without regard to whether they are distinct. Multiple charges states and multiple modification states DO count as multiple peptides. The definition of 'confident' must be qualified elsewhere. MS_confident_peptide_sequence_number = 1001100, /// protein group or subset relationship: Protein group or subset relationships. MS_protein_group_or_subset_relationship = 1001101, /// SEQUEST:Chromatogram: MS_SEQUEST_Chromatogram = 1001102, /// SEQUEST:InfoAndLog: MS_SEQUEST_InfoAndLog = 1001103, /// database UniProtKB/Swiss-Prot: The name of the UniProtKB/Swiss-Prot knowledgebase. MS_database_UniProtKB_Swiss_Prot = 1001104, /// peptide sequence-level identification attribute: Peptide level information. MS_peptide_sequence_level_identification_attribute = 1001105, /// SEQUEST:TopNumber: Specify \"number\" as value of the CVParam. MS_SEQUEST_TopNumber = 1001106, /// data stored in database: Source file for this mzIdentML was a data set in a database. MS_data_stored_in_database = 1001107, /// param: a ion: Parameter information, type of product: a ion with charge on the N-terminal side. MS_param__a_ion = 1001108, /// SEQUEST:CullTo: Specify cull string as value of the CVParam. MS_SEQUEST_CullTo = 1001109, /// SEQUEST:modeCV: SEQUEST Mode Input Parameters. MS_SEQUEST_modeCV = 1001110, /// SEQUEST:Full: MS_SEQUEST_Full = 1001111, /// n-terminal flanking residue: Residue preceding the first amino acid in the peptide sequence as it occurs in the protein. Use 'N-term' to denote if the peptide starts at the N terminus of the protein. MS_n_terminal_flanking_residue = 1001112, /// c-terminal flanking residue: Residue following the last amino acid in the peptide sequence as it occurs in the protein. Use 'C-term' to denote if the peptide ends at the C terminus of the protein. MS_c_terminal_flanking_residue = 1001113, /// retention time(s): Retention time of the spectrum from the source file. MS_retention_time_s__OBSOLETE = 1001114, /// scan number(s): OBSOLETE: use spectrumID attribute of SpectrumIdentificationResult. Take from mzData. MS_scan_number_s__OBSOLETE = 1001115, /// single protein identification statistic: Results specific for one protein as part of a protein ambiguity group (a result not valid for all the other proteins in the protein ambiguity group). MS_single_protein_identification_statistic = 1001116, /// theoretical mass: The theoretical mass of the molecule (e.g. the peptide sequence and its modifications). MS_theoretical_mass = 1001117, /// param: b ion: Parameter information, type of product: b ion with charge on the N-terminal side. MS_param__b_ion = 1001118, /// param: c ion: Parameter information, type of product: c ion with charge on the N-terminal side. MS_param__c_ion = 1001119, /// SEQUEST:FormatAndLinks: MS_SEQUEST_FormatAndLinks = 1001120, /// number of matched peaks: The number of peaks that were matched as qualified by the ion series considered field. If a peak matches multiple ions then only 1 would be added the count. MS_number_of_matched_peaks = 1001121, /// ions series considered: The ion series that were used during the calculation of the count (e.g. a, b, c, d, v, w, x, y, z, a-H2O, a-NH3, b-H2O, b-NH3, y-H2O, y-NH3, b-H20, b+, z-, z+1, z+2, b-H3PO4, y-H3PO4, immonium, internal ya, internal yb). MS_ions_series_considered = 1001122, /// number of peaks used: The number of peaks from the original peak list that are used to calculate the scores for a particular search engine. All ions that have the opportunity to match or be counted even if they don't. MS_number_of_peaks_used = 1001123, /// number of peaks submitted: The number of peaks from the original peaks listed that were submitted to the search engine. MS_number_of_peaks_submitted = 1001124, /// manual validation: Result of quality estimation: decision of a manual validation. MS_manual_validation = 1001125, /// SEQUEST:Fast: MS_SEQUEST_Fast = 1001126, /// peptide sharing details: Accessions Containing Sequence - Accessions for each protein containing this peptide. MS_peptide_sharing_details = 1001127, /// SEQUEST:selectCV: SEQUEST Select Input Parameters. MS_SEQUEST_selectCV = 1001128, /// quantification information: Quantification information. MS_quantification_information = 1001129, /// peptide raw area: Peptide raw area. MS_peptide_raw_area_OBSOLETE = 1001130, /// error on peptide area: Error on peptide area. MS_error_on_peptide_area = 1001131, /// peptide ratio: Peptide ratio. MS_peptide_ratio = 1001132, /// error on peptide ratio: Error on peptide ratio. MS_error_on_peptide_ratio = 1001133, /// protein ratio: Protein ratio. MS_protein_ratio = 1001134, /// error on protein ratio: Error on protein ratio. MS_error_on_protein_ratio = 1001135, /// p-value (protein diff from 1 randomly): P-value (protein diff from 1 randomly). MS_p_value__protein_diff_from_1_randomly__OBSOLETE = 1001136, /// absolute quantity: Absolute quantity in terms of real concentration or molecule copy number in sample. MS_absolute_quantity = 1001137, /// error on absolute quantity: Error on absolute quantity. MS_error_on_absolute_quantity = 1001138, /// quantitation software name: Quantitation software name. MS_quantitation_software_name = 1001139, /// quantitation software version: Quantitation software version. MS_quantitation_software_version_OBSOLETE = 1001140, /// intensity of precursor ion: The intensity of the precursor ion. MS_intensity_of_precursor_ion = 1001141, /// database IPI_human: International Protein Index database for Homo sapiens sequences. MS_database_IPI_human = 1001142, /// PSM-level search engine specific statistic: Search engine specific peptide spectrum match scores. MS_PSM_level_search_engine_specific_statistic = 1001143, /// SEQUEST:SelectDefault: MS_SEQUEST_SelectDefault = 1001144, /// SEQUEST:SelectAdvancedCV: SEQUEST Select Advanced Input Parameters. MS_SEQUEST_SelectAdvancedCV = 1001145, /// param: a ion-NH3 DEPRECATED: Ion a-NH3 parameter information, type of product: a ion with lost ammonia. MS_param__a_ion_NH3_DEPRECATED = 1001146, /// protein ambiguity group result details: MS_protein_ambiguity_group_result_details = 1001147, /// param: a ion-H2O DEPRECATED: Ion a-H2O if a significant and fragment includes STED. MS_param__a_ion_H2O_DEPRECATED = 1001148, /// param: b ion-NH3 DEPRECATED: Ion b-NH3 parameter information, type of product: b ion with lost ammonia. MS_param__b_ion_NH3_DEPRECATED = 1001149, /// param: b ion-H2O DEPRECATED: Ion b-H2O if b significant and fragment includes STED. MS_param__b_ion_H2O_DEPRECATED = 1001150, /// param: y ion-NH3 DEPRECATED: Ion y-NH3 parameter information, type of product: y ion with lost ammonia. MS_param__y_ion_NH3_DEPRECATED = 1001151, /// param: y ion-H2O DEPRECATED: MS_param__y_ion_H2O_DEPRECATED = 1001152, /// search engine specific score: Search engine specific scores. MS_search_engine_specific_score = 1001153, /// SEQUEST:probability: The SEQUEST result 'Probability'. MS_SEQUEST_probability = 1001154, /// SEQUEST:xcorr: The SEQUEST result 'XCorr'. MS_SEQUEST_xcorr = 1001155, /// SEQUEST:deltacn: The SEQUEST result 'DeltaCn'. MS_SEQUEST_deltacn = 1001156, /// SEQUEST:sp: The SEQUEST result 'Sp' (protein). MS_SEQUEST_sp = 1001157, /// SEQUEST:Uniq: MS_SEQUEST_Uniq = 1001158, /// SEQUEST:expectation value: The SEQUEST result 'Expectation value'. MS_SEQUEST_expectation_value = 1001159, /// SEQUEST:sf: The SEQUEST result 'Sf'. MS_SEQUEST_sf = 1001160, /// SEQUEST:matched ions: The SEQUEST result 'Matched Ions'. MS_SEQUEST_matched_ions = 1001161, /// SEQUEST:total ions: The SEQUEST result 'Total Ions'. MS_SEQUEST_total_ions = 1001162, /// SEQUEST:consensus score: The SEQUEST result 'Consensus Score'. MS_SEQUEST_consensus_score = 1001163, /// Paragon:unused protscore: The Paragon result 'Unused ProtScore'. MS_Paragon_unused_protscore = 1001164, /// Paragon:total protscore: The Paragon result 'Total ProtScore'. MS_Paragon_total_protscore = 1001165, /// Paragon:score: The Paragon result 'Score'. MS_Paragon_score = 1001166, /// Paragon:confidence: The Paragon result 'Confidence'. MS_Paragon_confidence = 1001167, /// Paragon:expression error factor: The Paragon result 'Expression Error Factor'. MS_Paragon_expression_error_factor = 1001168, /// Paragon:expression change p-value: The Paragon result 'Expression change P-value'. MS_Paragon_expression_change_p_value = 1001169, /// Paragon:contrib: The Paragon result 'Contrib'. MS_Paragon_contrib = 1001170, /// Mascot:score: The Mascot result 'Score'. MS_Mascot_score = 1001171, /// Mascot:expectation value: The Mascot result 'expectation value'. MS_Mascot_expectation_value = 1001172, /// Mascot:matched ions: The Mascot result 'Matched ions'. MS_Mascot_matched_ions = 1001173, /// Mascot:total ions: The Mascot result 'Total ions'. MS_Mascot_total_ions = 1001174, /// peptide shared in multiple proteins: A peptide matching multiple proteins. MS_peptide_shared_in_multiple_proteins = 1001175, /// (?<=[KR])(?!P): Regular expression for Trypsin. MS______KR_____P_ = 1001176, /// number of molecular hypothesis considered: Number of Molecular Hypothesis Considered - This is the number of molecules (e.g. peptides for proteomics) considered for a particular search. MS_number_of_molecular_hypothesis_considered = 1001177, /// database EST: Expressed sequence tag nucleotide sequence database. MS_database_EST = 1001178, /// Cleavage agent regular expression: Regular expressions for cleavage enzymes. MS_Cleavage_agent_regular_expression = 1001180, /// search statistics: The details of the actual run of the search. MS_search_statistics = 1001184, /// modification specificity peptide N-term: As parameter for search engine: apply the modification only at the N-terminus of a peptide. MS_modification_specificity_peptide_N_term = 1001189, /// modification specificity peptide C-term: As parameter for search engine: apply the modification only at the C-terminus of a peptide. MS_modification_specificity_peptide_C_term = 1001190, /// p-value: Quality estimation by p-value. MS_p_value_OBSOLETE = 1001191, /// Expect value: Result of quality estimation: Expect value. MS_Expect_value = 1001192, /// confidence score: Result of quality estimation: confidence score. MS_confidence_score = 1001193, /// quality estimation with decoy database: Quality estimation by decoy database. MS_quality_estimation_with_decoy_database = 1001194, /// decoy DB type reverse: Decoy type: Amino acids of protein sequences are used in reverse order. MS_decoy_DB_type_reverse = 1001195, /// decoy DB type randomized: Decoy type: Amino acids of protein sequences are randomized (keeping the original protein mass). MS_decoy_DB_type_randomized = 1001196, /// DB composition target+decoy: Decoy database composition: database contains original (target) and decoy entries. MS_DB_composition_target_decoy = 1001197, /// protein identification confidence metric: Identification confidence metric for a protein. MS_protein_identification_confidence_metric = 1001198, /// Mascot DAT format: Source file for this mzIdentML was in Mascot DAT file format. MS_Mascot_DAT_format = 1001199, /// SEQUEST out file format: Source file for this mzIdentML was in SEQUEST out file format. MS_SEQUEST_out_file_format = 1001200, /// DB MW filter maximum: Maximum value of molecular weight filter. MS_DB_MW_filter_maximum = 1001201, /// DB MW filter minimum: Minimum value of molecular weight filter. MS_DB_MW_filter_minimum = 1001202, /// DB PI filter maximum: Maximum value of isoelectric point filter. MS_DB_PI_filter_maximum = 1001203, /// DB PI filter minimum: Minimum value of isoelectric point filter. MS_DB_PI_filter_minimum = 1001204, /// Mascot: The name of the Mascot search engine. MS_Mascot = 1001207, /// SEQUEST: The name of the SEQUEST search engine. MS_SEQUEST = 1001208, /// Phenyx: The name of the Phenyx search engine. MS_Phenyx = 1001209, /// mass type settings: The type of mass difference value to be considered by the search engine (monoisotopic or average). MS_mass_type_settings = 1001210, /// parent mass type mono: Mass type setting for parent mass was monoisotopic. MS_parent_mass_type_mono = 1001211, /// parent mass type average: Mass type setting for parent mass was average isotopic. MS_parent_mass_type_average = 1001212, /// search result details: OBSOLETE: Scores and global result characteristics. MS_search_result_details_OBSOLETE = 1001213, /// protein-level global FDR: Estimation of the global false discovery rate of proteins. MS_protein_level_global_FDR = 1001214, /// SEQUEST:PeptideSp: The SEQUEST result 'Sp' in out file (peptide). MS_SEQUEST_PeptideSp = 1001215, /// SEQUEST:PeptideRankSp: The SEQUEST result 'Sp' of 'Rank/Sp' in out file (peptide). Also called 'rsp'. MS_SEQUEST_PeptideRankSp = 1001217, /// SEQUEST:PeptideNumber: The SEQUEST result '#' in out file (peptide). MS_SEQUEST_PeptideNumber = 1001218, /// SEQUEST:PeptideIdnumber: The SEQUEST result 'Id#' in out file (peptide). MS_SEQUEST_PeptideIdnumber = 1001219, /// frag: y ion: Fragmentation information, type of product: y ion. MS_frag__y_ion = 1001220, /// product ion attribute: Fragmentation information like ion types. MS_product_ion_attribute = 1001221, /// frag: b ion - H2O: Fragmentation information, type of product: b ion without water. MS_frag__b_ion___H2O = 1001222, /// frag: y ion - H2O: Fragmentation information, type of product: y ion without water. MS_frag__y_ion___H2O = 1001223, /// frag: b ion: Fragmentation information, type of product: b ion. MS_frag__b_ion = 1001224, /// product ion m/z: The m/z of the product ion. MS_product_ion_m_z = 1001225, /// fragment ion m/z (product ion m/z): The m/z of the product ion. MS_fragment_ion_m_z = MS_product_ion_m_z, /// product ion intensity: The intensity of a single product ion. MS_product_ion_intensity = 1001226, /// fragment ion intensity (product ion intensity): The intensity of a single product ion. MS_fragment_ion_intensity = MS_product_ion_intensity, /// product ion m/z error: The product ion m/z error. MS_product_ion_m_z_error = 1001227, /// frag: x ion: Fragmentation information, type of product: x ion. MS_frag__x_ion = 1001228, /// frag: a ion: Fragmentation information, type of product: a ion. MS_frag__a_ion = 1001229, /// frag: z ion: Fragmentation information, type of product: z ion. MS_frag__z_ion = 1001230, /// frag: c ion: Fragmentation information, type of product: c ion. MS_frag__c_ion = 1001231, /// frag: b ion - NH3: Ion b-NH3 fragmentation information, type of product: b ion without ammonia. MS_frag__b_ion___NH3 = 1001232, /// frag: y ion - NH3: Ion y-NH3 fragmentation information, type of product: y ion without ammonia. MS_frag__y_ion___NH3 = 1001233, /// frag: a ion - H2O: Fragmentation information, type of product: a ion without water. MS_frag__a_ion___H2O = 1001234, /// frag: a ion - NH3: Ion a-NH3 fragmentation information, type of product: a ion without ammonia. MS_frag__a_ion___NH3 = 1001235, /// frag: d ion: Fragmentation information, type of product: d ion. MS_frag__d_ion = 1001236, /// frag: v ion: Fragmentation information, type of product: v ion. MS_frag__v_ion = 1001237, /// frag: w ion: Fragmentation information, type of product: w ion. MS_frag__w_ion = 1001238, /// frag: immonium ion: Fragmentation information, type of product: immonium ion. MS_frag__immonium_ion = 1001239, /// non-identified ion: Non-identified ion. MS_non_identified_ion = 1001240, /// co-eluting ion: Co-eluting ion. MS_co_eluting_ion = 1001241, /// SEQUEST out folder: Source file for this mzIdentML was a SEQUEST folder with its out files. MS_SEQUEST_out_folder = 1001242, /// SEQUEST summary: Source file for this mzIdentML was a SEQUEST summary page (proteins). MS_SEQUEST_summary = 1001243, /// PerSeptive PKS format: PerSeptive peak list file format. MS_PerSeptive_PKS_format = 1001245, /// SCIEX API III format: PE SCIEX peak list file format. MS_SCIEX_API_III_format = 1001246, /// Bruker XML format: Bruker data exchange XML format. MS_Bruker_XML_format = 1001247, /// search input details: Details describing the search input. MS_search_input_details = 1001249, /// local FDR: Result of quality estimation: the local FDR at the current position of a sorted list. MS_local_FDR = 1001250, /// Trypsin: Enzyme trypsin. MS_Trypsin = 1001251, /// DB source EBI: Database source EBI. MS_DB_source_EBI = 1001252, /// DB source NCBI: Database source NCBI. MS_DB_source_NCBI = 1001253, /// DB source UniProt: Database source UniProt. MS_DB_source_UniProt = 1001254, /// fragment mass type average: Mass type setting for fragment mass was average isotopic. MS_fragment_mass_type_average = 1001255, /// fragment mass type mono: Mass type setting for fragment mass was monoisotopic. MS_fragment_mass_type_mono = 1001256, /// param: v ion: Parameter information, type of product: side chain loss v ion. MS_param__v_ion = 1001257, /// param: d ion: Parameter information, type of product: side chain loss d ion. MS_param__d_ion = 1001258, /// param: immonium ion: Parameter information, type of product: immonium ion. MS_param__immonium_ion = 1001259, /// param: w ion: Parameter information, type of product: side chain loss w ion. MS_param__w_ion = 1001260, /// param: x ion: Parameter information, type of product: x ion with charge on the C-terminal side. MS_param__x_ion = 1001261, /// param: y ion: Parameter information, type of product: y ion with charge on the C-terminal side. MS_param__y_ion = 1001262, /// param: z ion: Parameter information, type of product: z ion with charge on the C-terminal side. MS_param__z_ion = 1001263, /// role type: Role of a Person or Organization. MS_role_type = 1001266, /// software vendor: Software vendor role. MS_software_vendor = 1001267, /// programmer: Programmer role. MS_programmer = 1001268, /// instrument vendor: Instrument vendor role. MS_instrument_vendor = 1001269, /// lab personnel: Lab personnel role. MS_lab_personnel = 1001270, /// researcher: Researcher role. MS_researcher = 1001271, /// (?<=R)(?!P): Regular expression for Arg-C. MS_____R____P_ = 1001272, /// (?=[BD]): Regular expression for Asp-N. MS_____BD__ = 1001273, /// (?=[DE]): Regular expression for Asp-N-ambic. MS_____DE__ = 1001274, /// ProteinScape SearchEvent: Source data for this mzIdentML was a ProteinScape SearchEvent. MS_ProteinScape_SearchEvent = 1001275, /// ProteinScape Gel: Source data for this mzIdentML was a ProteinScape Gel. MS_ProteinScape_Gel = 1001276, /// decoy DB accession regexp: Specify the regular expression for decoy accession numbers. MS_decoy_DB_accession_regexp = 1001283, /// decoy DB derived from: The name of the database, the search database was derived from. MS_decoy_DB_derived_from_OBSOLETE = 1001284, /// database IPI_mouse: International Protein Index database for Mus musculus sequences. MS_database_IPI_mouse = 1001285, /// database IPI_rat: International Protein Index database for Rattus norvegicus sequences. MS_database_IPI_rat = 1001286, /// database IPI_zebrafish: International Protein Index database for Danio rerio sequences. MS_database_IPI_zebrafish = 1001287, /// database IPI_chicken: International Protein Index database for Gallus gallus sequences. MS_database_IPI_chicken = 1001288, /// database IPI_cow: International Protein Index database for Bos taurus sequences. MS_database_IPI_cow = 1001289, /// database IPI_arabidopsis: International Protein Index database for Arabidopsis thaliana sequences. MS_database_IPI_arabidopsis = 1001290, /// decoy DB from nr: Decoy database from a non-redundant GenBank sequence database. MS_decoy_DB_from_nr_OBSOLETE = 1001291, /// decoy DB from IPI_rat: Decoy database from a International Protein Index database for Rattus norvegicus. MS_decoy_DB_from_IPI_rat_OBSOLETE = 1001292, /// decoy DB from IPI_mouse: Decoy database from a International Protein Index database for Mus musculus. MS_decoy_DB_from_IPI_mouse_OBSOLETE = 1001293, /// decoy DB from IPI_arabidopsis: Decoy database from a International Protein Index database for Arabidopsis thaliana. MS_decoy_DB_from_IPI_arabidopsis_OBSOLETE = 1001294, /// decoy DB from EST: Decoy database from an expressed sequence tag nucleotide sequence database. MS_decoy_DB_from_EST_OBSOLETE = 1001295, /// decoy DB from IPI_zebrafish: Decoy database from a International Protein Index database for Danio rerio. MS_decoy_DB_from_IPI_zebrafish_OBSOLETE = 1001296, /// decoy DB from UniProtKB/Swiss-Prot: Decoy database from a Swiss-Prot protein sequence database. MS_decoy_DB_from_UniProtKB_Swiss_Prot_OBSOLETE = 1001297, /// decoy DB from IPI_chicken: Decoy database from a International Protein Index database for Gallus gallus. MS_decoy_DB_from_IPI_chicken_OBSOLETE = 1001298, /// decoy DB from IPI_cow: Decoy database from a International Protein Index database for Bos taurus. MS_decoy_DB_from_IPI_cow_OBSOLETE = 1001299, /// decoy DB from IPI_human: Decoy database from a International Protein Index database for Homo sapiens. MS_decoy_DB_from_IPI_human_OBSOLETE = 1001300, /// protein rank: The rank of the protein in a list sorted by the search engine. MS_protein_rank = 1001301, /// search engine specific input parameter: Search engine specific input parameters. MS_search_engine_specific_input_parameter = 1001302, /// Arg-C: Endoproteinase Arg-C. MS_Arg_C = 1001303, /// Trypsin/R (Arg-C): Endoproteinase Arg-C. MS_Trypsin_R = MS_Arg_C, /// Clostripain (Arg-C): Endoproteinase Arg-C. MS_Clostripain = MS_Arg_C, /// Asp-N: Endoproteinase Asp-N. MS_Asp_N = 1001304, /// Asp-N_ambic: Enzyme Asp-N, Ammonium Bicarbonate (AmBic). MS_Asp_N_ambic = 1001305, /// Chymotrypsin: Enzyme chymotrypsin. MS_Chymotrypsin = 1001306, /// CNBr: Cyanogen bromide. MS_CNBr = 1001307, /// Formic_acid: Formic acid. MS_Formic_acid = 1001308, /// Lys-C: Endoproteinase Lys-C. MS_Lys_C = 1001309, /// Trypsin/K (Lys-C): Endoproteinase Lys-C. MS_Trypsin_K = MS_Lys_C, /// Lys-C/P: Proteinase Lys-C/P. MS_Lys_C_P = 1001310, /// PepsinA: PepsinA proteinase. MS_PepsinA = 1001311, /// TrypChymo: Cleavage agent TrypChymo. MS_TrypChymo = 1001312, /// Trypsin/P: Cleavage agent Trypsin/P. MS_Trypsin_P = 1001313, /// V8-DE: Cleavage agent V8-DE. MS_V8_DE = 1001314, /// V8-E: Cleavage agent V8-E. MS_V8_E = 1001315, /// Mascot:SigThreshold: Significance threshold below which the p-value of a peptide match must lie to be considered statistically significant (default 0.05). MS_Mascot_SigThreshold = 1001316, /// Mascot:MaxProteinHits: The number of protein hits to display in the report. If 'Auto', all protein hits that have a protein score exceeding the average peptide identity threshold are reported. Otherwise an integer at least 1. MS_Mascot_MaxProteinHits = 1001317, /// Mascot:ProteinScoringMethod: Mascot protein scoring method; either 'Standard' or 'MudPIT'. MS_Mascot_ProteinScoringMethod = 1001318, /// Mascot:MinMSMSThreshold: Mascot peptide match ion score threshold. If between 0 and 1, then peptide matches whose expect value exceeds the thresholds are suppressed; if at least 1, then peptide matches whose ion score is below the threshold are suppressed. MS_Mascot_MinMSMSThreshold = 1001319, /// Mascot:ShowHomologousProteinsWithSamePeptides: If true, show (sequence or spectrum) same-set proteins. Otherwise they are suppressed. MS_Mascot_ShowHomologousProteinsWithSamePeptides = 1001320, /// Mascot:ShowHomologousProteinsWithSubsetOfPeptides: If true, show (sequence or spectrum) sub-set and subsumable proteins. Otherwise they are suppressed. MS_Mascot_ShowHomologousProteinsWithSubsetOfPeptides = 1001321, /// Mascot:RequireBoldRed: Only used in Peptide Summary and Select Summary reports. If true, a peptide match must be 'bold red' to be included in the report; bold red means the peptide is a top ranking match in a query and appears for the first time (in linear order) in the list of protein hits. MS_Mascot_RequireBoldRed = 1001322, /// Mascot:UseUnigeneClustering: If true, then the search results are against a nucleic acid database and Unigene clustering is enabled. Otherwise UniGene clustering is not in use. MS_Mascot_UseUnigeneClustering = 1001323, /// Mascot:IncludeErrorTolerantMatches: If true, then the search results are error tolerant and peptide matches from the second pass are included in search results. Otherwise no error tolerant peptide matches are included. MS_Mascot_IncludeErrorTolerantMatches = 1001324, /// Mascot:ShowDecoyMatches: If true, then the search results are against an automatically generated decoy database and the reported peptide matches and protein hits come from the decoy database. Otherwise peptide matches and protein hits come from the original database. MS_Mascot_ShowDecoyMatches = 1001325, /// add_others: OBSOLETE. MS_add_others_OBSOLETE = 1001326, /// OMSSA:evalue: OMSSA E-value. MS_OMSSA_evalue = 1001328, /// OMSSA:pvalue: OMSSA p-value. MS_OMSSA_pvalue = 1001329, /// X!Tandem:expect: The X!Tandem expectation value. MS_X_Tandem_expect = 1001330, /// X!Tandem:hyperscore: The X!Tandem hyperscore. MS_X_Tandem_hyperscore = 1001331, /// (?<=[FYWL])(?!P): Regular expression for Chymotrypsin. MS______FYWL_____P_ = 1001332, /// (?<=M): Regular expression for CNBr. MS_____M_ = 1001333, /// ((?<=D))|((?=D)): Regular expression for formic acid. MS______D_______D__ = 1001334, /// (?<=K)(?!P): Regular expression for Lys-C. MS_____K____P_ = 1001335, /// (?<=K): Regular expression for Lys-C/P. MS_____K_ = 1001336, /// (?<=[FL]): Regular expression for PepsinA. MS______FL__ = 1001337, /// (?<=[FYWLKR])(?!P): Regular expression for TrypChymo. MS______FYWLKR_____P_ = 1001338, /// (?<=[KR]): Regular expression for Trypsin/P. MS______KR__ = 1001339, /// (?<=[BDEZ])(?!P): Regular expression for V8-DE. MS______BDEZ_____P_ = 1001340, /// (?<=[EZ])(?!P): Regular expression for V8-E. MS______EZ_____P_ = 1001341, /// database sequence details: Details about a single database sequence. MS_database_sequence_details = 1001342, /// NA sequence: The sequence is a nucleic acid sequence. MS_NA_sequence = 1001343, /// AA sequence: The sequence is a amino acid sequence. MS_AA_sequence = 1001344, /// mass table source: Children of this term specify the source of the mass table used. MS_mass_table_source = 1001345, /// AAIndex mass table: The masses used in the mass table are taken from AAIndex. MS_AAIndex_mass_table = 1001346, /// database file formats: The children of this term define file formats of the sequence database used. MS_database_file_formats = 1001347, /// FASTA format: The sequence database was stored in the FASTA format. MS_FASTA_format = 1001348, /// ASN.1: The sequence database was stored in the Abstract Syntax Notation 1 format. MS_ASN_1 = 1001349, /// NCBI *.p*: The sequence database was stored in the NCBI formatdb (*.p*) format. MS_NCBI___p_ = 1001350, /// clustal aln: ClustalW ALN (multiple alignment) format. MS_clustal_aln = 1001351, /// embl em: EMBL entry format. MS_embl_em = 1001352, /// NBRF PIR: The NBRF PIR was used as format. MS_NBRF_PIR = 1001353, /// mass table options: Root node for options for the mass table used. MS_mass_table_options = 1001354, /// peptide descriptions: Descriptions of peptides. MS_peptide_descriptions = 1001355, /// spectrum descriptions: Descriptions of the input spectra. MS_spectrum_descriptions = 1001356, /// spectrum quality descriptions: Description of the quality of the input spectrum. MS_spectrum_quality_descriptions = 1001357, /// msmsEval quality: This term reports the quality of the spectrum assigned by msmsEval. MS_msmsEval_quality = 1001358, /// ambiguous residues: Children of this term describe ambiguous residues. MS_ambiguous_residues = 1001359, /// alternate single letter codes: List of standard residue one letter codes which are used to replace a non-standard. MS_alternate_single_letter_codes = 1001360, /// alternate mass: List of masses a non-standard letter code is replaced with. MS_alternate_mass = 1001361, /// number of unmatched peaks: The number of unmatched peaks. MS_number_of_unmatched_peaks = 1001362, /// peptide unique to one protein: A peptide matching only one. MS_peptide_unique_to_one_protein = 1001363, /// peptide sequence-level global FDR: Estimation of the global false discovery rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_global_FDR = 1001364, /// frag: internal yb ion: Fragmentation information, type of product: internal yb ion. MS_frag__internal_yb_ion = 1001365, /// frag: internal ya ion: Fragmentation information, type of product: internal ya ion. MS_frag__internal_ya_ion = 1001366, /// frag: z+1 ion: Fragmentation information, type of product: z+1 ion. MS_frag__z_1_ion = 1001367, /// frag: z+2 ion: Fragmentation information, type of product: z+2 ion. MS_frag__z_2_ion = 1001368, /// text format: Simple text file format of \"m/z [intensity]\" values for a PMF (or single MS2) search. MS_text_format = 1001369, /// Mascot:homology threshold: The Mascot result 'homology threshold'. MS_Mascot_homology_threshold = 1001370, /// Mascot:identity threshold: The Mascot result 'identity threshold'. MS_Mascot_identity_threshold = 1001371, /// SEQUEST:Sequences: MS_SEQUEST_Sequences = 1001372, /// SEQUEST:TIC: SEQUEST total ion current. MS_SEQUEST_TIC = 1001373, /// SEQUEST:Sum: MS_SEQUEST_Sum = 1001374, /// Phenyx:Instrument Type: The instrument type parameter value in Phenyx. MS_Phenyx_Instrument_Type = 1001375, /// Phenyx:Scoring Model: The selected scoring model in Phenyx. MS_Phenyx_Scoring_Model = 1001376, /// Phenyx:Default Parent Charge: The default parent charge value in Phenyx. MS_Phenyx_Default_Parent_Charge = 1001377, /// Phenyx:Trust Parent Charge: The parameter in Phenyx that specifies if the experimental charge state is to be considered as correct. MS_Phenyx_Trust_Parent_Charge = 1001378, /// Phenyx:Turbo: The turbo mode parameter in Phenyx. MS_Phenyx_Turbo = 1001379, /// Phenyx:Turbo:ErrorTol: The maximal allowed fragment m/z error filter considered in the turbo mode of Phenyx. MS_Phenyx_Turbo_ErrorTol = 1001380, /// Phenyx:Turbo:Coverage: The minimal peptide sequence coverage value, expressed in percent, considered in the turbo mode of Phenyx. MS_Phenyx_Turbo_Coverage = 1001381, /// Phenyx:Turbo:Series: The list of ion series considered in the turbo mode of Phenyx. MS_Phenyx_Turbo_Series = 1001382, /// Phenyx:MinPepLength: The minimal number of residues for a peptide to be considered for a valid identification in Phenyx. MS_Phenyx_MinPepLength = 1001383, /// Phenyx:MinPepzscore: The minimal peptide z-score for a peptide to be considered for a valid identification in Phenyx. MS_Phenyx_MinPepzscore = 1001384, /// Phenyx:MaxPepPvalue: The maximal peptide p-value for a peptide to be considered for a valid identification in Phenyx. MS_Phenyx_MaxPepPvalue = 1001385, /// Phenyx:AC Score: The minimal protein score required for a protein database entry to be displayed in the list of identified proteins in Phenyx. MS_Phenyx_AC_Score = 1001386, /// Phenyx:Conflict Resolution: The parameter in Phenyx that specifies if the conflict resolution algorithm is to be used. MS_Phenyx_Conflict_Resolution = 1001387, /// Phenyx:AC: The primary sequence database identifier of a protein in Phenyx. MS_Phenyx_AC = 1001388, /// Phenyx:ID: A secondary sequence database identifier of a protein in Phenyx. MS_Phenyx_ID = 1001389, /// Phenyx:Score: The protein score of a protein match in Phenyx. MS_Phenyx_Score = 1001390, /// Phenyx:Peptides1: First number of phenyx result \"#Peptides\". MS_Phenyx_Peptides1 = 1001391, /// Phenyx:Peptides2: Second number of phenyx result \"#Peptides\". MS_Phenyx_Peptides2 = 1001392, /// Phenyx:Auto: The value of the automatic peptide acceptance filter in Phenyx. MS_Phenyx_Auto = 1001393, /// Phenyx:User: The value of the user-defined peptide acceptance filter in Phenyx. MS_Phenyx_User = 1001394, /// Phenyx:Pepzscore: The z-score value of a peptide sequence match in Phenyx. MS_Phenyx_Pepzscore = 1001395, /// Phenyx:PepPvalue: The p-value of a peptide sequence match in Phenyx. MS_Phenyx_PepPvalue = 1001396, /// Phenyx:NumberOfMC: The number of missed cleavages of a peptide sequence in Phenyx. MS_Phenyx_NumberOfMC = 1001397, /// Phenyx:Modif: The expression of the nature and position(s) of modified residue(s) on a matched peptide sequence in Phenyx. MS_Phenyx_Modif = 1001398, /// OMSSA csv format: Source file for this mzIdentML was in OMSSA csv file format. MS_OMSSA_csv_format = 1001399, /// OMSSA xml format: Source file for this mzIdentML was in OMSSA xml file format. MS_OMSSA_xml_format = 1001400, /// X!Tandem xml format: Source file for this mzIdentML was in X!Tandem xml file format. MS_X_Tandem_xml_format = 1001401, /// spectrum identification result details: This subsection describes terms which can describe details of spectrum identification results. MS_spectrum_identification_result_details = 1001405, /// param: internal yb ion: Parameter information, type of product: internal yb ion. MS_param__internal_yb_ion = 1001406, /// param: internal ya ion: Parameter information, type of product: internal ya ion. MS_param__internal_ya_ion = 1001407, /// param: z+1 ion: Parameter information, type of product: z+1 ion. MS_param__z_1_ion = 1001408, /// param: z+2 ion: Parameter information, type of product: z+2 ion. MS_param__z_2_ion = 1001409, /// translation start codons: The translation start codons used to translate the nucleotides to amino acids. MS_translation_start_codons = 1001410, /// search tolerance specification: Specification of the search tolerance. MS_search_tolerance_specification = 1001411, /// search tolerance plus value: MS_search_tolerance_plus_value = 1001412, /// search tolerance minus value: MS_search_tolerance_minus_value = 1001413, /// MGF scans: OBSOLETE: replaced by MS:1000797 (peak list scans): This term can hold the scans attribute from an MGF input file. MS_MGF_scans_OBSOLETE = 1001414, /// MGF raw scans: OBSOLETE: replaced by MS:1000798 (peak list raw scans): This term can hold the raw scans attribute from an MGF input file. MS_MGF_raw_scans_OBSOLETE = 1001415, /// spectrum title: OBSOLETE: replaced by MS:1000796 (spectrum title): Holds the spectrum title from different input file formats, e.g. MGF TITLE. MS_spectrum_title_OBSOLETE = 1001416, /// SpectraST:dot: SpectraST dot product of two spectra, measuring spectral similarity. MS_SpectraST_dot = 1001417, /// SpectraST:dot_bias: SpectraST measure of how much of the dot product is dominated by a few peaks. MS_SpectraST_dot_bias = 1001418, /// SpectraST:discriminant score F: SpectraST spectrum score. MS_SpectraST_discriminant_score_F = 1001419, /// SpectraST:delta: SpectraST normalised difference between dot product of top hit and runner-up. MS_SpectraST_delta = 1001420, /// pepXML format: The XML-based pepXML file format for encoding PSM information, created and maintained by the Trans-Proteomic Pipeline developers. MS_pepXML_format = 1001421, /// protXML format: The XML-based protXML file format for encoding protein identifications, created and maintained by the Trans-Proteomic Pipeline developers. MS_protXML_format = 1001422, /// translation table description: A URL that describes the translation table used to translate the nucleotides to amino acids. MS_translation_table_description = 1001423, /// ProteinExtractor:Methodname: Name of the used method in the ProteinExtractor algorithm. MS_ProteinExtractor_Methodname = 1001424, /// ProteinExtractor:GenerateNonRedundant: Flag indicating if a non redundant scoring should be generated. MS_ProteinExtractor_GenerateNonRedundant = 1001425, /// ProteinExtractor:IncludeIdentified: Flag indicating if identified proteins should be included. MS_ProteinExtractor_IncludeIdentified = 1001426, /// ProteinExtractor:MaxNumberOfProteins: The maximum number of proteins to consider. MS_ProteinExtractor_MaxNumberOfProteins = 1001427, /// ProteinExtractor:MaxProteinMass: The maximum considered mass for a protein. MS_ProteinExtractor_MaxProteinMass = 1001428, /// ProteinExtractor:MinNumberOfPeptides: The minimum number of proteins to consider. MS_ProteinExtractor_MinNumberOfPeptides = 1001429, /// ProteinExtractor:UseMascot: Flag indicating to include Mascot scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_UseMascot = 1001430, /// ProteinExtractor:MascotPeptideScoreThreshold: Only peptides with scores higher than that threshold are taken into account in Mascot scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_MascotPeptideScoreThreshold = 1001431, /// ProteinExtractor:MascotUniqueScore: In the final result each protein must have at least one peptide above this Mascot score threshold in ProteinExtractor meta score calculation. MS_ProteinExtractor_MascotUniqueScore = 1001432, /// ProteinExtractor:MascotUseIdentityScore: MS_ProteinExtractor_MascotUseIdentityScore = 1001433, /// ProteinExtractor:MascotWeighting: Influence of Mascot search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor. MS_ProteinExtractor_MascotWeighting = 1001434, /// ProteinExtractor:UseSequest: Flag indicating to include SEQUEST scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_UseSequest = 1001435, /// ProteinExtractor:SequestPeptideScoreThreshold: Only peptides with scores higher than that threshold are taken into account in SEQUEST scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_SequestPeptideScoreThreshold = 1001436, /// ProteinExtractor:SequestUniqueScore: In the final result each protein must have at least one peptide above this SEQUEST score threshold in ProteinExtractor meta score calculation. MS_ProteinExtractor_SequestUniqueScore = 1001437, /// ProteinExtractor:SequestWeighting: Influence of SEQUEST search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor. MS_ProteinExtractor_SequestWeighting = 1001438, /// ProteinExtractor:UseProteinSolver: Flag indicating to include ProteinSolver scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_UseProteinSolver = 1001439, /// ProteinExtractor:ProteinSolverPeptideScoreThreshold: Only peptides with scores higher than that threshold are taken into account in ProteinSolver scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_ProteinSolverPeptideScoreThreshold = 1001440, /// ProteinExtractor:ProteinSolverUniqueScore: In the final result each protein must have at least one peptide above this ProteinSolver score threshold in ProteinExtractor meta score calculation. MS_ProteinExtractor_ProteinSolverUniqueScore = 1001441, /// ProteinExtractor:ProteinSolverWeighting: Influence of ProteinSolver search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor. MS_ProteinExtractor_ProteinSolverWeighting = 1001442, /// ProteinExtractor:UsePhenyx: Flag indicating to include Phenyx scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_UsePhenyx = 1001443, /// ProteinExtractor:PhenyxPeptideScoreThreshold: Only peptides with scores higher than that threshold are taken into account in Phenyx scoring for calculation of the ProteinExtractor meta score. MS_ProteinExtractor_PhenyxPeptideScoreThreshold = 1001444, /// ProteinExtractor:PhenyxUniqueScore: In the final result each protein must have at least one peptide above this Phenyx score threshold in ProteinExtractor meta score calculation. MS_ProteinExtractor_PhenyxUniqueScore = 1001445, /// ProteinExtractor:PhenyxWeighting: Influence of Phenyx search engine in the process of merging the search engine specific protein lists into the global protein list of ProteinExtractor. MS_ProteinExtractor_PhenyxWeighting = 1001446, /// prot:FDR threshold: False-discovery rate threshold for proteins. MS_prot_FDR_threshold = 1001447, /// pep:FDR threshold: False-discovery rate threshold for peptides. MS_pep_FDR_threshold = 1001448, /// OMSSA e-value threshold: Threshold for OMSSA e-value for quality estimation. MS_OMSSA_e_value_threshold = 1001449, /// decoy DB details: Details of decoy generation and database structure. MS_decoy_DB_details = 1001450, /// decoy DB generation algorithm: Name of algorithm used for decoy generation. MS_decoy_DB_generation_algorithm = 1001451, /// decoy DB type shuffle: Decoy type: Amino acids of protein sequences are used in a random order. MS_decoy_DB_type_shuffle = 1001452, /// DB composition only decoy: Decoy database composition: database contains only decoy entries. MS_DB_composition_only_decoy = 1001453, /// quality estimation with implicite decoy sequences: Decoy entries are generated during the search, not explicitly stored in a database (like Mascot Decoy). MS_quality_estimation_with_implicite_decoy_sequences = 1001454, /// acquisition software: Acquisition software. MS_acquisition_software = 1001455, /// analysis software: Analysis software. MS_analysis_software = 1001456, /// data processing software: Data processing software. MS_data_processing_software = 1001457, /// spectrum generation information: Vocabularies describing the spectrum generation information. MS_spectrum_generation_information = 1001458, /// file format: Format of data files. MS_file_format = 1001459, /// unknown modification: This term should be given if the modification was unknown. MS_unknown_modification = 1001460, /// greylag: Greylag identification software. MS_greylag = 1001461, /// PEFF format: The sequence database was stored in the PEFF (PSI enhanced FastA file) format. MS_PEFF_format = 1001462, /// Phenyx XML format: Phenyx open XML file format. MS_Phenyx_XML_format = 1001463, /// DTASelect format: DTASelect file format. MS_DTASelect_format = 1001464, /// MS2 format: MS2 file format for MS2 spectral data. MS_MS2_format = 1001466, /// taxonomy: NCBI TaxID: This term is used if a NCBI TaxID is specified, e.g. 9606 for Homo sapiens. MS_taxonomy__NCBI_TaxID = 1001467, /// taxonomy: common name: This term is used if a common name is specified, e.g. human. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible. MS_taxonomy__common_name = 1001468, /// taxonomy: scientific name: This term is used if a scientific name is specified, e.g. Homo sapiens. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible. MS_taxonomy__scientific_name = 1001469, /// taxonomy: Swiss-Prot ID: This term is used if a swiss prot taxonomy id is specified, e.g. Human. Recommend using MS:1001467 (taxonomy: NCBI TaxID) where possible. MS_taxonomy__Swiss_Prot_ID = 1001470, /// peptide modification details: The children of this term can be used to describe modifications. MS_peptide_modification_details = 1001471, /// selected ion monitoring chromatogram: Representation of an array of the measurements of a selectively monitored ion versus time. MS_selected_ion_monitoring_chromatogram = 1001472, /// SIM chromatogram (selected ion monitoring chromatogram): Representation of an array of the measurements of a selectively monitored ion versus time. MS_SIM_chromatogram = MS_selected_ion_monitoring_chromatogram, /// selected reaction monitoring chromatogram: Representation of an array of the measurements of a selectively monitored reaction versus time. MS_selected_reaction_monitoring_chromatogram = 1001473, /// SRM chromatogram (selected reaction monitoring chromatogram): Representation of an array of the measurements of a selectively monitored reaction versus time. MS_SRM_chromatogram = MS_selected_reaction_monitoring_chromatogram, /// consecutive reaction monitoring chromatogram: Representation of an array of the measurements of a series of monitored reactions versus time. MS_consecutive_reaction_monitoring_chromatogram_OBSOLETE = 1001474, /// CRM chromatogram (consecutive reaction monitoring chromatogram): Representation of an array of the measurements of a series of monitored reactions versus time. MS_CRM_chromatogram_OBSOLETE = MS_consecutive_reaction_monitoring_chromatogram_OBSOLETE, /// OMSSA: Open Mass Spectrometry Search Algorithm was used to analyze the spectra. MS_OMSSA = 1001475, /// X!Tandem: X!Tandem was used to analyze the spectra. MS_X_Tandem = 1001476, /// SpectraST: SpectraST was used to analyze the spectra. MS_SpectraST = 1001477, /// Mascot Parser: Mascot Parser was used to analyze the spectra. MS_Mascot_Parser = 1001478, /// null-terminated ASCII string: Sequence of zero or more non-zero ASCII characters terminated by a single null (0) byte. MS_null_terminated_ASCII_string = 1001479, /// SCIEX TOF/TOF nativeID format: Native format defined by jobRun=xsd:nonNegativeInteger spotLabel=xsd:string spectrum=xsd:nonNegativeInteger. MS_SCIEX_TOF_TOF_nativeID_format = 1001480, /// SCIEX TOF/TOF database: Applied Biosystems/MDS Analytical Technologies TOF/TOF instrument database. MS_SCIEX_TOF_TOF_database = 1001481, /// 5800 TOF/TOF: SCIEX 5800 TOF-TOF Analyzer. MS_5800_TOF_TOF = 1001482, /// SCIEX TOF/TOF Series Explorer Software: SCIEX or Applied Biosystems software for TOF/TOF data acquisition and analysis. MS_SCIEX_TOF_TOF_Series_Explorer_Software = 1001483, /// intensity normalization: Normalization of data point intensities. MS_intensity_normalization = 1001484, /// m/z calibration: Calibration of data point m/z positions. MS_m_z_calibration = 1001485, /// data filtering: Filtering out part of the data. MS_data_filtering = 1001486, /// ProteinExtractor: An algorithm for protein determination/assembly integrated into Bruker's ProteinScape. MS_ProteinExtractor = 1001487, /// Mascot Distiller: Mascot Distiller. MS_Mascot_Distiller = 1001488, /// Mascot Integra: Mascot Integra. MS_Mascot_Integra = 1001489, /// Percolator: Percolator. MS_Percolator = 1001490, /// percolator:Q value: Percolator:Q value. MS_percolator_Q_value = 1001491, /// percolator:score: Percolator:score. MS_percolator_score = 1001492, /// percolator:PEP: Posterior error probability. MS_percolator_PEP = 1001493, /// no threshold: In case no threshold was used. MS_no_threshold = 1001494, /// ProteinScape:SearchResultId: The SearchResultId of this peptide as SearchResult in the ProteinScape database. MS_ProteinScape_SearchResultId = 1001495, /// ProteinScape:SearchEventId: The SearchEventId of the SearchEvent in the ProteinScape database. MS_ProteinScape_SearchEventId = 1001496, /// ProteinScape:ProfoundProbability: The Profound probability score stored by ProteinScape. MS_ProteinScape_ProfoundProbability = 1001497, /// Profound:z value: The Profound z value. MS_Profound_z_value = 1001498, /// Profound:Cluster: The Profound cluster score. MS_Profound_Cluster = 1001499, /// Profound:ClusterRank: The Profound cluster rank. MS_Profound_ClusterRank = 1001500, /// MSFit:Mowse score: The MSFit Mowse score. MS_MSFit_Mowse_score = 1001501, /// Sonar:Score: The Sonar score. MS_Sonar_Score = 1001502, /// ProteinScape:PFFSolverExp: The ProteinSolver exp value stored by ProteinScape. MS_ProteinScape_PFFSolverExp = 1001503, /// ProteinScape:PFFSolverScore: The ProteinSolver score stored by ProteinScape. MS_ProteinScape_PFFSolverScore = 1001504, /// ProteinScape:IntensityCoverage: The intensity coverage of the identified peaks in the spectrum calculated by ProteinScape. MS_ProteinScape_IntensityCoverage = 1001505, /// ProteinScape:SequestMetaScore: The SEQUEST meta score calculated by ProteinScape from the original SEQUEST scores. MS_ProteinScape_SequestMetaScore = 1001506, /// ProteinExtractor:Score: The score calculated by ProteinExtractor. MS_ProteinExtractor_Score = 1001507, /// Agilent MassHunter nativeID format: Native format defined by scanId=xsd:nonNegativeInteger. MS_Agilent_MassHunter_nativeID_format = 1001508, /// Agilent MassHunter format: A data file format found in an Agilent MassHunter directory which contains raw data acquired by an Agilent mass spectrometer. MS_Agilent_MassHunter_format = 1001509, /// TSQ Vantage: TSQ Vantage. MS_TSQ_Vantage = 1001510, /// Sequence database filter types: Filter types which are used to filter a sequence database. MS_Sequence_database_filter_types = 1001511, /// Sequence database filters: Sequence database filters which actually can contains values, e.g. to limit PI value of the sequences used to search. MS_Sequence_database_filters = 1001512, /// DB sequence filter pattern: DB sequence filter pattern. MS_DB_sequence_filter_pattern = 1001513, /// DB accession filter string: DB accession filter string. MS_DB_accession_filter_string = 1001514, /// frag: c ion - H2O: Fragmentation information, type of product: c ion without water. MS_frag__c_ion___H2O = 1001515, /// frag: c ion - NH3: Fragmentation information, type of product: c ion without ammonia. MS_frag__c_ion___NH3 = 1001516, /// frag: z ion - H2O: Fragmentation information, type of product: z ion without water. MS_frag__z_ion___H2O = 1001517, /// frag: z ion - NH3: Fragmentation information, type of product: z ion without ammonia. MS_frag__z_ion___NH3 = 1001518, /// frag: x ion - H2O: Fragmentation information, type of product: x ion without water. MS_frag__x_ion___H2O = 1001519, /// frag: x ion - NH3: Fragmentation information, type of product: x ion without ammonia. MS_frag__x_ion___NH3 = 1001520, /// frag: precursor ion - H2O: Fragmentation information, type of product: precursor ion without water. MS_frag__precursor_ion___H2O = 1001521, /// frag: precursor ion - NH3: Fragmentation information, type of product: precursor ion without ammonia. MS_frag__precursor_ion___NH3 = 1001522, /// frag: precursor ion: Fragmentation information, type of product: precursor ion. MS_frag__precursor_ion = 1001523, /// fragment neutral loss: This term can describe a neutral loss m/z value that is lost from an ion. MS_fragment_neutral_loss = 1001524, /// precursor neutral loss: This term can describe a neutral loss m/z value that is lost from an ion. MS_precursor_neutral_loss = 1001525, /// spectrum from database integer nativeID format: Native format defined by databasekey=xsd:long. MS_spectrum_from_database_integer_nativeID_format = 1001526, /// Proteinscape spectra: Spectra from Bruker/Protagen Proteinscape database. MS_Proteinscape_spectra = 1001527, /// Mascot query number: Native format defined by query=xsd:nonNegativeInteger. MS_Mascot_query_number = 1001528, /// spectra data details: Child-terms contain information to map the results back to spectra. MS_spectra_data_details = 1001529, /// mzML unique identifier: Native format defined by mzMLid=xsd:IDREF. MS_mzML_unique_identifier = 1001530, /// spectrum from ProteinScape database nativeID format: Native format defined by databasekey=xsd:long. MS_spectrum_from_ProteinScape_database_nativeID_format = 1001531, /// spectrum from database string nativeID format: Native format defined by databasekey=xsd:string. MS_spectrum_from_database_string_nativeID_format = 1001532, /// Bruker Daltonics esquire series: Bruker Daltonics' esquire series. MS_Bruker_Daltonics_esquire_series = 1001533, /// Bruker Daltonics flex series: Bruker Daltonics' flex series. MS_Bruker_Daltonics_flex_series = 1001534, /// Bruker Daltonics BioTOF series: Bruker Daltonics' BioTOF series. MS_Bruker_Daltonics_BioTOF_series = 1001535, /// Bruker Daltonics micrOTOF series: Bruker Daltonics' micrOTOF series. MS_Bruker_Daltonics_micrOTOF_series = 1001536, /// BioTOF: Bruker Daltonics' BioTOF: ESI TOF. MS_BioTOF = 1001537, /// BioTOF III: Bruker Daltonics' BioTOF III: ESI TOF. MS_BioTOF_III = 1001538, /// UltroTOF-Q: Bruker Daltonics' UltroTOF-Q: ESI Q-TOF (MALDI optional). MS_UltroTOF_Q = 1001539, /// micrOTOF II: Bruker Daltonics' micrOTOF II: ESI TOF, Nanospray, APCI, APPI. MS_micrOTOF_II = 1001540, /// maXis: Bruker Daltonics' maXis: ESI Q-TOF, Nanospray, APCI, APPI. MS_maXis = 1001541, /// amaZon ETD: Bruker Daltonics' amaZon ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, ETD, PTR. MS_amaZon_ETD = 1001542, /// microflex LRF: Bruker Daltonics' microflex LRF: MALDI TOF. MS_microflex_LRF = 1001543, /// ultrafleXtreme: Bruker Daltonics' ultrafleXtreme: MALDI TOF. MS_ultrafleXtreme = 1001544, /// Bruker Daltonics amaZon series: Bruker Daltonics' amaZon series. MS_Bruker_Daltonics_amaZon_series = 1001545, /// amaZon X: Bruker Daltonics' amaZon X: ESI quadrupole ion trap, APCI, APPI, ETD, PTR. MS_amaZon_X = 1001546, /// Bruker Daltonics maXis series: Bruker Daltonics' maXis series. MS_Bruker_Daltonics_maXis_series = 1001547, /// Bruker Daltonics solarix series: Bruker Daltonics' solarix: ESI quadrupole ion trap, APCI, APPI, ETD, PTR. MS_Bruker_Daltonics_solarix_series = 1001548, /// solariX: Bruker Daltonics' solariX: ESI, MALDI, Qh-FT_ICR. MS_solariX = 1001549, /// microflex II: Bruker Daltonics' microflex II: MALDI TOF. MS_microflex_II = 1001550, /// autoflex II TOF/TOF: Bruker Daltonics' autoflex II TOF/TOF: MALDI TOF. MS_autoflex_II_TOF_TOF = 1001553, /// autoflex III TOF/TOF smartbeam: Bruker Daltonics' autoflex III TOF/TOF smartbeam: MALDI TOF. MS_autoflex_III_TOF_TOF_smartbeam = 1001554, /// autoflex: Bruker Daltonics' autoflex: MALDI TOF. MS_autoflex = 1001555, /// Bruker Daltonics apex series: Bruker Daltonics' apex series. MS_Bruker_Daltonics_apex_series = 1001556, /// Shimadzu Corporation software: Shimadzu Corporation software. MS_Shimadzu_Corporation_software = 1001557, /// MALDI Solutions: Shimadzu Biotech software for data acquisition, processing, and analysis. MS_MALDI_Solutions = 1001558, /// SCIEX TOF/TOF T2D nativeID format: Native format defined by file=xsd:IDREF. MS_SCIEX_TOF_TOF_T2D_nativeID_format = 1001559, /// SCIEX TOF/TOF T2D format: Applied Biosystems/MDS Analytical Technologies TOF/TOF instrument export format. MS_SCIEX_TOF_TOF_T2D_format = 1001560, /// Scaffold: Scaffold analysis software. MS_Scaffold = 1001561, /// Scaffold nativeID format: Scaffold native ID format. MS_Scaffold_nativeID_format = 1001562, /// SEQUEST SQT format: Source file for this mzIdentML was in SEQUEST SQT format. MS_SEQUEST_SQT_format = 1001563, /// Discoverer MSF format: Source file for this mzIdentML was in Thermo Scientific Discoverer MSF format. MS_Discoverer_MSF_format = 1001564, /// IdentityE XML format: Source file for this mzIdentML was in Waters IdentityE XML format. MS_IdentityE_XML_format = 1001565, /// ProteinLynx XML format: Source file for this mzIdentML was in Waters ProteinLynx XML format. MS_ProteinLynx_XML_format = 1001566, /// SpectrumMill directories: Source file for this mzIdentML was in Agilent SpectrumMill directory format. MS_SpectrumMill_directories = 1001567, /// Scaffold:Peptide Probability: Scaffold peptide probability score. MS_Scaffold_Peptide_Probability = 1001568, /// IdentityE Score: Waters IdentityE peptide score. MS_IdentityE_Score = 1001569, /// ProteinLynx:Log Likelihood: ProteinLynx log likelihood score. MS_ProteinLynx_Log_Likelihood = 1001570, /// ProteinLynx:Ladder Score: Waters ProteinLynx Ladder score. MS_ProteinLynx_Ladder_Score = 1001571, /// SpectrumMill:Score: Spectrum mill peptide score. MS_SpectrumMill_Score = 1001572, /// SpectrumMill:SPI: SpectrumMill SPI score (%). MS_SpectrumMill_SPI = 1001573, /// report only spectra assigned to identified proteins: Flag indicating to report only the spectra assigned to identified proteins. MS_report_only_spectra_assigned_to_identified_proteins = 1001574, /// Scaffold: Minimum Peptide Count: Minimum number of peptides a protein must have to be accepted. MS_Scaffold__Minimum_Peptide_Count = 1001575, /// Scaffold: Minimum Protein Probability: Minimum protein probability a protein must have to be accepted. MS_Scaffold__Minimum_Protein_Probability = 1001576, /// Scaffold: Minimum Peptide Probability: Minimum probability a peptide must have to be accepted for protein scoring. MS_Scaffold__Minimum_Peptide_Probability = 1001577, /// minimum number of enzymatic termini: Minimum number of enzymatic termini a peptide must have to be accepted. MS_minimum_number_of_enzymatic_termini = 1001578, /// Scaffold:Protein Probability: Scaffold protein probability score. MS_Scaffold_Protein_Probability = 1001579, /// SpectrumMill:Discriminant Score: Discriminant score from Agilent SpectrumMill software. MS_SpectrumMill_Discriminant_Score = 1001580, /// FAIMS compensation voltage: The DC potential applied to the asymmetric waveform in FAIMS that compensates for the difference between high and low field mobility of an ion. MS_FAIMS_compensation_voltage = 1001581, /// FAIMS CV (FAIMS compensation voltage): The DC potential applied to the asymmetric waveform in FAIMS that compensates for the difference between high and low field mobility of an ion. MS_FAIMS_CV = MS_FAIMS_compensation_voltage, /// XCMS: Bioconductor package XCMS for preprocessing high-throughput, untargeted analyte profiling data. MS_XCMS = 1001582, /// MaxQuant: MaxQuant is a quantitative proteomics software package designed for analyzing large mass spectrometric data sets. It is specifically aimed at high resolution MS data. MS_MaxQuant = 1001583, /// combined pmf + ms-ms search: Search that includes data from Peptide Mass Fingerprint (PMF) and MS2 (aka Peptide Fragment Fingerprint - PFF). MS_combined_pmf___ms_ms_search = 1001584, /// MyriMatch: Tabb Lab software for directly comparing peptides in a database to tandem mass spectra. MS_MyriMatch = 1001585, /// DirecTag: Tabb Lab software for generating sequence tags from tandem mass spectra. MS_DirecTag = 1001586, /// TagRecon: Tabb Lab software for reconciling sequence tags to a protein database. MS_TagRecon = 1001587, /// Pepitome: Tabb Lab software for spectral library searches on tandem mass spectra. MS_Pepitome = 1001588, /// MyriMatch:MVH: Using the multivariate hypergeometric distribution and a peak list divided into several intensity classes, this score is the negative natural log probability that the predicted peaks matched to experimental peaks by random chance. MS_MyriMatch_MVH = 1001589, /// Pepitome:MVH (MyriMatch:MVH): Using the multivariate hypergeometric distribution and a peak list divided into several intensity classes, this score is the negative natural log probability that the predicted peaks matched to experimental peaks by random chance. MS_Pepitome_MVH = MS_MyriMatch_MVH, /// TagRecon:MVH (MyriMatch:MVH): Using the multivariate hypergeometric distribution and a peak list divided into several intensity classes, this score is the negative natural log probability that the predicted peaks matched to experimental peaks by random chance. MS_TagRecon_MVH = MS_MyriMatch_MVH, /// MyriMatch:mzFidelity: The negative natural log probability that predicted peaks match to experimental peaks by random chance by scoring the m/z delta of the matches in a multinomial distribution. MS_MyriMatch_mzFidelity = 1001590, /// Pepitome:mzFidelity (MyriMatch:mzFidelity): The negative natural log probability that predicted peaks match to experimental peaks by random chance by scoring the m/z delta of the matches in a multinomial distribution. MS_Pepitome_mzFidelity = MS_MyriMatch_mzFidelity, /// TagRecon:mzFidelity (MyriMatch:mzFidelity): The negative natural log probability that predicted peaks match to experimental peaks by random chance by scoring the m/z delta of the matches in a multinomial distribution. MS_TagRecon_mzFidelity = MS_MyriMatch_mzFidelity, /// anchor protein: A representative protein selected from a set of sequence same-set or spectrum same-set proteins. MS_anchor_protein = 1001591, /// family member protein: A protein with significant homology to another protein, but some distinguishing peptide matches. MS_family_member_protein = 1001592, /// group member with undefined relationship OR ortholog protein: TO ENDETAIL: a really generic relationship OR ortholog protein. MS_group_member_with_undefined_relationship_OR_ortholog_protein = 1001593, /// sequence same-set protein: A protein which is indistinguishable or equivalent to another protein, having matches to an identical set of peptide sequences. MS_sequence_same_set_protein = 1001594, /// spectrum same-set protein: A protein which is indistinguishable or equivalent to another protein, having matches to a set of peptide sequences that cannot be distinguished using the evidence in the mass spectra. MS_spectrum_same_set_protein = 1001595, /// sequence sub-set protein: A protein with a sub-set of the peptide sequence matches for another protein, and no distinguishing peptide matches. MS_sequence_sub_set_protein = 1001596, /// spectrum sub-set protein: A protein with a sub-set of the matched spectra for another protein, where the matches cannot be distinguished using the evidence in the mass spectra, and no distinguishing peptide matches. MS_spectrum_sub_set_protein = 1001597, /// sequence subsumable protein: A sequence same-set or sequence sub-set protein where the matches are distributed across two or more proteins. MS_sequence_subsumable_protein = 1001598, /// spectrum subsumable protein: A spectrum same-set or spectrum sub-set protein where the matches are distributed across two or more proteins. MS_spectrum_subsumable_protein = 1001599, /// protein inference confidence category: Confidence category of inferred protein (conclusive, non conclusive, ambiguous group or indistinguishable). MS_protein_inference_confidence_category = 1001600, /// ProteomeDiscoverer:Spectrum Files:Raw File names: Name and location of the .raw file or files. MS_ProteomeDiscoverer_Spectrum_Files_Raw_File_names_OBSOLETE = 1001601, /// ProteomeDiscoverer:SRF File Selector:SRF File Path: Path and name of the .srf (SEQUEST Result Format) file. MS_ProteomeDiscoverer_SRF_File_Selector_SRF_File_Path_OBSOLETE = 1001602, /// ProteomeDiscoverer:Spectrum Selector:Ionization Source: Ionization source (electro-, nano-, thermospray, electron impact, APCI, MALDI, FAB etc). MS_ProteomeDiscoverer_Spectrum_Selector_Ionization_Source_OBSOLETE = 1001603, /// ProteomeDiscoverer:Activation Type: Fragmentation method used (CID, MPD, ECD, PQD, ETD, HCD, Any). MS_ProteomeDiscoverer_Activation_Type_OBSOLETE = 1001604, /// ProteomeDiscoverer:Spectrum Selector:Lower RT Limit: Lower retention-time limit. MS_ProteomeDiscoverer_Spectrum_Selector_Lower_RT_Limit = 1001605, /// ProteomeDiscoverer:Mass Analyzer: Type of mass spectrometer used (ITMS, FTMS, TOFMS, SQMS, TQMS, SectorMS). MS_ProteomeDiscoverer_Mass_Analyzer_OBSOLETE = 1001606, /// ProteomeDiscoverer:Max Precursor Mass: Maximum mass limit of a singly charged precursor ion. MS_ProteomeDiscoverer_Max_Precursor_Mass = 1001607, /// ProteomeDiscoverer:Min Precursor Mass: Minimum mass limit of a singly charged precursor ion. MS_ProteomeDiscoverer_Min_Precursor_Mass = 1001608, /// ProteomeDiscoverer:Spectrum Selector:Minimum Peak Count: Minimum number of peaks in a tandem mass spectrum that is allowed to pass the filter and to be subjected to further processing in the workflow. MS_ProteomeDiscoverer_Spectrum_Selector_Minimum_Peak_Count = 1001609, /// ProteomeDiscoverer:MS Order: Level of the mass spectrum (MS2 ... MS10). MS_ProteomeDiscoverer_MS_Order_OBSOLETE = 1001610, /// ProteomeDiscoverer:Polarity Mode: Polarity mode (positive or negative). MS_ProteomeDiscoverer_Polarity_Mode_OBSOLETE = 1001611, /// ProteomeDiscoverer:Spectrum Selector:Precursor Selection: Determines which precursor mass to use for a given MSn scan. This option applies only to higher-order MSn scans (n >= 3). MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Selection = 1001612, /// ProteomeDiscoverer:SN Threshold: Signal-to-Noise ratio below which peaks are removed. MS_ProteomeDiscoverer_SN_Threshold = 1001613, /// ProteomeDiscoverer:Scan Type: Scan type for the precursor ion (full, Single Ion Monitoring (SIM), Single Reaction Monitoring (SRM)). MS_ProteomeDiscoverer_Scan_Type_OBSOLETE = 1001614, /// ProteomeDiscoverer:Spectrum Selector:Total Intensity Threshold: Used to filter out tandem mass spectra that have a total intensity current(sum of the intensities of all peaks in a spectrum) below the specified value. MS_ProteomeDiscoverer_Spectrum_Selector_Total_Intensity_Threshold = 1001615, /// ProteomeDiscoverer:Spectrum Selector:Unrecognized Activation Type Replacements: Specifies the fragmentation method to use in the search algorithm if it is not included in the scan header. MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Activation_Type_Replacements = 1001616, /// ProteomeDiscoverer:Spectrum Selector:Unrecognized Charge Replacements: Specifies the charge state of the precursor ions, if it is not defined in the scan header. MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Charge_Replacements = 1001617, /// ProteomeDiscoverer:Spectrum Selector:Unrecognized Mass Analyzer Replacements: Specifies the mass spectrometer to use to produce the spectra, if it is not included in the scan header. MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Mass_Analyzer_Replacements = 1001618, /// ProteomeDiscoverer:Spectrum Selector:Unrecognized MS Order Replacements: Specifies the MS scan order used to produce the product spectra, if it is not included in the scan header. MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_MS_Order_Replacements = 1001619, /// ProteomeDiscoverer:Spectrum Selector:Unrecognized Polarity Replacements: Specifies the polarity of the ions monitored if it is not included in the scan header. MS_ProteomeDiscoverer_Spectrum_Selector_Unrecognized_Polarity_Replacements = 1001620, /// ProteomeDiscoverer:Spectrum Selector:Upper RT Limit: Upper retention-time limit. MS_ProteomeDiscoverer_Spectrum_Selector_Upper_RT_Limit = 1001621, /// ProteomeDiscoverer:Non-Fragment Filter:Mass Window Offset: Specifies the size of the mass-to-charge ratio (m/z) window in daltons used to remove precursors. MS_ProteomeDiscoverer_Non_Fragment_Filter_Mass_Window_Offset = 1001622, /// ProteomeDiscoverer:Non-Fragment Filter:Maximum Neutral Loss Mass: Maximum allowed mass of a neutral loss. MS_ProteomeDiscoverer_Non_Fragment_Filter_Maximum_Neutral_Loss_Mass = 1001623, /// ProteomeDiscoverer:Non-Fragment Filter:Remove Charge Reduced Precursor: Determines whether the charge-reduced precursor peaks found in an ETD or ECD spectrum are removed. MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Charge_Reduced_Precursor = 1001624, /// ProteomeDiscoverer:Non-Fragment Filter:Remove Neutral Loss Peaks: Determines whether neutral loss peaks are removed from ETD and ECD spectra. MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Neutral_Loss_Peaks = 1001625, /// ProteomeDiscoverer:Non-Fragment Filter:Remove Only Known Masses: Determines whether overtone peaks are removed from LTQ FT or LTQ FT Ultra ECD spectra. MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Only_Known_Masses = 1001626, /// ProteomeDiscoverer:Non-Fragment Filter:Remove Precursor Overtones: Determines whether precursor overtone peaks in the spectrum are removed from the input spectrum. MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Overtones = 1001627, /// ProteomeDiscoverer:Non-Fragment Filter:Remove Precursor Peak: Determines whether precursor artifact peaks from the MS2 input spectra are removed. MS_ProteomeDiscoverer_Non_Fragment_Filter_Remove_Precursor_Peak = 1001628, /// ProteomeDiscoverer:Spectrum Grouper:Allow Mass Analyzer Mismatch: Determines whether the fragment spectrum for scans with the same precursor mass is grouped, regardless of mass analyzer and activation type. MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_Mass_Analyzer_Mismatch = 1001629, /// ProteomeDiscoverer:Spectrum Grouper:Allow MS Order Mismatch: Determines whether spectra from different MS order scans can be grouped together. MS_ProteomeDiscoverer_Spectrum_Grouper_Allow_MS_Order_Mismatch = 1001630, /// ProteomeDiscoverer:Spectrum Grouper:Max RT Difference: Chromatographic window where precursors to be grouped must reside to be considered the same species. MS_ProteomeDiscoverer_Spectrum_Grouper_Max_RT_Difference_OBSOLETE = 1001631, /// ProteomeDiscoverer:Spectrum Grouper:Precursor Mass Criterion: Groups spectra measured within the given mass and retention-time tolerances into a single spectrum for analysis. MS_ProteomeDiscoverer_Spectrum_Grouper_Precursor_Mass_Criterion = 1001632, /// ProteomeDiscoverer:Xtract:Highest Charge: Highest charge state that is allowed for the deconvolution of multiply charged data. MS_ProteomeDiscoverer_Xtract_Highest_Charge = 1001633, /// ProteomeDiscoverer:Xtract:Highest MZ: Highest mass-to-charge (mz) value for spectral peaks in the measured spectrum that are considered for Xtract. MS_ProteomeDiscoverer_Xtract_Highest_MZ_OBSOLETE = 1001634, /// ProteomeDiscoverer:Xtract:Lowest Charge: Lowest charge state that is allowed for the deconvolution of multiply charged data. MS_ProteomeDiscoverer_Xtract_Lowest_Charge = 1001635, /// ProteomeDiscoverer:Xtract:Lowest MZ: Lowest mass-to-charge (mz) value for spectral peaks in the measured spectrum that are considered for Xtract. MS_ProteomeDiscoverer_Xtract_Lowest_MZ_OBSOLETE = 1001636, /// ProteomeDiscoverer:Xtract:Monoisotopic Mass Only: Determines whether the isotopic pattern, i.e. all isotopes of a mass are removed from the spectrum. MS_ProteomeDiscoverer_Xtract_Monoisotopic_Mass_Only = 1001637, /// ProteomeDiscoverer:Xtract:Overlapping Remainder: Fraction of the more abundant peak that an overlapping multiplet must exceed in order to be processed (deconvoluted). MS_ProteomeDiscoverer_Xtract_Overlapping_Remainder = 1001638, /// ProteomeDiscoverer:Xtract:Required Fitting Accuracy: Accuracy required for a pattern fit to be considered valid. MS_ProteomeDiscoverer_Xtract_Required_Fitting_Accuracy = 1001639, /// ProteomeDiscoverer:Xtract:Resolution At 400: Resolution at mass 400. MS_ProteomeDiscoverer_Xtract_Resolution_At_400 = 1001640, /// ProteomeDiscoverer:Lowest Charge State: Minimum charge state below which peptides are filtered out. MS_ProteomeDiscoverer_Lowest_Charge_State = 1001641, /// ProteomeDiscoverer:Highest Charge State: Maximum charge above which peptides are filtered out. MS_ProteomeDiscoverer_Highest_Charge_State = 1001642, /// ProteomeDiscoverer:Spectrum Score Filter:Let Pass Above Scores: Determines whether spectra with scores above the threshold score are retained rather than filtered out. MS_ProteomeDiscoverer_Spectrum_Score_Filter_Let_Pass_Above_Scores = 1001643, /// ProteomeDiscoverer:Dynamic Modification: Determine dynamic post-translational modifications (PTMs). MS_ProteomeDiscoverer_Dynamic_Modification = 1001644, /// ProteomeDiscoverer:Static Modification: Static Modification to all occurrences of a named amino acid. MS_ProteomeDiscoverer_Static_Modification = 1001645, /// ProteomeDiscoverer:Mascot:Decoy Search: Determines whether the Proteome Discoverer application searches an additional decoy database. MS_ProteomeDiscoverer_Mascot_Decoy_Search_OBSOLETE = 1001646, /// ProteomeDiscoverer:Mascot:Error tolerant Search: Determines whether to search error-tolerant. MS_ProteomeDiscoverer_Mascot_Error_tolerant_Search = 1001647, /// ProteomeDiscoverer:Mascot:Max MGF File Size: Maximum size of the .mgf (Mascot Generic Format) file in MByte. MS_ProteomeDiscoverer_Mascot_Max_MGF_File_Size = 1001648, /// ProteomeDiscoverer:Mascot:Mascot Server URL: URL (Uniform resource Locator) of the Mascot server. MS_ProteomeDiscoverer_Mascot_Mascot_Server_URL = 1001649, /// ProteomeDiscoverer:Mascot:Number of attempts to submit the search: Number of attempts to submit the Mascot search. MS_ProteomeDiscoverer_Mascot_Number_of_attempts_to_submit_the_search = 1001650, /// ProteomeDiscoverer:Mascot:X Static Modification: Number of attempts to submit the Mascot search. MS_ProteomeDiscoverer_Mascot_X_Static_Modification = 1001651, /// ProteomeDiscoverer:Mascot:User Name: Name of the user submitting the Mascot search. MS_ProteomeDiscoverer_Mascot_User_Name_OBSOLETE = 1001652, /// ProteomeDiscoverer:Mascot:Time interval between attempts to submit a search: Time interval between attempts to submit a search in seconds. MS_ProteomeDiscoverer_Mascot_Time_interval_between_attempts_to_submit_a_search = 1001653, /// ProteomeDiscoverer:Enzyme Name: Specifies the enzyme reagent used for protein digestion. MS_ProteomeDiscoverer_Enzyme_Name_OBSOLETE = 1001654, /// ProteomeDiscoverer:Fragment Mass Tolerance: Mass tolerance used for matching fragment peaks in Da or mmu. MS_ProteomeDiscoverer_Fragment_Mass_Tolerance_OBSOLETE = 1001655, /// Mascot:Instrument: Type of instrument used to acquire the data in the raw file. MS_Mascot_Instrument = 1001656, /// ProteomeDiscoverer:Maximum Missed Cleavage Sites: Maximum number of missed cleavage sites to consider during the digest. MS_ProteomeDiscoverer_Maximum_Missed_Cleavage_Sites = 1001657, /// ProteomeDiscoverer:Mascot:Peptide CutOff Score: Minimum score in the IonScore column that each peptide must exceed in order to be reported. MS_ProteomeDiscoverer_Mascot_Peptide_CutOff_Score = 1001658, /// ProteomeDiscoverer:Precursor Mass Tolerance: Mass window for which precursor ions are considered to be the same species. MS_ProteomeDiscoverer_Precursor_Mass_Tolerance_OBSOLETE = 1001659, /// ProteomeDiscoverer:Mascot:Protein CutOff Score: Minimum protein score in the IonScore column that each protein must exceed in order to be reported. MS_ProteomeDiscoverer_Mascot_Protein_CutOff_Score = 1001660, /// ProteomeDiscoverer:Protein Database: Database to use in the search (configured on the Mascot server). MS_ProteomeDiscoverer_Protein_Database_OBSOLETE = 1001661, /// ProteomeDiscoverer:Mascot:Protein Relevance Factor: Specifies a factor that is used in calculating a threshold that determines whether a protein appears in the results report. MS_ProteomeDiscoverer_Mascot_Protein_Relevance_Factor = 1001662, /// ProteomeDiscoverer:Target FDR Relaxed: Specifies the relaxed target false discovery rate (FDR, 0.0 - 1.0) for peptide hits with moderate confidence. MS_ProteomeDiscoverer_Target_FDR_Relaxed = 1001663, /// ProteomeDiscoverer:Target FDR Strict: Specifies the strict target false discovery rate (FDR, 0.0 - 1.0) for peptide hits with high confidence. MS_ProteomeDiscoverer_Target_FDR_Strict = 1001664, /// ProteomeDiscoverer:Mascot:Taxonomy: Limits searches to entries from a particular species or group of species. MS_ProteomeDiscoverer_Mascot_Taxonomy_OBSOLETE = 1001665, /// ProteomeDiscoverer:Use Average Precursor Mass: Use average mass for the precursor. MS_ProteomeDiscoverer_Use_Average_Precursor_Mass_OBSOLETE = 1001666, /// Mascot:use MudPIT scoring: Determines whether to use MudPIT or normal scoring. MS_Mascot_use_MudPIT_scoring_OBSOLETE = 1001667, /// ProteomeDiscoverer:Absolute XCorr Threshold: Minimum cross-correlation threshold that determines whether peptides in an .srf file are imported. MS_ProteomeDiscoverer_Absolute_XCorr_Threshold = 1001668, /// ProteomeDiscoverer:SEQUEST:Calculate Probability Score: Determines whether to calculate a probability score for every peptide match. MS_ProteomeDiscoverer_SEQUEST_Calculate_Probability_Score = 1001669, /// ProteomeDiscoverer:SEQUEST:CTerminal Modification: Dynamic C-terminal modification that is used during the search. MS_ProteomeDiscoverer_SEQUEST_CTerminal_Modification = 1001670, /// ProteomeDiscoverer:SEQUEST:Fragment Ion Cutoff Percentage: Percentage of the theoretical ions that must be found in order for a peptide to be scored and retained. MS_ProteomeDiscoverer_SEQUEST_Fragment_Ion_Cutoff_Percentage = 1001671, /// ProteomeDiscoverer:SEQUEST:Max Identical Modifications Per Peptide: Maximum number of identical modifications that a single peptide can have. MS_ProteomeDiscoverer_SEQUEST_Max_Identical_Modifications_Per_Peptide = 1001672, /// ProteomeDiscoverer:Max Modifications Per Peptide: Maximum number of different modifications that a peptide can have, e.g. because of steric hindrance. MS_ProteomeDiscoverer_Max_Modifications_Per_Peptide = 1001673, /// ProteomeDiscoverer:SEQUEST:Maximum Peptides Considered: Maximum number of peptides that are searched and scored per spectrum. MS_ProteomeDiscoverer_SEQUEST_Maximum_Peptides_Considered = 1001674, /// ProteomeDiscoverer:Maximum Peptides Output: Maximum number of peptide matches reported per spectrum. MS_ProteomeDiscoverer_Maximum_Peptides_Output = 1001675, /// ProteomeDiscoverer:Maximum Protein References Per Peptide: Maximum number of proteins that a single identified peptide can be associated with during protein assembly. MS_ProteomeDiscoverer_Maximum_Protein_References_Per_Peptide = 1001676, /// ProteomeDiscoverer:SEQUEST:NTerminal Modification: Dynamic N-terminal modification that is used during the search. MS_ProteomeDiscoverer_SEQUEST_NTerminal_Modification = 1001677, /// ProteomeDiscoverer:Peptide CTerminus: Static modification for the C terminal of the peptide used during the search. MS_ProteomeDiscoverer_Peptide_CTerminus = 1001678, /// ProteomeDiscoverer:Peptide NTerminus: Static modification for the N terminal of the peptide used during the search. MS_ProteomeDiscoverer_Peptide_NTerminus = 1001679, /// ProteomeDiscoverer:SEQUEST:Peptide Relevance Factor: Specifies a factor to apply to the protein score. MS_ProteomeDiscoverer_SEQUEST_Peptide_Relevance_Factor = 1001680, /// ProteomeDiscoverer:Protein Relevance Threshold: Specifies a peptide threshold that determines whether the protein that it is a part of is scored and retained in the report. MS_ProteomeDiscoverer_Protein_Relevance_Threshold = 1001681, /// ProteomeDiscoverer:Search Against Decoy Database: Determines whether the Proteome Discoverer application searches against a decoy database. MS_ProteomeDiscoverer_Search_Against_Decoy_Database_OBSOLETE = 1001682, /// ProteomeDiscoverer:SEQUEST:Use Average Fragment Masses: Use average masses for the fragments. MS_ProteomeDiscoverer_SEQUEST_Use_Average_Fragment_Masses = 1001683, /// ProteomeDiscoverer:Use Neutral Loss a Ions: Determines whether a ions with neutral loss are used for spectrum matching. MS_ProteomeDiscoverer_Use_Neutral_Loss_a_Ions = 1001684, /// ProteomeDiscoverer:Use Neutral Loss b Ions: Determines whether b ions with neutral loss are used for spectrum matching. MS_ProteomeDiscoverer_Use_Neutral_Loss_b_Ions = 1001685, /// ProteomeDiscoverer:Use Neutral Loss y Ions: Determines whether y ions with neutral loss are used for spectrum matching. MS_ProteomeDiscoverer_Use_Neutral_Loss_y_Ions = 1001686, /// ProteomeDiscoverer:Use Neutral Loss z Ions: Determines whether z ions with neutral loss are used for spectrum matching. MS_ProteomeDiscoverer_Use_Neutral_Loss_z_Ions = 1001687, /// ProteomeDiscoverer:SEQUEST:Weight of a Ions: Uses a ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_a_Ions = 1001688, /// ProteomeDiscoverer:SEQUEST:Weight of b Ions: Uses b ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_b_Ions = 1001689, /// ProteomeDiscoverer:SEQUEST:Weight of c Ions: Uses c ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_c_Ions = 1001690, /// ProteomeDiscoverer:SEQUEST:Weight of d Ions: Uses c ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_d_Ions = 1001691, /// ProteomeDiscoverer:SEQUEST:Weight of v Ions: Uses c ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_v_Ions = 1001692, /// ProteomeDiscoverer:SEQUEST:Weight of w Ions: Uses c ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_w_Ions = 1001693, /// ProteomeDiscoverer:SEQUEST:Weight of x Ions: Uses x ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_x_Ions = 1001694, /// ProteomeDiscoverer:SEQUEST:Weight of y Ions: Uses y ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_y_Ions = 1001695, /// ProteomeDiscoverer:SEQUEST:Weight of z Ions: Uses z ions for spectrum matching with this relative factor. MS_ProteomeDiscoverer_SEQUEST_Weight_of_z_Ions = 1001696, /// ProteomeDiscoverer:ZCore:Protein Score Cutoff: Sets a minimum protein score that each protein must exceed in order to be reported. MS_ProteomeDiscoverer_ZCore_Protein_Score_Cutoff = 1001697, /// ProteomeDiscoverer:Reporter Ions Quantizer:Integration Method: Specifies which peak to select if more than one peak is found inside the integration window. MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Method = 1001698, /// ProteomeDiscoverer:Reporter Ions Quantizer:Integration Window Tolerance: Specifies the mass-to-charge window that enables one to look for the reporter peaks. MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Integration_Window_Tolerance = 1001699, /// ProteomeDiscoverer:Reporter Ions Quantizer:Quantitation Method: Quantitation method for isobarically labeled quantitation. MS_ProteomeDiscoverer_Reporter_Ions_Quantizer_Quantitation_Method = 1001700, /// ProteomeDiscoverer:Spectrum Exporter:Export Format: Format of the exported spectra (dta, mgf or mzData). MS_ProteomeDiscoverer_Spectrum_Exporter_Export_Format_OBSOLETE = 1001701, /// ProteomeDiscoverer:Spectrum Exporter:File name: Name of the output file that contains the exported data. MS_ProteomeDiscoverer_Spectrum_Exporter_File_name = 1001702, /// ProteomeDiscoverer:Search Modifications Only For Identified Proteins: Influences the modifications search. MS_ProteomeDiscoverer_Search_Modifications_Only_For_Identified_Proteins = 1001703, /// ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge1: Standard high confidence XCorr parameter for charge = 1. MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge1 = 1001704, /// ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge2: Standard high confidence XCorr parameter for charge = 2. MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge2 = 1001705, /// ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge3: Standard high confidence XCorr parameter for charge = 3. MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge3 = 1001706, /// ProteomeDiscoverer:SEQUEST:Std High Confidence XCorr Charge4: Standard high confidence XCorr parameter for charge >= 4. MS_ProteomeDiscoverer_SEQUEST_Std_High_Confidence_XCorr_Charge4 = 1001707, /// ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge1: Standard medium confidence XCorr parameter for charge = 1. MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge1 = 1001708, /// ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge2: Standard medium confidence XCorr parameter for charge = 2. MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge2 = 1001709, /// ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge3: Standard medium confidence XCorr parameter for charge = 3. MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge3 = 1001710, /// ProteomeDiscoverer:SEQUEST:Std Medium Confidence XCorr Charge4: Standard medium confidence XCorr parameter for charge >= 4. MS_ProteomeDiscoverer_SEQUEST_Std_Medium_Confidence_XCorr_Charge4 = 1001711, /// ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge1: FT high confidence XCorr parameter for charge = 1. MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge1 = 1001712, /// ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge2: FT high confidence XCorr parameter for charge = 2. MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge2 = 1001713, /// ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge3: FT high confidence XCorr parameter for charge = 3. MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge3 = 1001714, /// ProteomeDiscoverer:SEQUEST:FT High Confidence XCorr Charge4: FT high confidence XCorr parameter for charge >= 4. MS_ProteomeDiscoverer_SEQUEST_FT_High_Confidence_XCorr_Charge4 = 1001715, /// ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge1: FT medium confidence XCorr parameter for charge = 1. MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge1 = 1001716, /// ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge2: FT medium confidence XCorr parameter for charge = 2. MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge2 = 1001717, /// ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge3: FT medium confidence XCorr parameter for charge = 3. MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge3 = 1001718, /// ProteomeDiscoverer:SEQUEST:FT Medium Confidence XCorr Charge4: FT medium confidence XCorr parameter for charge >= 4. MS_ProteomeDiscoverer_SEQUEST_FT_Medium_Confidence_XCorr_Charge4 = 1001719, /// ProteomeDiscoverer:1. Dynamic Modification: ProteomeDiscoverer's 1st dynamic post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_1__Dynamic_Modification_OBSOLETE = 1001720, /// ProteomeDiscoverer:2. Dynamic Modification: ProteomeDiscoverer's 2nd dynamic post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_2__Dynamic_Modification_OBSOLETE = 1001721, /// ProteomeDiscoverer:3. Dynamic Modification: ProteomeDiscoverer's 3rd dynamic post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_3__Dynamic_Modification_OBSOLETE = 1001722, /// ProteomeDiscoverer:4. Dynamic Modification: ProteomeDiscoverer's 4th dynamic post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_4__Dynamic_Modification_OBSOLETE = 1001723, /// ProteomeDiscoverer:Static Modification for X: Static Modification for X. MS_ProteomeDiscoverer_Static_Modification_for_X = 1001724, /// ProteomeDiscoverer:Initial minimal peptide probability: Minimal initial peptide probability to contribute to analysis. MS_ProteomeDiscoverer_Initial_minimal_peptide_probability = 1001725, /// ProteomeDiscoverer:Minimal peptide probability: Minimum adjusted peptide probability contributing to protein probability. MS_ProteomeDiscoverer_Minimal_peptide_probability = 1001726, /// ProteomeDiscoverer:Minimal peptide weight: Minimum peptide weight contributing to protein probability. MS_ProteomeDiscoverer_Minimal_peptide_weight = 1001727, /// ProteomeDiscoverer:Number of input1 spectra: Number of spectra from 1+ precursor ions. MS_ProteomeDiscoverer_Number_of_input1_spectra = 1001728, /// ProteomeDiscoverer:Number of input2 spectra: Number of spectra from 2+ precursor ions. MS_ProteomeDiscoverer_Number_of_input2_spectra = 1001729, /// ProteomeDiscoverer:Number of input3 spectra: Number of spectra from 3+ precursor ions. MS_ProteomeDiscoverer_Number_of_input3_spectra = 1001730, /// ProteomeDiscoverer:Number of input4 spectra: Number of spectra from 4+ precursor ions. MS_ProteomeDiscoverer_Number_of_input4_spectra = 1001731, /// ProteomeDiscoverer:Number of input5 spectra: Number of spectra from 5+ precursor ions. MS_ProteomeDiscoverer_Number_of_input5_spectra = 1001732, /// ProteomeDiscoverer:Number of predicted correct proteins: Total number of predicted correct protein ids (sum of probabilities). MS_ProteomeDiscoverer_Number_of_predicted_correct_proteins = 1001733, /// ProteomeDiscoverer:Organism: Sample organism (used for annotation purposes). MS_ProteomeDiscoverer_Organism_OBSOLETE = 1001734, /// ProteomeDiscoverer:Reference Database: Full path database name. MS_ProteomeDiscoverer_Reference_Database_OBSOLETE = 1001735, /// ProteomeDiscoverer:Residue substitution list: Residues considered equivalent when comparing peptides. MS_ProteomeDiscoverer_Residue_substitution_list = 1001736, /// ProteomeDiscoverer:Source file extension: File type (if not pepXML). MS_ProteomeDiscoverer_Source_file_extension_OBSOLETE = 1001737, /// ProteomeDiscoverer:Source Files: Input pepXML files. MS_ProteomeDiscoverer_Source_Files_OBSOLETE = 1001738, /// ProteomeDiscoverer:Source Files old: Input pepXML files (old). MS_ProteomeDiscoverer_Source_Files_old_OBSOLETE = 1001739, /// ProteomeDiscoverer:WinCyg reference database: Windows full path for database. MS_ProteomeDiscoverer_WinCyg_reference_database = 1001740, /// ProteomeDiscoverer:WinCyg source files: Windows pepXML file names. MS_ProteomeDiscoverer_WinCyg_source_files = 1001741, /// LTQ Orbitrap Velos: Finnigan LTQ Orbitrap Velos MS. MS_LTQ_Orbitrap_Velos = 1001742, /// ProteomeDiscoverer:Mascot:Weight of A Ions: Determines if to use A ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_A_Ions = 1001743, /// ProteomeDiscoverer:Mascot:Weight of B Ions: Determines if to use B ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_B_Ions = 1001744, /// ProteomeDiscoverer:Mascot:Weight of C Ions: Determines if to use C ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_C_Ions = 1001745, /// ProteomeDiscoverer:Mascot:Weight of D Ions: Determines if to use D ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_D_Ions = 1001746, /// ProteomeDiscoverer:Mascot:Weight of V Ions: Determines if to use V ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_V_Ions = 1001747, /// ProteomeDiscoverer:Mascot:Weight of W Ions: Determines if to use W ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_W_Ions = 1001748, /// ProteomeDiscoverer:Mascot:Weight of X Ions: Determines if to use X ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_X_Ions = 1001749, /// ProteomeDiscoverer:Mascot:Weight of Y Ions: Determines if to use Y ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_Y_Ions = 1001750, /// ProteomeDiscoverer:Mascot:Weight of Z Ions: Determines if to use z ions for spectrum matching. MS_ProteomeDiscoverer_Mascot_Weight_of_Z_Ions = 1001751, /// ProteomeDiscoverer:Spectrum Selector:Use New Precursor Reevaluation: Determines if to use precursor reevaluation. MS_ProteomeDiscoverer_Spectrum_Selector_Use_New_Precursor_Reevaluation = 1001752, /// ProteomeDiscoverer:Spectrum Selector:SN Threshold FTonly: Signal-to-Noise ratio below which peaks are removed (in FT mode only). MS_ProteomeDiscoverer_Spectrum_Selector_SN_Threshold_FTonly = 1001753, /// ProteomeDiscoverer:Mascot:Please Do not Touch this: Unknown Mascot parameter which ProteomeDiscoverer uses for mascot searches. MS_ProteomeDiscoverer_Mascot_Please_Do_not_Touch_this = 1001754, /// contact phone number: Phone number of the contact person or organization. MS_contact_phone_number = 1001755, /// contact fax number: Fax number for the contact person or organization. MS_contact_fax_number = 1001756, /// contact toll-free phone number: Toll-free phone number of the contact person or organization. MS_contact_toll_free_phone_number = 1001757, /// Mascot:SigThresholdType: Significance threshold type used in Mascot reporting (either 'identity' or 'homology'). MS_Mascot_SigThresholdType = 1001758, /// Mascot:ProteinGrouping: Strategy used by Mascot to group proteins with same peptide matches (one of 'none', 'Occam's razor' or 'family clustering'). MS_Mascot_ProteinGrouping = 1001759, /// Percolator:features: List of Percolator features that were used in processing the peptide matches. Typical Percolator features are 'retentionTime', 'dM', 'mScore', 'lgDScore', 'mrCalc', 'charge' and 'dMppm'. MS_Percolator_features = 1001760, /// ACQUITY UPLC: Waters LC-system ACQUITY UPLC. MS_ACQUITY_UPLC = 1001761, /// ACQUITY UPLC H-Class: Waters LC-system ACQUITY UPLC H-Class. MS_ACQUITY_UPLC_H_Class = 1001762, /// ACQUITY UPLC H-Class Bio: Waters LC-system ACQUITY UPLC H-Class Bio. MS_ACQUITY_UPLC_H_Class_Bio = 1001763, /// ACQUITY UPLC I-Class: Waters LC-system ACQUITY UPLC I-Class. MS_ACQUITY_UPLC_I_Class = 1001764, /// ACQUITY UPLC Systems with 2D Technology: Waters LC-system ACQUITY UPLC Systems with 2D Technology. MS_ACQUITY_UPLC_Systems_with_2D_Technology = 1001765, /// nanoACQUITY UPLC: Waters LC-system nanoACQUITY UPLC. MS_nanoACQUITY_UPLC = 1001766, /// nanoACQUITY UPLC System with 1D Technology: Waters LC-system nanoACQUITY UPLC System with 1D Technology. MS_nanoACQUITY_UPLC_System_with_1D_Technology = 1001767, /// nanoACQUITY UPLC with HDX Technology: Waters LC-system nanoACQUITY UPLC with HDX Technology. MS_nanoACQUITY_UPLC_with_HDX_Technology = 1001768, /// TRIZAIC UPLC nanoTile: Waters LC-system TRIZAIC UPLC nanoTile. MS_TRIZAIC_UPLC_nanoTile = 1001769, /// GCT Premier: Waters oa-ToF based GCT Premier. MS_GCT_Premier = 1001770, /// MALDI Synapt G2 HDMS: Waters oa-ToF based MALDI Synapt G2 HDMS. MS_MALDI_Synapt_G2_HDMS = 1001771, /// MALDI Synapt G2 MS: Waters oa-ToF based MALDI Synapt G2 MS. MS_MALDI_Synapt_G2_MS = 1001772, /// MALDI Synapt G2-S HDMS: Waters oa-ToF based MALDI Synapt G2 MS. MS_MALDI_Synapt_G2_S_HDMS = 1001773, /// MALDI Synapt G2-S MS: Waters oa-ToF based MALDI Synapt G2-S MS. MS_MALDI_Synapt_G2_S_MS = 1001774, /// MALDI Synapt HDMS: Waters oa-ToF based MALDI Synapt HDMS. MS_MALDI_Synapt_HDMS = 1001775, /// MALDI Synapt MS: Waters oa-ToF based MALDI Synapt MS. MS_MALDI_Synapt_MS = 1001776, /// Synapt G2 HDMS: Waters oa-ToF based Synapt G2 HDMS. MS_Synapt_G2_HDMS = 1001777, /// Synapt G2 MS: Waters oa-ToF based Synapt G2 MS. MS_Synapt_G2_MS = 1001778, /// Synapt G2-S HDMS: Waters oa-ToF based Synapt G2-S HDMS. MS_Synapt_G2_S_HDMS = 1001779, /// Synapt G2-S MS: Waters oa-ToF based Synapt G2-S MS. MS_Synapt_G2_S_MS = 1001780, /// Synapt HDMS: Waters oa-ToF based Synapt HDMS. MS_Synapt_HDMS = 1001781, /// Synapt MS: Waters oa-ToF based Synapt MS. MS_Synapt_MS = 1001782, /// Xevo G2 Q-Tof: Waters oa-ToF based Xevo G2 Q-Tof. MS_Xevo_G2_Q_Tof = 1001783, /// Xevo G2 Tof: Waters oa-ToF based Xevo G2 Tof. MS_Xevo_G2_Tof = 1001784, /// Xevo Q-Tof: Waters oa-ToF based Xevo Q-Tof. MS_Xevo_Q_Tof = 1001785, /// 3100: Waters quadrupole based 3100. MS_3100 = 1001786, /// Acquity SQD: Waters quadrupole based Acquity SQD. MS_Acquity_SQD = 1001787, /// Acquity TQD: Waters quadrupole based Acquity TQD. MS_Acquity_TQD = 1001788, /// Quattro micro GC: Waters (triple) quadrupole based Quattro micro GC. MS_Quattro_micro_GC = 1001789, /// Xevo TQ MS: Waters quadrupole based Xevo TQ MS. MS_Xevo_TQ_MS = 1001790, /// Xevo TQD: Waters quadrupole based Xevo TQD. MS_Xevo_TQD = 1001791, /// Xevo TQ-S: Waters quadrupole based Xevo TQ-S. MS_Xevo_TQ_S = 1001792, /// Mascot:PreferredTaxonomy: NCBI TaxID taxonomy ID to prefer when two or more proteins match the same set of peptides or when protein entry in database represents multiple sequences. MS_Mascot_PreferredTaxonomy = 1001793, /// Empower: Waters Empower software for liquid chromatography and mass spectrometry acquisition. MS_Empower = 1001795, /// UNIFY: Waters UNIFY software for liquid chromatography and mass spectrometry acquisition. MS_UNIFY = 1001796, /// travelling wave ion mobility mass spectrometer: An ion mobility mass spectrometry technique based on the superimposition of travelling voltage waves on a radially-confining RF voltage in a gas-filled, stacked-ring ion guide. MS_travelling_wave_ion_mobility_mass_spectrometer_OBSOLETE = 1001797, /// TWIMS (travelling wave ion mobility mass spectrometer): An ion mobility mass spectrometry technique based on the superimposition of travelling voltage waves on a radially-confining RF voltage in a gas-filled, stacked-ring ion guide. MS_TWIMS_OBSOLETE = MS_travelling_wave_ion_mobility_mass_spectrometer_OBSOLETE, /// LECO software: LECO software for data acquisition and analysis. MS_LECO_software = 1001798, /// ChromaTOF software: Software for acquisition, processing and analysis of data for LECO instruments. MS_ChromaTOF_software = 1001799, /// LECO instrument model: LECO instrument model. MS_LECO_instrument_model = 1001800, /// Pegasus HRT: LECO high resolution time-of-flight GC mass spectrometer. MS_Pegasus_HRT = 1001801, /// Citius HRT: LECO high resolution time-of-flight LC mass spectrometer. MS_Citius_HRT = 1001802, /// Pegasus: LECO GC time-of-flight mass spectrometer. MS_Pegasus = 1001803, /// TruTOF: LECO bench-top GC time-of-flight mass spectrometer. MS_TruTOF = 1001804, /// quantification datatype: The data type of the value reported in a QuantLayer. MS_quantification_datatype = 1001805, /// quantification object attribute: Attributes describing the details of an object relevant for reporting quantification workflows or values. MS_quantification_object_attribute = 1001806, /// study variable attribute: Attribute describing a study variable. MS_study_variable_attribute = 1001807, /// technical replicate: The study variable is 'technical replicate'. The string value denotes the category of technical replicate, e.g. 'run generated from same sample'. MS_technical_replicate = 1001808, /// biological replicate: The study variable is 'biological replicate'. This means, the run was generated from another individual or sample. MS_biological_replicate = 1001809, /// experimental condition 'case': The experimental condition is 'case' in contrast to 'control'. MS_experimental_condition__case_ = 1001810, /// experimental condition 'control': The experimental condition is 'control' in contrast to 'case'. MS_experimental_condition__control_ = 1001811, /// experimental condition 'disease': The experimental condition is 'disease' in contrast to 'healthy'. MS_experimental_condition__disease_ = 1001812, /// experimental condition 'healthy': The experimental condition is 'healthy' in contrast to 'disease'. MS_experimental_condition__healthy_ = 1001813, /// generic experimental condition: The experimental condition is given in the value of this term. MS_generic_experimental_condition = 1001814, /// time series, time point X: The experimental design followed a time series design. The time point of this run is given in the value of this term. MS_time_series__time_point_X = 1001815, /// dilution series, concentration X: The experimental design followed a dilution series design. The concentration of this run is given in the value of this term. MS_dilution_series__concentration_X = 1001816, /// raw file attribute: Attribute describing a raw file. MS_raw_file_attribute = 1001817, /// one sample run: The raw file contains the run of one sample (e.g. spectral counting, LC-MS label-free). MS_one_sample_run = 1001818, /// two sample run: The raw file contains the run of two samples (e.g. SILAC, metabolic labelling). MS_two_sample_run = 1001819, /// three sample run: The raw file contains the run of three samples (e.g. 3-plex SILAC). MS_three_sample_run = 1001820, /// four sample run: The raw file contains the run of four samples (e.g. 4-plex iTraq). MS_four_sample_run = 1001821, /// eight sample run: The raw file contains the run of eight samples (e.g. 8-plex iTraq). MS_eight_sample_run = 1001822, /// raw files group attribute: Attribute describing, how raw files build a raw file group. MS_raw_files_group_attribute = 1001823, /// merge of runs of 1D gel bands: Attribute describing, how raw files build a raw file group. MS_merge_of_runs_of_1D_gel_bands = 1001824, /// feature list attribute: Attribute describing a feature list. MS_feature_list_attribute = 1001825, /// mass trace reporting: rectangles: The mass trace of the features of this feature list specifies rectangles. Each mass trace has the syntax (RT_start,MZ_start,RT_end,MZ_end), i.e. opposite corners are given. MS_mass_trace_reporting__rectangles = 1001826, /// mass trace reporting: polygons: The mass trace of the features of this feature list specifies polygons. Each mass trace has the syntax (RT_1, MZ_1, RT_2, MZ_2, ... , RT_i, MZ_i, ... , RT_n, MZ_n), where the line (RT_n, MZ_n)->(RT_1, MZ_1) is implicit. MS_mass_trace_reporting__polygons = 1001827, /// feature attribute: Attribute describing a feature. MS_feature_attribute = 1001828, /// SRM transition ID: Identifier for an SRM transition in an external document describing additional information about the transition. MS_SRM_transition_ID = 1001829, /// Progenesis LC-MS: Software from Nonlinear Dynamics for LC-MS label-free workflow. MS_Progenesis_LC_MS = 1001830, /// SILACAnalyzer: Software for SILAC workflow. MS_SILACAnalyzer = 1001831, /// quantitation software comment or customizations: Quantitation software comment or any customizations to the default setup of the software. MS_quantitation_software_comment_or_customizations = 1001832, /// quantitation analysis summary: The overall workflow of this quantitation report. MS_quantitation_analysis_summary = 1001833, /// LC-MS label-free quantitation analysis: LC-MS label-free workflow (RT m/z map). MS_LC_MS_label_free_quantitation_analysis = 1001834, /// SILAC quantitation analysis: SILAC workflow (heavy, light, and sometimes medium peak). MS_SILAC_quantitation_analysis = 1001835, /// spectral counting quantitation analysis: Spectral counting workflow (number of identified MS2 spectra as approximation of peptide / protein quant). MS_spectral_counting_quantitation_analysis = 1001836, /// iTRAQ quantitation analysis: Quantification analysis using the SCIEX amine-reactive isobaric tags for relative and absolute quantification (iTRAQ) labelling workflow, wherein 2-8 reporter ions are measured in MS2 spectra near in the 114-121 m/z range. MS_iTRAQ_quantitation_analysis = 1001837, /// SRM quantitation analysis: Selected Reaction Monitoring workflow (XIC quantitation of precursor / fragment mass pair). MS_SRM_quantitation_analysis = 1001838, /// metabolic labeling 14N / 15N quantitation analysis: Metabolic labeling workflow (heavy and light versions of peptides, depending on number of nitrogens). MS_metabolic_labeling_14N___15N_quantitation_analysis = 1001839, /// LC-MS feature intensity: Maximum peak intensity of the LC-MS feature. MS_LC_MS_feature_intensity = 1001840, /// LC-MS feature volume: Real (intensity times area) volume of the LC-MS feature. MS_LC_MS_feature_volume = 1001841, /// sequence-level spectral count: The number of MS2 spectra identified for a raw peptide sequence without PTMs and charge state in spectral counting. MS_sequence_level_spectral_count = 1001842, /// MS1 feature maximum intensity: Maximum intensity of MS1 feature. MS_MS1_feature_maximum_intensity = 1001843, /// MS1 feature area: Area of MS1 feature. MS_MS1_feature_area = 1001844, /// peak area: Area of MS1 peak (e.g. SILAC, 15N). MS_peak_area_OBSOLETE = 1001845, /// isotopic pattern area: Area of all peaks belonging to the isotopic pattern of light or heavy peak (e.g. 15N). MS_isotopic_pattern_area = 1001846, /// reporter ion intensity: Intensity of MS2 reporter ion (e.g. iTraq). MS_reporter_ion_intensity = 1001847, /// simple ratio of two values: Simple ratio of two values (enumerator and denominator). MS_simple_ratio_of_two_values = 1001848, /// sum of MatchedFeature values: Peptide quantification value calculated as sum of MatchedFeature quantification values. MS_sum_of_MatchedFeature_values_OBSOLETE = 1001849, /// normalized peptide value: Normalized peptide value. MS_normalized_peptide_value = 1001850, /// protein value: sum of peptide values: Protein quantification value calculated as sum of peptide values. MS_protein_value__sum_of_peptide_values = 1001851, /// normalized protein value: Normalized protein value. MS_normalized_protein_value = 1001852, /// max fold change: Global datatype: Maximum of all pair-wise fold changes of group means (e.g. Progenesis). MS_max_fold_change = 1001853, /// ANOVA p-value: Global datatype: p-value of ANOVA of group means (e.g. Progenesis). MS_ANOVA_p_value = 1001854, /// t-test p-value: P-value of t-Test of two groups. MS_t_test_p_value = 1001855, /// reporter ion raw value: Intensity (or area) of MS2 reporter ion (e.g. iTraq). MS_reporter_ion_raw_value = 1001856, /// reporter ion normalized value: Normalized value of MS2 reporter ion (e.g. iTraq). MS_reporter_ion_normalized_value = 1001857, /// XIC area: Area of the extracted ion chromatogram (e.g. of a transition in SRM). MS_XIC_area = 1001858, /// normalized XIC area: Normalized area of the extracted ion chromatogram (e.g. of a transition in SRM). MS_normalized_XIC_area = 1001859, /// protein value: mean of peptide ratios: Protein quantification value calculated as mean of peptide ratios. MS_protein_value__mean_of_peptide_ratios = 1001860, /// quantification data processing: Terms used to describe types of quantification data processing. MS_quantification_data_processing = 1001861, /// normalization to mean of sum of all proteins: Normalization of protein values to the mean of the sum of all protein PSM counts (e.g. spectral counting). MS_normalization_to_mean_of_sum_of_all_proteins = 1001862, /// quantile normalization, proteins: Normalization of protein values to approach the same distribution. MS_quantile_normalization__proteins = 1001863, /// quantile normalization, peptides: Normalization of peptide values to approach the same distribution. MS_quantile_normalization__peptides = 1001864, /// Progenesis automatic alignment: Automatic RT alignment of Progenesis software. MS_Progenesis_automatic_alignment = 1001865, /// Progenesis manual alignment: RT alignment of Progenesis software using automatic and manual vectors. MS_Progenesis_manual_alignment = 1001866, /// Progenesis normalization: Normalization as performed by Progenesis LC-MS. MS_Progenesis_normalization = 1001867, /// distinct peptide-level q-value: Estimation of the q-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs, possibly with different mass modifications, mapping to the same sequence have been collapsed to one entry). MS_distinct_peptide_level_q_value = 1001868, /// protein-level q-value: Estimation of the q-value for proteins. MS_protein_level_q_value = 1001869, /// peptide sequence-level p-value: Estimation of the p-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_p_value = 1001870, /// protein-level p-value: Estimation of the p-value for proteins. MS_protein_level_p_value = 1001871, /// peptide sequence-level e-value: Estimation of the e-value for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_e_value = 1001872, /// protein-level e-value: Estimation of the e-value for proteins. MS_protein_level_e_value = 1001873, /// FDRScore: A smoothing of the distribution of q-values calculated for PSMs from individual search engines, such that ordering of result quality is maintained and all FDRScore values are guaranteed to have a value > 0. MS_FDRScore_OBSOLETE = 1001874, /// modification motif: The regular expression describing the sequence motif for a modification. MS_modification_motif = 1001875, /// modification probability: The a priori probability of a modification. MS_modification_probability = 1001876, /// ChromaTOF HRT software: Software for acquisition, processing and analysis of data for LECO instruments. MS_ChromaTOF_HRT_software = 1001877, /// MALDI Solutions Microbial Identification: Shimadzu Biotech software for data acquisition, processing, and analysis. MS_MALDI_Solutions_Microbial_Identification = 1001878, /// offset voltage: The potential difference between two adjacent interface voltages affecting in-source collision induced dissociation. MS_offset_voltage = 1001879, /// in-source collision-induced dissociation: The dissociation of an ion as a result of collisional excitation during ion transfer from an atmospheric pressure ion source and the mass spectrometer vacuum. MS_in_source_collision_induced_dissociation = 1001880, /// mz5 format: mz5 file format, modelled after mzML. MS_mz5_format = 1001881, /// transition validation attribute: Attributes of the quality of a transition that affect its selection as appropriate. MS_transition_validation_attribute = 1001882, /// coefficient of variation: Variation of a set of signal measurements calculated as the standard deviation relative to the mean. MS_coefficient_of_variation = 1001883, /// signal-to-noise ratio: Unitless number providing the ratio of the total measured intensity of a signal relative to the estimated noise level for that signal. MS_signal_to_noise_ratio = 1001884, /// command-line parameters: Parameters string passed to a command-line interface software application, omitting the executable name. MS_command_line_parameters = 1001885, /// SQID: Software for data analysis of peptides and proteins. MS_SQID = 1001886, /// SQID:score: The SQID result 'Score'. MS_SQID_score = 1001887, /// SQID:deltaScore: The SQID result 'deltaScore'. MS_SQID_deltaScore = 1001888, /// SQID:protein score: The SQID result 'protein score'. MS_SQID_protein_score = 1001889, /// Progenesis:protein normalised abundance: The data type normalised abundance for proteins produced by Progenesis LC-MS. MS_Progenesis_protein_normalised_abundance = 1001890, /// Progenesis:peptide normalised abundance: The data type normalised abundance for peptides produced by Progenesis LC-MS. MS_Progenesis_peptide_normalised_abundance = 1001891, /// Progenesis:protein raw abundance: The data type raw abundance for proteins produced by Progenesis LC-MS. MS_Progenesis_protein_raw_abundance = 1001892, /// Progenesis:peptide raw abundance: The data type raw abundance for peptide produced by Progenesis LC-MS. MS_Progenesis_peptide_raw_abundance = 1001893, /// Progenesis:confidence score: The data type confidence score produced by Progenesis LC-MS. MS_Progenesis_confidence_score = 1001894, /// Progenesis:peptide count: The data type peptide count produced by Progenesis LC-MS. MS_Progenesis_peptide_count = 1001895, /// Progenesis:feature intensity: The data type feature intensity produced by Progenesis LC-MS. MS_Progenesis_feature_intensity = 1001896, /// MaxQuant:peptide counts (unique): The data type peptide counts (unique) produced by MaxQuant. MS_MaxQuant_peptide_counts__unique_ = 1001897, /// MaxQuant:peptide counts (all): The data type peptide counts (all) produced by MaxQuant. MS_MaxQuant_peptide_counts__all_ = 1001898, /// MaxQuant:peptide counts (razor+unique): The data type peptide counts (razor+unique) produced by MaxQuant. MS_MaxQuant_peptide_counts__razor_unique_ = 1001899, /// MaxQuant:sequence length: The data type sequence length produced by MaxQuant. MS_MaxQuant_sequence_length = 1001900, /// MaxQuant:PEP: The data type PEP (posterior error probability) produced by MaxQuant. MS_MaxQuant_PEP = 1001901, /// MaxQuant:LFQ intensity: The data type LFQ intensity produced by MaxQuant. MS_MaxQuant_LFQ_intensity = 1001902, /// MaxQuant:feature intensity: The data type feature intensity produced by MaxQuant. MS_MaxQuant_feature_intensity = 1001903, /// MaxQuant:MS/MS count: The data type MS2 count produced by MaxQuant. MS_MaxQuant_MS_MS_count = 1001904, /// emPAI value: The emPAI value of protein abundance, produced from the emPAI algorithm. MS_emPAI_value = 1001905, /// APEX value: The APEX value of protein abundance, produced from the APEX software. MS_APEX_value = 1001906, /// retention time window width: The full width of a retention time window for a chromatographic peak. MS_retention_time_window_width = 1001907, /// ISQ: Thermo Scientific ISQ single quadrupole MS with the ExtractraBrite source. MS_ISQ = 1001908, /// Velos Plus: Thermo Scientific second generation Velos. MS_Velos_Plus = 1001909, /// LTQ Orbitrap Elite: Thermo Scientific LTQ Orbitrap Elite, often just referred to as the Orbitrap Elite. MS_LTQ_Orbitrap_Elite = 1001910, /// Q Exactive: Thermo Scientific Q Exactive. MS_Q_Exactive = 1001911, /// PinPoint: Thermo Scientific PinPoint SRM analysis software. MS_PinPoint = 1001912, /// S-lens voltage: Potential difference setting of the Thermo Scientific S-lens stacked-ring ion guide in volts. MS_S_lens_voltage = 1001913, /// pymzML: Python module to interface mzML Data. MS_pymzML = 1001914, /// leukocyte elastase: Enzyme leukocyte elastase (EC 3.4.21.37). MS_leukocyte_elastase = 1001915, /// proline endopeptidase: Enzyme proline endopeptidase (EC 3.4.21.26). MS_proline_endopeptidase = 1001916, /// glutamyl endopeptidase: Enzyme glutamyl endopeptidase (EC 3.4.21.19). MS_glutamyl_endopeptidase = 1001917, /// staphylococcal protease (glutamyl endopeptidase): Enzyme glutamyl endopeptidase (EC 3.4.21.19). MS_staphylococcal_protease = MS_glutamyl_endopeptidase, /// Glu-C (glutamyl endopeptidase): Enzyme glutamyl endopeptidase (EC 3.4.21.19). MS_Glu_C = MS_glutamyl_endopeptidase, /// 2-iodobenzoate: Chemical iodobenzoate. Cleaves after W. MS_2_iodobenzoate = 1001918, /// ProteomeXchange accession number: Main identifier of a ProteomeXchange dataset. MS_ProteomeXchange_accession_number = 1001919, /// ProteomeXchange accession number version number: Version number of a ProteomeXchange accession number. MS_ProteomeXchange_accession_number_version_number = 1001921, /// Digital Object Identifier (DOI): DOI unique identifier of a publication. MS_Digital_Object_Identifier__DOI_ = 1001922, /// doi (Digital Object Identifier (DOI)): DOI unique identifier of a publication. MS_doi = MS_Digital_Object_Identifier__DOI_, /// external reference keyword: Free text attribute that can enrich the information about an entity. MS_external_reference_keyword = 1001923, /// journal article keyword: Keyword present in a scientific publication. MS_journal_article_keyword = 1001924, /// submitter keyword: Keyword assigned by the data submitter. MS_submitter_keyword = 1001925, /// curator keyword: Keyword assigned by a data curator. MS_curator_keyword = 1001926, /// Tranche file hash: Hash assigned by the Tranche resource to an individual file. MS_Tranche_file_hash = 1001927, /// Tranche project hash: Hash assigned by the Tranche resource to a whole project. MS_Tranche_project_hash = 1001928, /// PRIDE experiment URI: URI that allows the access to one experiment in the PRIDE database. MS_PRIDE_experiment_URI = 1001929, /// PRIDE project URI: URI that allows the access to one project in the PRIDE database. MS_PRIDE_project_URI = 1001930, /// source interface: The source interface. MS_source_interface = 1001931, /// source interface model: The source interface model. MS_source_interface_model = 1001932, /// source sprayer: The source sprayer. MS_source_sprayer = 1001933, /// source sprayer type: The source sprayer type. MS_source_sprayer_type = 1001934, /// source sprayer manufacturer: The source sprayer manufacturer. MS_source_sprayer_manufacturer = 1001935, /// source sprayer model: The source sprayer model. MS_source_sprayer_model = 1001936, /// sample plate: Plate where the sample solution is spotted in a MALDI or similar instrument. MS_sample_plate = 1001937, /// sample plate type: The sample plate type. MS_sample_plate_type = 1001938, /// stainless steel plate: Stainless steel plate. MS_stainless_steel_plate = 1001939, /// coated glass plate: Coated glass plate. MS_coated_glass_plate = 1001940, /// electrospray supply type: Whether the sprayer is fed or is loaded with sample once. MS_electrospray_supply_type = 1001941, /// static supply electrospray: The sprayer is loaded with sample once. MS_static_supply_electrospray = 1001942, /// fed supply electrospray: The sprayer is continuously fed with sample. MS_fed_supply_electrospray = 1001943, /// Collision cell exit potential: Potential difference between Q2 and Q3 in a triple quadrupole instrument in volts. MS_Collision_cell_exit_potential = 1001944, /// CXP (Collision cell exit potential): Potential difference between Q2 and Q3 in a triple quadrupole instrument in volts. MS_CXP = MS_Collision_cell_exit_potential, /// Pegasus 4D: LECO nominal mass resolution time-of-flight GCxGC mass spectrometer. MS_Pegasus_4D = 1001945, /// PEAKS Studio: PEAKS Studio software for data analysis. MS_PEAKS_Studio = 1001946, /// PEAKS Online: PEAKS Online software for high throughput data analysis. MS_PEAKS_Online = 1001947, /// PEAKS Node: PEAKS Node software for high throughput data analysis. MS_PEAKS_Node = 1001948, /// BSI software: Bioinformatics Solutions Inc. Software for data processing and analysis. MS_BSI_software = 1001949, /// PEAKS:peptideScore: The PEAKS peptide '-10lgP Score'. MS_PEAKS_peptideScore = 1001950, /// PEAKS:proteinScore: The PEAKS protein '-10lgP Score'. MS_PEAKS_proteinScore = 1001951, /// ZCore:probScore: The ZCore probability score. MS_ZCore_probScore = 1001952, /// source interface manufacturer: The source interface manufacturer. MS_source_interface_manufacturer = 1001953, /// acquisition parameter: Parameters used in the mass spectrometry acquisition. MS_acquisition_parameter = 1001954, /// no cleavage: No cleavage. MS_no_cleavage = 1001955, /// unspecific cleavage: Unspecific cleavage. MS_unspecific_cleavage = 1001956, /// (?<=[ALIV])(?!P): Regular expression for leukocyte elastase. MS______ALIV_____P_ = 1001957, /// (?<=[HKR]P)(?!P): Regular expression for proline endopeptidase. MS______HKR_P____P_ = 1001958, /// (?<=[^E]E): Regular expression for glutamyl endopeptidase. MS_______E_E_ = 1001959, /// (?<=W): Regular expression for 2-iodobenzoate. MS_____W_ = 1001960, /// peptide spectrum match scoring algorithm: Algorithm used to score the match between a spectrum and a peptide ion. MS_peptide_spectrum_match_scoring_algorithm = 1001961, /// Mascot:C13 counts: C13 peaks to use in peak detection. MS_Mascot_C13_counts = 1001962, /// ProteinExtractor:Weighting: Weighting factor for protein list compilation by ProteinExtractor. MS_ProteinExtractor_Weighting = 1001963, /// ProteinScape:second round Mascot: Flag indicating a second round search with Mascot. MS_ProteinScape_second_round_Mascot = 1001964, /// ProteinScape:second round Phenyx: Flag indicating a second round search with Phenyx. MS_ProteinScape_second_round_Phenyx = 1001965, /// product ion mobility: The mobility of an MS2 product ion, as measured by ion mobility mass spectrometry. MS_product_ion_mobility = 1001966, /// product ion drift time: The ion drift time of an MS2 product ion. MS_product_ion_drift_time_OBSOLETE = 1001967, /// PTM localization PSM-level statistic: Statistic to convey the confidence of the localization of an amino acid modification on a peptide sequence at the PSM-level. MS_PTM_localization_PSM_level_statistic = 1001968, /// phosphoRS score: phosphoRS score for PTM site location at the PSM-level. MS_phosphoRS_score = 1001969, /// phosphoRS sequence probability: Probability that the respective isoform is correct. MS_phosphoRS_sequence_probability = 1001970, /// phosphoRS site probability: Estimate of the probability that the respective site is truly phosphorylated. MS_phosphoRS_site_probability = 1001971, /// PTM scoring algorithm version: Version of the post-translational modification scoring algorithm. MS_PTM_scoring_algorithm_version = 1001972, /// DeBunker: DeBunker software. MS_DeBunker = 1001973, /// DeBunker:score: Score specific to DeBunker. MS_DeBunker_score = 1001974, /// delta m/z: The difference between a theoretically calculated m/z and the corresponding experimentally measured m/z. It can be expressed as absolute or relative value. MS_delta_m_z = 1001975, /// m/z difference (delta m/z): The difference between a theoretically calculated m/z and the corresponding experimentally measured m/z. It can be expressed as absolute or relative value. MS_m_z_difference = MS_delta_m_z, /// delta M: The difference between a theoretically calculated molecular mass M and the corresponding experimentally measured M. It can be expressed as absolute or relative value. MS_delta_M = 1001976, /// mass difference (delta M): The difference between a theoretically calculated molecular mass M and the corresponding experimentally measured M. It can be expressed as absolute or relative value. MS_mass_difference = MS_delta_M, /// MSQuant: MSQuant software. MS_MSQuant = 1001977, /// MSQuant:PTM-score: The PTM score from MSQuant software. MS_MSQuant_PTM_score = 1001978, /// MaxQuant:PTM Score: The PTM score from MaxQuant software. MS_MaxQuant_PTM_Score = 1001979, /// MaxQuant:Phospho (STY) Probabilities: The Phospho (STY) Probabilities from MaxQuant software. MS_MaxQuant_Phospho__STY__Probabilities = 1001980, /// MaxQuant:Phospho (STY) Score Diffs: The Phospho (STY) Score Diffs from MaxQuant software. MS_MaxQuant_Phospho__STY__Score_Diffs = 1001981, /// MaxQuant:P-site localization probability: The P-site localization probability value from MaxQuant software. MS_MaxQuant_P_site_localization_probability = 1001982, /// MaxQuant:PTM Delta Score: The PTM Delta Score value from MaxQuant software (Difference between highest scoring site and second highest). MS_MaxQuant_PTM_Delta_Score = 1001983, /// Ascore software: Ascore software. MS_Ascore_software = 1001984, /// Ascore: A-score for PTM site location at the PSM-level. MS_Ascore = 1001985, /// H-Score: H-Score for peptide phosphorylation site location. MS_H_Score = 1001986, /// vacuum drying MALDI sample preparation: Vacuum-drying MALDI sample preparation crystallization method. MS_vacuum_drying_MALDI_sample_preparation = 1001987, /// crushed crystal MALDI sample preparation: Crushed-crystal MALDI sample preparation method. MS_crushed_crystal_MALDI_sample_preparation = 1001988, /// fast evaporation MALDI sample preparation: Fast-evaporation MALDI sample preparation method. MS_fast_evaporation_MALDI_sample_preparation = 1001989, /// overlayer MALDI sample preparation: Overlayer method combining features of the crushed-crystal method and the fast-evaporation method. MS_overlayer_MALDI_sample_preparation = 1001990, /// sandwich MALDI sample preparation: Sandwich MALDI sample preparation method. MS_sandwich_MALDI_sample_preparation = 1001991, /// spin coating MALDI sample preparation: Spin coating MALDI sample preparation method. MS_spin_coating_MALDI_sample_preparation = 1001992, /// quick and dirty MALDI sample preparation: Quick & dirty (Q&D) sample preparation separating matrix handling from sample handling. MS_quick_and_dirty_MALDI_sample_preparation = 1001993, /// top hat baseline reduction: Top-hat morphological filter based on the basic morphological operations 'erosion' and 'dilatation'. MS_top_hat_baseline_reduction = 1001994, /// convex hull baseline reduction: Constructs the baseline by fitting multiple parabolas to the spectrum starting with the large scale structures. MS_convex_hull_baseline_reduction = 1001995, /// median baseline reduction: The spectrum that will be baseline subtracted is divided into a number of segments. MS_median_baseline_reduction = 1001996, /// wavelet transformation smoothing: The random noise is removed by using the undecimated wavelet transform. MS_wavelet_transformation_smoothing = 1001997, /// sophisticated numerical annotation procedure: It searches for known patterns in the measured spectrum. MS_sophisticated_numerical_annotation_procedure = 1001998, /// SNAP (sophisticated numerical annotation procedure): It searches for known patterns in the measured spectrum. MS_SNAP = MS_sophisticated_numerical_annotation_procedure, /// area normalization: Normalization of areas below the curves. MS_area_normalization = 1001999, /// LIFT: A Bruker's proprietary technique where molecular ions are initially accelerated at lower energy, then collide with inert gas in a collision cell that is then 'lifted' to high potential. The use of inert gas is optional, as it could lift also fragments provided by LID. MS_LIFT = 1002000, /// MS1 label-based raw feature quantitation: MS1 label-based raw feature quantitation. MS_MS1_label_based_raw_feature_quantitation = 1002001, /// MS1 label-based peptide level quantitation: MS1 label-based peptide level quantitation. MS_MS1_label_based_peptide_level_quantitation = 1002002, /// MS1 label-based protein level quantitation: MS1 label-based protein level quantitation. MS_MS1_label_based_protein_level_quantitation = 1002003, /// MS1 label-based proteingroup level quantitation: MS1 label-based proteingroup level quantitation. MS_MS1_label_based_proteingroup_level_quantitation = 1002004, /// iRT retention time normalization standard: A de facto standard providing the retention times at which a specific set of 10 reference peptides exit the reference chromatographic column. The kit may be obtain from Biognosys. MS_iRT_retention_time_normalization_standard = 1002005, /// SRM transition type: The type of the transitions, e.g. target or decoy. MS_SRM_transition_type = 1002006, /// MRM transition type (SRM transition type): The type of the transitions, e.g. target or decoy. MS_MRM_transition_type = MS_SRM_transition_type, /// target SRM transition: A transition used to target a specific compound that may be in the sample. MS_target_SRM_transition = 1002007, /// target MRM transition (target SRM transition): A transition used to target a specific compound that may be in the sample. MS_target_MRM_transition = MS_target_SRM_transition, /// decoy SRM transition: A transition not expected to be present in the sample and used to calculate statistical confidence of target transition detections in some workflows. MS_decoy_SRM_transition = 1002008, /// decoy MRM transition (decoy SRM transition): A transition not expected to be present in the sample and used to calculate statistical confidence of target transition detections in some workflows. MS_decoy_MRM_transition = MS_decoy_SRM_transition, /// isobaric label quantitation analysis: Quantitation analysis using an isobaric labelling workflow. MS_isobaric_label_quantitation_analysis = 1002009, /// TMT quantitation analysis: Quantitation analysis using the Thermo Fisher amine-reactive tandem mass tag (TMT) labelling workflow, wherein 2-10 reporter ions are measured in MS2 spectra in the 126-131 m/z. MS_TMT_quantitation_analysis = 1002010, /// desorption electrospray ionization: Combination of electrospray and desorption ionization method that ionizes gases, liquids and solids in open air under atmospheric pressure. MS_desorption_electrospray_ionization = 1002011, /// DESI (desorption electrospray ionization): Combination of electrospray and desorption ionization method that ionizes gases, liquids and solids in open air under atmospheric pressure. MS_DESI = MS_desorption_electrospray_ionization, /// Mascot:PTM site assignment confidence: Relative probability that PTM site assignment is correct, derived from the Mascot score difference between matches to the same spectrum (Mascot Delta Score). MS_Mascot_PTM_site_assignment_confidence = 1002012, /// collision energy ramp start: Collision energy at the start of the collision energy ramp. MS_collision_energy_ramp_start = 1002013, /// collision energy ramp end: Collision energy at the end of the collision energy ramp. MS_collision_energy_ramp_end = 1002014, /// spectral count peptide level quantitation: Spectral count peptide level quantitation. MS_spectral_count_peptide_level_quantitation = 1002015, /// spectral count protein level quantitation: Spectral count protein level quantitation. MS_spectral_count_protein_level_quantitation = 1002016, /// spectral count proteingroup level quantitation: Spectral count proteingroup level quantitation. MS_spectral_count_proteingroup_level_quantitation = 1002017, /// MS1 label-based analysis: MS1 label-based analysis. MS_MS1_label_based_analysis = 1002018, /// label-free raw feature quantitation: Label-free raw feature quantitation. MS_label_free_raw_feature_quantitation = 1002019, /// label-free peptide level quantitation: Label-free peptide level quantitation. MS_label_free_peptide_level_quantitation = 1002020, /// label-free protein level quantitation: Label-free protein level quantitation. MS_label_free_protein_level_quantitation = 1002021, /// label-free proteingroup level quantitation: Label-free proteingroup level quantitation. MS_label_free_proteingroup_level_quantitation = 1002022, /// MS2 tag-based analysis: MS2 tag-based analysis. MS_MS2_tag_based_analysis = 1002023, /// MS2 tag-based feature level quantitation: MS2 tag-based feature level quantitation. MS_MS2_tag_based_feature_level_quantitation = 1002024, /// MS2 tag-based peptide level quantitation: MS2 tag-based peptide level quantitation. MS_MS2_tag_based_peptide_level_quantitation = 1002025, /// MS2 tag-based protein level quantitation: MS2 tag-based protein level quantitation. MS_MS2_tag_based_protein_level_quantitation = 1002026, /// MS2 tag-based proteingroup level quantitation: MS2 tag-based proteingroup level quantitation. MS_MS2_tag_based_proteingroup_level_quantitation = 1002027, /// nucleic acid base modification: Nucleic acid base modification (substitution, insertion or deletion). MS_nucleic_acid_base_modification = 1002028, /// original nucleic acid sequence: Specification of the original nucleic acid sequence, prior to a modification. The value slot should hold the DNA or RNA sequence. MS_original_nucleic_acid_sequence = 1002029, /// modified nucleic acid sequence: Specification of the modified nucleic acid sequence. The value slot should hold the DNA or RNA sequence. MS_modified_nucleic_acid_sequence = 1002030, /// PASSEL transition group browser URI: URI to retrieve transition group data for a PASSEL (PeptideAtlas SRM Experiment Library) experiment. MS_PASSEL_transition_group_browser_URI = 1002031, /// PeptideAtlas dataset URI: URI that allows access to a PeptideAtlas dataset. MS_PeptideAtlas_dataset_URI = 1002032, /// contact role: Role of the contact person. MS_contact_role = 1002033, /// first author: The first of a set of authors associated with a publication or release. There may be more than one first author in cases where several authors share primary attribution. MS_first_author = 1002034, /// senior author: The last of a set of authors associated with a publication or release. There may be more than one senior author in cases where several authors share senior attribution. MS_senior_author = 1002035, /// co-author: One of a set of authors associated with a publication or release. MS_co_author = 1002036, /// dataset submitter: A person who submits a dataset to a repository. MS_dataset_submitter = 1002037, /// label free sample: A sample that has not been labelled or modified. This is often referred to as \"light\" to distinguish from \"heavy\". MS_label_free_sample = 1002038, /// light sample (label free sample): A sample that has not been labelled or modified. This is often referred to as \"light\" to distinguish from \"heavy\". MS_light_sample = MS_label_free_sample, /// inlet attribute: Inlet properties that are associated with a value. MS_inlet_attribute = 1002039, /// inlet temperature: The temperature of the inlet of a mass spectrometer. MS_inlet_temperature = 1002040, /// source temperature: The temperature of the source of a mass spectrometer. MS_source_temperature = 1002041, /// modulation time: The duration of a complete cycle of modulation in a comprehensive two-dimensional separation system, equals the length of a second dimension chromatogram, i.e., the time between two successive injections into the second column. MS_modulation_time = 1002042, /// ProteinProspector: ProteinProspector software for data acquisition and analysis. MS_ProteinProspector = 1002043, /// ProteinProspector:score: The ProteinProspector result 'Score'. MS_ProteinProspector_score = 1002044, /// ProteinProspector:expectation value: The ProteinProspector result 'Expectation value'. MS_ProteinProspector_expectation_value = 1002045, /// native source path: The original source path used for directory-based sources. MS_native_source_path = 1002046, /// MS-GF: MS-GF software used to re-score the peptide-spectrum matches. MS_MS_GF = 1002047, /// MS-GF+: MS-GF+ software used to analyze the spectra. MS_MS_GF_ = 1002048, /// MS-GFDB (MS-GF+): MS-GF+ software used to analyze the spectra. MS_MS_GFDB = MS_MS_GF_, /// MS-GF:RawScore: MS-GF raw score. MS_MS_GF_RawScore = 1002049, /// MS-GF:DeNovoScore: MS-GF de novo score. MS_MS_GF_DeNovoScore = 1002050, /// MS-GF:Energy: MS-GF energy score. MS_MS_GF_Energy = 1002051, /// MS-GF:SpecEValue: MS-GF spectral E-value. MS_MS_GF_SpecEValue = 1002052, /// MS-GF:EValue: MS-GF E-value. MS_MS_GF_EValue = 1002053, /// MS-GF:QValue: MS-GF Q-value. MS_MS_GF_QValue = 1002054, /// MS-GF:PepQValue: MS-GF peptide-level Q-value. MS_MS_GF_PepQValue = 1002055, /// MS-GF:PEP: MS-GF posterior error probability. MS_MS_GF_PEP = 1002056, /// modification specificity protein N-term: As parameter for search engine: apply the modification only at the N-terminus of a protein. MS_modification_specificity_protein_N_term = 1002057, /// modification specificity protein C-term: As parameter for search engine: apply the modification only at the C-terminus of a protein. MS_modification_specificity_protein_C_term = 1002058, /// Microsoft Excel: Microsoft Excel (can be used for spectral counting). MS_Microsoft_Excel = 1002059, /// database UniProtKB/TrEMBL: The name of the UniProtKB/TrEMBL database. MS_database_UniProtKB_TrEMBL = 1002060, /// decoy DB from UniProtKB/TrEMBL: Decoy database from a TrEMBL protein sequence database. MS_decoy_DB_from_UniProtKB_TrEMBL_OBSOLETE = 1002061, /// metabolic labelling: natural N (mainly 14N): Metabolic labelling: natural N (mainly 14N). MS_metabolic_labelling__natural_N__mainly_14N_ = 1002062, /// FindPairs: Software e.g. for SILAC and 14N/15N workflow, part of the PeakQuant suite. MS_FindPairs = 1002063, /// peptide consensus RT: Peptide consensus retention time. MS_peptide_consensus_RT = 1002064, /// peptide consensus m/z: Peptide consensus mass/charge ratio. MS_peptide_consensus_m_z = 1002065, /// ratio calculation method: Method used to calculate the ratio. MS_ratio_calculation_method = 1002066, /// protein value: median of peptide ratios: Protein quantification value calculated as median of peptide ratios. MS_protein_value__median_of_peptide_ratios = 1002067, /// metabolic labelling: heavy N (mainly 15N): Metabolic labelling: heavy N (mainly 15N). MS_metabolic_labelling__heavy_N__mainly_15N_ = 1002068, /// metabolic labelling purity: Metabolic labelling: Description of labelling purity. Usually the purity of feeding material (e.g. 95%), or the inclusion rate derived from isotopic peak pattern shape. MS_metabolic_labelling_purity = 1002069, /// t-test: Perform a t-test (two groups). Specify in string value, whether paired / unpaired, variance equal / different, one- / two-sided version is performed. MS_t_test = 1002070, /// ANOVA-test: Perform an ANOVA-test (more than two groups). Specify in string value, which version is performed. MS_ANOVA_test = 1002071, /// p-value: P-value as result of one of the processing steps described. Specify in the description, which processing step it was. MS_p_value = 1002072, /// mzIdentML format: The mzIdentML format for peptide and protein identification data from the PSI. File extension '.mzid'. MS_mzIdentML_format = 1002073, /// quantification file format: File format containing quantification results. MS_quantification_file_format = 1002074, /// mzQuantML format: The mzQuantML format for quantification data from the PSI. File extension '.mzq'. MS_mzQuantML_format = 1002075, /// PAnalyzer: PAnalyzer software for getting protein evidence categories. MS_PAnalyzer = 1002076, /// impact: Bruker Daltonics' impact: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray. MS_impact = 1002077, /// ProteomeDiscoverer:1. Static Modification: ProteomeDiscoverer's 1st static post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_1__Static_Modification_OBSOLETE = 1002078, /// ProteomeDiscoverer:2. Static Modification: ProteomeDiscoverer's 2nd static post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_2__Static_Modification_OBSOLETE = 1002079, /// ProteomeDiscoverer:Spectrum Selector:Precursor Clipping Range Before: Precursor clipping range before. MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_Before = 1002080, /// ProteomeDiscoverer:Spectrum Selector:Precursor Clipping Range After: Precursor clipping range after. MS_ProteomeDiscoverer_Spectrum_Selector_Precursor_Clipping_Range_After = 1002081, /// first column elution time: The time of elution from the first chromatographic column in the chromatographic separation step, relative to the start of chromatography on the first column. MS_first_column_elution_time = 1002082, /// second column elution time: The time of elution from the second chromatographic column in the chromatographic separation step, relative to the start of the chromatography on the second column. MS_second_column_elution_time = 1002083, /// multidimensional chromatography modulation description: Multidimensional chromatography modulation description. MS_multidimensional_chromatography_modulation_description = 1002084, /// two-dimensional gas chromatography with fixed modulation time: Two-dimensional gas chromatography where a single modulation time is used throughout the acquisition. MS_two_dimensional_gas_chromatography_with_fixed_modulation_time = 1002085, /// two-dimensional gas chromatography with discrete modulation time steps: Two-dimensional gas chromatography where the acquisition is divided into steps, each with a different modulation time. MS_two_dimensional_gas_chromatography_with_discrete_modulation_time_steps = 1002086, /// two-dimensional liquid chromatography with fixed modulation time: Two-dimensional liquid chromatography where a single modulation time is used throughout the acquisition. MS_two_dimensional_liquid_chromatography_with_fixed_modulation_time = 1002087, /// two-dimensional liquid chromatography with discrete modulation time steps: Two-dimensional liquid chromatography where the acquisition is divided into steps, each with a different modulation time. MS_two_dimensional_liquid_chromatography_with_discrete_modulation_time_steps = 1002088, /// ProteomeDiscoverer:Peptide Without Protein XCorr Threshold: XCorr threshold for storing peptides that do not belong to a protein. MS_ProteomeDiscoverer_Peptide_Without_Protein_XCorr_Threshold = 1002089, /// Calculate Probability Scores: Flag indicating that a probability score for the assessment that a reported peptide match is a random occurrence is calculated. MS_Calculate_Probability_Scores = 1002090, /// ProteomeDiscoverer:Maximum Delta Cn: Delta Cn threshold for filtering out PSM's. MS_ProteomeDiscoverer_Maximum_Delta_Cn = 1002091, /// Percolator:Validation based on: Algorithm (e.g. q-value or PEP) used for calculation of the validation score using Percolator. MS_Percolator_Validation_based_on = 1002092, /// search engine input parameter: Search engine input parameter. MS_search_engine_input_parameter = 1002093, /// common search engine input parameter: Search engine input parameter that is shared by more than one search engine. MS_common_search_engine_input_parameter = 1002094, /// Mascot input parameter: Search engine input parameters specific to Mascot. MS_Mascot_input_parameter = 1002095, /// SEQUEST input parameter: Search engine input parameters specific to SEQUEST. MS_SEQUEST_input_parameter = 1002096, /// Phenyx input parameter: Search engine input parameters specific to Phenyx. MS_Phenyx_input_parameter = 1002097, /// ProteinExtractor input parameter: Search engine input parameters specific to ProteinExtractor. MS_ProteinExtractor_input_parameter = 1002098, /// OMSSA input parameter: Search engine input parameters specific to OMSSA. MS_OMSSA_input_parameter = 1002099, /// ProteinScape input parameter: Search engine input parameters specific to ProteinScape. MS_ProteinScape_input_parameter = 1002100, /// ProteomeDiscoverer input parameter: Search engine input parameters specific to ProteomeDiscoverer. MS_ProteomeDiscoverer_input_parameter = 1002101, /// software input parameter: Software input parameters. MS_software_input_parameter = 1002103, /// common software input parameter: Software input parameter that is shared by more than one software. MS_common_software_input_parameter = 1002104, /// software specific input parameter: Software specific input parameter. MS_software_specific_input_parameter = 1002105, /// Scaffold input parameter: Search engine input parameters specific to Scaffold. MS_Scaffold_input_parameter = 1002106, /// Percolator input parameter: Search engine input parameters specific to Percolator. MS_Percolator_input_parameter = 1002107, /// higher score better: Indicates that a higher score is better. MS_higher_score_better = 1002108, /// lower score better: Indicates that a lower score is better. MS_lower_score_better = 1002109, /// assay attribute: Attribute describing an assay. MS_assay_attribute = 1002110, /// assay label attribute: Attribute describing an assay label. MS_assay_label_attribute = 1002111, /// protein group list attribute: Attribute describing a protein group list. MS_protein_group_list_attribute = 1002112, /// protein group attribute: Attribute describing a protein group. MS_protein_group_attribute = 1002113, /// protein list attribute: Attribute describing a protein list. MS_protein_list_attribute = 1002114, /// peptide consensus list attribute: Attribute describing a peptide consensus list. MS_peptide_consensus_list_attribute = 1002115, /// peptide consensus attribute: Attribute describing a peptide consensus. MS_peptide_consensus_attribute = 1002116, /// small molecule list attribute: Attribute describing a small molecule list. MS_small_molecule_list_attribute = 1002117, /// small molecule attribute: Attribute describing a small molecule. MS_small_molecule_attribute = 1002118, /// small molecule modification attribute: Attribute describing a small molecule modification. MS_small_molecule_modification_attribute = 1002119, /// experiment name: The name for identifying an experiment. MS_experiment_name = 1002120, /// spectral count feature: Dummy decribing a spectral count feature. MS_spectral_count_feature = 1002121, /// counts reporting: FeatureList of spectral counts. MS_counts_reporting = 1002122, /// x-Tracker: X-Tracker generic tool for quantitative proteomics. MS_x_Tracker = 1002123, /// ProteoSuite: ProteoSuite software for the analysis of quantitative proteomics data. MS_ProteoSuite = 1002124, /// combined FDRScore: FDRScore values specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools. MS_combined_FDRScore_OBSOLETE = 1002125, /// database UniProtKB: The name of the UniProtKB knowledgebase. MS_database_UniProtKB = 1002126, /// identification file attribute: Attribute describing an identification file. MS_identification_file_attribute = 1002127, /// method file format: Attribute describing a method file format. MS_method_file_format = 1002128, /// ITRAQAnalyzer: Software for iTRAQ workflow. Extracts and normalizes iTRAQ information from an MS experiment. MS_ITRAQAnalyzer = 1002129, /// identification file format: Attribute describing an identification file format. MS_identification_file_format = 1002130, /// TOPP noise filter: Noise filter component of the TOPP software. MS_TOPP_noise_filter = 1002131, /// TOPP NoiseFilterGaussian: Removes noise from profile spectra by using a gaussian smoothing. MS_TOPP_NoiseFilterGaussian = 1002132, /// TOPP NoiseFilterSGolay: Removes noise from profile spectra by using a Savitzky-Golay smoothing. MS_TOPP_NoiseFilterSGolay = 1002133, /// TOPP peak picker: Peak picker component of the TOPP software. MS_TOPP_peak_picker = 1002134, /// TOPP PeakPickerHiRes: Finds mass spectrometric peaks in high-resoluted profile mass spectra. MS_TOPP_PeakPickerHiRes = 1002135, /// TOPP PeakPickerWavelet: Finds mass spectrometric peaks with a wavelet algorithm in low-resoluted profile mass spectra. MS_TOPP_PeakPickerWavelet = 1002136, /// TOPP spectra filter: Spectra filter component of the TOPP software. MS_TOPP_spectra_filter = 1002137, /// TOPP SpectraFilterBernNorm: Applies a Bern et al normalization to peak spectra. MS_TOPP_SpectraFilterBernNorm = 1002138, /// TOPP SpectraFilterMarkerMower: Applies a filter to peak spectra for marked peaks. MS_TOPP_SpectraFilterMarkerMower = 1002139, /// TOPP SpectraFilterNLargest: Retains the n largest peaks of a peak spectra. MS_TOPP_SpectraFilterNLargest = 1002140, /// TOPP SpectraFilterNormalizer: Applies a TIC/maximal intensity normalization to peak spectra. MS_TOPP_SpectraFilterNormalizer = 1002141, /// TOPP SpectraFilterParentPeakMower: Filters putative unfragmented precursor ions from tandem spectra. MS_TOPP_SpectraFilterParentPeakMower = 1002142, /// TOPP SpectraFilterScaler: Applies a filter to peak spectra after intensity scaling according to rank. MS_TOPP_SpectraFilterScaler = 1002143, /// TOPP SpectraFilterSqrtMower: Applies a filter to peak spectra after intensity scaling to the square root. MS_TOPP_SpectraFilterSqrtMower = 1002144, /// TOPP SpectraFilterThresholdMower: Applies a filter of peaks below a given threshold to peak spectra. MS_TOPP_SpectraFilterThresholdMower = 1002145, /// TOPP SpectraFilterWindowMower: Applies a filter of the largest peaks in a sliding window over a peak spectrum. MS_TOPP_SpectraFilterWindowMower = 1002146, /// TOPP map aligner: Map aligner component of the TOPP software. MS_TOPP_map_aligner = 1002147, /// TOPP MapAlignerIdentification: Corrects retention time distortions between maps based on common peptide identifications. MS_TOPP_MapAlignerIdentification = 1002148, /// TOPP MapAlignerPoseClustering: Corrects retention time distortions between maps using a pose clustering approach. MS_TOPP_MapAlignerPoseClustering = 1002149, /// TOPP MapAlignerSpectrum: Corrects retention time distortions between maps by spectrum alignment. MS_TOPP_MapAlignerSpectrum = 1002150, /// numerator data type attribute: Attribute describing the data type of the numerator of a ratio. MS_numerator_data_type_attribute = 1002151, /// denominator data type attribute: Attribute describing the data type of the denominator of a ratio. MS_denominator_data_type_attribute = 1002152, /// protein level PSM counts: The number of spectra identified for this protein in spectral counting. MS_protein_level_PSM_counts = 1002153, /// TOPP DTAExtractor: Extracts spectra of an MS run file to several files in DTA format. MS_TOPP_DTAExtractor = 1002154, /// TOPP IDMerger: Merges several protein/peptide identification files into one file. MS_TOPP_IDMerger = 1002155, /// TOPP IDFileConverter: Converts identification engine file formats. MS_TOPP_IDFileConverter = 1002156, /// TOPP SpectraMerger: Merges spectra from an LC/MS map, either by precursor or by RT blocks. MS_TOPP_SpectraMerger = 1002157, /// TOPP MzTabExporter: Exports various XML formats to an mzTab file. MS_TOPP_MzTabExporter = 1002158, /// TOPP MassTraceExtractor: Annotates mass traces in centroided LC/MS maps. MS_TOPP_MassTraceExtractor = 1002159, /// TOPP PrecursorMassCorrector: Correct the precursor entries of tandem MS scans. MS_TOPP_PrecursorMassCorrector = 1002160, /// TOPP HighResPrecursorMassCorrector: Performs precursor mz correction on centroided high resolution data. MS_TOPP_HighResPrecursorMassCorrector = 1002161, /// TOPP AdditiveSeries: Computes an additive series to quantify a peptide in a set of samples. MS_TOPP_AdditiveSeries = 1002162, /// TOPP Decharger: Decharges and merges different feature charge variants of the same chemical entity. MS_TOPP_Decharger = 1002163, /// TOPP EICExtractor: Quantifies signals at given positions in (raw or picked) LC/MS maps. MS_TOPP_EICExtractor = 1002164, /// TOPP feature finder: Feature finder component of the TOPP software. MS_TOPP_feature_finder = 1002165, /// TOPP FeatureFinderCentroided: Detects two-dimensional features in centroided LC-MS data. MS_TOPP_FeatureFinderCentroided = 1002166, /// TOPP FeatureFinderRaw: Detects two-dimensional features in uncentroided LC-MS data. MS_TOPP_FeatureFinderRaw = 1002167, /// TOPP FeatureFinderIsotopeWavelet: Detects two-dimensional features in uncentroided LC-MS data with a wavelet algorithm. MS_TOPP_FeatureFinderIsotopeWavelet = 1002168, /// TOPP FeatureFinderMetabo: Detects two-dimensional features in centroided LC-MS data of metabolites. MS_TOPP_FeatureFinderMetabo = 1002169, /// TOPP FeatureFinderMRM: Quantifies features LC-MS/MS MRM data. MS_TOPP_FeatureFinderMRM = 1002170, /// TOPP ProteinQuantifier: Computes protein abundances from annotated feature/consensus maps. MS_TOPP_ProteinQuantifier = 1002171, /// TOPP ConsensusMapNormalizer: Normalizes maps of one consensus XML file (after linking). MS_TOPP_ConsensusMapNormalizer = 1002172, /// TOPP MapRTTransformer: Applies retention time transformations to maps. MS_TOPP_MapRTTransformer = 1002173, /// TOPP feature linker: Feature linker component of the TOPP software. MS_TOPP_feature_linker = 1002174, /// TOPP FeatureLinkerLabeled: Groups corresponding isotope-labeled features in a feature map. MS_TOPP_FeatureLinkerLabeled = 1002175, /// TOPP FeatureLinkerUnlabeled: Groups corresponding features from multiple maps. MS_TOPP_FeatureLinkerUnlabeled = 1002176, /// TOPP FeatureLinkerUnlabeledQT: Groups corresponding features from multiple maps using a quality threshold clustering approach. MS_TOPP_FeatureLinkerUnlabeledQT = 1002177, /// TOPP CompNovo: Performs a peptide/protein identification with the CompNovo engine. MS_TOPP_CompNovo = 1002178, /// TOPP CompNovoCID: Performs a peptide/protein identification with the CompNovo engine in collision-induced dissociation (CID) mode. MS_TOPP_CompNovoCID = 1002179, /// TOPP software adaptor: Software adaptor to an external program in the TOPP software. MS_TOPP_software_adaptor = 1002180, /// TOPP InspectAdapter: Identifies MS2 spectra using the external program Inspect. MS_TOPP_InspectAdapter = 1002181, /// TOPP MascotAdapter: Identifies MS2 spectra using the external program Mascot. MS_TOPP_MascotAdapter = 1002182, /// TOPP MascotAdapterOnline: Identifies MS2 spectra using the online version of the external program Mascot. MS_TOPP_MascotAdapterOnline = 1002183, /// TOPP OMSSAAdapter: Identifies MS2 spectra using the external program OMSSA. MS_TOPP_OMSSAAdapter = 1002184, /// TOPP PepNovoAdapter: Identifies MS2 spectra using the external program PepNovo. MS_TOPP_PepNovoAdapter = 1002185, /// TOPP XTandemAdapter: Identifies MS2 spectra using the external program XTandem. MS_TOPP_XTandemAdapter = 1002186, /// TOPP SpecLibSearcher: Identifies peptide MS2 spectra by spectral matching with a searchable spectral library. MS_TOPP_SpecLibSearcher = 1002187, /// TOPP ConsensusID: Computes a consensus identification from peptide identifications of several identification engines. MS_TOPP_ConsensusID = 1002188, /// TOPP IDConflictResolver: Resolves ambiguous annotations of features with peptide identifications. MS_TOPP_IDConflictResolver = 1002189, /// TOPP IDFilter: Filters results from protein or peptide identification engines based on different criteria. MS_TOPP_IDFilter = 1002190, /// TOPP IDMapper: Assigns protein/peptide identifications to feature or consensus features. MS_TOPP_IDMapper = 1002191, /// TOPP IDPosteriorErrorProbability: Estimates posterior error probabilities using a mixture model. MS_TOPP_IDPosteriorErrorProbability = 1002192, /// TOPP IDRTCalibration: Calibrate Retention times of peptide hits to standards. MS_TOPP_IDRTCalibration = 1002193, /// TOPP PeptideIndexer: Refreshes the protein references for all peptide hits. MS_TOPP_PeptideIndexer = 1002194, /// TOPP PrecursorIonSelector: A tool for precursor ion selection based on identification results. MS_TOPP_PrecursorIonSelector = 1002195, /// TOPP MRMMapper: MRMMapper maps measured chromatograms (mzML) and the transitions used (TraML). MS_TOPP_MRMMapper = 1002196, /// TOPP OpenSwath component: OpenSwath component of the TOPP software. MS_TOPP_OpenSwath_component = 1002197, /// TOPP OpenSwathAnalyzer: Picks peaks and finds features in an SRM experiment. MS_TOPP_OpenSwathAnalyzer = 1002198, /// TOPP OpenSwathChromatogramExtractor: Extract chromatograms (XIC) from a MS2 map file. MS_TOPP_OpenSwathChromatogramExtractor = 1002199, /// TOPP OpenSwathDecoyGenerator: Generates decoys according to different models for a specific TraML. MS_TOPP_OpenSwathDecoyGenerator = 1002200, /// TOPP OpenSwathFeatureXMLToTSV: Converts a featureXML to a mProphet tsv (tab separated values). MS_TOPP_OpenSwathFeatureXMLToTSV = 1002201, /// TOPP OpenSwathRTNormalizer: Generates a transformation file for retention time space into normalized space. MS_TOPP_OpenSwathRTNormalizer = 1002202, /// TOPP ProteinInference: Infer proteins from a list of (high-confidence) peptides. MS_TOPP_ProteinInference = 1002203, /// TOPP FalseDiscoveryRate: Estimates the false discovery rate on peptide and protein level using decoy searches. MS_TOPP_FalseDiscoveryRate = 1002204, /// ProteoWizard msconvert: Converts, filters, and processes mass spectrometry data in variety of formats. MS_ProteoWizard_msconvert = 1002205, /// ProteoWizard idconvert: Converts, filters, and processes identifications from shotgun proteomics experiments. MS_ProteoWizard_idconvert = 1002206, /// ProteoWizard chainsaw: Filters and processes protein sequence databases. MS_ProteoWizard_chainsaw = 1002207, /// ProteoWizard msaccess: Filters, processes, and displays mass spectrometry data in a variety of ways. MS_ProteoWizard_msaccess = 1002208, /// ProteoWizard SeeMS: An interactive GUI application to view and filter mass spectrometry data in a variety of formats. MS_ProteoWizard_SeeMS = 1002209, /// IsobariQ: A quantitative software package designed for analysis of IPTL, TMT and iTRAQ data. MS_IsobariQ = 1002210, /// Variance stabilizing normalization: The model incorporates data calibration (normalization), a model for the dependence of the variance on the mean intensity, and a variance stabilizing data transformation. MS_Variance_stabilizing_normalization = 1002211, /// IPTL quantitation analysis: Quantification analysis using a labelling strategy where both peptide termini are labelled so that the peptides from different labelling schema are isobaric. MS_IPTL_quantitation_analysis = 1002212, /// PAnalyzer:conclusive protein: A protein identified by at least one unique (distinct, discrete) peptide (peptides are considered different only if they can be distinguished by evidence in mass spectrum). MS_PAnalyzer_conclusive_protein = 1002213, /// PAnalyzer:indistinguishable protein: A member of a group of proteins sharing all peptides that are exclusive to the group (peptides are considered different only if they can be distinguished by evidence in mass spectrum). MS_PAnalyzer_indistinguishable_protein = 1002214, /// PAnalyzer:non-conclusive protein: A protein sharing all its matched peptides with either conclusive or indistinguishable proteins (peptides are considered different only if they can be distinguished by evidence in mass spectrum). MS_PAnalyzer_non_conclusive_protein = 1002215, /// PAnalyzer:ambiguous group member: A protein sharing at least one peptide not matched to either conclusive or indistinguishable proteins (peptides are considered different only if they can be distinguished by evidence in mass spectrum). MS_PAnalyzer_ambiguous_group_member = 1002216, /// decoy peptide: A putative identified peptide issued from a decoy sequence database. MS_decoy_peptide = 1002217, /// percent collision energy ramp start: Collision energy at the start of the collision energy ramp in percent, normalized to the mass of the ion. MS_percent_collision_energy_ramp_start = 1002218, /// percent collision energy ramp end: Collision energy at the end of the collision energy ramp in percent, normalized to the mass of the ion. MS_percent_collision_energy_ramp_end = 1002219, /// MRMaid: A web-based SRM assay design tool whose transitions are generated by mining the millions of identified peptide spectra held in the EBI's PRIDE database. MS_MRMaid = 1002220, /// MRMaid:peptide score: Score in MRMaid to indicate the expected performance of the peptide in SRM. MS_MRMaid_peptide_score = 1002221, /// SRM transition attribute: Attribute associated with a SRM transition. MS_SRM_transition_attribute = 1002222, /// precursor ion detection probability: Probability of detecting precursor when parent protein is present. MS_precursor_ion_detection_probability = 1002223, /// product ion detection probability: Probability of detecting product ion when precursor ion is present. MS_product_ion_detection_probability = 1002224, /// average product ion intensity: Average value of product ion intensity in a collection of identified spectra. MS_average_product_ion_intensity = 1002225, /// product ion intensity standard deviation: Standard deviation of product ion intensity in a collection of identified spectra. MS_product_ion_intensity_standard_deviation = 1002226, /// number of product ion observations: The number of times the specific product ion has been observed in a series of SRM experiments. MS_number_of_product_ion_observations = 1002227, /// number of precursor ion observations: The number of times the specific precursor ion has been observed in a series of SRM experiments. MS_number_of_precursor_ion_observations = 1002228, /// ProteomeDiscoverer:Mascot:Significance Middle: Calculated relaxed significance when performing a decoy search for high-confidence peptides. MS_ProteomeDiscoverer_Mascot_Significance_Middle = 1002229, /// ProteomeDiscoverer:Mascot:Significance High: Calculated relaxed significance when performing a decoy search for medium-confidence peptides. MS_ProteomeDiscoverer_Mascot_Significance_High = 1002230, /// regular expressions for a GUID: ([A-Fa-f0-9]\{8\}-([A-Fa-f0-9]\{4\}-)\{3\}[A-Fa-f0-9]\{12\}). MS_regular_expressions_for_a_GUID = 1002231, /// ProteomeDiscoverer:Default FDR calculator: The default FDR calculator as globally unique identifier (GUID). MS_ProteomeDiscoverer_Default_FDR_calculator = 1002232, /// ProteomeDiscoverer:SEQUEST:Low resolution spectra contained: Flag indicating if low-resolution spectra are taken into consideration. MS_ProteomeDiscoverer_SEQUEST_Low_resolution_spectra_contained = 1002233, /// selected precursor m/z: Mass-to-charge ratio of a precursor ion selected for fragmentation. MS_selected_precursor_m_z = 1002234, /// ProteoGrouper:PDH score: A score assigned to a single protein accession (modelled as ProteinDetectionHypothesis in mzIdentML), based on summed peptide level scores. MS_ProteoGrouper_PDH_score = 1002235, /// ProteoGrouper:PAG score: A score assigned to a protein group (modelled as ProteinAmbiguityGroup in mzIdentML), based on all summed peptide level scores that have been assigned to the group as unique or razor peptides. MS_ProteoGrouper_PAG_score = 1002236, /// mzidLib: A library of Java routines for manipulating mzIdentML files. MS_mzidLib = 1002237, /// mzidLib:Omssa2Mzid: A converter for OMSSA OMX to mzIdentML. MS_mzidLib_Omssa2Mzid = 1002238, /// mzidLib:Tandem2Mzid: A converter for Tandem XML to mzIdentML. MS_mzidLib_Tandem2Mzid = 1002239, /// mzidLib:Csv2Mzid: A converter for CSV files (following OMSSA CSV style) to mzIdentML. MS_mzidLib_Csv2Mzid = 1002240, /// mzidLib:ProteoGrouper: A generic and parameterizable protein inference algorithm for mzIdentML files. MS_mzidLib_ProteoGrouper = 1002241, /// mzidLib:Thresholder: A routine for keeping only identifications passing a given threshold or setting passThreshold to true or false for SpectrumIdentificationItem or ProteinDetectionHypothesis in mzIdentML files. MS_mzidLib_Thresholder = 1002242, /// mzidLib:Perform emPAI on mzid: A routine for adding emPAI quantitative values to an mzIdentML file. MS_mzidLib_Perform_emPAI_on_mzid = 1002243, /// mzidLib:FalseDiscoveryRate: A routine for calculating local FDR, q-value and FDRScore for mzIdentML files, based on a decoy search. MS_mzidLib_FalseDiscoveryRate = 1002244, /// mzidLib:Mzidentml2Csv: A tool for converting mzIdentML files to CSV format. MS_mzidLib_Mzidentml2Csv = 1002245, /// mzidLib:CombineSearchEngines: A tool for combining results analysed in parallel in two or three search engines into a single mzIdentML file. MS_mzidLib_CombineSearchEngines = 1002246, /// mzidLib:InsertMetaDataFromFasta: A tool for adding additional meta data from a FASTA file to DBSequence entries (sequence and description) in mzIdentML files. MS_mzidLib_InsertMetaDataFromFasta = 1002247, /// SEQUEST:spscore: The SEQUEST result 'SpScore'. MS_SEQUEST_spscore = 1002248, /// SEQUEST:sprank: The SEQUEST result 'SpRank'. MS_SEQUEST_sprank = 1002249, /// SEQUEST:deltacnstar: The SEQUEST result 'DeltaCnStar'. MS_SEQUEST_deltacnstar = 1002250, /// Comet: Comet open-source sequence search engine developed at the University of Washington. MS_Comet = 1002251, /// Comet:xcorr: The Comet result 'XCorr'. MS_Comet_xcorr = 1002252, /// Comet:deltacn: The Comet result 'DeltaCn'. MS_Comet_deltacn = 1002253, /// Comet:deltacnstar: The Comet result 'DeltaCnStar'. MS_Comet_deltacnstar = 1002254, /// Comet:spscore: The Comet result 'SpScore'. MS_Comet_spscore = 1002255, /// Comet:sprank: The Comet result 'SpRank'. MS_Comet_sprank = 1002256, /// Comet:expectation value: The Comet result 'Expectation value'. MS_Comet_expectation_value = 1002257, /// Comet:matched ions: The Comet result 'Matched Ions'. MS_Comet_matched_ions = 1002258, /// Comet:total ions: The Comet result 'Total Ions'. MS_Comet_total_ions = 1002259, /// PSM:FDR threshold: False-discovery rate threshold for peptide-spectrum matches. MS_PSM_FDR_threshold = 1002260, /// Byonic: Byonic search engine from Protein Metrics. MS_Byonic = 1002261, /// Byonic:Score: The Byonic score is the primary indicator of PSM correctness. The Byonic score reflects the absolute quality of the peptide-spectrum match, not the relative quality compared to other candidate peptides. Byonic scores range from 0 to about 1000, with 300 a good score, 400 a very good score, and PSMs with scores over 500 almost sure to be correct. MS_Byonic_Score = 1002262, /// Byonic:Delta Score: The drop in Byonic score from the top-scoring peptide to the next peptide with distinct sequence. In this computation, the same peptide with different modifications is not considered distinct. MS_Byonic_Delta_Score = 1002263, /// Byonic:DeltaMod Score: The drop in Byonic score from the top-scoring peptide to the next peptide different in any way, including placement of modifications. DeltaMod gives an indication of whether modifications are confidently localized; DeltaMod over 10.0 means that there is high likelihood that all modification placements are correct. MS_Byonic_DeltaMod_Score = 1002264, /// Byonic:PEP: Byonic posterior error probability. MS_Byonic_PEP = 1002265, /// Byonic:Peptide LogProb: The log p-value of the PSM. This is the log of the probability that the PSM with such a score and delta would arise by chance in a search of this size (the size of the protein database, as expanded by the modification rules). A log p-value of -3.0 should happen by chance on only one of a thousand spectra. Caveat: it is very hard to compute a p-value that works for all searches and all spectra, so read Byonic p-values with a certain amount of skepticism. MS_Byonic_Peptide_LogProb = 1002266, /// Byonic:Protein LogProb: The log p-value of the protein. MS_Byonic_Protein_LogProb = 1002267, /// Byonic:Best LogProb: Best (most negative) log p-value of an individual PSM. MS_Byonic_Best_LogProb = 1002268, /// Byonic:Best Score: Best (largest) Byonic score of a PSM. MS_Byonic_Best_Score = 1002269, /// chromatography separation: A technique by which molecules are separated by chemical and physical properties such as hydrophobicity or vapour pressure. MS_chromatography_separation = 1002270, /// liquid chromatography separation: Liquid chromatography (LC) is a separation technique in which the mobile phase is a liquid. MS_liquid_chromatography_separation = 1002271, /// gas chromatography separation: Gas chromatography (GC) is a separation technique in which the mobile phase is a gas. MS_gas_chromatography_separation = 1002272, /// detector potential: Detector potential difference in volts. MS_detector_potential = 1002273, /// SQ Detector 2: Waters quadrupole based SQ Detector 2. MS_SQ_Detector_2 = 1002274, /// Xevo G2-S Tof: Waters oa-ToF based Xevo G2-S Tof. MS_Xevo_G2_S_Tof = 1002275, /// Xevo G2-S QTof: Waters oa-ToF based Xevo G2-S QTof. MS_Xevo_G2_S_QTof = 1002276, /// AutoSpec Premier: Waters AutoSpec Premier magnetic sector instrument. MS_AutoSpec_Premier = 1002277, /// Pegasus III: LECO nominal mass resolution time-of-flight GC mass spectrometer. MS_Pegasus_III = 1002278, /// maXis 4G: Bruker Daltonics' maXis 4G: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray. MS_maXis_4G = 1002279, /// compact: Bruker Daltonics' compact: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray. MS_compact = 1002280, /// SRM feature level quantitation: Selected Reaction Monitoring feature level quantitation. MS_SRM_feature_level_quantitation = 1002281, /// SRM peptide level quantitation: Selected Reaction Monitoring peptide level quantitation. MS_SRM_peptide_level_quantitation = 1002282, /// SRM protein level quantitation: Selected Reaction Monitoring protein level quantitation. MS_SRM_protein_level_quantitation = 1002283, /// SRM proteingroup level quantitation: Selected Reaction Monitoring proteingroup level quantitation. MS_SRM_proteingroup_level_quantitation = 1002284, /// Trans-Proteomic Pipeline: A suite of open source tools for the processing of MS2 proteomics data developed by the Seattle Proteome Center at the Institute for Systems Biology. MS_Trans_Proteomic_Pipeline = 1002285, /// TPP (Trans-Proteomic Pipeline): A suite of open source tools for the processing of MS2 proteomics data developed by the Seattle Proteome Center at the Institute for Systems Biology. MS_TPP = MS_Trans_Proteomic_Pipeline, /// Trans-Proteomic Pipeline software: A software program that is a component of the Trans-Proteomic Pipeline. MS_Trans_Proteomic_Pipeline_software = 1002286, /// PeptideProphet: A program in the TPP that calculates PSM probabilities for MS2 proteomics data searched with any of the supported sequence or spectral library search engines via the pepXML format. MS_PeptideProphet = 1002287, /// iProphet: A program in the TPP that calculates distinct peptide probabilities based on several lines of corroborating evidence including search results from multiple search engines via the pepXML format. MS_iProphet = 1002288, /// InterProphet (iProphet): A program in the TPP that calculates distinct peptide probabilities based on several lines of corroborating evidence including search results from multiple search engines via the pepXML format. MS_InterProphet = MS_iProphet, /// ProteinProphet: A program in the TPP that calculates protein-level probabilities based on input PSM or peptide-level probabilities from PeptideProphet or iProphet. The output is written in the protXML format. MS_ProteinProphet = 1002289, /// XPRESS: A program in the TPP that calculates PSM-level abundances based on 2-channel isotope-labelled data such as ICAT, SILAC, etc. MS_XPRESS = 1002290, /// Libra: A program in the TPP that calculates PSM, peptide, and protein-level abundances based on N-channel isobaric label peptide data such as iTRAQ, TMT, etc. MS_Libra = 1002291, /// PTMProphet: A program in the TPP that calculates PTM localization probabilities by re-analyzing the peaks that are available to distinguish between possible modification sites. MS_PTMProphet = 1002292, /// Bruker Daltonics SCION series: Bruker Daltonics' SCION series. MS_Bruker_Daltonics_SCION_series = 1002293, /// Bruker Daltonics EVOQ series: Bruker Daltonics' EVOQ series. MS_Bruker_Daltonics_EVOQ_series = 1002294, /// SCION SQ: Bruker Daltonics' SCION SQ: GC-single quadrupole. MS_SCION_SQ = 1002295, /// SCION TQ: Bruker Daltonics' SCION TQ: GC-triple quadrupole. MS_SCION_TQ = 1002296, /// EVOQ Elite: Bruker Daltonics' EVOQ Elite: LC-triple quadrupole. MS_EVOQ_Elite = 1002297, /// EVOQ Qube: Bruker Daltonics' EVOQ Qube: LC-triple quadrupole. MS_EVOQ_Qube = 1002298, /// micrOTOF-Q III: Bruker Daltonics' micrOTOF-Q III: ESI Q-TOF, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray. MS_micrOTOF_Q_III = 1002299, /// amaZon Speed ETD: Bruker Daltonics' amaZon Speed ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, ETD, PTR, GC-APCI, CaptiveSpray. MS_amaZon_Speed_ETD = 1002300, /// amaZon Speed: Bruker Daltonics' amaZon ETD: ESI quadrupole ion trap, Nanospray, APCI, APPI, GC-APCI, CaptiveSpray. MS_amaZon_Speed = 1002301, /// Bruker Container format: Bruker Container raw file format. MS_Bruker_Container_format = 1002302, /// Bruker Container nativeID format: Native identifier (UUID). MS_Bruker_Container_nativeID_format = 1002303, /// domain range: Domain range of a numerical value. MS_domain_range = 1002304, /// value between 0 and 1 inclusive: Value range for probabilities. MS_value_between_0_and_1_inclusive = 1002305, /// value greater than zero: Positive value range. MS_value_greater_than_zero = 1002306, /// fragmentation ion type: Type of fragment ion based on where the backbone breaks, such as a y ion or a c ion. MS_fragmentation_ion_type = 1002307, /// fluorescence detector: A detector using a fluorescent signal after excitation with light. MS_fluorescence_detector = 1002308, /// Byonic: Peptide AbsLogProb: The absolute value of the log-base10 of the Byonic posterior error probability (PEP) of the PSM. MS_Byonic__Peptide_AbsLogProb = 1002309, /// Byonic: Protein AbsLogProb: The absolute value of the log-base10 of the Byonic posterior error probability (PEP) of the protein. MS_Byonic__Protein_AbsLogProb = 1002310, /// Byonic: Peptide AbsLogProb2D: The absolute value of the log-base10 Byonic two-dimensional posterior error probability (PEP) of the PSM. The two-dimensional PEP takes into account protein ranking information as well as PSM information. MS_Byonic__Peptide_AbsLogProb2D = 1002311, /// MS-Numpress linear prediction compression: Compression using MS-Numpress linear prediction compression. MS_MS_Numpress_linear_prediction_compression = 1002312, /// MS-Numpress positive integer compression: Compression using MS-Numpress positive integer compression. MS_MS_Numpress_positive_integer_compression = 1002313, /// MS-Numpress short logged float compression: Compression using MS-Numpress short logged float compression. MS_MS_Numpress_short_logged_float_compression = 1002314, /// consensus result: Indicates a consensus result from several search engine runs. MS_consensus_result = 1002315, /// ProteomeDiscoverer:Amanda:high confidence threshold: Strict confidence probability score. MS_ProteomeDiscoverer_Amanda_high_confidence_threshold = 1002316, /// ProteomeDiscoverer:Amanda:middle confidence threshold: Relaxed confidence probability score. MS_ProteomeDiscoverer_Amanda_middle_confidence_threshold = 1002317, /// ProteomeDiscoverer:automatic workload: Flag indicating automatic estimation of the workload level. MS_ProteomeDiscoverer_automatic_workload = 1002318, /// Amanda:AmandaScore: The Amanda score of the scoring function for a PSM. MS_Amanda_AmandaScore = 1002319, /// ProteomeDiscoverer:max differential modifications: Maximum dynamic modifications per PSM. MS_ProteomeDiscoverer_max_differential_modifications = 1002320, /// ProteomeDiscoverer:max equal modifications: Maximum equal modifications per PSM. MS_ProteomeDiscoverer_max_equal_modifications = 1002321, /// ProteomeDiscoverer:min peptide length: Minimum peptide length. MS_ProteomeDiscoverer_min_peptide_length = 1002322, /// ProteomeDiscoverer:max peptide length: Maximum peptide length. MS_ProteomeDiscoverer_max_peptide_length = 1002323, /// ProteomeDiscoverer:max number neutral loss: Maximum number of same neutral losses. MS_ProteomeDiscoverer_max_number_neutral_loss = 1002324, /// ProteomeDiscoverer:max number neutral loss modifications: Max number of same neutral losses of modifications. MS_ProteomeDiscoverer_max_number_neutral_loss_modifications = 1002325, /// ProteomeDiscoverer:use flanking ions: Flag for usage of flanking ions. MS_ProteomeDiscoverer_use_flanking_ions = 1002326, /// ProteomeDiscoverer:max number of same modifs: The maximum number of possible equal modifications per PSM. MS_ProteomeDiscoverer_max_number_of_same_modifs = 1002327, /// ProteomeDiscoverer:perform deisotoping: Defines whether a simple deisotoping shall be performed. MS_ProteomeDiscoverer_perform_deisotoping = 1002328, /// ProteomeDiscoverer:ion settings: Specifies the fragment ions and neutral losses that are calculated. MS_ProteomeDiscoverer_ion_settings = 1002329, /// ProteomeDiscoverer:3. Static Modification: ProteomeDiscoverer's 3rd static post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_3__Static_Modification_OBSOLETE = 1002330, /// ProteomeDiscoverer:5. Dynamic Modification: ProteomeDiscoverer's 5th dynamic post-translational modification (PTM) input parameter. MS_ProteomeDiscoverer_5__Dynamic_Modification_OBSOLETE = 1002331, /// lab head: The scientist responsible for personnel, grants, and instrumentation in a functional laboratory group. MS_lab_head = 1002332, /// conversion software: Computer software primarily designed to convert data represented in one format to another format, sometimes with minor data alterations in the process. MS_conversion_software = 1002333, /// ProCon: Java software designed to convert one of several proteomics identification results formats into mzIdentML or PRIDE XML. MS_ProCon = 1002334, /// PRIDE Converter2: Java software designed to convert one of several proteomics identification results formats into PRIDE XML. MS_PRIDE_Converter2 = 1002335, /// Amanda: Amanda scoring system for PSM identification. MS_Amanda = 1002336, /// Andromeda: Andromeda is a peptide search engine. MS_Andromeda = 1002337, /// Andromeda:score: The probability based score of the Andromeda search engine. MS_Andromeda_score = 1002338, /// site:global FDR: Estimation of global false discovery rate of peptides with a post-translational modification. MS_site_global_FDR = 1002339, /// ProteomeXchange project tag: Tag that can be added to a ProteomeXchange dataset, to enable the grouping of datasets. One tag can be used for indicating that a given dataset is part of a bigger project, like e.g. the Human Proteome Project. MS_ProteomeXchange_project_tag = 1002340, /// second-pass peptide identification: A putative identified peptide found in a second-pass search of protein sequences selected from a first-pass search. MS_second_pass_peptide_identification = 1002341, /// MZmine: A framework for differential analysis of mass spectrometry data. MS_MZmine = 1002342, /// ion stability type: Stability type of the ion. MS_ion_stability_type_OBSOLETE = 1002343, /// Maltcms: Modular Application Toolkit for Chromatography Mass-Spectrometry is an application framework mainly for developers. MS_Maltcms = 1002344, /// PSM-level attribute: Attribute of a single peptide-spectrum match. MS_PSM_level_attribute = 1002345, /// protein group-level identification attribute: Protein group level information. MS_protein_group_level_identification_attribute = 1002346, /// PSM-level identification statistic: Identification confidence metric for a peptide spectrum match. MS_PSM_level_identification_statistic = 1002347, /// protein group-level identification statistic: Identification confidence metric for a protein group. MS_protein_group_level_identification_statistic = 1002348, /// value greater than zero but less than or equal to one: Positive value range less than or equal to 1. MS_value_greater_than_zero_but_less_than_or_equal_to_one = 1002349, /// PSM-level global FDR: Estimation of the global false discovery rate of peptide spectrum matches. MS_PSM_level_global_FDR = 1002350, /// PSM-level local FDR: Estimation of the local false discovery rate of peptide spectrum matches. MS_PSM_level_local_FDR = 1002351, /// PSM-level p-value: Estimation of the p-value for peptide spectrum matches. MS_PSM_level_p_value = 1002352, /// PSM-level e-value: Estimation of the e-value for peptide spectrum matches. MS_PSM_level_e_value = 1002353, /// PSM-level q-value: Estimation of the q-value for peptide spectrum matches. MS_PSM_level_q_value = 1002354, /// PSM-level FDRScore: mzidLibrary FDRScore for peptide spectrum matches. MS_PSM_level_FDRScore = 1002355, /// PSM-level combined FDRScore: mzidLibrary Combined FDRScore for peptide spectrum matches specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools. MS_PSM_level_combined_FDRScore = 1002356, /// PSM-level probability: Probability that the reported peptide ion is truly responsible for some or all of the components of the specified mass spectrum. MS_PSM_level_probability = 1002357, /// search engine specific peptide sequence-level identification statistic: Search engine specific distinct peptide score. MS_search_engine_specific_peptide_sequence_level_identification_statistic = 1002358, /// peptide sequence-level local FDR: Estimation of the local false discovery rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_local_FDR = 1002359, /// distinct peptide-level FDRScore: MzidLibrary FDRScore for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_distinct_peptide_level_FDRScore = 1002360, /// distinct peptide-level combined FDRScore: Combined FDRScore for peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry) specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given peptide, used for integrating results from these distinct pools. MS_distinct_peptide_level_combined_FDRScore = 1002361, /// peptide sequence-level probability: Probability that the reported distinct peptide sequence (irrespective of mass modifications) has been correctly identified via the referenced PSMs. MS_peptide_sequence_level_probability = 1002362, /// search engine specific score for proteins: Search engine specific protein scores. MS_search_engine_specific_score_for_proteins = 1002363, /// protein-level local FDR: Estimation of the local false discovery rate of proteins. MS_protein_level_local_FDR = 1002364, /// FDRScore for proteins: MzidLibrary FDRScore for proteins specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools. MS_FDRScore_for_proteins = 1002365, /// combined FDRScore for proteins: MzidLibrary Combined FDRScore for proteins. MS_combined_FDRScore_for_proteins = 1002366, /// probability for proteins: Probability that a specific protein sequence has been correctly identified from the PSM and distinct peptide evidence, and based on the available protein sequences presented to the analysis software. MS_probability_for_proteins = 1002367, /// search engine specific score for protein groups: Search engine specific protein group scores. MS_search_engine_specific_score_for_protein_groups = 1002368, /// protein group-level global FDR: Estimation of the global false discovery rate of protein groups. MS_protein_group_level_global_FDR = 1002369, /// protein group-level local FDR: Estimation of the local false discovery rate of protein groups. MS_protein_group_level_local_FDR = 1002370, /// protein group-level p-value: Estimation of the p-value for protein groups. MS_protein_group_level_p_value = 1002371, /// protein group-level e-value: Estimation of the e-value for protein groups. MS_protein_group_level_e_value = 1002372, /// protein group-level q-value: Estimation of the q-value for protein groups. MS_protein_group_level_q_value = 1002373, /// protein group-level FDRScore: mzidLibrary FDRScore for protein groups. MS_protein_group_level_FDRScore = 1002374, /// protein group-level combined FDRScore: mzidLibrary Combined FDRScore for proteins specifically obtained for distinct combinations of single, pairs or triplets of search engines making a given PSM, used for integrating results from these distinct pools. MS_protein_group_level_combined_FDRScore = 1002375, /// protein group-level probability: Probability that at least one of the members of a group of protein sequences has been correctly identified from the PSM and distinct peptide evidence, and based on the available protein sequences presented to the analysis software. MS_protein_group_level_probability = 1002376, /// ProteomeDiscoverer:Relaxed Score Threshold: Specifies the threshold value for relaxed scoring. MS_ProteomeDiscoverer_Relaxed_Score_Threshold = 1002377, /// ProteomeDiscoverer:Strict Score Threshold: Specifies the threshold value for strict scoring. MS_ProteomeDiscoverer_Strict_Score_Threshold = 1002378, /// ProteomeDiscoverer:Peptide Without Protein Cut Off Score: Cut off score for storing peptides that do not belong to a protein. MS_ProteomeDiscoverer_Peptide_Without_Protein_Cut_Off_Score = 1002379, /// false localization rate: Estimation of the false localization rate for modification site assignment. MS_false_localization_rate = 1002380, /// MALDI Solutions LC-MALDI: Software for automated LC-MALDI analysis and reporting. MS_MALDI_Solutions_LC_MALDI = 1002381, /// Shimadzu MALDI-7090: Shimadzu MALDI-7090: MALDI-TOF-TOF. MS_Shimadzu_MALDI_7090 = 1002382, /// SCiLS software: SCiLS software for data acquisition and analysis. MS_SCiLS_software = 1002383, /// SCiLS Lab: SCiLS Lab software. MS_SCiLS_Lab = 1002384, /// SCiLS Lab format: SCiLS Lab file format. MS_SCiLS_Lab_format = 1002385, /// preprocessing software: Preprocessing software. MS_preprocessing_software = 1002386, /// PIA: PIA - Protein Inference Algorithms, a toolbox for protein inference and identification analysis. MS_PIA = 1002387, /// PIA XML format: A compilation of search engine results in the PIA XML format. MS_PIA_XML_format = 1002388, /// PIA workflow parameter: A parameter set for a single PIA analysis. MS_PIA_workflow_parameter = 1002389, /// PIA:FDRScore calculated: Indicates whether the FDR score was calculated for the input file. MS_PIA_FDRScore_calculated = 1002390, /// PIA:Combined FDRScore calculated: Indicates whether the combined FDR score was calculated for the PIA compilation. MS_PIA_Combined_FDRScore_calculated = 1002391, /// PIA:PSM sets created: Indicates whether PSM sets were created. MS_PIA_PSM_sets_created = 1002392, /// PIA:used top identifications for FDR: The number of top identifications per spectrum used for the FDR calculation, 0 means all. MS_PIA_used_top_identifications_for_FDR = 1002393, /// PIA:protein score: The score given to a protein by any protein inference. MS_PIA_protein_score = 1002394, /// PIA:protein inference: The used algorithm for the protein inference using PIA. MS_PIA_protein_inference = 1002395, /// PIA:protein inference filter: A filter used by PIA for the protein inference. MS_PIA_protein_inference_filter = 1002396, /// PIA:protein inference scoring: The used scoring method for the protein inference using PIA. MS_PIA_protein_inference_scoring = 1002397, /// PIA:protein inference used score: The used base score for the protein inference using PIA. MS_PIA_protein_inference_used_score = 1002398, /// PIA:protein inference used PSMs: The method to determine the PSMs used for scoring by the protein inference. MS_PIA_protein_inference_used_PSMs = 1002399, /// PIA:filter: A filter used for the report generation. MS_PIA_filter = 1002400, /// leading protein: At least one protein within each group should be annotated as a leading protein to indicate it has the strongest evidence, or approximately equal evidence as other group members. MS_leading_protein = 1002401, /// non-leading protein: Zero to many proteins within each group should be annotated as non-leading to indicate that other proteins have stronger evidence. MS_non_leading_protein = 1002402, /// group representative: An arbitrary and optional flag applied to exactly one protein per group to indicate it can serve as the representative of the group, amongst leading proteins, in effect serving as a tiebreaker for approaches that require exactly one group representative. MS_group_representative = 1002403, /// count of identified proteins: The number of proteins that have been identified, which must match the number of groups that pass the threshold in the file. MS_count_of_identified_proteins = 1002404, /// protein group-level result list attribute: Details describing a protein cluster. MS_protein_group_level_result_list_attribute = 1002405, /// count of identified clusters: The number of protein clusters that have been identified, which must match the number of clusters that pass the threshold in the file. MS_count_of_identified_clusters = 1002406, /// cluster identifier: An identifier applied to protein groups to indicate that they are linked by shared peptides. MS_cluster_identifier = 1002407, /// number of distinct protein sequences: The number of protein clusters that have been identified, which must match the number of clusters that pass the threshold in the file. MS_number_of_distinct_protein_sequences = 1002408, /// marginally distinguished protein: Assigned to a non-leading protein that has some independent evidence to support its presence relative to the leading protein(s), e.g. the protein may have a unique peptide but not sufficient to be promoted as a leading protein of another group. MS_marginally_distinguished_protein = 1002409, /// Anubis: Anubis software for selected reaction monitoring data. MS_Anubis = 1002410, /// TraML format: The TraML format for transitions in SRM from the PSI. File extension '.TraML'. MS_TraML_format = 1002411, /// total XIC area: Summed area of all the extracted ion chromatogram for the peptide (e.g. of all the transitions in SRM). MS_total_XIC_area = 1002412, /// product background: The background area for the quantified transition. MS_product_background = 1002413, /// postprocessing software: Postprocessing software. MS_postprocessing_software = 1002414, /// protein group passes threshold: A Boolean attribute to determine whether the protein group has passed the threshold indicated in the file. MS_protein_group_passes_threshold = 1002415, /// Orbitrap Fusion: Thermo Scientific Orbitrap Fusion. MS_Orbitrap_Fusion = 1002416, /// Orbitrap Fusion ETD: Thermo Scientific Orbitrap Fusion with ETD. MS_Orbitrap_Fusion_ETD = 1002417, /// TSQ Quantiva: Thermo Scientific TSQ Quantiva MS. MS_TSQ_Quantiva = 1002418, /// TSQ Endura: Thermo Scientific TSQ Endura MS. MS_TSQ_Endura = 1002419, /// PASSEL experiment URI: URI that allows access to a PASSEL experiment. MS_PASSEL_experiment_URI = 1002420, /// Paragon input parameter: Search engine input parameters specific to Paragon. MS_Paragon_input_parameter = 1002421, /// Paragon: sample type: The Paragon method setting indicating the type of sample at the high level, generally meaning the type of quantitation labelling or lack thereof. 'Identification' is indicated for samples without any labels for quantitation. MS_Paragon__sample_type = 1002422, /// Paragon: cysteine alkylation: The Paragon method setting indicating the actual cysteine alkylation agent; 'None' is indicated if there was no cysteine alkylation. MS_Paragon__cysteine_alkylation = 1002423, /// Paragon: instrument setting: The Paragon method setting (translating to a large number of lower level settings) indicating the instrument used or a category of instrument. MS_Paragon__instrument_setting = 1002424, /// Paragon: search effort: The Paragon method setting that controls the two major modes of search effort of the Paragon algorithm: the Rapid mode uses a conventional database search, while the Thorough mode uses a hybrid search, starting with the same approach as the Rapid mode but then follows it with a separate tag-based approach enabling a more extensive search. MS_Paragon__search_effort = 1002425, /// Paragon: ID focus: A Paragon method setting that allows the inclusion of large sets of features such as biological modification or substitutions. MS_Paragon__ID_focus = 1002426, /// Paragon: FDR analysis: The Paragon method setting that controls whether FDR analysis is conducted. MS_Paragon__FDR_analysis = 1002427, /// Paragon: quantitation: The Paragon method setting that controls whether quantitation analysis is conducted. MS_Paragon__quantitation = 1002428, /// Paragon: background correction: The Paragon method setting that controls whether the 'Background Correction' analysis is conducted; this processing estimates a correction to the attenuation in extremity ratios that can occur in isobaric quantatitation workflows on complex samples. MS_Paragon__background_correction = 1002429, /// Paragon: bias correction: The Paragon method setting that controls whether 'Bias Correction' is invoked in quantitation analysis; this correction is a normalization to set the central tendency of protein ratios to unity. MS_Paragon__bias_correction = 1002430, /// Paragon: channel to use as denominator in ratios: The Paragon method setting that controls which label channel is used as the denominator in calculating relative expression ratios. MS_Paragon__channel_to_use_as_denominator_in_ratios = 1002431, /// search engine specific input metadata: Search engine specific metadata that are not user-controlled settings. MS_search_engine_specific_input_metadata = 1002432, /// Paragon: modified data dictionary or parameter translation: This metric detects if any changes have been made to the originally installed key control files for the software; if no changes have been made, then the software version and settings are sufficient to enable exact reproduction; if changes have been made, then the modified ParameterTranslation- and ProteinPilot DataDictionary-XML files much also be provided in order to exactly reproduce a result. MS_Paragon__modified_data_dictionary_or_parameter_translation = 1002433, /// number of spectra searched: Number of spectra in a search. MS_number_of_spectra_searched = 1002434, /// data processing start time: The time that a data processing action was started. MS_data_processing_start_time = 1002435, /// Paragon: digestion: The Paragon method setting indicating the actual digestion agent - unlike other search tools, this setting does not include options that control partial specificity like 'semitrypsin'; if trypsin is used, trypsin is set, and partially conforming peptides are found in the Thorough mode of search; 'None' should be indicated only if there was really no digestion done. MS_Paragon__digestion = 1002436, /// number of decoy sequences: The number of decoy sequences, if the concatenated target-decoy approach is used. MS_number_of_decoy_sequences = 1002437, /// spectrum identification list result details: Information about the list of PSMs (SpectrumIdentificationList). MS_spectrum_identification_list_result_details = 1002438, /// final PSM list: A flag on a list of PSMs (SpectrumIdentificationList) to indicate that this is the final set of identifications to be interpreted by consuming software. Amongst the set of SpectrumIdentificationList(s) that are flagged with the term, each spectrum must not be referenced from more than one SpectrumIdentificationResult. MS_final_PSM_list = 1002439, /// intermediate PSM list: A flag on a list of PSMs (SpectrumIdentificationList) to indicate that this is not the final set of identifications to be interpreted by consuming software. This term should be used when results are provided from multiple search engines for the results from each search engine before they are combined to give consensus identifications. Amongst the set of SpectrumIdentificationList(s) that are flagged with the term, each spectrum may be referenced from more than one SpectrumIdentificationResult. MS_intermediate_PSM_list = 1002440, /// Andi-MS format: AIA Analytical Data Interchange file format for mass spectrometry data. MS_Andi_MS_format = 1002441, /// chromatograph file format: The format of the chromatography file being used. This could be a instrument or vendor specific proprietary file format or a converted open file format. MS_chromatograph_file_format = 1002442, /// Andi-CHROM format: AIA Analytical Data Interchange file format for chromatography data. MS_Andi_CHROM_format = 1002443, /// 6420 Triple Quadrupole LC/MS: The 6420 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_6420_Triple_Quadrupole_LC_MS = 1002444, /// 6460 Triple Quadrupole LC/MS: The 6460 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. It is similar to the 6420 but adds Agilent Jet Stream (AJS) technology to increase sensitivity. MS_6460_Triple_Quadrupole_LC_MS = 1002445, /// 6490 Triple Quadrupole LC/MS: The 6490 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. It is similar to the 6420 but adds the Agilent iFunnel technology to increase sensitivity. MS_6490_Triple_Quadrupole_LC_MS = 1002446, /// Paragon:special factor: The Paragon method setting indicating a list of one or more 'special factors', which generally capture secondary effects (relative to other settings) as a set of probabilities of modification features that override the assumed levels. For example the 'gel-based ID' special factor causes an increase probability of oxidation on several resides because of the air exposure impact on a gel, in addition to other effects. MS_Paragon_special_factor = 1002447, /// PEAKS:inChorusPeptideScore: The PEAKS inChorus peptide score. MS_PEAKS_inChorusPeptideScore = 1002448, /// PEAKS:inChorusProteinScore: The PEAKS inChorus protein score. MS_PEAKS_inChorusProteinScore = 1002449, /// param: b ion-H3PO4 DEPRECATED: Ion b-H3PO4: b ion with lost phosphoric acid. MS_param__b_ion_H3PO4_DEPRECATED = 1002450, /// param: y ion-H3PO4 DEPRECATED: Ion y-H3PO4: y ion with lost phosphoric acid. MS_param__y_ion_H3PO4_DEPRECATED = 1002451, /// Maui: The Maltcms Graphical User Interface. MS_Maui = 1002452, /// No fixed modifications searched: No fixed modifications are included as a parameter for the search, and therefore they are not reported. MS_No_fixed_modifications_searched = 1002453, /// No variable modifications searched: No variable modifications are included as a parameter for the search, and therefore they are not reported. MS_No_variable_modifications_searched = 1002454, /// H2O neutral loss: Neutral loss of water. MS_H2O_neutral_loss_OBSOLETE = 1002455, /// NH3 neutral loss: Neutral loss of ammonia. MS_NH3_neutral_loss_OBSOLETE = 1002456, /// H3PO4 neutral loss: Neutral loss of phosphoric acid. MS_H3PO4_neutral_loss_OBSOLETE = 1002457, /// PeptideShaker: PeptideShaker is a software for the interpretation of proteomics identification results. MS_PeptideShaker = 1002458, /// MS Amanda csv format: MS Amanda csv output format. MS_MS_Amanda_csv_format = 1002459, /// protein group-level global FNR: Estimation of the global false negative rate of protein groups. MS_protein_group_level_global_FNR = 1002460, /// protein group-level confidence: Estimation of the global confidence of protein groups. MS_protein_group_level_confidence = 1002461, /// peptide sequence-level global FNR: Estimation of the global false negative rate for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_global_FNR = 1002462, /// peptide sequence-level global confidence: Estimation of the global confidence for distinct peptides once redundant identifications of the same peptide have been removed (id est multiple PSMs have been collapsed to one entry). MS_peptide_sequence_level_global_confidence = 1002463, /// PSM-level global FNR: Estimation of the global false negative rate of peptide spectrum matches. MS_PSM_level_global_FNR = 1002464, /// PSM-level global confidence: Estimation of the global confidence of peptide spectrum matches. MS_PSM_level_global_confidence = 1002465, /// PeptideShaker PSM score: The probability based PeptideShaker PSM score. MS_PeptideShaker_PSM_score = 1002466, /// PeptideShaker PSM confidence: The probability based PeptideShaker PSM confidence. MS_PeptideShaker_PSM_confidence = 1002467, /// PeptideShaker peptide score: The probability based PeptideShaker peptide score. MS_PeptideShaker_peptide_score = 1002468, /// PeptideShaker peptide confidence: The probability based PeptideShaker peptide confidence. MS_PeptideShaker_peptide_confidence = 1002469, /// PeptideShaker protein group score: The probability based PeptideShaker protein group score. MS_PeptideShaker_protein_group_score = 1002470, /// PeptideShaker protein group confidence: The probability based PeptideShaker protein group confidence. MS_PeptideShaker_protein_group_confidence = 1002471, /// trap-type collision-induced dissociation: A collision-induced dissociation process that occurs in a trap-type collision cell. MS_trap_type_collision_induced_dissociation = 1002472, /// ion series considered in search: The description of the ion fragment series (including charges and neutral losses) that are considered by the search engine. MS_ion_series_considered_in_search = 1002473, /// ProteoAnnotator:non-canonical gene model score: The sum of peptide-level scores for peptides mapped only to non-canonical gene models within the group. MS_ProteoAnnotator_non_canonical_gene_model_score = 1002474, /// ProteoAnnotator:count alternative peptides: The count of the number of peptide sequences mapped to non-canonical gene models only within the group. MS_ProteoAnnotator_count_alternative_peptides = 1002475, /// ion mobility drift time: Drift time of an ion or spectrum of ions as measured in an ion mobility mass spectrometer. This time might refer to the central value of a bin into which all ions within a narrow range of drift time have been aggregated. MS_ion_mobility_drift_time = 1002476, /// mean ion mobility drift time array: Array of population mean ion mobility values from a drift time device, reported in seconds (or milliseconds), corresponding to a spectrum of individual peaks encoded with an m/z array. MS_mean_ion_mobility_drift_time_array = 1002477, /// mean charge array: Array of mean charge values where the mean charge is calculated as a weighted mean of the charges of individual peaks that are aggregated into a processed spectrum. MS_mean_charge_array = 1002478, /// regular expression: Regular expression. MS_regular_expression = 1002479, /// regular expression for a digital object identifier (DOI): (10[.][0-9]\{4,\}(?:[.][0-9]+)*/(?:(?![\"&\'<>])[^ \t\\r\n\\v\\f])+). MS_regular_expression_for_a_digital_object_identifier__DOI_ = 1002480, /// higher energy beam-type collision-induced dissociation: A collision-induced dissociation process wherein the projectile ion has the translational energy higher than approximately 1000 eV. MS_higher_energy_beam_type_collision_induced_dissociation = 1002481, /// statistical threshold: Estimated statistical threshold. MS_statistical_threshold = 1002482, /// PSM-level statistical threshold: Estimated statistical threshold at PSM-level. MS_PSM_level_statistical_threshold = 1002483, /// peptide-level statistical threshold: Estimated statistical threshold at peptide-level. MS_peptide_level_statistical_threshold = 1002484, /// protein-level statistical threshold: Estimated statistical threshold at protein-level. MS_protein_level_statistical_threshold = 1002485, /// protein group-level statistical threshold: Estimated statistical threshold at protein group-level. MS_protein_group_level_statistical_threshold = 1002486, /// MassIVE dataset identifier: Dataset identifier issued by the MassIVE repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_MassIVE_dataset_identifier = 1002487, /// MassIVE dataset URI: URI that allows the access to one dataset in the MassIVE repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_MassIVE_dataset_URI = 1002488, /// special processing: Details describing a special processing. MS_special_processing = 1002489, /// peptide-level scoring: Peptide-level scoring performed. MS_peptide_level_scoring = 1002490, /// modification localization scoring: Modification localization scoring performed. MS_modification_localization_scoring = 1002491, /// consensus scoring: Consensus multiple search engine approach performed. MS_consensus_scoring = 1002492, /// sample pre-fractionation: Sample pre-fractionation performed. MS_sample_pre_fractionation = 1002493, /// cross-linking search: Cross-linking search performed. MS_cross_linking_search = 1002494, /// no special processing: No special processing performed. MS_no_special_processing = 1002495, /// group PSMs by sequence: Group PSMs by distinct peptide sequence ignoring modifications. MS_group_PSMs_by_sequence = 1002496, /// group PSMs by sequence with modifications: Group PSMs by distinct peptide sequence with taking modifications into account. MS_group_PSMs_by_sequence_with_modifications = 1002497, /// group PSMs by sequence with modifications and charge: Group PSMs by distinct peptide sequence with taking modifications and charge into account. MS_group_PSMs_by_sequence_with_modifications_and_charge = 1002498, /// peptide level score: Peptide level score. MS_peptide_level_score_OBSOLETE = 1002499, /// peptide passes threshold: A Boolean attribute to determine whether the peptide has passed the threshold indicated in the file. MS_peptide_passes_threshold = 1002500, /// no PSM threshold: Indicating that no PSM threshold was used. MS_no_PSM_threshold = 1002501, /// no peptide-level threshold: Indicating that no peptide-level threshold was used. MS_no_peptide_level_threshold = 1002502, /// PSM is used for peptide-level scoring: Flags a PSM that it is used for peptide-level scoring. MS_PSM_is_used_for_peptide_level_scoring = 1002503, /// modification index: The order of modifications to be referenced elsewhere in the document. MS_modification_index = 1002504, /// regular expression for modification localization scoring: ([:digit:]+:[0|1]\{1\}.[:digit:]+[Ee]{0,1}[+-]{0,1}[:digit:]*:[:digit:]+[|]\{1\}[:digit:]+:(true|false)\{1\}). MS_regular_expression_for_modification_localization_scoring = 1002505, /// modification position score: Modification position score. MS_modification_position_score = 1002506, /// modification rescoring:false localization rate: Mod position score: false localization rate. MS_modification_rescoring_false_localization_rate = 1002507, /// cross-linking attribute: Cross-linking attribute. MS_cross_linking_attribute = 1002508, /// cross-link donor: The Cross-linking donor, assigned according to the following rules: the export software SHOULD use the following rules to choose the cross-link donor as the: longer peptide, then higher peptide neutral mass, then alphabetical order. MS_cross_link_donor = 1002509, /// cross-link acceptor: Cross-linking acceptor, assigned according to the following rules: the export software SHOULD use the following rules to choose the cross-link donor as the: longer peptide, then higher peptide neutral mass, then alphabetical order. MS_cross_link_acceptor = 1002510, /// cross-link spectrum identification item: Cross-linked spectrum identification item. MS_cross_link_spectrum_identification_item = 1002511, /// cross-linking score: Cross-linking scoring value. MS_cross_linking_score = 1002512, /// molecules per cell: The absolute abundance of protein in a cell. MS_molecules_per_cell = 1002513, /// absolute quantitation analysis: Absolute quantitation analysis. MS_absolute_quantitation_analysis = 1002514, /// internal peptide reference used: States whether an internal peptide reference is used or not in absolute quantitation analysis. MS_internal_peptide_reference_used = 1002515, /// internal protein reference used: States whether an internal protein reference is used or not in absolute quantitation analysis. MS_internal_protein_reference_used = 1002516, /// internal reference abundance: The absolute abundance of the spiked in reference peptide or protein used for absolute quantitation analysis. MS_internal_reference_abundance = 1002517, /// Progenesis:protein group normalised abundance: The data type normalised abundance for protein groups produced by Progenesis LC-MS. MS_Progenesis_protein_group_normalised_abundance = 1002518, /// Progenesis:protein group raw abundance: The data type raw abundance for protein groups produced by Progenesis LC-MS. MS_Progenesis_protein_group_raw_abundance = 1002519, /// peptide group ID: Peptide group identifier for peptide-level stats. MS_peptide_group_ID = 1002520, /// mass spectrometry imaging: A technique in which mass spectra are acquired in a spatially resolved manner. This is typically achieved by scanning a laser or primary ion beam over a sample and acquiring a mass spectrum at each position. MS_mass_spectrometry_imaging = 1002521, /// ProteomeDiscoverer:1. Static Terminal Modification: Determine 1st static terminal post-translational modifications (PTMs). MS_ProteomeDiscoverer_1__Static_Terminal_Modification = 1002522, /// Q Exactive HF: Thermo Scientific Q Exactive. MS_Q_Exactive_HF = 1002523, /// PepFinder: Thermo Scientific PepFinder BioPharma analysis software. MS_PepFinder = 1002524, /// TSQ 8000 Evo: Thermo Scientific TSQ 8000 Evo MS. MS_TSQ_8000_Evo = 1002525, /// Exactive Plus: Thermo Scientific Exactive Plus MS. MS_Exactive_Plus = 1002526, /// instrument specific scan attribute: Instrument specific scan properties that are associated with a value. MS_instrument_specific_scan_attribute = 1002527, /// synchronous prefilter selection: Synchronous prefilter selection. MS_synchronous_prefilter_selection = 1002528, /// SPS (synchronous prefilter selection): Synchronous prefilter selection. MS_SPS = MS_synchronous_prefilter_selection, /// resolution array: A data array of resolution values. MS_resolution_array = 1002529, /// baseline array: A data array of signal baseline values (the signal in the absence of analytes). MS_baseline_array = 1002530, /// UIMF format: SQLite-based file format created at Pacific Northwest National Lab. It stores an intermediate analysis of ion-mobility mass spectrometry data. MS_UIMF_format = 1002531, /// UIMF nativeID format: Native format defined by frame=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger frameType=xsd:nonNegativeInteger. MS_UIMF_nativeID_format = 1002532, /// TripleTOF 6600: SCIEX TripleTOF 6600, a quadrupole - quadrupole - time-of-flight mass spectrometer. MS_TripleTOF_6600 = 1002533, /// ProLuCID:xcorr: The ProLuCID result 'XCorr'. MS_ProLuCID_xcorr = 1002534, /// ProLuCID:deltacn: The ProLuCID result 'DeltaCn'. MS_ProLuCID_deltacn = 1002535, /// D-Score: D-Score for PTM site location at the PSM-level. MS_D_Score = 1002536, /// MD-Score: MD-Score for PTM site location at the PSM-level. MS_MD_Score = 1002537, /// PTM localization confidence metric: Localization confidence metric for a post translational modification (PTM). MS_PTM_localization_confidence_metric = 1002538, /// PeptideShaker PTM confidence type: PeptideShaker quality criteria for the confidence of PTM localizations. MS_PeptideShaker_PTM_confidence_type = 1002539, /// PeptideShaker PSM confidence type: PeptideShaker quality criteria for the confidence of PSM's. MS_PeptideShaker_PSM_confidence_type = 1002540, /// PeptideShaker peptide confidence type: PeptideShaker quality criteria for the confidence of peptide identifications. MS_PeptideShaker_peptide_confidence_type = 1002541, /// PeptideShaker protein confidence type: PeptideShaker quality criteria for the confidence of protein identifications. MS_PeptideShaker_protein_confidence_type = 1002542, /// xiFDR: Target/Decoy based FDR estimation for cross-linking peptide-identifications. MS_xiFDR = 1002543, /// xi: Search engine for cross-linked peptides. MS_xi = 1002544, /// xi:score: The xi result 'Score'. MS_xi_score = 1002545, /// Skyline mzQuantML converter: A software package to convert Skyline report to mzQuantML. MS_Skyline_mzQuantML_converter = 1002546, /// normalized spectral abundance factor: A normalized spectral abundance factor (NSAF). MS_normalized_spectral_abundance_factor = 1002547, /// distributed normalized spectral abundance factor: A distributed normalized spectral abundance factor (dNSAF). MS_distributed_normalized_spectral_abundance_factor = 1002548, /// PTM localization distinct peptide-level statistic: Statistic to convey the confidence of the localization of an amino acid modification on a peptide sequence. MS_PTM_localization_distinct_peptide_level_statistic = 1002549, /// peptide:phosphoRS score: phosphoRS score for PTM site location at the peptide-level. MS_peptide_phosphoRS_score = 1002550, /// peptide:Ascore: A-score for PTM site location at the peptide-level. MS_peptide_Ascore = 1002551, /// peptide:H-Score: H-Score for peptide phosphorylation site location at the peptide-level. MS_peptide_H_Score = 1002552, /// peptide:D-Score: D-Score for PTM site location at the peptide-level. MS_peptide_D_Score = 1002553, /// peptide:MD-Score: MD-Score for PTM site location at the peptide-level. MS_peptide_MD_Score = 1002554, /// PTM localization score threshold: Threshold for PTM site location score. MS_PTM_localization_score_threshold = 1002555, /// Ascore threshold: Threshold for Ascore PTM site location score. MS_Ascore_threshold = 1002556, /// D-Score threshold: Threshold for D-score PTM site location score. MS_D_Score_threshold = 1002557, /// MD-Score threshold: Threshold for MD-score PTM site location score. MS_MD_Score_threshold = 1002558, /// H-Score threshold: Threshold for H-score PTM site location score. MS_H_Score_threshold = 1002559, /// DeBunker:score threshold: Threshold for DeBunker PTM site location score. MS_DeBunker_score_threshold = 1002560, /// Mascot:PTM site assignment confidence threshold: Threshold for Mascot PTM site assignment confidence. MS_Mascot_PTM_site_assignment_confidence_threshold = 1002561, /// MSQuant:PTM-score threshold: Threshold for MSQuant:PTM-score. MS_MSQuant_PTM_score_threshold = 1002562, /// MaxQuant:PTM Score threshold: Threshold for MaxQuant:PTM Score. MS_MaxQuant_PTM_Score_threshold = 1002563, /// MaxQuant:P-site localization probability threshold: Threshold for MaxQuant:P-site localization probability. MS_MaxQuant_P_site_localization_probability_threshold = 1002564, /// MaxQuant:PTM Delta Score threshold: Threshold for MaxQuant:PTM Delta Score. MS_MaxQuant_PTM_Delta_Score_threshold = 1002565, /// MaxQuant:Phospho (STY) Probabilities threshold: Threshold for MaxQuant:Phospho (STY) Probabilities. MS_MaxQuant_Phospho__STY__Probabilities_threshold = 1002566, /// phosphoRS score threshold: Threshold for phosphoRS score. MS_phosphoRS_score_threshold = 1002567, /// phosphoRS site probability threshold: Threshold for phosphoRS site probability. MS_phosphoRS_site_probability_threshold = 1002568, /// ProteomeDiscoverer:Number of Spectra Processed At Once: Number of spectra processed at once in a ProteomeDiscoverer search. MS_ProteomeDiscoverer_Number_of_Spectra_Processed_At_Once = 1002569, /// sequence multiply subsumable protein: A protein for which the matched peptide sequences are the same, or a subset of, the matched peptide sequences for two or more other proteins combined. These other proteins need not all be in the same group. MS_sequence_multiply_subsumable_protein = 1002570, /// spectrum multiply subsumable protein: A protein for which the matched spectra are the same, or a subset of, the matched spectra for two or more other proteins combined. These other proteins need not all be in the same group. MS_spectrum_multiply_subsumable_protein = 1002571, /// protein detection statistical threshold: Estimated statistical threshold used for protein detection. MS_protein_detection_statistical_threshold = 1002572, /// spectrum identification statistical threshold: Estimated statistical threshold used for spectrum identification. MS_spectrum_identification_statistical_threshold = 1002573, /// ASAPRatio: A program in the TPP that calculates PSM, peptide, and protein-level abundances based on 2-channel isotope-labelled data such as ICAT, SILAC, etc. MS_ASAPRatio = 1002574, /// Tide: Tide open-source sequence search program developed at the University of Washington. MS_Tide = 1002575, /// Andromeda result format: Andromeda result file output format. MS_Andromeda_result_format = 1002576, /// 2000 QTRAP: SCIEX 2000 QTRAP. MS_2000_QTRAP = 1002577, /// 2500 QTRAP: SCIEX 2500 QTRAP. MS_2500_QTRAP = 1002578, /// 3500 QTRAP: SCIEX 3500 QTRAP. MS_3500_QTRAP = 1002579, /// QTRAP 4500: SCIEX QTRAP 4500. MS_QTRAP_4500 = 1002580, /// QTRAP 6500: SCIEX QTRAP 6500. MS_QTRAP_6500 = 1002581, /// QTRAP 6500+: SCIEX QTRAP 6500+. MS_QTRAP_6500_ = 1002582, /// TripleTOF 4600: SCIEX TripleTOF 4600 time-of-flight mass spectrometer. MS_TripleTOF_4600 = 1002583, /// TripleTOF 5600+: SCIEX TripleTOF 5600+ time-of-flight mass spectrometer. MS_TripleTOF_5600_ = 1002584, /// API 100: Applied Biosystems/MDS SCIEX API 100 MS. MS_API_100 = 1002585, /// API 100LC: Applied Biosystems/MDS SCIEX API 100LC MS. MS_API_100LC = 1002586, /// API 165: Applied Biosystems/MDS SCIEX API 165 MS. MS_API_165 = 1002587, /// API 300: Applied Biosystems/MDS SCIEX API 300 MS. MS_API_300 = 1002588, /// API 350: Applied Biosystems/MDS SCIEX API 350 MS. MS_API_350 = 1002589, /// API 365: Applied Biosystems/MDS SCIEX API 365 MS. MS_API_365 = 1002590, /// Triple Quad 3500: SCIEX Triple Quad 3500. MS_Triple_Quad_3500 = 1002591, /// Triple Quad 4500: SCIEX Triple Quad 4500. MS_Triple_Quad_4500 = 1002592, /// Triple Quad 5500: SCIEX Triple Quad 5500. MS_Triple_Quad_5500 = 1002593, /// Triple Quad 6500: SCIEX Triple Quad 6500. MS_Triple_Quad_6500 = 1002594, /// Triple Quad 6500+: SCIEX Triple Quad 6500+. MS_Triple_Quad_6500_ = 1002595, /// ProLuCID: The SEQUEST-like sequence search engine ProLuCID, developed in the Yates Lab at the Scripps Research Institute. MS_ProLuCID = 1002596, /// MS1 format: MS1 file format for MS1 spectral data. MS_MS1_format = 1002597, /// DTASelect: Analysis software designed to reassemble the SEQUEST peptide identifications and to highlight the most significant matches. MS_DTASelect = 1002598, /// splash key: Spectral Hash key, an unique identifier for spectra. MS_splash_key = 1002599, /// PRIDE XML: Internal data and submission format of the PRIDE database. MS_PRIDE_XML = 1002600, /// mzTab: Tabular result format for proteomics and metabolomics experiments. MS_mzTab = 1002601, /// sample label: Reagent used in labeled quantification methods. MS_sample_label = 1002602, /// ICAT reagent: Isotope coded affinity tag reagent. MS_ICAT_reagent = 1002603, /// ICAT heavy reagent: The name of the sample labelled with the heavy ICAT label. MS_ICAT_heavy_reagent = 1002604, /// ICAT light reagent: The name of the sample labelled with the light ICAT label. MS_ICAT_light_reagent = 1002605, /// ICPL reagent: Isotope coded protein labeling reagent. MS_ICPL_reagent = 1002606, /// ICPL reagent 0: The name of the sample labelled with the ICPL reagent 0. MS_ICPL_reagent_0 = 1002607, /// ICPL reagent 4: The name of the sample labelled with the ICPL reagent 4. MS_ICPL_reagent_4 = 1002608, /// ICPL reagent 6: The name of the sample labelled with the ICPL reagent 6. MS_ICPL_reagent_6 = 1002609, /// ICPL reagent 10: The name of the sample labelled with the ICPL reagent 10. MS_ICPL_reagent_10 = 1002610, /// SILAC reagent: Stable isotope labeling with amino acids in cell culture reagent. MS_SILAC_reagent = 1002611, /// SILAC heavy reagent: The name of the sample labelled with the heavy SILAC label. MS_SILAC_heavy_reagent = 1002612, /// SILAC medium reagent: The name of the sample labelled with the medium SILAC label. MS_SILAC_medium_reagent = 1002613, /// SILAC light reagent: The name of the sample labelled with the light SILAC label. MS_SILAC_light_reagent = 1002614, /// TMT reagent: Tandem mass tag reagent used in TMT, glycoTMT, iodoTMT, aminoxyTMT or hydrazideTMT isobaric labeling. MS_TMT_reagent = 1002615, /// TMT reagent 126: The name of the sample labelled with the TMT reagent 126. MS_TMT_reagent_126 = 1002616, /// TMT reagent 127: The name of the sample labelled with the TMT reagent 127. MS_TMT_reagent_127 = 1002617, /// TMT reagent 128: The name of the sample labelled with the TMT reagent 128. MS_TMT_reagent_128 = 1002618, /// TMT reagent 129: The name of the sample labelled with the TMT reagent 129. MS_TMT_reagent_129 = 1002619, /// TMT reagent 130: The name of the sample labelled with the TMT reagent 130. MS_TMT_reagent_130 = 1002620, /// TMT reagent 131: The name of the sample labelled with the TMT reagent 131. MS_TMT_reagent_131 = 1002621, /// iTRAQ reagent: Isobaric tag for relative and absolute quantitation (iTRAQ or iTRAQH) reagent. MS_iTRAQ_reagent = 1002622, /// iTRAQ reagent 113: The name of the sample labelled with the iTRAQ reagent 113. MS_iTRAQ_reagent_113 = 1002623, /// iTRAQ reagent 114: The name of the sample labelled with the iTRAQ reagent 114. MS_iTRAQ_reagent_114 = 1002624, /// iTRAQ reagent 115: The name of the sample labelled with the iTRAQ reagent 115. MS_iTRAQ_reagent_115 = 1002625, /// iTRAQ reagent 116: The name of the sample labelled with the iTRAQ reagent 116. MS_iTRAQ_reagent_116 = 1002626, /// iTRAQ reagent 117: The name of the sample labelled with the iTRAQ reagent 117. MS_iTRAQ_reagent_117 = 1002627, /// iTRAQ reagent 118: The name of the sample labelled with the iTRAQ reagent 118. MS_iTRAQ_reagent_118 = 1002628, /// iTRAQ reagent 119: The name of the sample labelled with the iTRAQ reagent 119. MS_iTRAQ_reagent_119 = 1002629, /// iTRAQ reagent 121: The name of the sample labelled with the iTRAQ reagent 121. MS_iTRAQ_reagent_121 = 1002630, /// Electron-Transfer/Higher-Energy Collision Dissociation (EThcD): A dissociation process combining electron-transfer and higher-energy collision dissociation (EThcD). It combines ETD (reaction time) followed by HCD (activation energy). MS_Electron_Transfer_Higher_Energy_Collision_Dissociation__EThcD_ = 1002631, /// EThcD (Electron-Transfer/Higher-Energy Collision Dissociation (EThcD)): A dissociation process combining electron-transfer and higher-energy collision dissociation (EThcD). It combines ETD (reaction time) followed by HCD (activation energy). MS_EThcD = MS_Electron_Transfer_Higher_Energy_Collision_Dissociation__EThcD_, /// jPOST dataset identifier: Dataset identifier issued by the jPOST repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_jPOST_dataset_identifier = 1002632, /// jPOST dataset URI: URI that allows the access to one dataset in the jPOST repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_jPOST_dataset_URI = 1002633, /// Q Exactive Plus: Thermo Scientific Q Exactive Plus. MS_Q_Exactive_Plus = 1002634, /// proteogenomics search: Proteogenomics search performed. MS_proteogenomics_search = 1002635, /// proteogenomics attribute: Proteogenomics attribute. MS_proteogenomics_attribute = 1002636, /// chromosome name: The name or number of the chromosome to which a given peptide has been mapped. MS_chromosome_name = 1002637, /// chromosome strand: The strand (+ or -) to which the peptide has been mapped. MS_chromosome_strand = 1002638, /// peptide start on chromosome: The overall start position on the chromosome to which a peptide has been mapped i.e. the position of the first base of the first codon, using a zero-based counting system. MS_peptide_start_on_chromosome_OBSOLETE = 1002639, /// peptide end on chromosome: The overall end position on the chromosome to which a peptide has been mapped i.e. the position of the third base of the last codon, using a zero-based counting system. MS_peptide_end_on_chromosome = 1002640, /// peptide exon count: The number of exons to which the peptide has been mapped. MS_peptide_exon_count = 1002641, /// peptide exon nucleotide sizes: A comma separated list of the number of DNA bases within each exon to which a peptide has been mapped. Assuming standard operation of a search engine, the peptide exon sizes should sum to exactly three times the peptide length. MS_peptide_exon_nucleotide_sizes = 1002642, /// peptide start positions on chromosome: A comma separated list of start positions within exons to which the peptide has been mapped, relative to peptide-chromosome start, assuming a zero-based counting system. The first value MUST match the value in peptide start on chromosome. MS_peptide_start_positions_on_chromosome = 1002643, /// genome reference version: The reference genome and versioning string as used for mapping. All coordinates are within this frame of reference. MS_genome_reference_version = 1002644, /// MSDK: Mass Spectrometry Development Kit (MSDK) is a Java library of algorithms for processing of mass spectrometry data. MS_MSDK = 1002645, /// native spectrum identifier format, combined spectra: Describes how the native spectrum identifiers that have been combined prior to searching or interpretation are formated. MS_native_spectrum_identifier_format__combined_spectra = 1002646, /// nativeID format, combined spectra (native spectrum identifier format, combined spectra): Describes how the native spectrum identifiers that have been combined prior to searching or interpretation are formated. MS_nativeID_format__combined_spectra = MS_native_spectrum_identifier_format__combined_spectra, /// Thermo nativeID format, combined spectra: Thermo comma separated list of spectra that have been combined prior to searching or interpretation. MS_Thermo_nativeID_format__combined_spectra = 1002647, /// Waters nativeID format, combined spectra: Waters comma separated list of spectra that have been combined prior to searching or interpretation. MS_Waters_nativeID_format__combined_spectra = 1002648, /// WIFF nativeID format, combined spectra: WIFF comma separated list of spectra that have been combined prior to searching or interpretation. MS_WIFF_nativeID_format__combined_spectra = 1002649, /// Bruker/Agilent YEP nativeID format, combined spectra: Bruker/Agilent comma separated list of spectra that have been combined prior to searching or interpretation. MS_Bruker_Agilent_YEP_nativeID_format__combined_spectra = 1002650, /// Bruker BAF nativeID format, combined spectra: Bruker BAF comma separated list of spectra that have been combined prior to searching or interpretation. MS_Bruker_BAF_nativeID_format__combined_spectra = 1002651, /// Bruker FID nativeID format, combined spectra: Bruker FID comma separated list of spectra that have been combined prior to searching or interpretation. MS_Bruker_FID_nativeID_format__combined_spectra = 1002652, /// multiple peak list nativeID format, combined spectra: Comma separated list of spectra that have been combined prior to searching or interpretation. MS_multiple_peak_list_nativeID_format__combined_spectra = 1002653, /// single peak list nativeID format, combined spectra: Comma separated list of spectra that have been combined prior to searching or interpretation. MS_single_peak_list_nativeID_format__combined_spectra = 1002654, /// scan number only nativeID format, combined spectra: Comma separated list of spectra that have been combined prior to searching or interpretation. MS_scan_number_only_nativeID_format__combined_spectra = 1002655, /// spectrum identifier nativeID format, combined spectra: Comma separated list of spectra that have been combined prior to searching or interpretation. MS_spectrum_identifier_nativeID_format__combined_spectra = 1002656, /// mzML unique identifier, combined spectra: Comma separated list of spectra that have been combined prior to searching or interpretation. MS_mzML_unique_identifier__combined_spectra = 1002657, /// identification parameter: Identification parameter for the search engine run. MS_identification_parameter = 1002658, /// UniProtKB text sequence format: Text-based format used by UniProtKB for sequence entries. MS_UniProtKB_text_sequence_format = 1002659, /// UniProtKB XML sequence format: XML-based format used by UniProtKB for sequence entries. MS_UniProtKB_XML_sequence_format = 1002660, /// Morpheus: Morpheus search engine. MS_Morpheus = 1002661, /// Morpheus:Morpheus score: Morpheus score for PSMs. MS_Morpheus_Morpheus_score = 1002662, /// Morpheus:summed Morpheus score: Summed Morpheus score for protein groups. MS_Morpheus_summed_Morpheus_score = 1002663, /// interaction score derived from cross-linking: Parent term for interaction scores derived from cross-linking. MS_interaction_score_derived_from_cross_linking = 1002664, /// regular expression for interaction scores derived from cross-linking: ([:digit:]+[.][a|b]:([:digit:]+|null):[:digit:]+[.][:digit:]+([Ee][+-][0-9]+)*:(true|false]\{1\})). MS_regular_expression_for_interaction_scores_derived_from_cross_linking = 1002665, /// impact II: Bruker Daltonics' impact II. MS_impact_II = 1002666, /// impact HD: Bruker Daltonics' impact HD. MS_impact_HD = 1002667, /// frag: iTRAQ 4plex reporter ion: Standard reporter ion for iTRAQ 4Plex. The value slot holds the integer mass of the iTRAQ 4Plex reporter ion, e.g. 114. MS_frag__iTRAQ_4plex_reporter_ion = 1002668, /// frag: iTRAQ 8plex reporter ion: Standard reporter ion for iTRAQ 8Plex. The value slot holds the integer mass of the iTRAQ 8Plex reporter ion, e.g. 113. MS_frag__iTRAQ_8plex_reporter_ion = 1002669, /// frag: TMT reporter ion: Standard reporter ion for TMT. The value slot holds the integer mass of the TMT reporter ion and can be suffixed with either N or C, indicating whether the mass difference is encoded at a Nitrogen or Carbon atom, e.g. 127N. MS_frag__TMT_reporter_ion = 1002670, /// frag: TMT ETD reporter ion: Standard reporter ion for TMT with ETD fragmentation. The value slot holds the integer mass of the TMT ETD reporter ion and can be suffixed with either N or C, indicating whether the mass difference is encoded at a Nitrogen or Carbon atom, e.g. 127C. MS_frag__TMT_ETD_reporter_ion = 1002671, /// no modification threshold: No statistical threshold for accepting or rejecting that a modification position. MS_no_modification_threshold = 1002672, /// OpenXQuest: Cross-Linking MS search engine. MS_OpenXQuest = 1002673, /// X500R QTOF: SCIEX X500R QTOF, a quadrupole - quadrupole - time-of-flight mass spectrometer. MS_X500R_QTOF = 1002674, /// cross-linking result details: This subsection describes terms which can describe details of cross-linking results. MS_cross_linking_result_details = 1002675, /// protein-pair-level global FDR: Estimation of the global false discovery rate of proteins-pairs in cross-linking experiments. MS_protein_pair_level_global_FDR = 1002676, /// residue-pair-level global FDR: Estimation of the global false discovery rate of residue-pairs in cross-linking experiments. MS_residue_pair_level_global_FDR = 1002677, /// supplemental beam-type collision-induced dissociation: A supplemental collision-induced dissociation process that occurs in a beam-type collision cell in addition to another primary type of dissociation. MS_supplemental_beam_type_collision_induced_dissociation = 1002678, /// supplemental collision-induced dissociation: The dissociation of an ion after supplemental collisional excitation. MS_supplemental_collision_induced_dissociation = 1002679, /// supplemental collision energy: Energy for an ion experiencing supplemental collision with a stationary gas particle resulting in dissociation of the ion. MS_supplemental_collision_energy = 1002680, /// OpenXQuest:combined score: OpenXQuest's combined score for a cross-link spectrum match. MS_OpenXQuest_combined_score = 1002681, /// OpenXQuest:xcorr xlink: OpenXQuest's cross-correlation of cross-linked ions subscore. MS_OpenXQuest_xcorr_xlink = 1002682, /// OpenXQuest:xcorr common: OpenXQuest's cross-correlation of unlinked ions subscore. MS_OpenXQuest_xcorr_common = 1002683, /// OpenXQuest:match-odds: OpenXQuest's match-odds subscore. MS_OpenXQuest_match_odds = 1002684, /// OpenXQuest:intsum: OpenXQuest's sum of matched peak intensity subscore. MS_OpenXQuest_intsum = 1002685, /// OpenXQuest:wTIC: OpenXQuest's weighted percent of total ion current subscore. MS_OpenXQuest_wTIC = 1002686, /// analysis attribute: Attribute of an item in the result of mass spectrometry proteomics data analysis. MS_analysis_attribute = 1002687, /// PTM localization attribute: Statistic derived from a post-translational modification localization analysis. MS_PTM_localization_attribute = 1002688, /// PTM localization single result statistic: Statistic for a single item derived from a post-translational modification localization analysis. MS_PTM_localization_single_result_statistic = 1002689, /// PTM localization result list statistic: Statistic for all items derived from a post-translational modification localization analysis. MS_PTM_localization_result_list_statistic = 1002690, /// global FLR: Global false localization rate for all localizations in a dataset. MS_global_FLR = 1002691, /// local FLR at threshold: Local false localization rate for the bottom item in list of localizations sorted from most to least confident. MS_local_FLR_at_threshold = 1002692, /// identification attribute: Attribute of an identification item in the result of mass spectrometry proteomics data analysis. MS_identification_attribute = 1002693, /// single identification result attribute: Attribute of a single identification item (as opposed to a list) in the result of mass spectrometry proteomics data analysis. MS_single_identification_result_attribute = 1002694, /// frag: isobaric label ion: Fragment ion corresponding to an isobaric label artifact. MS_frag__isobaric_label_ion = 1002695, /// secondary isotope peak: Fragment ion is an isotopic peak other than that monoisotopic peak. This is used in conjuction with another ion type, such as frag: y ion. MS_secondary_isotope_peak = 1002697, /// protein cluster identification attribute: An attribute of the protein cluster concept as used in mzIdentML. MS_protein_cluster_identification_attribute = 1002698, /// result list attribute: General property of an entire result list. MS_result_list_attribute = 1002699, /// PSM-level result list attribute: General property of the list of all PSMs. MS_PSM_level_result_list_attribute = 1002700, /// PSM-level result list statistic: Statistic pertaining to the full list of all PSMs. MS_PSM_level_result_list_statistic = 1002701, /// peptide sequence-level result list attribute: General property of all peptide sequences in the list. MS_peptide_sequence_level_result_list_attribute = 1002702, /// peptide sequence-level result list statistic: Statistic pertaining to all peptide sequences in the list. MS_peptide_sequence_level_result_list_statistic = 1002703, /// protein-level result list attribute: Attribute of an entire protein list. MS_protein_level_result_list_attribute = 1002704, /// protein-level result list statistic: A statistical metric of an entire protein list. MS_protein_level_result_list_statistic = 1002705, /// protein group-level result list statistic: Attrbiute of an entire list of protein groups. MS_protein_group_level_result_list_statistic = 1002706, /// (?=[KR]): Regular expression for LysargiNase. MS_____KR__ = 1002707, /// LysargiNase: Metalloproteinase found in Methanosarcina acetivorans that cleaves on the N-terminal side of lysine and arginine residues. MS_LysargiNase = 1002708, /// Tryp-N (LysargiNase): Metalloproteinase found in Methanosarcina acetivorans that cleaves on the N-terminal side of lysine and arginine residues. MS_Tryp_N = MS_LysargiNase, /// Pegasus BT: LECO bench-top GC time-of-flight mass spectrometer. MS_Pegasus_BT = 1002719, /// MSPathFinder: PNNL top-down/bottom-up analysis software for identifying peptides and proteoforms in fragmentation mass spectra. MS_MSPathFinder = 1002720, /// MSPathFinder:SpecEValue: MSPathFinder spectral E-value. MS_MSPathFinder_SpecEValue = 1002721, /// MSPathFinder:EValue: MSPathFinder E-value. MS_MSPathFinder_EValue = 1002722, /// MSPathFinder:QValue: MSPathFinder Q-value. MS_MSPathFinder_QValue = 1002723, /// MSPathFinder:PepQValue: MSPathFinder peptide-level Q-value. MS_MSPathFinder_PepQValue = 1002724, /// MSPathFinder:RawScore: MSPathFinder raw score. MS_MSPathFinder_RawScore = 1002725, /// SYNAPT G2-Si: Waters Corporation SYNAPT G2-Si orthogonal acceleration time-of-flight mass spectrometer. MS_SYNAPT_G2_Si = 1002726, /// MALDI SYNAPT G2-Si: Waters Corporation MALDI SYNAPT G2-Si orthogonal acceleration time-of-flight mass spectrometer. MS_MALDI_SYNAPT_G2_Si = 1002727, /// Vion IMS QTof: Waters Corporation Vion IMS QTof orthogonal acceleration time-of-flight mass spectrometer. MS_Vion_IMS_QTof = 1002728, /// Xevo G2 XS Tof: Waters Corporation Xevo G2 XS Tof orthogonal acceleration time-of-flight mass spectrometer. MS_Xevo_G2_XS_Tof = 1002729, /// Xevo TQ-XS: Waters Corporation Xevo TQ-XS triple quadrupole mass spectrometer. MS_Xevo_TQ_XS = 1002730, /// Xevo TQ-S micro: Waters Corporation Xevo TQ-S micro triple quadrupole mass spectrometer. MS_Xevo_TQ_S_micro = 1002731, /// Orbitrap Fusion Lumos: Thermo Scientific Orbitrap Fusion Lumos mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers. MS_Orbitrap_Fusion_Lumos = 1002732, /// peptide-level spectral count: The number of MS2 spectra identified for a peptide sequence specified by the amino acid one-letter codes plus optional PTMs in spectral counting. MS_peptide_level_spectral_count = 1002733, /// peptide ion-level spectral count: The number of MS2 spectra identified for a molecular ion defined by the peptide sequence represented by the amino acid one-letter codes, plus optional PTMs plus optional charged aducts plus the charge state, in spectral counting. MS_peptide_ion_level_spectral_count = 1002734, /// feature-level quantification datatype: The data type of the value reported in a QuantLayer for a feature. MS_feature_level_quantification_datatype = 1002735, /// PSM-level quantification datatype: The data type of the value reported in a QuantLayer for a PSM. MS_PSM_level_quantification_datatype = 1002736, /// peptide-level quantification datatype: The data type of the value reported in a QuantLayer for a peptide. MS_peptide_level_quantification_datatype = 1002737, /// protein-level quantification datatype: The data type of the value reported in a QuantLayer for a protein. MS_protein_level_quantification_datatype = 1002738, /// protein group-level quantification datatype: The data type of the value reported in a QuantLayer for a protein group. MS_protein_group_level_quantification_datatype = 1002739, /// unmapped peptide: Within the context of a proteogenomics approach, a peptide sequence that has not been mapped to a genomic location. MS_unmapped_peptide = 1002740, /// unmapped protein: Within the context of a proteogenomics approach, a protein sequence that has not been mapped to a genomic location. MS_unmapped_protein = 1002741, /// noise array: A data array of noise values. MS_noise_array = 1002742, /// sampled noise m/z array: A data array of parallel, independent m/z values for a sampling of noise across a spectrum (typically much smaller than MS:1000514, the m/z array). MS_sampled_noise_m_z_array = 1002743, /// sampled noise intensity array: A data array of intensity values for the amplitude of noise variation superposed on the baseline (MS:1002745) across a spectrum (for use with MS:1002743, sampled noise m/z array). MS_sampled_noise_intensity_array = 1002744, /// sampled noise baseline array: A data array of baseline intensity values (the intensity in the absence of analytes) for a sampling of noise across a spectrum (for use with MS:1002743, sampled noise m/z array). MS_sampled_noise_baseline_array = 1002745, /// MS-Numpress linear prediction compression followed by zlib compression: Compression using MS-Numpress linear prediction compression and zlib. MS_MS_Numpress_linear_prediction_compression_followed_by_zlib_compression = 1002746, /// MS-Numpress positive integer compression followed by zlib compression: Compression using MS-Numpress positive integer compression and zlib. MS_MS_Numpress_positive_integer_compression_followed_by_zlib_compression = 1002747, /// MS-Numpress short logged float compression followed by zlib compression: Compression using MS-Numpress short logged float compression and zlib. MS_MS_Numpress_short_logged_float_compression_followed_by_zlib_compression = 1002748, /// Mascot:IntegratedSpectralLibrarySearch: Means that Mascot has integrated the search results of database and spectral library search into a single data set. MS_Mascot_IntegratedSpectralLibrarySearch = 1002749, /// NIST MSPepSearch: Search tool of the NIST (National Institute of Standards and Technology) for spectral library searches. MS_NIST_MSPepSearch = 1002750, /// NIST MSP format: MSP text format defined by the NIST. MS_NIST_MSP_format = 1002751, /// database type spectral library: Database containing spectra. MS_database_type_spectral_library = 1002752, /// value between 0 and 1000 inclusive: Value range for scores. MS_value_between_0_and_1000_inclusive = 1002753, /// MSPepSearch:score: MSPepSearch score (0 for entirely dissimilar and 1000 for identical observed spectrum and library spectrum. MS_MSPepSearch_score = 1002754, /// combined ms-ms + spectral library search: A combined MS2 (with fragment ions) and spectral library search. MS_combined_ms_ms___spectral_library_search = 1002755, /// iodoTMT quantitation analysis: Quantitation analysis using the Thermo Fisher sulfhydryl-reactive iodo tandem mass tag (iodoTMT) labelling workflow. MS_iodoTMT_quantitation_analysis = 1002756, /// glyco-TMT quantitation analysis: Quantitation analysis using the Thermo Fisher carbonyl-reactive glyco-tandem mass tag (glyco-TMT) labelling workflow. MS_glyco_TMT_quantitation_analysis = 1002757, /// aminoxyTMT quantitation analysis: Quantitation analysis using the Thermo Fisher carbonyl-reactive aminoxy tandem mass tag (aminoxyTMT) labelling workflow. MS_aminoxyTMT_quantitation_analysis = 1002758, /// hydrazideTMT quantitation analysis: Quantitation analysis using the Thermo Fisher carbonyl-reactive hydrazide tandem mass tag (hydrazide-TMT) labelling workflow. MS_hydrazideTMT_quantitation_analysis = 1002759, /// iTRAQH quantitation analysis: Quantification analysis using the carbonyl-reactive isobaric tags for relative and absolute quantification hydrazide (iTRAQH) labelling workflow. MS_iTRAQH_quantitation_analysis = 1002760, /// DiART quantitation analysis: Quantification analysis using the amine-reactive deuterium isobaric amine reactive tag (DiART) labelling workflow. MS_DiART_quantitation_analysis = 1002761, /// DiLeu quantitation analysis: Quantification analysis using the amine-reactive dimethyl leucine (DiLeu) tag labelling workflow. MS_DiLeu_quantitation_analysis = 1002762, /// TMT reagent 127N: The name of the sample labelled with the TMT reagent 127N. MS_TMT_reagent_127N = 1002763, /// TMT reagent 127C: The name of the sample labelled with the TMT reagent 127C. MS_TMT_reagent_127C = 1002764, /// TMT reagent 128N: The name of the sample labelled with the TMT reagent 128N. MS_TMT_reagent_128N = 1002765, /// TMT reagent 128C: The name of the sample labelled with the TMT reagent 128C. MS_TMT_reagent_128C = 1002766, /// TMT reagent 129N: The name of the sample labelled with the TMT reagent 129N. MS_TMT_reagent_129N = 1002767, /// TMT reagent 129C: The name of the sample labelled with the TMT reagent 129C. MS_TMT_reagent_129C = 1002768, /// TMT reagent 130N: The name of the sample labelled with the TMT reagent 130N. MS_TMT_reagent_130N = 1002769, /// TMT reagent 130C: The name of the sample labelled with the TMT reagent 130C. MS_TMT_reagent_130C = 1002770, /// DiART reagent: Deuterium isobaric amine reactive tag labeling reagent. MS_DiART_reagent = 1002771, /// DiART reagent 114: The name of the sample labelled with the DiART reagent 114. MS_DiART_reagent_114 = 1002772, /// DiART reagent 115: The name of the sample labelled with the DiART reagent 115. MS_DiART_reagent_115 = 1002773, /// DiART reagent 116: The name of the sample labelled with the DiART reagent 116. MS_DiART_reagent_116 = 1002774, /// DiART reagent 117: The name of the sample labelled with the DiART reagent 117. MS_DiART_reagent_117 = 1002775, /// DiART reagent 118: The name of the sample labelled with the DiART reagent 118. MS_DiART_reagent_118 = 1002776, /// DiART reagent 119: The name of the sample labelled with the DiART reagent 119. MS_DiART_reagent_119 = 1002777, /// DiLeu reagent: Dimethyl leucine labeling reagent. MS_DiLeu_reagent = 1002778, /// DiLeu reagent 115: The name of the sample labelled with the DiLeu reagent 115. MS_DiLeu_reagent_115 = 1002779, /// DiLeu reagent 116: The name of the sample labelled with the DiLeu reagent 116. MS_DiLeu_reagent_116 = 1002780, /// DiLeu reagent 117: The name of the sample labelled with the DiLeu reagent 117. MS_DiLeu_reagent_117 = 1002781, /// DiLeu reagent 118: The name of the sample labelled with the DiLeu reagent 118. MS_DiLeu_reagent_118 = 1002782, /// 6550 iFunnel Q-TOF LC/MS: The 6550 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6550_iFunnel_Q_TOF_LC_MS = 1002783, /// 6550A iFunnel Q-TOF LC/MS: The 6550A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6550A_iFunnel_Q_TOF_LC_MS = 1002784, /// 6520B Q-TOF LC/MS: The 6520B Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6520B_Q_TOF_LC_MS = 1002785, /// 6530A Q-TOF LC/MS: The 6530A Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6530A_Q_TOF_LC_MS = 1002786, /// 6530B Q-TOF LC/MS: The 6530B Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6530B_Q_TOF_LC_MS = 1002787, /// 6538 Q-TOF LC/MS: The 6538 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6538_Q_TOF_LC_MS = 1002788, /// 6540 Q-TOF LC/MS: The 6540 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6540_Q_TOF_LC_MS = 1002789, /// 6542 Q-TOF LC/MS: The 6542 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6542_Q_TOF_LC_MS = 1002790, /// 6545 Q-TOF LC/MS: The 6545 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6545_Q_TOF_LC_MS = 1002791, /// 6560 Q-TOF LC/MS: The 6560 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6560_Q_TOF_LC_MS = 1002792, /// 6570 Q-TOF LC/MS: The 6570 Quadrupole Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6570_Q_TOF_LC_MS = 1002793, /// 6120B Quadrupole LC/MS: The 6120B Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers. MS_6120B_Quadrupole_LC_MS = 1002794, /// 6150 Quadrupole LC/MS: The 6150 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers. MS_6150_Quadrupole_LC_MS = 1002795, /// 6224 Time-of-Flight LC/MS: The 6224 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6224_Time_of_Flight_LC_MS = 1002796, /// 6230A Time-of-Flight LC/MS: The 6230A Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6230A_Time_of_Flight_LC_MS = 1002797, /// 6230B Time-of-Flight LC/MS: The 6230B Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. MS_6230B_Time_of_Flight_LC_MS = 1002798, /// 6430 Triple Quadrupole LC/MS: The 6430 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_6430_Triple_Quadrupole_LC_MS = 1002799, /// 6495A Triple Quadrupole LC/MS: The 6495A Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_6495A_Triple_Quadrupole_LC_MS = 1002800, /// 6495B Triple Quadrupole LC/MS: The 6495B Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_6495B_Triple_Quadrupole_LC_MS = 1002801, /// 7000A Triple Quadrupole GC/MS: The 7000A Quadrupole GC/MS system is a Agilent gas chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_7000A_Triple_Quadrupole_GC_MS = 1002802, /// 7000B Triple Quadrupole GC/MS: The 7000B Quadrupole GC/MS system is a Agilent gas chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. MS_7000B_Triple_Quadrupole_GC_MS = 1002803, /// 7800 Quadrupole ICP-MS: The 7800 Quadrupole ICP-MS system is a Agilent inductively couple plasma instrument combined with a Agilent quadrupole mass spectrometer. MS_7800_Quadrupole_ICP_MS = 1002804, /// 8800 Triple Quadrupole ICP-MS: The 8800 Quadrupole ICP-MS system is a Agilent inductively couple plasma instrument combined with a Agilent quadrupole mass spectrometer. MS_8800_Triple_Quadrupole_ICP_MS = 1002805, /// ion: Molecular entity having a net positive or negative electric charge. MS_ion = 1002806, /// positive mode adduct ion: Adduct ion with positive ionization. MS_positive_mode_adduct_ion = 1002807, /// negative mode adduct ion: Adduct ion with negative ionization. MS_negative_mode_adduct_ion = 1002808, /// adduct ion attribute: Nonphysical characteristic attributed to an adduct ion. MS_adduct_ion_attribute = 1002809, /// adduct ion X m/z: Theoretical m/z of the X component in the adduct M+X or M-X. This term was formerly called 'adduct ion mass', but it is not really a mass. It corresponds to the column mislabelled as 'mass' at https://fiehnlab.ucdavis.edu/staff/kind/Metabolomics/MS-Adduct-Calculator. MS_adduct_ion_X_m_z = 1002810, /// adduct ion isotope: Isotope of the matrix molecule M of an adduct formation. MS_adduct_ion_isotope = 1002811, /// Regular expression for adduct ion formula: (\[[:digit:]{0,1}M([+][:digit:]{0,1}(H|K|(Na)|(Li)|(Cl)|(Br)|(NH3)|(NH4)|(CH3OH)|(IsoProp)|(DMSO)|(FA)|(Hac)|(TFA)|(NaCOOH)|(HCOOH)|(CF3COOH)|(ACN))){0,}([-][:digit:]{0,1}(H|(H2O)|(CH2)|(CH4)|(NH3)|(CO)|(CO2)|(COCH2)|(HCOOH)|(C2H4)|(C4H8)|(C3H2O3)|(C5H8O4)|(C6H10O4)|(C6H10O5)|(C6H8O6))){0,}\][:digit:]{0,1}[+-]). MS_Regular_expression_for_adduct_ion_formula = 1002812, /// adduct ion formula: Adduct formation formula of the form M+X or M-X, as constrained by the provided regular expression. MS_adduct_ion_formula = 1002813, /// volt-second per square centimeter: An electrical mobility unit that equals the speed [cm/s] an ion reaches when pulled through a gas by a Voltage[V] over a certain distance [cm]. MS_volt_second_per_square_centimeter = 1002814, /// Vs/cm^2 (volt-second per square centimeter): An electrical mobility unit that equals the speed [cm/s] an ion reaches when pulled through a gas by a Voltage[V] over a certain distance [cm]. MS_Vs_cm_2 = MS_volt_second_per_square_centimeter, /// inverse reduced ion mobility: Ion mobility measurement for an ion or spectrum of ions as measured in an ion mobility mass spectrometer. This might refer to the central value of a bin into which all ions within a narrow range of mobilities have been aggregated. MS_inverse_reduced_ion_mobility = 1002815, /// mean ion mobility array: Array of population mean ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_mean_ion_mobility_array = 1002816, /// Bruker TDF format: Bruker TDF raw file format. MS_Bruker_TDF_format = 1002817, /// Bruker TDF nativeID format: Native format defined by frame=xsd:nonNegativeInteger scan=xsd:nonNegativeInteger. MS_Bruker_TDF_nativeID_format = 1002818, /// Bruker TDF nativeID format, combined spectra: Bruker TDF comma separated list of spectra that have been combined prior to searching or interpretation. MS_Bruker_TDF_nativeID_format__combined_spectra = 1002819, /// M+H ion: Adduct formed by protonation of a matrix molecule M, i.e. the addition of a matrix molecule M plus a proton. MS_M_H_ion_1002820 = 1002820, /// M-H ion: Adduct formed by deprotonation of a matrix molecule M, i.e. the removal of a proton from a matrix molecule M. MS_M_H_ion_1002821 = 1002821, /// OpenMS file format: File format developed by the OpenMS team. MS_OpenMS_file_format = 1002822, /// idXML: OpenMS intermediate identification format. MS_idXML = 1002823, /// featureXML: OpenMS feature file format. MS_featureXML = 1002824, /// consensusXML: OpenMS consensus map format. MS_consensusXML = 1002825, /// MetaMorpheus: MetaMorpheus search engine. MS_MetaMorpheus = 1002826, /// MetaMorpheus:score: MetaMorpheus score for PSMs. MS_MetaMorpheus_score = 1002827, /// MetaMorpheus:protein score: MetaMorpheus score for protein groups. MS_MetaMorpheus_protein_score = 1002828, /// XCMS:into: Feature intensity produced by XCMS findPeaks() from integrated peak intensity. MS_XCMS_into = 1002829, /// XCMS:intf: Feature intensity produced by XCMS findPeaks() from baseline corrected integrated peak intensity. MS_XCMS_intf = 1002830, /// XCMS:maxo: Feature intensity produced by XCMS findPeaks() from maximum peak intensity. MS_XCMS_maxo = 1002831, /// XCMS:area: Feature intensity produced by XCMS findPeaks() from feature area that is not normalized by the scan rate. MS_XCMS_area = 1002832, /// alternating polarity mode: Polarities of the scans of a run are alternating, i.e. both positive and negative mode scans are acquired. MS_alternating_polarity_mode = 1002833, /// ProteomeDiscoverer:Delta Score: The Delta Score reported by Proteome Discoverer version 2. MS_ProteomeDiscoverer_Delta_Score = 1002834, /// LTQ Orbitrap Classic: Thermo Fisher Scientific LTQ Orbitrap Classic. MS_LTQ_Orbitrap_Classic = 1002835, /// iProX dataset identifier: Dataset identifier issued by the iProX repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_iProX_dataset_identifier = 1002836, /// iProX dataset URI: URI that allows the access to one dataset in the iProX repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_iProX_dataset_URI = 1002837, /// mzMLb format: mzMLb file format, mzML encapsulated within HDF5. MS_mzMLb_format = 1002838, /// Conversion to mzMLb: Conversion of a file format to Proteomics Standards Initiative mzMLb file format. MS_Conversion_to_mzMLb = 1002839, /// external reference data: Data belonging to an external reference. MS_external_reference_data = 1002840, /// external HDF5 dataset: The HDF5 dataset location containing the binary data, relative to the dataset containing the mzML. Also indicates that there is no data in the section of the BinaryDataArray. MS_external_HDF5_dataset = 1002841, /// external offset: The position in the external data where the array begins. MS_external_offset = 1002842, /// external array length: Describes how many fields an array contains. MS_external_array_length = 1002843, /// Experiment additional parameter: Root node for terms relating to the description of an Experiment in relation to the PRIDE-XML element ExperimentCollection/Experiment/additional/cvParam. MS_Experiment_additional_parameter = 1002844, /// Associated file URI: URI of one external file associated to the PRIDE experiment (maybe through a PX submission). MS_Associated_file_URI = 1002845, /// Associated raw file URI: URI of one raw data file associated to the PRIDE experiment (maybe through a PX submission). MS_Associated_raw_file_URI = 1002846, /// ProteomeCentral dataset URI: URI associated to one PX submission in ProteomeCentral. MS_ProteomeCentral_dataset_URI = 1002847, /// Result file URI: URI of one file labeled as 'Result', associated to one PX submission. MS_Result_file_URI = 1002848, /// Search engine output file URI: URI of one search engine output file associated to one PX submission. MS_Search_engine_output_file_URI = 1002849, /// Peak list file URI: URI of one of one search engine output file associated to one PX submission. MS_Peak_list_file_URI = 1002850, /// Other type file URI: URI of one file labeled as 'Other', associated to one PX submission. MS_Other_type_file_URI = 1002851, /// Dataset FTP location: FTP location of one entire PX data set. MS_Dataset_FTP_location = 1002852, /// Dataset with no associated published manuscript: A dataset which does not have an associated published manuscript. MS_Dataset_with_no_associated_published_manuscript = 1002853, /// Peer-reviewed dataset: Dataset has been peer-reviewed somehow. MS_Peer_reviewed_dataset = 1002854, /// Non peer-reviewed dataset: Dataset that has not been peer-reviewed by any means. MS_Non_peer_reviewed_dataset = 1002855, /// Supported dataset by repository: Dataset for which the identifications and/or spectra/traces are in formats that can be parsed by the hosting data repository such that internal references between identifications and spectra/traces are preserved and browsable at the repository. This is usually called a complete submission. MS_Supported_dataset_by_repository = 1002856, /// Unsupported dataset by repository: Dataset for which the identifications and/or spectra/traces are in formats that cannot be parsed by the hosting data repository and thus internal references between identifications and spectra/traces are not browsable at the repository. This is usually called a partial submission. MS_Unsupported_dataset_by_repository = 1002857, /// Dataset with its publication pending: A dataset which has an associated manuscript pending for publication. MS_Dataset_with_its_publication_pending = 1002858, /// Additional associated raw file URI: Additional URI of one raw data file associated to the PRIDE experiment (maybe through a PX submission). The URI is provided via an additional resource to PRIDE. MS_Additional_associated_raw_file_URI = 1002859, /// Gel image file URI: URI of one gel image file associated to one PX submission. MS_Gel_image_file_URI = 1002860, /// Reprocessed complete dataset: All the raw files included in the original dataset (or group of original datasets) have been reanalysed. MS_Reprocessed_complete_dataset = 1002861, /// Reprocessed subset dataset: A subset of the raw files included in the original dataset (or group of original datasets) has been reanalysed. MS_Reprocessed_subset_dataset = 1002862, /// Data derived from previous dataset: One dataset is a reanalysis of previously published data. MS_Data_derived_from_previous_dataset = 1002863, /// No PTMs are included in the dataset: No post-translational-modifications are been included in the identified peptides of one dataset. MS_No_PTMs_are_included_in_the_dataset = 1002864, /// Accepted manuscript: A dataset has one associated manuscript, which has been accepted but no PubMedID is available yet. MS_Accepted_manuscript = 1002865, /// Reference: Literature reference associated with one dataset (including the authors, title, year and journal details). The value field can be used for the PubMedID, or to specify if one manuscript is just submitted or accepted, but it does not have a PubMedID yet. MS_Reference = 1002866, /// Experimental information has been refined since this experiment was originally made publicly available: This means that the experimental information available has been improved, for instance precursor charges were added. MS_Experimental_information_has_been_refined_since_this_experiment_was_originally_made_publicly_available = 1002867, /// Original data: One dataset is not a reanalysis of previously published data. MS_Original_data = 1002868, /// mzR: Bioconductor package mzR for reading and writing mass spectrometry data files. MS_mzR = 1002869, /// MSnbase: Bioconductor package MSnbase provides infrastructure for manipulation, processing and visualization of mass spectrometry and proteomics data, ranging from raw to quantitative and annotated data. MS_MSnbase = 1002870, /// CAMERA: Bioconductor package CAMERA for annotation of peak lists generated by xcms, rule based annotation of isotopes and adducts, isotope validation, EIC correlation based tagging of unknown adducts and fragments. MS_CAMERA = 1002871, /// Panorama Public dataset identifier: Dataset identifier issued by the Panorama Public repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_Panorama_Public_dataset_identifier = 1002872, /// Panorama Public dataset URI: URI that allows the access to one dataset in the Panorama Public repository. A dataset can refer to either a single sample as part of a study, or all samples that are part of the study corresponding to a publication. MS_Panorama_Public_dataset_URI = 1002873, /// TSQ Altis: Thermo Scientific TSQ Altis Triple Quadrupole MS. MS_TSQ_Altis = 1002874, /// TSQ Quantis: Thermo Scientific TSQ Quantis Triple Quadrupole MS. MS_TSQ_Quantis = 1002875, /// TSQ 9000: Thermo Scientific TSQ 9000 Triple Quadrupole MS. MS_TSQ_9000 = 1002876, /// Q Exactive HF-X: Thermo Scientific Q Exactive HF-X Hybrid Quadrupole Orbitrap MS. MS_Q_Exactive_HF_X = 1002877, /// small molecule analysis software: Software for the analysis of small molecules. MS_small_molecule_analysis_software = 1002878, /// Progenesis QI: Metabolomics analysis software for LC-MS data from Nonlinear Dynamics. MS_Progenesis_QI = 1002879, /// Compound Discoverer: Metabolomics analysis software from Thermo Fisher Scientific. MS_Compound_Discoverer = 1002880, /// MyCompoundID: Metabolite identification tool MyCompoundID. MS_MyCompoundID = 1002881, /// study variable average function: Function used to calculate the study variable quantification value. MS_study_variable_average_function = 1002882, /// median: Median function. MS_median = 1002883, /// study variable variation function: Function used to calculate the study variable quantification variation value. MS_study_variable_variation_function = 1002884, /// standard error: Standard error function. MS_standard_error = 1002885, /// small molecule quantification datatype: The value reported in a small molecule quantification. MS_small_molecule_quantification_datatype = 1002886, /// Progenesis QI normalised abundance: The normalised abundance produced by Progenesis QI LC-MS. MS_Progenesis_QI_normalised_abundance = 1002887, /// small molecule confidence measure: The confidence score produced by a small molecule analysis software. MS_small_molecule_confidence_measure = 1002888, /// Progenesis MetaScope score: The confidence score produced by Progenesis QI. MS_Progenesis_MetaScope_score = 1002889, /// fragmentation score: The fragmentation confidence score. MS_fragmentation_score = 1002890, /// isotopic fit score: The isotopic fit confidence score. MS_isotopic_fit_score = 1002891, /// ion mobility attribute: An attribute describing ion mobility searches. MS_ion_mobility_attribute = 1002892, /// ion mobility array: Abstract array of ion mobility data values. A more specific child term concept should be specified in data files to make precise the nature of the data being provided. MS_ion_mobility_array = 1002893, /// InChIKey: Unique chemical structure identifier for chemical compounds. MS_InChIKey = 1002894, /// small molecule identification attribute: Compound identification information. MS_small_molecule_identification_attribute = 1002895, /// compound identification confidence level: Confidence level for annotation of identified compounds as defined by the Metabolomics Standards Initiative (MSI). The value slot can have the values 'Level 0' until 'Level 4'. MS_compound_identification_confidence_level = 1002896, /// isotopomer peak: Identifies a peak when no de-isotoping has been performed. The value slot reports the isotopomer peak, e.g. '2H', '13C', '15N', '18O', '31P'. MS_isotopomer_peak_OBSOLETE = 1002897, /// Shimadzu Biotech QTOF nativeID format: Native format defined by scan=xsd:nonNegativeInteger. MS_Shimadzu_Biotech_QTOF_nativeID_format = 1002898, /// msalign format: msalign file format. MS_msalign_format = 1002899, /// feature format: TopFD feature file format. MS_feature_format = 1002900, /// TopPIC: TopPIC: a software tool for top-down mass spectrometry-based proteoform identification and characterization. MS_TopPIC = 1002901, /// TopFD: Top-down mass spectral feature detection. MS_TopFD = 1002902, /// TopMG: A mass graph-based approach for the identification of modified proteoforms using top-down tandem mass spectra. MS_TopMG = 1002903, /// proteoform-level identification attribute: Proteoform level information. MS_proteoform_level_identification_attribute = 1002904, /// proteoform-level identification statistic: Identification confidence metric for a proteoform. MS_proteoform_level_identification_statistic = 1002905, /// search engine specific score for proteoforms: Search engine specific proteoform scores. MS_search_engine_specific_score_for_proteoforms = 1002906, /// proteoform-level global FDR: Estimation of the global false discovery rate of proteoforms. MS_proteoform_level_global_FDR = 1002907, /// proteoform-level local FDR: Estimation of the local false discovery rate of proteoforms. MS_proteoform_level_local_FDR = 1002908, /// proteoform-level statistical threshold: Estimated statistical threshold at proteoform-level. MS_proteoform_level_statistical_threshold = 1002909, /// proteoform-level global FDR threshold: Threshold for the global false discovery rate of proteoforms. MS_proteoform_level_global_FDR_threshold = 1002910, /// proteoform-level local FDR threshold: Threshold for the local false discovery rate of proteoforms. MS_proteoform_level_local_FDR_threshold = 1002911, /// TopPIC input parameter: Search engine input parameters specific to TopPIC. MS_TopPIC_input_parameter = 1002912, /// TopPIC:fixed modification: Fixed modifications for TopPIC searching. MS_TopPIC_fixed_modification = 1002913, /// TopPIC:N-term form: N-terminal forms of proteins allowed in TopPIC searching. MS_TopPIC_N_term_form = 1002914, /// TopPIC:error tolerance: Error tolerance for precursor and fragment masses in PPM. MS_TopPIC_error_tolerance = 1002915, /// TopPIC:max shift: Maximum value of the mass shift (in Dalton) of an unexpected modification. MS_TopPIC_max_shift = 1002916, /// TopPIC:min shift: Minimum value of the mass shift (in Dalton) of an unexpected modification. MS_TopPIC_min_shift = 1002917, /// TopPIC:shift num: Maximum number of unexpected modifications in a proteoform spectrum match. MS_TopPIC_shift_num = 1002918, /// TopPIC:spectral cutoff type: Spectrum-level cutoff type for filtering identified proteoform spectrum matches. MS_TopPIC_spectral_cutoff_type = 1002919, /// TopPIC:spectral cutoff value: Spectrum-level cutoff value for filtering identified proteoform spectrum matches. MS_TopPIC_spectral_cutoff_value = 1002920, /// TopPIC:proteoform-level cutoff type: Proteoform-level cutoff type for filtering identified proteoform spectrum matches. MS_TopPIC_proteoform_level_cutoff_type = 1002921, /// TopPIC:proteoform-level cutoff value: Proteoform-level cutoff value for filtering identified proteoform spectrum matches. MS_TopPIC_proteoform_level_cutoff_value = 1002922, /// TopPIC:generating function: P-value and E-value estimation using generating function. MS_TopPIC_generating_function = 1002923, /// TopPIC:combined spectrum number: Number of combined spectra. MS_TopPIC_combined_spectrum_number = 1002924, /// TopPIC:mod file: The text file containing the information of common PTMs. MS_TopPIC_mod_file = 1002925, /// TopPIC:thread number: Number of threads used in TopPIC. MS_TopPIC_thread_number = 1002926, /// TopPIC:use TopFD feature: Proteoform identification using TopFD feature file. MS_TopPIC_use_TopFD_feature = 1002927, /// TopPIC:spectral E-value: TopPIC spectrum-level E-value. MS_TopPIC_spectral_E_value = 1002928, /// TopPIC:spectral FDR: TopPIC spectrum-level FDR. MS_TopPIC_spectral_FDR = 1002929, /// TopPIC:proteoform-level FDR: TopPIC proteoform-level FDR. MS_TopPIC_proteoform_level_FDR = 1002930, /// TopPIC:spectral p-value: TopPIC spectrum-level p-value. MS_TopPIC_spectral_p_value = 1002931, /// TopPIC:MIScore: Modification identification score. MS_TopPIC_MIScore = 1002932, /// TopPIC:MIScore threshold: TopPIC:MIScore threshold. MS_TopPIC_MIScore_threshold = 1002933, /// TopMG input parameter: Search engine input parameters specific to TopMG. MS_TopMG_input_parameter = 1002934, /// TopMG:fixed modification: Fixed modifications for TopMG searching. MS_TopMG_fixed_modification = 1002935, /// TopMG:N-term form: N-terminal forms of proteins allowed in TopMG searching. MS_TopMG_N_term_form = 1002936, /// TopMG:error tolerance: Error tolerance for precursor and fragment masses in PPM. MS_TopMG_error_tolerance = 1002937, /// TopMG:max shift: Maximum value of the mass shift (in Dalton). MS_TopMG_max_shift = 1002938, /// TopMG:spectral cutoff type: Spectrum-level cutoff type for filtering identified proteoform spectrum matches. MS_TopMG_spectral_cutoff_type = 1002939, /// TopMG:spectral cutoff value: Spectrum-level cutoff value for filtering identified proteoform spectrum matches. MS_TopMG_spectral_cutoff_value = 1002940, /// TopMG:proteoform-level cutoff type: Proteoform-level cutoff type for filtering identified proteoform spectrum matches. MS_TopMG_proteoform_level_cutoff_type = 1002941, /// TopMG:proteoform-level cutoff value: Proteoform-level cutoff value for filtering identified proteoform spectrum matches. MS_TopMG_proteoform_level_cutoff_value = 1002942, /// TopMG:mod file: The text file containing the information of common PTMs. MS_TopMG_mod_file = 1002943, /// TopMG:thread number: Number of threads used in TopMG. MS_TopMG_thread_number = 1002944, /// TopMG:use TopFD feature: Proteoform identification using TopFD feature file. MS_TopMG_use_TopFD_feature = 1002945, /// TopMG:proteoform graph gap size: Gap size in constructing proteoform graph. MS_TopMG_proteoform_graph_gap_size = 1002946, /// TopMG:variable PTM number: Maximum number of variable PTMs. MS_TopMG_variable_PTM_number = 1002947, /// TopMG:variable PTM number in proteoform graph gap: Maximum number of variable PTMs in a proteoform graph gap. MS_TopMG_variable_PTM_number_in_proteoform_graph_gap = 1002948, /// TopMG:use ASF-DIAGONAL: Protein filtering using ASF-DIAGONAL method. MS_TopMG_use_ASF_DIAGONAL = 1002949, /// TopMG:spectral E-value: TopMG spectrum-level E-value. MS_TopMG_spectral_E_value = 1002950, /// TopMG:spectral FDR: TopMG spectrum-level FDR. MS_TopMG_spectral_FDR = 1002951, /// TopMG:proteoform-level FDR: TopMG proteoform-level FDR. MS_TopMG_proteoform_level_FDR = 1002952, /// TopMG:spectral p-value: TopMG spectrum-level p-value. MS_TopMG_spectral_p_value = 1002953, /// collisional cross sectional area: Structural molecular descriptor for the effective interaction area between the ion and neutral gas measured in ion mobility mass spectrometry. MS_collisional_cross_sectional_area = 1002954, /// hr-ms compound identification confidence level: Refined High Resolution mass spectrometry confidence level for annotation of identified compounds as proposed by Schymanski et al. The value slot can have the values 'Level 1', 'Level 2', 'Level 2a', 'Level 2b', 'Level 3', 'Level 4', and 'Level 5'. MS_hr_ms_compound_identification_confidence_level = 1002955, /// isotopic ion MS peak: A mass spectrometry peak that represents one or more isotopic ions. The value slot contains a description of the represented isotope set, e.g. 'M+1 peak'. MS_isotopic_ion_MS_peak = 1002956, /// isotopomer MS peak: The described isotopomer mass spectrometric signal. The value slot contains a description of the represented isotopomer, e.g. '13C peak', '15N peak', '2H peak', '18O peak' or '31P peak'. MS_isotopomer_MS_peak = 1002957, /// isotopologue MS peak: The described isotopologue mass spectrometric signal. The value slot contains a description of the represented isotopologue, e.g. '13C1 peak' or '15N1 peak'. MS_isotopologue_MS_peak = 1002958, /// isomer: One of several species (or molecular entities) that have the same atomic composition (molecular formula) but different line formulae or different stereochemical formulae. MS_isomer = 1002959, /// isotopomer: An isomer that differs from another only in the spatial distribution of the constitutive isotopic atoms. MS_isotopomer = 1002960, /// isotopologue: A molecular entity that differs only in isotopic composition (number of isotopic substitutions). MS_isotopologue = 1002961, /// mean: The arithmetic mean. MS_mean = 1002962, /// variation coefficient: The coefficient of variation. MS_variation_coefficient = 1002963, /// lipidomics analysis software: Lipidomics analysis software. MS_lipidomics_analysis_software = 1002964, /// Lipid Data Analyzer: Lipid Data Analyzer software for lipid quantification. MS_Lipid_Data_Analyzer = 1002965, /// chrom format: The Lipid Data Analyzer native chrom format. MS_chrom_format = 1002966, /// LipidHunter: Software for identification of phospholipids by high-throughput processing of LC-MS and shotgun lipidomics datasets. MS_LipidHunter = 1002967, /// LipidXplorer: Software for consensual cross-platform lipidomics. MS_LipidXplorer = 1002968, /// LipidMatch: An automated workflow for rule-based lipid identification using untargeted high-resolution tandem mass spectrometry data. MS_LipidMatch = 1002969, /// Greazy: Open-source software for automated phospholipid tandem mass spectrometry identification. MS_Greazy = 1002970, /// LipidBlast: LC-MS-based lipidomics and automated identification of lipids using the LipidBlast in-silico MS/MS library. MS_LipidBlast = 1002971, /// Lipid-Pro: A computational lipid identification solution for untargeted lipidomics on data-independent acquisition tandem mass spectrometry platforms. MS_Lipid_Pro = 1002972, /// LipidFinder: A computational workflow for the discovery of lipids for the identification of eicosanoid-phosphoinositides in platelets. MS_LipidFinder = 1002973, /// LipiDex: An integrated software package for high-confidence lipid identification. MS_LipiDex = 1002974, /// LIQUID: An-open source software for identifying lipids in LC-MS/MS-based lipidomics data. MS_LIQUID = 1002975, /// ALEX: Analysis of lipid experiments, a calculator for m/z values of intact lipid molecules (MS1). MS_ALEX = 1002976, /// ALEX123: Analysis of lipid experiments 123, a calculator with m/z values of intact lipid molecules (MS1) and their fragment ions at the MS2 and MS3 level. MS_ALEX123 = 1002977, /// LIMSA: Software tool for the quantitative analysis of mass spectrometric lipidome data. MS_LIMSA = 1002978, /// LOBSTAHS: Adduct-Based lipidomics software for the discovery and identification of oxidative stress biomarkers. MS_LOBSTAHS = 1002979, /// LipidQA: Lipid qualitative/quantitative analysis software for identification and quantitation of complex lipid molecular species. MS_LipidQA = 1002980, /// Proline: The Proline software suite for mass spectrometry based proteomics. MS_Proline = 1002981, /// PepNovo: PepNovo tool for de novo peptide sequencing. MS_PepNovo = 1002982, /// pNovo: pNovo tool for de novo peptide sequencing and identification using HCD spectra. MS_pNovo = 1002983, /// Novor: Novor real-time peptide de novo sequencing software tool. MS_Novor = 1002984, /// in-gel digestion: Digestion of proteins separated by gel electrophoresis for mass spectrometric characterization of proteins and proteomes. MS_in_gel_digestion = 1002985, /// in-solution digestion: Digestion of proteins in solution for mass spectrometric characterization of proteins and proteomes. MS_in_solution_digestion = 1002986, /// IdentiPy: IdentiPy. MS_IdentiPy = 1002987, /// IdentiPy:RHNS: The IdentiPy result 'RHNS'. MS_IdentiPy_RHNS = 1002988, /// IdentiPy:hyperscore: The IdentiPy result 'hyperscore'. MS_IdentiPy_hyperscore = 1002989, /// ms_deisotope: ms_deisotope, a library for deisotoping and charge state deconvolution of mass spectra. MS_ms_deisotope = 1002990, /// python-psims: python-psims, a library for generating mzML and mzIdentML. MS_python_psims = 1002991, /// Andromeda:PEP: Posterior error probability of the best identified peptide of the Andromeda search engine. MS_Andromeda_PEP = 1002995, /// Andromeda:apl file format: Peak list file format of the Andromeda search engine. MS_Andromeda_apl_file_format = 1002996, /// ProteomeXchange dataset identifier reanalysis number: Index number of a reanalysis within a ProteomeXchange reprocessed dataset identifier container (RPXD). MS_ProteomeXchange_dataset_identifier_reanalysis_number = 1002997, /// LCMS-9030: Shimadzu Scientific Instruments LCMS-9030 Q-TOF MS. MS_LCMS_9030 = 1002998, /// LCMS-8060: Shimadzu Scientific Instruments LCMS-8060 MS. MS_LCMS_8060 = 1002999, /// LCMS-8050: Shimadzu Scientific Instruments LCMS-8050 MS. MS_LCMS_8050 = 1003000, /// LCMS-8045: Shimadzu Scientific Instruments LCMS-8045 MS. MS_LCMS_8045 = 1003001, /// LCMS-8040: Shimadzu Scientific Instruments LCMS-8040 MS. MS_LCMS_8040 = 1003002, /// LCMS-2020: Shimadzu Scientific Instruments LCMS-2020. MS_LCMS_2020 = 1003003, /// maXis II: Bruker Daltonics' maXis II. MS_maXis_II = 1003004, /// timsTOF Pro: Bruker Daltonics' timsTOF Pro. MS_timsTOF_Pro = 1003005, /// mean inverse reduced ion mobility array: Array of population mean ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_mean_inverse_reduced_ion_mobility_array = 1003006, /// raw ion mobility array: Array of raw ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_raw_ion_mobility_array = 1003007, /// raw inverse reduced ion mobility array: Array of raw ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_raw_inverse_reduced_ion_mobility_array = 1003008, /// Shimadzu Biotech LCD format: Shimadzu Biotech LCD file format. MS_Shimadzu_Biotech_LCD_format = 1003009, /// LPPtiger: Software for lipidome-specific prediction and identification of oxidized phospholipids from LC-MS datasets. MS_LPPtiger = 1003010, /// pFind: Sequence-tag-based search engine pFind. MS_pFind = 1003011, /// KSDP score: Kernel mass spectral dot product scoring function. MS_KSDP_score = 1003012, /// i3tms: i3-tms search engine and data-analysis software. MS_i3tms = 1003013, /// MSFragger: A database search-based peptide identification tool. MS_MSFragger = 1003014, /// razor peptide: Peptide that is shared between protein groups and assigned to the protein group with the largest number of identified peptides. MS_razor_peptide = 1003015, /// ProteinProphet:peptide weight: Fraction of peptide evidence attributable to a protein or a set of indistinguishable proteins. MS_ProteinProphet_peptide_weight = 1003016, /// ProteinProphet:peptide group weight: Fraction of peptide evidence attributable to a group of proteins. MS_ProteinProphet_peptide_group_weight = 1003017, /// Philosopher: General proteomics processing toolkit for shotgun proteomics. MS_Philosopher = 1003018, /// pressure chromatogram: Representation of chromatographic pressure versus time. MS_pressure_chromatogram = 1003019, /// flow rate chromatogram: Representation of the chromatographic flow rate versus time. MS_flow_rate_chromatogram = 1003020, /// Fixed modification: Post-translational modification which is assumed to be present at each instance of a residue type. MS_Fixed_modification = 1003021, /// Variable modification: Post-translational modification which may or may not be present at a residue type. MS_Variable_modification = 1003022, /// OpenPepXL: Cross-Linking MS search engine. MS_OpenPepXL = 1003023, /// OpenPepXL:score: The OpenPepXL score for a cross-link spectrum match. MS_OpenPepXL_score = 1003024, /// named element: A named element that is an attribute in a proteomics standards file. MS_named_element = 1003025, /// named element in mzIdentML: A named element that is an attribute in a mzIdentML file. MS_named_element_in_mzIdentML = 1003026, /// named element in mzML: A named element that is an attribute in a mzML file. MS_named_element_in_mzML = 1003027, /// Orbitrap Exploris 480: Thermo Scientific Orbitrap Exploris 480 Quadrupole Orbitrap MS. MS_Orbitrap_Exploris_480 = 1003028, /// Orbitrap Eclipse: Thermo Scientific Orbitrap Eclipse mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers. MS_Orbitrap_Eclipse = 1003029, /// Mascot:MinNumSigUniqueSeqs: Minimum number of significant unique sequences required in a protein hit. The setting is only relevant if the protein grouping strategy is 'family clustering'. MS_Mascot_MinNumSigUniqueSeqs = 1003030, /// CPTAC accession number: Main identifier of a CPTAC dataset. MS_CPTAC_accession_number = 1003031, /// compound identification confidence code in MS-DIAL: The confidence code to describe the confidence of annotated compounds as defined by the MS-DIAL program. MS_compound_identification_confidence_code_in_MS_DIAL = 1003032, /// molecular entity attribute: Non-inherent characteristic attributed to a molecular entity. MS_molecular_entity_attribute = 1003033, /// atom: Smallest constituent unit of ordinary matter that constitutes a chemical element. MS_atom = 1003034, /// small molecule: Low molecular weight (< 900 daltons) organic compound that may regulate a biological process. MS_small_molecule = 1003035, /// metabolite: Small molecule that is the intermediate end product of metabolism. MS_metabolite = 1003036, /// ribonucleotide: Nucleotide containing ribose as its pentose component. MS_ribonucleotide = 1003037, /// deoxyribonucleotide: Monomer, or single unit, of DNA, or deoxyribonucleic acid. MS_deoxyribonucleotide = 1003038, /// amino acid: Organic molecule that contains amine (-NH2) and carboxyl (-COOH) functional groups, along with a side chain (R group) that is specific to each amino acid. MS_amino_acid = 1003039, /// monosaccharide: Simplest form of sugar and the most basic units of carbohydrate that cannot be further hydrolyzed to a simpler molecule. MS_monosaccharide = 1003040, /// nucleic acid: Molecule composed of a chain of nucleotides. MS_nucleic_acid = 1003041, /// polysaccharide: Polymeric carbohydrate molecules composed of long chains of monosaccharide units bound together by glycosidic linkages. MS_polysaccharide = 1003042, /// number of residues: Number of amino acid residues in a peptide, commonly referred to as the peptide length. MS_number_of_residues = 1003043, /// number of missed cleavages: Number of amino acid residue bonds that should have been cleaved by the cleavage agent used, but were not. MS_number_of_missed_cleavages = 1003044, /// peptide-to-protein mapping: Process of mapping a peptide sequence to a protein sequence. MS_peptide_to_protein_mapping = 1003045, /// peptide-to-protein mapping attribute: Nonphysical characteristic attributed to the result of peptide-to-protein mapping. MS_peptide_to_protein_mapping_attribute = 1003046, /// protein sequence offset: Offset in number of residues from the n terminus of the protein at which the peptide begins. Use 1 when the first residue of the peptide sequence is the first residue of the protein sequence. MS_protein_sequence_offset = 1003047, /// number of enzymatic termini: Total number of termini that match standard rules for the cleavage agent, 2 when both termini match cleavage agent rules, 1 when only one terminus does, and 0 if neither terminus matches cleavage agent rules. MS_number_of_enzymatic_termini = 1003048, /// peptidoform: Peptide that contains zero or more mass modifications on the termini or side chains of its amino acid residues, and may be differentiated from other peptidoforms with the same peptide sequence but different mass modification configurations. MS_peptidoform = 1003049, /// peptidoform attribute: Non-inherent characteristic attributed to a peptidoform. MS_peptidoform_attribute = 1003050, /// peptidoform ion: Peptidoform that has formed an adduct with an ion, thereby rendering it potentially detectable with a mass spectrometer. Commonly called a 'precursor' or 'precursor ion' or 'parent ion'. MS_peptidoform_ion = 1003051, /// peptidoform ion property: Inherent or measurable characteristic of a peptidoform ion. MS_peptidoform_ion_property = 1003052, /// theoretical monoisotopic m/z: Mass-to-charge ratio of a peptidoform ion composed of the most common isotope of each atom computed from the putative knowledge of its molecular constituents. MS_theoretical_monoisotopic_m_z = 1003053, /// theoretical average m/z: Mass-to-charge ratio of a peptidoform ion computed from the putative knowledge of its molecular constituents, averaged over the distribution of naturally occurring isotopes. MS_theoretical_average_m_z = 1003054, /// adduct: Product of a direct addition of two or more distinct molecules, resulting in a single reaction product containing all atoms of all components. The resultant is considered a distinct molecular species. MS_adduct = 1003055, /// adduct ion property: Physical measurable characteristic of an adduct ion. MS_adduct_ion_property = 1003056, /// scan number: Ordinal number of the scan indicating its order of acquisition within a mass spectrometry acquisition run. MS_scan_number = 1003057, /// spectrum property: Inherent or measurable characteristic of a spectrum. MS_spectrum_property = 1003058, /// number of peaks: Number of peaks or features in a spectrum. For a peak-picked spectrum, this will correspond to the number of data points. For a non-peak-picked spectrum, this corresponds to the number of features discernable in the spectrum, which will be fewer than the number of data points. MS_number_of_peaks = 1003059, /// number of data points: Number of data points in a spectrum. For a peak-picked spectrum, this will correspond to the number of peaks. For a non-peak-picked spectrum, this corresponds to the number of values in the data array, which are not all peaks. MS_number_of_data_points = 1003060, /// spectrum name: Label attached to a spectrum uniquely naming it within a collection of spectra, often in a spectral library. It is often a string combination of peptide sequence, charge, mass modifications, collision energy, but will obviously be different for small molecules or unidentified spectra. It must be unique within a collection. MS_spectrum_name = 1003061, /// spectrum index: Integer index value associated with a spectrum within a collection of spectra, often in a spectral library. By custom, index counters should begin with 0. MS_spectrum_index = 1003062, /// universal spectrum identifier: PSI universal spectrum identifier (USI) multipart key that uniquely identifies a spectrum available in a ProteomeXchange datasets or spectral library. MS_universal_spectrum_identifier = 1003063, /// spectrum aggregation attribute: Non-inherent characteristic attributed to spectrum aggregation. MS_spectrum_aggregation_attribute = 1003064, /// spectrum aggregation type: Categorization of a spectrum based on its type of aggregation (e.g., individual spectrum, consensus spectrum, best replicate spectrum, etc.). MS_spectrum_aggregation_type = 1003065, /// singleton spectrum: Spectrum that is not the result of some aggregation process. MS_singleton_spectrum = 1003066, /// consensus spectrum: Spectrum that is the result of merging several replicate spectra to form a spectrum that is more representative of its class and ideally less noisy that any of its source replicates. MS_consensus_spectrum = 1003067, /// best replicate spectrum: Spectrum that is considered the most representative from a pool of replicate spectra. MS_best_replicate_spectrum = 1003068, /// number of replicate spectra available: Number of replicate spectra available for use during the aggregation process. MS_number_of_replicate_spectra_available = 1003069, /// number of replicate spectra used: Number of replicate spectra used during the aggregation process. This is generally applicable when there are many replicates available, but some are discarded as being low S/N, blended, or otherwise unsuitable, and the remaining set is then used for merging via a consensus algorithm. MS_number_of_replicate_spectra_used = 1003070, /// spectrum origin attribute: Non-inherent characteristic attributed to spectrum aggregation. MS_spectrum_origin_attribute = 1003071, /// spectrum origin type: Categorization of a spectrum based on its origin (e.g., observed spectrum, predicted spectrum, demultiplexed spectrum, etc.). MS_spectrum_origin_type = 1003072, /// observed spectrum: Spectrum that originates from an analysis attempt of a single analyte species on an instrument. MS_observed_spectrum = 1003073, /// predicted spectrum: Spectrum that originates from a compututational algorithm that attempts to predict spectra. MS_predicted_spectrum = 1003074, /// demultiplexed spectrum: Spectrum that originates from an attempted extraction of a single ion spieces from a multiplexed spectrum that contains multiple ion species. MS_demultiplexed_spectrum = 1003075, /// uninterpreted spectrum: Spectrum provided in the form of plain numerical values without any information pertaining to the interpretation of features. MS_uninterpreted_spectrum = 1003076, /// interpreted spectrum: Spectrum provided in a form where specific features of the spectrum are interpreted to provide putative explanations for some feature. MS_interpreted_spectrum = 1003077, /// interpreted spectrum attribute: Non-inherent characteristic attributed to an interpreted spectrum. MS_interpreted_spectrum_attribute = 1003078, /// total unassigned intensity fraction: Fraction of intensity summed from all unassigned peaks divided by the intensity summed from all peaks in the spectrum. MS_total_unassigned_intensity_fraction = 1003079, /// top 20 peak unassigned intensity fraction: Fraction of intensity summed from unassigned peaks among the top 20 divided by the intensity summed from all top 20 peaks in the spectrum. MS_top_20_peak_unassigned_intensity_fraction = 1003080, /// unidentified modification monoisotopic mass delta: Monoisotopic mass delta in Daltons of an amino acid residue modification whose atomic composition or molecular identity has not been determined. This term should not be used for modifications of known molecular identity such as those available in Unimod, RESID or PSI-MOD. This term MUST NOT be used inside the element in mzIdentML. MS_unidentified_modification_monoisotopic_mass_delta = 1003081, /// MS-DIAL: Data processing software for untargeted metabolomics and lipidomics that supports multiple instruments and MS vendors. MS_MS_DIAL = 1003082, /// raw data file: Data file that contains original data as generated by an instrument, although not necessarily in the original data format (i.e. an original raw file converted to a different format is still a raw data file). MS_raw_data_file = 1003083, /// processed data file: File that contains data that has been substantially processed or transformed from what was originally acquired by an instrument. MS_processed_data_file = 1003084, /// previous MSn-1 scan precursor intensity: Intensity of the precursor ion in the previous MSn-1 scan (prior in time to the referencing MSn scan). For an MS2 scan, this means the MS1 precursor intensity. It is unspecified on whether this is an apex (across m/z) intensity, integrated (across m/z) intensity, a centroided peak intensity of unknown origin, or even summed across several isotopes. MS_previous_MSn_1_scan_precursor_intensity = 1003085, /// precursor apex intensity: Intensity of the precursor ion current as measured by its apex point over time and m/z. It is unspecified whether this is the intensity of the selected isotope or the most intense isotope. MS_precursor_apex_intensity = 1003086, /// supported by repository but incomplete data and/or metadata: Dataset for which the identifications and/or spectra/traces are in formats that can be parsed by the hosting data repository such that internal references between identifications and spectra/traces are preserved and browsable at the repository. However, some metadata is not properly described due to lack of CV terms or some auxiliary data, such as data used to create a spectral library or a sequence search database crucial to the analysis, is not available. MS_supported_by_repository_but_incomplete_data_and_or_metadata = 1003087, /// truncation and zlib compression: Data array compression using mantissa bit truncation followed by zlib compression. MS_truncation_and_zlib_compression = 1003088, /// truncation, delta prediction and zlib compression: Data array compression using mantissa bit truncation, delta prediction and zlib compression. MS_truncation__delta_prediction_and_zlib_compression = 1003089, /// truncation, linear prediction and zlib compression: Data array compression using mantissa bit truncation, linear prediction and zlib compression. MS_truncation__linear_prediction_and_zlib_compression = 1003090, /// binary data compression parameter: Settable parameter for a binary data compression event. MS_binary_data_compression_parameter = 1003091, /// number of mantissa bits truncated: Number of extraneous mantissa bits truncated to improve subsequent compression. MS_number_of_mantissa_bits_truncated = 1003092, /// Lys-N: Metalloendopeptidase found in the mushroom Grifola frondosa that cleaves proteins on the amino side of lysine residues. MS_Lys_N = 1003093, /// Orbitrap Exploris 240: Thermo Scientific Orbitrap Exploris 240 Quadrupole Orbitrap MS. MS_Orbitrap_Exploris_240 = 1003094, /// Orbitrap Exploris 120: Thermo Scientific Orbitrap Exploris 120 Quadrupole Orbitrap MS. MS_Orbitrap_Exploris_120 = 1003095, /// LTQ Orbitrap Velos Pro: Thermo Scientific LTQ Orbitrap Velos Pro, often just referred to as the Orbitrap Velos Pro. MS_LTQ_Orbitrap_Velos_Pro = 1003096, /// MaxQuant protein group-level score: The probability based MaxQuant protein group score. MS_MaxQuant_protein_group_level_score = 1003097, /// Andromeda peptide PEP: Peptide probability from Andromeda. MS_Andromeda_peptide_PEP = 1003098, /// MaxQuant-DIA peptide PEP: Peptide probability from MaxQuant-DIA algorithm. MS_MaxQuant_DIA_peptide_PEP = 1003099, /// MaxQuant-DIA score: PSM evidence score from MaxQuant-DIA algorithm. MS_MaxQuant_DIA_score = 1003100, /// MaxQuant-DIA PEP: PSM evidence PEP probability from MaxQuant-DIA algorithm. MS_MaxQuant_DIA_PEP = 1003101, /// NIST msp comment: Term for a comment field withing the NIST msp file format MS_NIST_msp_comment = 1003102, /// ion interpretation format: Interpretation format used for annotating individual spectrum ion peaks. MS_ion_interpretation_format = 1003103, /// peptide ion interpretation format: Interpretation format designed primarily for peptides, with allowances for generic chemical formulas and other miscellaneous named ions. MS_peptide_ion_interpretation_format = 1003104, /// cross-linked peptide ion interpretation format: Interpretation format designed specifically for cross-linked peptide ion peaks. MS_cross_linked_peptide_ion_interpretation_format = 1003105, /// glycan ion interpretation format: Interpretation format designed specifically for glycan ion peaks. MS_glycan_ion_interpretation_format = 1003106, /// lipid ion interpretation format: Interpretation format designed specifically for lipid ion peaks. MS_lipid_ion_interpretation_format = 1003107, /// PatternLab: PatternLab for Proteomics is an integrated computational environment for analyzing shotgun proteomic data. MS_PatternLab = 1003108, /// SIM-XL: Identifying cross-linked peptides in complex protein mixtures MS_SIM_XL = 1003109, /// SIM-XL score: SIM-XL identification search engine score MS_SIM_XL_score = 1003110, /// QUIN-XL: Quantification of cross-linked peptides in complex protein mixtures MS_QUIN_XL = 1003111, /// Orbitrap ID-X: Thermo Scientific Orbitrap ID-X mass spectrometer with Tribrid architecture consisting of quadrupole mass filter, linear ion trap and Orbitrap mass analyzers. MS_Orbitrap_ID_X = 1003112, /// OpenMS:ConsensusID PEP: The OpenMS ConsesusID tool posterior error probability MS_OpenMS_ConsensusID_PEP = 1003113, /// OpenMS:Best PSM Score: The score of the best PSM selected by the underlying identification tool MS_OpenMS_Best_PSM_Score = 1003114, /// OpenMS:Target-decoy PSM q-value: The OpenMS Target-decoy q-values at PSM level MS_OpenMS_Target_decoy_PSM_q_value = 1003115, /// OpenMS:Target-decoy peptide q-value: The OpenMS Target-decoy q-values at peptide sequence level MS_OpenMS_Target_decoy_peptide_q_value = 1003116, /// OpenMS:Target-decoy protein q-value: The OpenMS Target-decoy q-values at protein level MS_OpenMS_Target_decoy_protein_q_value = 1003117, /// EPIFANY: A Method for Efficient High-Confidence Protein Inference. The tool is part of the OpenMS framework MS_EPIFANY = 1003118, /// EPIFANY:Protein posterior probability: Protein Posterior probability calculated by EPIFANY protein inference algorithm MS_EPIFANY_Protein_posterior_probability = 1003119, /// OpenMS:LFQ intensity: The data type LFQ intensity produced by OpenMS. MS_OpenMS_LFQ_intensity = 1003120, /// OpenMS:LFQ spectral count: The data type LFQ spectral count produced by OpenMS. MS_OpenMS_LFQ_spectral_count = 1003121, /// rapifleX: Bruker Daltonics' rapiflex: MALDI TOF/TOF. MS_rapifleX = 1003122, /// Bruker Daltonics timsTOF series: Bruker Daltonics timsTOF series MS_Bruker_Daltonics_timsTOF_series = 1003123, /// timsTOF fleX: Bruker Daltonics' timsTOF fleX MS_timsTOF_fleX = 1003124, /// ProSight:spectral Q-value: ProSight spectrum-level Q-value. MS_ProSight_spectral_Q_value = 1003125, /// ProSight:spectral P-score: ProSight spectrum-level P-score. MS_ProSight_spectral_P_score = 1003126, /// ProSight:spectral E-value: ProSight spectrum-level E-value. MS_ProSight_spectral_E_value = 1003127, /// ProSight:spectral C-score: ProSight spectrum-level C-score. MS_ProSight_spectral_C_score = 1003128, /// proteoform-level Q-value: Estimation of the Q-value for proteoforms. MS_proteoform_level_Q_value = 1003129, /// ProSight:proteoform Q-value: ProSight proteoform-level Q-value. MS_ProSight_proteoform_Q_value = 1003130, /// isoform-level identification attribute: Isoform level information. MS_isoform_level_identification_attribute = 1003131, /// isoform-level identification statistic: Identification confidence metric for a isoform. MS_isoform_level_identification_statistic = 1003132, /// isoform-level Q-value: Estimation of the Q-value for isoforms. MS_isoform_level_Q_value = 1003133, /// ProSight:isoform Q-value: ProSight isoform-level Q-value. MS_ProSight_isoform_Q_value = 1003134, /// ProSight:protein Q-value: ProSight protein-level Q-value. MS_ProSight_protein_Q_value = 1003135, /// ProSight input parameter: Search engine input parameters specific to ProSight. MS_ProSight_input_parameter = 1003136, /// TDPortal input parameter: Search engine input parameters specific to TDPortal. MS_TDPortal_input_parameter = 1003137, /// ProSight:Run delta m mode: If true, runs delta m mode in ProSight. MS_ProSight_Run_delta_m_mode = 1003138, /// ProSight:Run Subsequence Search mode: If true, runs Subsequence Search mode in ProSight. MS_ProSight_Run_Subsequence_Search_mode = 1003139, /// ProSight:Run Annotated Proteoform Search mode: If true, runs Annotated Proteoform Search mode in ProSight. MS_ProSight_Run_Annotated_Proteoform_Search_mode = 1003140, /// ProSight: ProSight: Database search engine for top-down proteomics. MS_ProSight = 1003141, /// TDPortal: TDPortal: Database search engine for top-down proteomics. MS_TDPortal = 1003142, /// mass array: A data array of mass values. MS_mass_array = 1003143, /// Triple Quad 7500: SCIEX Triple Quad 7500. MS_Triple_Quad_7500 = 1003144, /// ThermoRawFileParser: Cross-platform software to convert Thermo RAW files to a number of open formats. MS_ThermoRawFileParser = 1003145, /// pyteomics: Python module that helps handling various proteomics data analysis tasks. MS_pyteomics = 1003146, /// PTMProphet probability: Probability that one mass modification has been correctly localized to a specific residue as computed by PTMProphet. MS_PTMProphet_probability = 1003147, /// PTMProphet mean best probability: PSM-specific average of the m best site probabilities over all potential sites where m is the number of modifications of a specific type, as computed by PTMProphet. MS_PTMProphet_mean_best_probability = 1003148, /// PTMProphet normalized information content: PTMProphet-computed PSM-specific normalized (0.0 - 1.0) measure of information content across all modifications of a specific type. MS_PTMProphet_normalized_information_content = 1003149, /// PTMProphet information content: PTMProphet-computed PSM-specific measure of information content per modification type ranging from 0 to m, where m is the number of modifications of a specific type. MS_PTMProphet_information_content = 1003150, /// SHA-256: SHA-256 (member of Secure Hash Algorithm-2 family) is a cryptographic hash function designed by the National Security Agency (NSA) and published by the NIST as a U. S. government standard. It is also used to verify file integrity. MS_SHA_256 = 1003151, /// GCMS-QP2010SE: Shimadzu Scientific Instruments GCMS-QP2010SE. MS_GCMS_QP2010SE = 1003152, /// raw ion mobility drift time array: Array of raw ion mobility values from a drift time device, reported in seconds (or milliseconds), corresponding to a spectrum of individual peaks encoded with an m/z array. MS_raw_ion_mobility_drift_time_array = 1003153, /// deconvoluted ion mobility array: Array of ion mobility values (K or K0) based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_deconvoluted_ion_mobility_array = 1003154, /// deconvoluted inverse reduced ion mobility array: Array of ion mobility values based on ion separation in gaseous phase due to different ion mobilities under an electric field based on ion size, m/z and shape, normalized for the local conditions and reported in volt-second per square centimeter, as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_deconvoluted_inverse_reduced_ion_mobility_array = 1003155, /// deconvoluted ion mobility drift time array: Array of mean ion mobility values from a drift time device, reported in seconds (or milliseconds), as an average property of an analyte post peak-detection, weighted charge state reduction, and/or adduct aggregation, corresponding to a spectrum of individual peaks encoded with an m/z array. MS_deconvoluted_ion_mobility_drift_time_array = 1003156, /// scanning quadrupole position lower bound m/z array: Array of m/z values representing the lower bound m/z of the quadrupole position at each point in the spectrum. MS_scanning_quadrupole_position_lower_bound_m_z_array = 1003157, /// scanning quadrupole position upper bound m/z array: Array of m/z values representing the upper bound m/z of the quadrupole position at each point in the spectrum. MS_scanning_quadrupole_position_upper_bound_m_z_array = 1003158, /// isolation window full range: Indicates an acquisition mode in which the isolation window is a full range, rather than a subset of the full range. MS_isolation_window_full_range = 1003159, /// mzQC format: Proteomics Standards Initiative mzQC format for quality control data. MS_mzQC_format = 1003160, /// quality control data format: Grouping term for quality control data formats. MS_quality_control_data_format = 1003161, /// PTX-QC: Proteomics (PTX) - QualityControl (QC) software for QC report generation and visualization. MS_PTX_QC = 1003162, /// PTXQC (PTX-QC): Proteomics (PTX) - QualityControl (QC) software for QC report generation and visualization. MS_PTXQC = MS_PTX_QC, /// unimod root node: The root node of the unimod modifications ontology. UNIMOD_unimod_root_node = 200000000, /// Acetyl: Acetylation. UNIMOD_Acetyl = 200000001, /// Amidated: Amidation. UNIMOD_Amidated = 200000002, /// Biotin: Biotinylation. UNIMOD_Biotin = 200000003, /// Carbamidomethyl: Iodoacetamide derivative. UNIMOD_Carbamidomethyl = 200000004, /// Carbamyl: Carbamylation. UNIMOD_Carbamyl = 200000005, /// Carboxymethyl: Iodoacetic acid derivative. UNIMOD_Carboxymethyl = 200000006, /// Deamidated: Deamidation. UNIMOD_Deamidated = 200000007, /// ICAT-G: Gygi ICAT(TM) d0. UNIMOD_ICAT_G = 200000008, /// ICAT-G:2H(8): Gygi ICAT(TM) d8. UNIMOD_ICAT_G_2H_8_ = 200000009, /// Met->Hse: Homoserine. UNIMOD_Met__Hse = 200000010, /// Met->Hsl: Homoserine lactone. UNIMOD_Met__Hsl = 200000011, /// ICAT-D:2H(8): Applied Biosystems original ICAT(TM) d8. UNIMOD_ICAT_D_2H_8_ = 200000012, /// ICAT-D: Applied Biosystems original ICAT(TM) d0. UNIMOD_ICAT_D = 200000013, /// NIPCAM: N-isopropylcarboxamidomethyl. UNIMOD_NIPCAM = 200000017, /// PEO-Iodoacetyl-LC-Biotin: Biotinyl-iodoacetamidyl-3,6-dioxaoctanediamine. UNIMOD_PEO_Iodoacetyl_LC_Biotin = 200000020, /// Phospho: Phosphorylation. UNIMOD_Phospho = 200000021, /// Dehydrated: Dehydration. UNIMOD_Dehydrated = 200000023, /// Propionamide: Acrylamide adduct. UNIMOD_Propionamide = 200000024, /// Pyridylacetyl: Pyridylacetyl. UNIMOD_Pyridylacetyl = 200000025, /// Pyro-carbamidomethyl: S-carbamoylmethylcysteine cyclization (N-terminus). UNIMOD_Pyro_carbamidomethyl = 200000026, /// Glu->pyro-Glu: Pyro-glu from E. UNIMOD_Glu__pyro_Glu = 200000027, /// Gln->pyro-Glu: Pyro-glu from Q. UNIMOD_Gln__pyro_Glu = 200000028, /// SMA: N-Succinimidyl-2-morpholine acetate. UNIMOD_SMA = 200000029, /// Cation:Na: Sodium adduct. UNIMOD_Cation_Na = 200000030, /// Pyridylethyl: S-pyridylethylation. UNIMOD_Pyridylethyl = 200000031, /// Methyl: Methylation. UNIMOD_Methyl = 200000034, /// Oxidation: Oxidation or Hydroxylation. UNIMOD_Oxidation = 200000035, /// Dimethyl: Di-Methylation. UNIMOD_Dimethyl = 200000036, /// Trimethyl: Tri-Methylation. UNIMOD_Trimethyl = 200000037, /// Methylthio: Beta-methylthiolation. UNIMOD_Methylthio = 200000039, /// Sulfo: O-Sulfonation. UNIMOD_Sulfo = 200000040, /// Hex: Hexose. UNIMOD_Hex = 200000041, /// Lipoyl: Lipoyl. UNIMOD_Lipoyl = 200000042, /// HexNAc: N-Acetylhexosamine. UNIMOD_HexNAc = 200000043, /// Farnesyl: Farnesylation. UNIMOD_Farnesyl = 200000044, /// Myristoyl: Myristoylation. UNIMOD_Myristoyl = 200000045, /// PyridoxalPhosphate: Pyridoxal phosphate. UNIMOD_PyridoxalPhosphate = 200000046, /// Palmitoyl: Palmitoylation. UNIMOD_Palmitoyl = 200000047, /// GeranylGeranyl: Geranyl-geranyl. UNIMOD_GeranylGeranyl = 200000048, /// Phosphopantetheine: Phosphopantetheine. UNIMOD_Phosphopantetheine = 200000049, /// FAD: Flavin adenine dinucleotide. UNIMOD_FAD = 200000050, /// Tripalmitate: N-acyl diglyceride cysteine. UNIMOD_Tripalmitate = 200000051, /// Guanidinyl: Guanidination. UNIMOD_Guanidinyl = 200000052, /// HNE: 4-hydroxynonenal (HNE). UNIMOD_HNE = 200000053, /// Glucuronyl: Hexuronic acid. UNIMOD_Glucuronyl = 200000054, /// Glutathione: Glutathione disulfide. UNIMOD_Glutathione = 200000055, /// Acetyl:2H(3): Acetate labeling reagent (N-term & K) (heavy form, +3amu). UNIMOD_Acetyl_2H_3_ = 200000056, /// Propionyl: Propionate labeling reagent light form (N-term & K). UNIMOD_Propionyl = 200000058, /// Propionyl:13C(3): Propionate labeling reagent heavy form (+3amu), N-term & K. UNIMOD_Propionyl_13C_3_ = 200000059, /// GIST-Quat: Quaternary amine labeling reagent light form (N-term & K). UNIMOD_GIST_Quat = 200000060, /// GIST-Quat:2H(3): Quaternary amine labeling reagent heavy (+3amu) form, N-term & K. UNIMOD_GIST_Quat_2H_3_ = 200000061, /// GIST-Quat:2H(6): Quaternary amine labeling reagent heavy form (+6amu), N-term & K. UNIMOD_GIST_Quat_2H_6_ = 200000062, /// GIST-Quat:2H(9): Quaternary amine labeling reagent heavy form (+9amu), N-term & K. UNIMOD_GIST_Quat_2H_9_ = 200000063, /// Succinyl: Succinic anhydride labeling reagent light form (N-term & K). UNIMOD_Succinyl = 200000064, /// Succinyl:2H(4): Succinic anhydride labeling reagent, heavy form (+4amu, 4H2), N-term & K. UNIMOD_Succinyl_2H_4_ = 200000065, /// Succinyl:13C(4): Succinic anhydride labeling reagent, heavy form (+4amu, 4C13), N-term & K. UNIMOD_Succinyl_13C_4_ = 200000066, /// Iminobiotin: Iminobiotinylation. UNIMOD_Iminobiotin = 200000089, /// ESP: ESP-Tag light d0. UNIMOD_ESP = 200000090, /// ESP:2H(10): ESP-Tag heavy d10. UNIMOD_ESP_2H_10_ = 200000091, /// NHS-LC-Biotin: NHS-LC-Biotin. UNIMOD_NHS_LC_Biotin = 200000092, /// EDT-maleimide-PEO-biotin: EDT-maleimide-PEO-biotin. UNIMOD_EDT_maleimide_PEO_biotin = 200000093, /// IMID: IMID d0. UNIMOD_IMID = 200000094, /// IMID:2H(4): IMID d4. UNIMOD_IMID_2H_4_ = 200000095, /// Propionamide:2H(3): Acrylamide d3. UNIMOD_Propionamide_2H_3_ = 200000097, /// ICAT-C: Applied Biosystems cleavable ICAT(TM) light. UNIMOD_ICAT_C = 200000105, /// ICAT-C:13C(9): Applied Biosystems cleavable ICAT(TM) heavy. UNIMOD_ICAT_C_13C_9_ = 200000106, /// FormylMet: Addition of N-formyl met. UNIMOD_FormylMet = 200000107, /// Nethylmaleimide: N-ethylmaleimide on cysteines. UNIMOD_Nethylmaleimide = 200000108, /// OxLysBiotinRed: Oxidized lysine biotinylated with biotin-LC-hydrazide, reduced. UNIMOD_OxLysBiotinRed = 200000112, /// OxLysBiotin: Oxidized lysine biotinylated with biotin-LC-hydrazide. UNIMOD_OxLysBiotin = 200000113, /// OxProBiotinRed: Oxidized proline biotinylated with biotin-LC-hydrazide, reduced. UNIMOD_OxProBiotinRed = 200000114, /// OxProBiotin: Oxidized Proline biotinylated with biotin-LC-hydrazide. UNIMOD_OxProBiotin = 200000115, /// OxArgBiotin: Oxidized arginine biotinylated with biotin-LC-hydrazide. UNIMOD_OxArgBiotin = 200000116, /// OxArgBiotinRed: Oxidized arginine biotinylated with biotin-LC-hydrazide, reduced. UNIMOD_OxArgBiotinRed = 200000117, /// EDT-iodoacetyl-PEO-biotin: EDT-iodo-PEO-biotin. UNIMOD_EDT_iodoacetyl_PEO_biotin = 200000118, /// IBTP: Thio Ether Formation - BTP Adduct. UNIMOD_IBTP = 200000119, /// GG: Ubiquitinylation residue. UNIMOD_GG = 200000121, /// Formyl: Formylation. UNIMOD_Formyl = 200000122, /// ICAT-H: N-iodoacetyl, p-chlorobenzyl-12C6-glucamine. UNIMOD_ICAT_H = 200000123, /// ICAT-H:13C(6): N-iodoacetyl, p-chlorobenzyl-13C6-glucamine. UNIMOD_ICAT_H_13C_6_ = 200000124, /// Xlink:DTSSP[88]: Cleaved and reduced DSP/DTSSP crosslinker. UNIMOD_Xlink_DTSSP_88_ = 200000126, /// Fluoro: Fluorination. UNIMOD_Fluoro = 200000127, /// Fluorescein: 5-Iodoacetamidofluorescein (Molecular Probe, Eugene, OR). UNIMOD_Fluorescein = 200000128, /// Iodo: Iodination. UNIMOD_Iodo = 200000129, /// Diiodo: Di-Iodination. UNIMOD_Diiodo = 200000130, /// Triiodo: Tri-Iodination. UNIMOD_Triiodo = 200000131, /// Myristoleyl: (cis-delta 5)-tetradecaenoyl. UNIMOD_Myristoleyl = 200000134, /// Myristoyl+Delta:H(-4): (cis,cis-delta 5, delta 8)-tetradecadienoyl. UNIMOD_Myristoyl_Delta_H__4_ = 200000135, /// Benzoyl: Labeling reagent light form (N-term & K). UNIMOD_Benzoyl = 200000136, /// Hex(5)HexNAc(2): M5/Man5. UNIMOD_Hex_5_HexNAc_2_ = 200000137, /// Dansyl: 5-dimethylaminonaphthalene-1-sulfonyl. UNIMOD_Dansyl = 200000139, /// a-type-ion: ISD a-series (C-Term). UNIMOD_a_type_ion = 200000140, /// Amidine: Amidination of lysines or N-terminal amines with methyl acetimidate. UNIMOD_Amidine = 200000141, /// HexNAc(1)dHex(1): HexNAc1dHex1. UNIMOD_HexNAc_1_dHex_1_ = 200000142, /// HexNAc(2): HexNAc2. UNIMOD_HexNAc_2_ = 200000143, /// Hex(3): Hex3. UNIMOD_Hex_3_ = 200000144, /// HexNAc(1)dHex(2): HexNAc1dHex2. UNIMOD_HexNAc_1_dHex_2_ = 200000145, /// Hex(1)HexNAc(1)dHex(1): Hex1HexNAc1dHex1. UNIMOD_Hex_1_HexNAc_1_dHex_1_ = 200000146, /// HexNAc(2)dHex(1): HexNAc2dHex1. UNIMOD_HexNAc_2_dHex_1_ = 200000147, /// Hex(1)HexNAc(2): Hex1HexNAc2. UNIMOD_Hex_1_HexNAc_2_ = 200000148, /// Hex(1)HexNAc(1)NeuAc(1): Hex1HexNAc1NeuAc1. UNIMOD_Hex_1_HexNAc_1_NeuAc_1_ = 200000149, /// HexNAc(2)dHex(2): HexNAc2dHex2. UNIMOD_HexNAc_2_dHex_2_ = 200000150, /// Hex(1)HexNAc(2)Pent(1): Hex1HexNAc2Pent1. UNIMOD_Hex_1_HexNAc_2_Pent_1_ = 200000151, /// Hex(1)HexNAc(2)dHex(1): Hex1HexNAc2dHex1. UNIMOD_Hex_1_HexNAc_2_dHex_1_ = 200000152, /// Hex(2)HexNAc(2): Hex2HexNAc2. UNIMOD_Hex_2_HexNAc_2_ = 200000153, /// Hex(3)HexNAc(1)Pent(1): Hex3HexNAc1Pent1. UNIMOD_Hex_3_HexNAc_1_Pent_1_ = 200000154, /// Hex(1)HexNAc(2)dHex(1)Pent(1): Hex1HexNAc2dHex1Pent1. UNIMOD_Hex_1_HexNAc_2_dHex_1_Pent_1_ = 200000155, /// Hex(1)HexNAc(2)dHex(2): Hex1HexNAc2dHex2. UNIMOD_Hex_1_HexNAc_2_dHex_2_ = 200000156, /// Hex(2)HexNAc(2)Pent(1): Hex2HexNAc2Pent1. UNIMOD_Hex_2_HexNAc_2_Pent_1_ = 200000157, /// Hex(2)HexNAc(2)dHex(1): Hex2HexNAc2dHex1. UNIMOD_Hex_2_HexNAc_2_dHex_1_ = 200000158, /// Hex(3)HexNAc(2): M3/Man3. UNIMOD_Hex_3_HexNAc_2_ = 200000159, /// Hex(1)HexNAc(1)NeuAc(2): Hex HexNAc NeuAc(2) ---OR--- Hex HexNAc(3) HexA. UNIMOD_Hex_1_HexNAc_1_NeuAc_2_ = 200000160, /// Hex(3)HexNAc(2)Phos(1): Hex(3) HexNAc(2) Phos. UNIMOD_Hex_3_HexNAc_2_Phos_1_ = 200000161, /// Delta:S(-1)Se(1): Selenium replaces sulfur. UNIMOD_Delta_S__1_Se_1_ = 200000162, /// Delta:H(1)N(-1)18O(1): Glycosylated asparagine 18O labeling. UNIMOD_Delta_H_1_N__1_18O_1_ = 200000170, /// NBS:13C(6): Shimadzu NBS-13C. UNIMOD_NBS_13C_6_ = 200000171, /// NBS: Shimadzu NBS-12C. UNIMOD_NBS = 200000172, /// BHT: Michael addition of BHT quinone methide to Cysteine and Lysine. UNIMOD_BHT = 200000176, /// DAET: Phosphorylation to amine thiol. UNIMOD_DAET = 200000178, /// Label:13C(9): 13C(9) Silac label. UNIMOD_Label_13C_9_ = 200000184, /// Label:13C(9)+Phospho: C13 label (Phosphotyrosine). UNIMOD_Label_13C_9__Phospho = 200000185, /// HPG: Hydroxyphenylglyoxal arginine. UNIMOD_HPG = 200000186, /// 2HPG: Bis(hydroxphenylglyoxal) arginine. UNIMOD_2HPG = 200000187, /// Label:13C(6): 13C(6) Silac label. UNIMOD_Label_13C_6_ = 200000188, /// Label:18O(2): O18 label at both C-terminal oxygens. UNIMOD_Label_18O_2_ = 200000193, /// AccQTag: 6-aminoquinolyl-N-hydroxysuccinimidyl carbamate. UNIMOD_AccQTag = 200000194, /// QAT: APTA-d0. UNIMOD_QAT = 200000195, /// QAT:2H(3): APTA d3. UNIMOD_QAT_2H_3_ = 200000196, /// EQAT: EAPTA d0. UNIMOD_EQAT = 200000197, /// EQAT:2H(5): EAPTA d5. UNIMOD_EQAT_2H_5_ = 200000198, /// Dimethyl:2H(4): DiMethyl-CHD2. UNIMOD_Dimethyl_2H_4_ = 200000199, /// Ethanedithiol: EDT. UNIMOD_Ethanedithiol = 200000200, /// Delta:H(6)C(6)O(1): Acrolein addition +94. UNIMOD_Delta_H_6_C_6_O_1_ = 200000205, /// Delta:H(4)C(3)O(1): Acrolein addition +56. UNIMOD_Delta_H_4_C_3_O_1_ = 200000206, /// Delta:H(2)C(3): Acrolein addition +38. UNIMOD_Delta_H_2_C_3_ = 200000207, /// Delta:H(4)C(6): Acrolein addition +76. UNIMOD_Delta_H_4_C_6_ = 200000208, /// Delta:H(8)C(6)O(2): Acrolein addition +112. UNIMOD_Delta_H_8_C_6_O_2_ = 200000209, /// NEIAA: N-ethyl iodoacetamide-d0. UNIMOD_NEIAA = 200000211, /// NEIAA:2H(5): N-ethyl iodoacetamide-d5. UNIMOD_NEIAA_2H_5_ = 200000212, /// ADP-Ribosyl: ADP Ribose addition. UNIMOD_ADP_Ribosyl = 200000213, /// iTRAQ4plex: Representative mass and accurate mass for 116 & 117. UNIMOD_iTRAQ4plex = 200000214, /// IGBP: Light IDBEST tag for quantitation. UNIMOD_IGBP = 200000243, /// Crotonaldehyde: Crotonaldehyde. UNIMOD_Crotonaldehyde = 200000253, /// Delta:H(2)C(2): Acetaldehyde +26. UNIMOD_Delta_H_2_C_2_ = 200000254, /// Delta:H(4)C(2): Acetaldehyde +28. UNIMOD_Delta_H_4_C_2_ = 200000255, /// Delta:H(4)C(3): Propionaldehyde +40. UNIMOD_Delta_H_4_C_3_ = 200000256, /// Label:18O(1): O18 Labeling. UNIMOD_Label_18O_1_ = 200000258, /// Label:13C(6)15N(2): 13C(6) 15N(2) Silac label. UNIMOD_Label_13C_6_15N_2_ = 200000259, /// Thiophospho: Thiophosphorylation. UNIMOD_Thiophospho = 200000260, /// SPITC: 4-sulfophenyl isothiocyanate. UNIMOD_SPITC = 200000261, /// Label:2H(3): Trideuteration. UNIMOD_Label_2H_3_ = 200000262, /// PET: Phosphorylation to pyridyl thiol. UNIMOD_PET = 200000264, /// Label:13C(6)15N(4): 13C(6) 15N(4) Silac label. UNIMOD_Label_13C_6_15N_4_ = 200000267, /// Label:13C(5)15N(1): 13C(5) 15N(1) Silac label. UNIMOD_Label_13C_5_15N_1_ = 200000268, /// Label:13C(9)15N(1): 13C(9) 15N(1) Silac label. UNIMOD_Label_13C_9_15N_1_ = 200000269, /// Cytopiloyne: Nucleophilic addtion to cytopiloyne. UNIMOD_Cytopiloyne = 200000270, /// Cytopiloyne+water: Nucleophilic addition to cytopiloyne+H2O. UNIMOD_Cytopiloyne_water = 200000271, /// CAF: Sulfonation of N-terminus. UNIMOD_CAF = 200000272, /// Nitrosyl: Nitrosylation. UNIMOD_Nitrosyl = 200000275, /// AEBS: Aminoethylbenzenesulfonylation. UNIMOD_AEBS = 200000276, /// Ethanolyl: Ethanolation. UNIMOD_Ethanolyl = 200000278, /// Ethyl: Ethylation. UNIMOD_Ethyl = 200000280, /// CoenzymeA: Cysteine modified Coenzyme A. UNIMOD_CoenzymeA = 200000281, /// Methyl:2H(2): Deuterium Methylation of Lysine. UNIMOD_Methyl_2H_2_ = 200000284, /// SulfanilicAcid: Light Sulfanilic Acid (SA) C12. UNIMOD_SulfanilicAcid = 200000285, /// SulfanilicAcid:13C(6): Heavy Sulfanilic Acid (SA) C13. UNIMOD_SulfanilicAcid_13C_6_ = 200000286, /// Trp->Oxolactone: Tryptophan oxidation to oxolactone. UNIMOD_Trp__Oxolactone = 200000288, /// Biotin-PEO-Amine: Biotin polyethyleneoxide amine. UNIMOD_Biotin_PEO_Amine = 200000289, /// Biotin-HPDP: Pierce EZ-Link Biotin-HPDP. UNIMOD_Biotin_HPDP = 200000290, /// Delta:Hg(1): Mercury Mercaptan. UNIMOD_Delta_Hg_1_ = 200000291, /// IodoU-AMP: (Iodo)-uracil MP. UNIMOD_IodoU_AMP = 200000292, /// CAMthiopropanoyl: 3-(carbamidomethylthio)propanoyl. UNIMOD_CAMthiopropanoyl = 200000293, /// IED-Biotin: Biotinoyl-iodoacetyl-ethylenediamine. UNIMOD_IED_Biotin = 200000294, /// dHex: Fucose. UNIMOD_dHex = 200000295, /// Methyl:2H(3): Deuterated methyl ester. UNIMOD_Methyl_2H_3_ = 200000298, /// Carboxy: Carboxylation. UNIMOD_Carboxy = 200000299, /// Bromobimane: Monobromobimane derivative. UNIMOD_Bromobimane = 200000301, /// Menadione: Menadione quinone derivative. UNIMOD_Menadione = 200000302, /// DeStreak: Cysteine mercaptoethanol. UNIMOD_DeStreak = 200000303, /// dHex(1)Hex(3)HexNAc(4): FA2/G0F. UNIMOD_dHex_1_Hex_3_HexNAc_4_ = 200000305, /// dHex(1)Hex(4)HexNAc(4): FA2G1/G1F. UNIMOD_dHex_1_Hex_4_HexNAc_4_ = 200000307, /// dHex(1)Hex(5)HexNAc(4): FA2G2/G2F. UNIMOD_dHex_1_Hex_5_HexNAc_4_ = 200000308, /// Hex(3)HexNAc(4): A2/G0. UNIMOD_Hex_3_HexNAc_4_ = 200000309, /// Hex(4)HexNAc(4): A2G1/G1. UNIMOD_Hex_4_HexNAc_4_ = 200000310, /// Hex(5)HexNAc(4): A2G2/G2. UNIMOD_Hex_5_HexNAc_4_ = 200000311, /// Cysteinyl: Cysteinylation. UNIMOD_Cysteinyl = 200000312, /// Lys-loss: Loss of C-terminal K from Heavy Chain of MAb. UNIMOD_Lys_loss = 200000313, /// Nmethylmaleimide: Nmethylmaleimide. UNIMOD_Nmethylmaleimide = 200000314, /// DimethylpyrroleAdduct: 2,5-dimethypyrrole. UNIMOD_DimethylpyrroleAdduct = 200000316, /// Delta:H(2)C(5): MDA adduct +62. UNIMOD_Delta_H_2_C_5_ = 200000318, /// Delta:H(2)C(3)O(1): MDA adduct +54. UNIMOD_Delta_H_2_C_3_O_1_ = 200000319, /// Nethylmaleimide+water: Nethylmaleimidehydrolysis. UNIMOD_Nethylmaleimide_water = 200000320, /// Xlink:B10621: Bis-((N-iodoacetyl)piperazinyl)sulfonerhodamine. UNIMOD_Xlink_B10621 = 200000323, /// Xlink:DTBP[87]: Cleaved and reduced DTBP crosslinker. UNIMOD_Xlink_DTBP_87_ = 200000324, /// FP-Biotin: 10-ethoxyphosphinyl-N-(biotinamidopentyl)decanamide. UNIMOD_FP_Biotin = 200000325, /// Delta:H(4)C(2)O(-1)S(1): S-Ethylcystine from Serine. UNIMOD_Delta_H_4_C_2_O__1_S_1_ = 200000327, /// Methyl:2H(3)13C(1): Monomethylation. UNIMOD_Methyl_2H_3_13C_1_ = 200000329, /// Dimethyl:2H(6)13C(2): Dimethylation. UNIMOD_Dimethyl_2H_6_13C_2_ = 200000330, /// Thiophos-S-S-biotin: Thiophosphate labeled with biotin-HPDP. UNIMOD_Thiophos_S_S_biotin = 200000332, /// Can-FP-biotin: 6-N-biotinylaminohexyl isopropyl phosphate. UNIMOD_Can_FP_biotin = 200000333, /// HNE+Delta:H(2): Reduced 4-Hydroxynonenal. UNIMOD_HNE_Delta_H_2_ = 200000335, /// Methylamine: Michael addition with methylamine. UNIMOD_Methylamine = 200000337, /// Bromo: Bromination. UNIMOD_Bromo = 200000340, /// Amino: Tyrosine oxidation to 2-aminotyrosine. UNIMOD_Amino = 200000342, /// Argbiotinhydrazide: Oxidized Arginine biotinylated with biotin hydrazide. UNIMOD_Argbiotinhydrazide = 200000343, /// Arg->GluSA: Arginine oxidation to glutamic semialdehyde. UNIMOD_Arg__GluSA = 200000344, /// Trioxidation: Cysteine oxidation to cysteic acid. UNIMOD_Trioxidation = 200000345, /// His->Asn: His->Asn substitution. UNIMOD_His__Asn = 200000348, /// His->Asp: His->Asp substitution. UNIMOD_His__Asp = 200000349, /// Trp->Hydroxykynurenin: Tryptophan oxidation to hydroxykynurenin. UNIMOD_Trp__Hydroxykynurenin = 200000350, /// Trp->Kynurenin: Tryptophan oxidation to kynurenin. UNIMOD_Trp__Kynurenin = 200000351, /// Lys->Allysine: Lysine oxidation to aminoadipic semialdehyde. UNIMOD_Lys__Allysine = 200000352, /// Lysbiotinhydrazide: Oxidized Lysine biotinylated with biotin hydrazide. UNIMOD_Lysbiotinhydrazide = 200000353, /// Nitro: Oxidation to nitro. UNIMOD_Nitro = 200000354, /// probiotinhydrazide: Oxidized proline biotinylated with biotin hydrazide. UNIMOD_probiotinhydrazide = 200000357, /// Pro->pyro-Glu: Proline oxidation to pyroglutamic acid. UNIMOD_Pro__pyro_Glu = 200000359, /// Pro->Pyrrolidinone: Proline oxidation to pyrrolidinone. UNIMOD_Pro__Pyrrolidinone = 200000360, /// Thrbiotinhydrazide: Oxidized Threonine biotinylated with biotin hydrazide. UNIMOD_Thrbiotinhydrazide = 200000361, /// Diisopropylphosphate: O-Diisopropylphosphorylation. UNIMOD_Diisopropylphosphate = 200000362, /// Isopropylphospho: O-Isopropylphosphorylation. UNIMOD_Isopropylphospho = 200000363, /// ICPL:13C(6): Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, heavy form. UNIMOD_ICPL_13C_6_ = 200000364, /// ICPL: Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, light form. UNIMOD_ICPL = 200000365, /// Deamidated:18O(1): Deamidation in presence of O18. UNIMOD_Deamidated_18O_1_ = 200000366, /// Cys->Dha: Dehydroalanine (from Cysteine). UNIMOD_Cys__Dha = 200000368, /// Pro->Pyrrolidone: Pyrrolidone from Proline. UNIMOD_Pro__Pyrrolidone = 200000369, /// HMVK: Michael addition of hydroxymethylvinyl ketone to cysteine. UNIMOD_HMVK = 200000371, /// Arg->Orn: Ornithine from Arginine. UNIMOD_Arg__Orn = 200000372, /// Dehydro: Half of a disulfide bridge. UNIMOD_Dehydro = 200000374, /// Diphthamide: Diphthamide. UNIMOD_Diphthamide = 200000375, /// Hydroxyfarnesyl: Hydroxyfarnesyl. UNIMOD_Hydroxyfarnesyl = 200000376, /// Diacylglycerol: Diacylglycerol. UNIMOD_Diacylglycerol = 200000377, /// Carboxyethyl: Carboxyethyl. UNIMOD_Carboxyethyl = 200000378, /// Hypusine: Hypusine. UNIMOD_Hypusine = 200000379, /// Retinylidene: Retinal. UNIMOD_Retinylidene = 200000380, /// Lys->AminoadipicAcid: Alpha-amino adipic acid. UNIMOD_Lys__AminoadipicAcid = 200000381, /// Cys->PyruvicAcid: Pyruvic acid from N-term cys. UNIMOD_Cys__PyruvicAcid = 200000382, /// Ammonia-loss: Loss of ammonia. UNIMOD_Ammonia_loss = 200000385, /// Phycocyanobilin: Phycocyanobilin. UNIMOD_Phycocyanobilin = 200000387, /// Phycoerythrobilin: Phycoerythrobilin. UNIMOD_Phycoerythrobilin = 200000388, /// Phytochromobilin: Phytochromobilin. UNIMOD_Phytochromobilin = 200000389, /// Heme: Heme. UNIMOD_Heme = 200000390, /// Molybdopterin: Molybdopterin. UNIMOD_Molybdopterin = 200000391, /// Quinone: Quinone. UNIMOD_Quinone = 200000392, /// Glucosylgalactosyl: Glucosylgalactosyl hydroxylysine. UNIMOD_Glucosylgalactosyl = 200000393, /// GPIanchor: Glycosylphosphatidylinositol. UNIMOD_GPIanchor = 200000394, /// PhosphoribosyldephosphoCoA: Phosphoribosyl dephospho-coenzyme A. UNIMOD_PhosphoribosyldephosphoCoA = 200000395, /// GlycerylPE: Glycerylphosphorylethanolamine. UNIMOD_GlycerylPE = 200000396, /// Triiodothyronine: Triiodo. UNIMOD_Triiodothyronine = 200000397, /// Thyroxine: Tetraiodo. UNIMOD_Thyroxine = 200000398, /// Tyr->Dha: Dehydroalanine (from Tyrosine). UNIMOD_Tyr__Dha = 200000400, /// Didehydro: 2-amino-3-oxo-butanoic_acid. UNIMOD_Didehydro = 200000401, /// Cys->Oxoalanine: Oxoalanine. UNIMOD_Cys__Oxoalanine = 200000402, /// Ser->LacticAcid: Lactic acid from N-term Ser. UNIMOD_Ser__LacticAcid = 200000403, /// Phosphoadenosine: AMP. UNIMOD_Phosphoadenosine = 200000405, /// Hydroxycinnamyl: Hydroxycinnamyl. UNIMOD_Hydroxycinnamyl = 200000407, /// Glycosyl: Glycosyl-L-hydroxyproline. UNIMOD_Glycosyl = 200000408, /// FMNH: Flavin mononucleotide. UNIMOD_FMNH = 200000409, /// Archaeol: S-diphytanylglycerol diether. UNIMOD_Archaeol = 200000410, /// Phenylisocyanate: Phenyl isocyanate. UNIMOD_Phenylisocyanate = 200000411, /// Phenylisocyanate:2H(5): D5-phenyl isocyanate. UNIMOD_Phenylisocyanate_2H_5_ = 200000412, /// Phosphoguanosine: Phospho-guanosine. UNIMOD_Phosphoguanosine = 200000413, /// Hydroxymethyl: Hydroxymethyl. UNIMOD_Hydroxymethyl = 200000414, /// MolybdopterinGD+Delta:S(-1)Se(1): L-selenocysteinyl molybdenum bis(molybdopterin guanine dinucleotide). UNIMOD_MolybdopterinGD_Delta_S__1_Se_1_ = 200000415, /// Dipyrrolylmethanemethyl: Dipyrrolylmethanemethyl. UNIMOD_Dipyrrolylmethanemethyl = 200000416, /// PhosphoUridine: Uridine phosphodiester. UNIMOD_PhosphoUridine = 200000417, /// Glycerophospho: Glycerophospho. UNIMOD_Glycerophospho = 200000419, /// Carboxy->Thiocarboxy: Thiocarboxylic acid. UNIMOD_Carboxy__Thiocarboxy = 200000420, /// Sulfide: Persulfide. UNIMOD_Sulfide = 200000421, /// PyruvicAcidIminyl: N-pyruvic acid 2-iminyl. UNIMOD_PyruvicAcidIminyl = 200000422, /// Delta:Se(1): Selenyl. UNIMOD_Delta_Se_1_ = 200000423, /// MolybdopterinGD: Molybdenum bis(molybdopterin guanine dinucleotide). UNIMOD_MolybdopterinGD = 200000424, /// Dioxidation: Dihydroxy. UNIMOD_Dioxidation = 200000425, /// Octanoyl: Octanoyl. UNIMOD_Octanoyl = 200000426, /// PhosphoHexNAc: N-acetylglucosamine-1-phosphoryl. UNIMOD_PhosphoHexNAc = 200000428, /// PhosphoHex: Phosphoglycosyl-D-mannose-1-phosphoryl. UNIMOD_PhosphoHex = 200000429, /// Palmitoleyl: Palmitoleyl. UNIMOD_Palmitoleyl = 200000431, /// Cholesterol: Cholesterol ester. UNIMOD_Cholesterol = 200000432, /// Didehydroretinylidene: 3,4-didehydroretinylidene. UNIMOD_Didehydroretinylidene = 200000433, /// CHDH: Cis-14-hydroxy-10,13-dioxo-7-heptadecenoic ester. UNIMOD_CHDH = 200000434, /// Methylpyrroline: 4-methyl-delta-1-pyrroline-5-carboxyl. UNIMOD_Methylpyrroline = 200000435, /// Hydroxyheme: Hydroxyheme. UNIMOD_Hydroxyheme = 200000436, /// MicrocinC7: (3-aminopropyl)(L-aspartyl-1-amino)phosphoryl-5-adenosine. UNIMOD_MicrocinC7 = 200000437, /// Cyano: Cyano. UNIMOD_Cyano = 200000438, /// Diironsubcluster: Hydrogenase diiron subcluster. UNIMOD_Diironsubcluster = 200000439, /// Amidino: Amidino. UNIMOD_Amidino = 200000440, /// FMN: O3-(riboflavin phosphoryl). UNIMOD_FMN = 200000442, /// FMNC: S-(4a-FMN). UNIMOD_FMNC = 200000443, /// CuSMo: Copper sulfido molybdopterin cytosine dinuncleotide. UNIMOD_CuSMo = 200000444, /// Hydroxytrimethyl: 5-hydroxy-N6,N6,N6-trimethyl. UNIMOD_Hydroxytrimethyl = 200000445, /// Deoxy: Reduction. UNIMOD_Deoxy = 200000447, /// Microcin: Microcin E492 siderophore ester from serine. UNIMOD_Microcin = 200000448, /// Decanoyl: Lipid. UNIMOD_Decanoyl = 200000449, /// Glu: Monoglutamyl. UNIMOD_Glu = 200000450, /// GluGlu: Diglutamyl. UNIMOD_GluGlu = 200000451, /// GluGluGlu: Triglutamyl. UNIMOD_GluGluGlu = 200000452, /// GluGluGluGlu: Tetraglutamyl. UNIMOD_GluGluGluGlu = 200000453, /// HexN: Hexosamine. UNIMOD_HexN = 200000454, /// Xlink:DMP[154]: Free monolink of DMP crosslinker. UNIMOD_Xlink_DMP_154_ = 200000455, /// NDA: Naphthalene-2,3-dicarboxaldehyde. UNIMOD_NDA = 200000457, /// SPITC:13C(6): 4-sulfophenyl isothiocyanate (Heavy C13). UNIMOD_SPITC_13C_6_ = 200000464, /// AEC-MAEC: Aminoethylcysteine. UNIMOD_AEC_MAEC = 200000472, /// TMAB: 4-trimethyllammoniumbutyryl-. UNIMOD_TMAB = 200000476, /// TMAB:2H(9): D9-4-trimethyllammoniumbutyryl-. UNIMOD_TMAB_2H_9_ = 200000477, /// FTC: Fluorescein-5-thiosemicarbazide. UNIMOD_FTC = 200000478, /// Label:2H(4): 4,4,5,5-D4 Lysine. UNIMOD_Label_2H_4_ = 200000481, /// DHP: Dehydropyrrolizidine alkaloid (dehydroretronecine) on cysteines. UNIMOD_DHP = 200000488, /// Hep: Heptose. UNIMOD_Hep = 200000490, /// BADGE: Bisphenol A diglycidyl ether derivative. UNIMOD_BADGE = 200000493, /// CyDye-Cy3: Cy3 CyDye DIGE Fluor saturation dye. UNIMOD_CyDye_Cy3 = 200000494, /// CyDye-Cy5: Cy5 CyDye DIGE Fluor saturation dye. UNIMOD_CyDye_Cy5 = 200000495, /// BHTOH: Michael addition of t-butyl hydroxylated BHT (BHTOH) to C, H or K. UNIMOD_BHTOH = 200000498, /// IGBP:13C(2): Heavy IDBEST tag for quantitation. UNIMOD_IGBP_13C_2_ = 200000499, /// Nmethylmaleimide+water: Nmethylmaleimidehydrolysis. UNIMOD_Nmethylmaleimide_water = 200000500, /// PyMIC: 3-methyl-2-pyridyl isocyanate. UNIMOD_PyMIC = 200000501, /// LG-lactam-K: Levuglandinyl - lysine lactam adduct. UNIMOD_LG_lactam_K = 200000503, /// LG-Hlactam-K: Levuglandinyl - lysine hydroxylactam adduct. UNIMOD_LG_Hlactam_K = 200000504, /// LG-lactam-R: Levuglandinyl - arginine lactam adduct. UNIMOD_LG_lactam_R = 200000505, /// LG-Hlactam-R: Levuglandinyl - arginine hydroxylactam adduct. UNIMOD_LG_Hlactam_R = 200000506, /// Dimethyl:2H(4)13C(2): DiMethyl-C13HD2. UNIMOD_Dimethyl_2H_4_13C_2_ = 200000510, /// Hex(2): Lactosylation. UNIMOD_Hex_2_ = 200000512, /// C8-QAT: [3-(2,5)-Dioxopyrrolidin-1-yloxycarbonyl)-propyl]dimethyloctylammonium. UNIMOD_C8_QAT = 200000513, /// PropylNAGthiazoline: Propyl-1,2-dideoxy-2\'-methyl-alpha-D-glucopyranoso-[2,1-d]-Delta2\'-thiazoline. UNIMOD_PropylNAGthiazoline = 200000514, /// FNEM: Fluorescein-5-maleimide. UNIMOD_FNEM = 200000515, /// Diethyl: Diethylation, analogous to Dimethylation. UNIMOD_Diethyl = 200000518, /// BisANS: 4,4\'-dianilino-1,1\'-binaphthyl-5,5\'-disulfonic acid. UNIMOD_BisANS = 200000519, /// Piperidine: Piperidination. UNIMOD_Piperidine = 200000520, /// Maleimide-PEO2-Biotin: Maleimide-Biotin. UNIMOD_Maleimide_PEO2_Biotin = 200000522, /// Sulfo-NHS-LC-LC-Biotin: Biot_LC_LC. UNIMOD_Sulfo_NHS_LC_LC_Biotin = 200000523, /// CLIP_TRAQ_2: CLIP_TRAQ_2. UNIMOD_CLIP_TRAQ_2 = 200000525, /// Dethiomethyl: Prompt loss of side chain from oxidised Met. UNIMOD_Dethiomethyl = 200000526, /// Methyl+Deamidated: Deamidation followed by a methylation. UNIMOD_Methyl_Deamidated = 200000528, /// Delta:H(5)C(2): Dimethylation of proline residue. UNIMOD_Delta_H_5_C_2_ = 200000529, /// Cation:K: Replacement of proton by potassium. UNIMOD_Cation_K = 200000530, /// Cation:Cu[I]: Replacement of proton by copper. UNIMOD_Cation_Cu_I_ = 200000531, /// iTRAQ4plex114: Accurate mass for 114. UNIMOD_iTRAQ4plex114 = 200000532, /// iTRAQ4plex115: Accurate mass for 115. UNIMOD_iTRAQ4plex115 = 200000533, /// Dibromo: Dibromo. UNIMOD_Dibromo = 200000534, /// LRGG: Ubiquitination. UNIMOD_LRGG = 200000535, /// CLIP_TRAQ_3: CLIP_TRAQ_3. UNIMOD_CLIP_TRAQ_3 = 200000536, /// CLIP_TRAQ_4: CLIP_TRAQ_4. UNIMOD_CLIP_TRAQ_4 = 200000537, /// Biotin:Cayman-10141: Was 15dB-biotin. UNIMOD_Biotin_Cayman_10141 = 200000538, /// Biotin:Cayman-10013: Was PGA1-biotin. UNIMOD_Biotin_Cayman_10013 = 200000539, /// Ala->Ser: Ala->Ser substitution. UNIMOD_Ala__Ser = 200000540, /// Ala->Thr: Ala->Thr substitution. UNIMOD_Ala__Thr = 200000541, /// Ala->Asp: Ala->Asp substitution. UNIMOD_Ala__Asp = 200000542, /// Ala->Pro: Ala->Pro substitution. UNIMOD_Ala__Pro = 200000543, /// Ala->Gly: Ala->Gly substitution. UNIMOD_Ala__Gly = 200000544, /// Ala->Glu: Ala->Glu substitution. UNIMOD_Ala__Glu = 200000545, /// Ala->Val: Ala->Val substitution. UNIMOD_Ala__Val = 200000546, /// Cys->Phe: Cys->Phe substitution. UNIMOD_Cys__Phe = 200000547, /// Cys->Ser: Cys->Ser substitution. UNIMOD_Cys__Ser = 200000548, /// Cys->Trp: Cys->Trp substitution. UNIMOD_Cys__Trp = 200000549, /// Cys->Tyr: Cys->Tyr substitution. UNIMOD_Cys__Tyr = 200000550, /// Cys->Arg: Cys->Arg substitution. UNIMOD_Cys__Arg = 200000551, /// Cys->Gly: Cys->Gly substitution. UNIMOD_Cys__Gly = 200000552, /// Asp->Ala: Asp->Ala substitution. UNIMOD_Asp__Ala = 200000553, /// Asp->His: Asp->His substitution. UNIMOD_Asp__His = 200000554, /// Asp->Asn: Asp->Asn substitution. UNIMOD_Asp__Asn = 200000555, /// Asp->Gly: Asp->Gly substitution. UNIMOD_Asp__Gly = 200000556, /// Asp->Tyr: Asp->Tyr substitution. UNIMOD_Asp__Tyr = 200000557, /// Asp->Glu: Asp->Glu substitution. UNIMOD_Asp__Glu = 200000558, /// Asp->Val: Asp->Val substitution. UNIMOD_Asp__Val = 200000559, /// Glu->Ala: Glu->Ala substitution. UNIMOD_Glu__Ala = 200000560, /// Glu->Gln: Glu->Gln substitution. UNIMOD_Glu__Gln = 200000561, /// Glu->Asp: Glu->Asp substitution. UNIMOD_Glu__Asp = 200000562, /// Glu->Lys: Glu->Lys substitution. UNIMOD_Glu__Lys = 200000563, /// Glu->Gly: Glu->Gly substitution. UNIMOD_Glu__Gly = 200000564, /// Glu->Val: Glu->Val substitution. UNIMOD_Glu__Val = 200000565, /// Phe->Ser: Phe->Ser substitution. UNIMOD_Phe__Ser = 200000566, /// Phe->Cys: Phe->Cys substitution. UNIMOD_Phe__Cys = 200000567, /// Phe->Xle: Phe->Leu/Ile substitution. UNIMOD_Phe__Xle = 200000568, /// Phe->Tyr: Phe->Tyr substitution. UNIMOD_Phe__Tyr = 200000569, /// Phe->Val: Phe->Val substitution. UNIMOD_Phe__Val = 200000570, /// Gly->Ala: Gly->Ala substitution. UNIMOD_Gly__Ala = 200000571, /// Gly->Ser: Gly->Ser substitution. UNIMOD_Gly__Ser = 200000572, /// Gly->Trp: Gly->Trp substitution. UNIMOD_Gly__Trp = 200000573, /// Gly->Glu: Gly->Glu substitution. UNIMOD_Gly__Glu = 200000574, /// Gly->Val: Gly->Val substitution. UNIMOD_Gly__Val = 200000575, /// Gly->Asp: Gly->Asp substitution. UNIMOD_Gly__Asp = 200000576, /// Gly->Cys: Gly->Cys substitution. UNIMOD_Gly__Cys = 200000577, /// Gly->Arg: Gly->Arg substitution. UNIMOD_Gly__Arg = 200000578, /// His->Pro: His->Pro substitution. UNIMOD_His__Pro = 200000580, /// His->Tyr: His->Tyr substitution. UNIMOD_His__Tyr = 200000581, /// His->Gln: His->Gln substitution. UNIMOD_His__Gln = 200000582, /// His->Arg: His->Arg substitution. UNIMOD_His__Arg = 200000584, /// His->Xle: His->Leu/Ile substitution. UNIMOD_His__Xle = 200000585, /// Xle->Thr: Leu/Ile->Thr substitution. UNIMOD_Xle__Thr = 200000588, /// Xle->Asn: Leu/Ile->Asn substitution. UNIMOD_Xle__Asn = 200000589, /// Xle->Lys: Leu/Ile->Lys substitution. UNIMOD_Xle__Lys = 200000590, /// Lys->Thr: Lys->Thr substitution. UNIMOD_Lys__Thr = 200000594, /// Lys->Asn: Lys->Asn substitution. UNIMOD_Lys__Asn = 200000595, /// Lys->Glu: Lys->Glu substitution. UNIMOD_Lys__Glu = 200000596, /// Lys->Gln: Lys->Gln substitution. UNIMOD_Lys__Gln = 200000597, /// Lys->Met: Lys->Met substitution. UNIMOD_Lys__Met = 200000598, /// Lys->Arg: Lys->Arg substitution. UNIMOD_Lys__Arg = 200000599, /// Lys->Xle: Lys->Leu/Ile substitution. UNIMOD_Lys__Xle = 200000600, /// Xle->Ser: Leu/Ile->Ser substitution. UNIMOD_Xle__Ser = 200000601, /// Xle->Phe: Leu/Ile->Phe substitution. UNIMOD_Xle__Phe = 200000602, /// Xle->Trp: Leu/Ile->Trp substitution. UNIMOD_Xle__Trp = 200000603, /// Xle->Pro: Leu/Ile->Pro substitution. UNIMOD_Xle__Pro = 200000604, /// Xle->Val: Leu/Ile->Val substitution. UNIMOD_Xle__Val = 200000605, /// Xle->His: Leu/Ile->His substitution. UNIMOD_Xle__His = 200000606, /// Xle->Gln: Leu/Ile->Gln substitution. UNIMOD_Xle__Gln = 200000607, /// Xle->Met: Leu/Ile->Met substitution. UNIMOD_Xle__Met = 200000608, /// Xle->Arg: Leu/Ile->Arg substitution. UNIMOD_Xle__Arg = 200000609, /// Met->Thr: Met->Thr substitution. UNIMOD_Met__Thr = 200000610, /// Met->Arg: Met->Arg substitution. UNIMOD_Met__Arg = 200000611, /// Met->Lys: Met->Lys substitution. UNIMOD_Met__Lys = 200000613, /// Met->Xle: Met->Leu/Ile substitution. UNIMOD_Met__Xle = 200000614, /// Met->Val: Met->Val substitution. UNIMOD_Met__Val = 200000615, /// Asn->Ser: Asn->Ser substitution. UNIMOD_Asn__Ser = 200000616, /// Asn->Thr: Asn->Thr substitution. UNIMOD_Asn__Thr = 200000617, /// Asn->Lys: Asn->Lys substitution. UNIMOD_Asn__Lys = 200000618, /// Asn->Tyr: Asn->Tyr substitution. UNIMOD_Asn__Tyr = 200000619, /// Asn->His: Asn->His substitution. UNIMOD_Asn__His = 200000620, /// Asn->Asp: Asn->Asp substitution. UNIMOD_Asn__Asp = 200000621, /// Asn->Xle: Asn->Leu/Ile substitution. UNIMOD_Asn__Xle = 200000622, /// Pro->Ser: Pro->Ser substitution. UNIMOD_Pro__Ser = 200000623, /// Pro->Ala: Pro->Ala substitution. UNIMOD_Pro__Ala = 200000624, /// Pro->His: Pro->His substitution. UNIMOD_Pro__His = 200000625, /// Pro->Gln: Pro->Gln substitution. UNIMOD_Pro__Gln = 200000626, /// Pro->Thr: Pro->Thr substitution. UNIMOD_Pro__Thr = 200000627, /// Pro->Arg: Pro->Arg substitution. UNIMOD_Pro__Arg = 200000628, /// Pro->Xle: Pro->Leu/Ile substitution. UNIMOD_Pro__Xle = 200000629, /// Gln->Pro: Gln->Pro substitution. UNIMOD_Gln__Pro = 200000630, /// Gln->Lys: Gln->Lys substitution. UNIMOD_Gln__Lys = 200000631, /// Gln->Glu: Gln->Glu substitution. UNIMOD_Gln__Glu = 200000632, /// Gln->His: Gln->His substitution. UNIMOD_Gln__His = 200000633, /// Gln->Arg: Gln->Arg substitution. UNIMOD_Gln__Arg = 200000634, /// Gln->Xle: Gln->Leu/Ile substitution. UNIMOD_Gln__Xle = 200000635, /// Arg->Ser: Arg->Ser substitution. UNIMOD_Arg__Ser = 200000636, /// Arg->Trp: Arg->Trp substitution. UNIMOD_Arg__Trp = 200000637, /// Arg->Thr: Arg->Thr substitution. UNIMOD_Arg__Thr = 200000638, /// Arg->Pro: Arg->Pro substitution. UNIMOD_Arg__Pro = 200000639, /// Arg->Lys: Arg->Lys substitution. UNIMOD_Arg__Lys = 200000640, /// Arg->His: Arg->His substitution. UNIMOD_Arg__His = 200000641, /// Arg->Gln: Arg->Gln substitution. UNIMOD_Arg__Gln = 200000642, /// Arg->Met: Arg->Met substitution. UNIMOD_Arg__Met = 200000643, /// Arg->Cys: Arg->Cys substitution. UNIMOD_Arg__Cys = 200000644, /// Arg->Xle: Arg->Leu/Ile substitution. UNIMOD_Arg__Xle = 200000645, /// Arg->Gly: Arg->Gly substitution. UNIMOD_Arg__Gly = 200000646, /// Ser->Phe: Ser->Phe substitution. UNIMOD_Ser__Phe = 200000647, /// Ser->Ala: Ser->Ala substitution. UNIMOD_Ser__Ala = 200000648, /// Ser->Trp: Ser->Trp substitution. UNIMOD_Ser__Trp = 200000649, /// Ser->Thr: Ser->Thr substitution. UNIMOD_Ser__Thr = 200000650, /// Ser->Asn: Ser->Asn substitution. UNIMOD_Ser__Asn = 200000651, /// Ser->Pro: Ser->Pro substitution. UNIMOD_Ser__Pro = 200000652, /// Ser->Tyr: Ser->Tyr substitution. UNIMOD_Ser__Tyr = 200000653, /// Ser->Cys: Ser->Cys substitution. UNIMOD_Ser__Cys = 200000654, /// Ser->Arg: Ser->Arg substitution. UNIMOD_Ser__Arg = 200000655, /// Ser->Xle: Ser->Leu/Ile substitution. UNIMOD_Ser__Xle = 200000656, /// Ser->Gly: Ser->Gly substitution. UNIMOD_Ser__Gly = 200000657, /// Thr->Ser: Thr->Ser substitution. UNIMOD_Thr__Ser = 200000658, /// Thr->Ala: Thr->Ala substitution. UNIMOD_Thr__Ala = 200000659, /// Thr->Asn: Thr->Asn substitution. UNIMOD_Thr__Asn = 200000660, /// Thr->Lys: Thr->Lys substitution. UNIMOD_Thr__Lys = 200000661, /// Thr->Pro: Thr->Pro substitution. UNIMOD_Thr__Pro = 200000662, /// Thr->Met: Thr->Met substitution. UNIMOD_Thr__Met = 200000663, /// Thr->Xle: Thr->Leu/Ile substitution. UNIMOD_Thr__Xle = 200000664, /// Thr->Arg: Thr->Arg substitution. UNIMOD_Thr__Arg = 200000665, /// Val->Phe: Val->Phe substitution. UNIMOD_Val__Phe = 200000666, /// Val->Ala: Val->Ala substitution. UNIMOD_Val__Ala = 200000667, /// Val->Glu: Val->Glu substitution. UNIMOD_Val__Glu = 200000668, /// Val->Met: Val->Met substitution. UNIMOD_Val__Met = 200000669, /// Val->Asp: Val->Asp substitution. UNIMOD_Val__Asp = 200000670, /// Val->Xle: Val->Leu/Ile substitution. UNIMOD_Val__Xle = 200000671, /// Val->Gly: Val->Gly substitution. UNIMOD_Val__Gly = 200000672, /// Trp->Ser: Trp->Ser substitution. UNIMOD_Trp__Ser = 200000673, /// Trp->Cys: Trp->Cys substitution. UNIMOD_Trp__Cys = 200000674, /// Trp->Arg: Trp->Arg substitution. UNIMOD_Trp__Arg = 200000675, /// Trp->Gly: Trp->Gly substitution. UNIMOD_Trp__Gly = 200000676, /// Trp->Xle: Trp->Leu/Ile substitution. UNIMOD_Trp__Xle = 200000677, /// Tyr->Phe: Tyr->Phe substitution. UNIMOD_Tyr__Phe = 200000678, /// Tyr->Ser: Tyr->Ser substitution. UNIMOD_Tyr__Ser = 200000679, /// Tyr->Asn: Tyr->Asn substitution. UNIMOD_Tyr__Asn = 200000680, /// Tyr->His: Tyr->His substitution. UNIMOD_Tyr__His = 200000681, /// Tyr->Asp: Tyr->Asp substitution. UNIMOD_Tyr__Asp = 200000682, /// Tyr->Cys: Tyr->Cys substitution. UNIMOD_Tyr__Cys = 200000683, /// BDMAPP: Mass Defect Tag on lysine e-amino. UNIMOD_BDMAPP = 200000684, /// NA-LNO2: Nitroalkylation by Nitro Linoleic Acid. UNIMOD_NA_LNO2 = 200000685, /// NA-OA-NO2: Nitroalkylation by Nitro Oleic Acid. UNIMOD_NA_OA_NO2 = 200000686, /// ICPL:2H(4): Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, medium form. UNIMOD_ICPL_2H_4_ = 200000687, /// Label:13C(6)15N(1): 13C(6) 15N(1) Silac label. UNIMOD_Label_13C_6_15N_1_ = 200000695, /// Label:2H(9)13C(6)15N(2): 13C(6) 15N(2) (D)9 SILAC label. UNIMOD_Label_2H_9_13C_6_15N_2_ = 200000696, /// NIC: Nicotinic Acid. UNIMOD_NIC = 200000697, /// dNIC: Deuterated Nicotinic Acid. UNIMOD_dNIC = 200000698, /// HNE-Delta:H(2)O: Dehydrated 4-hydroxynonenal. UNIMOD_HNE_Delta_H_2_O = 200000720, /// 4-ONE: 4-Oxononenal (ONE). UNIMOD_4_ONE = 200000721, /// O-Dimethylphosphate: O-Dimethylphosphorylation. UNIMOD_O_Dimethylphosphate = 200000723, /// O-Methylphosphate: O-Methylphosphorylation. UNIMOD_O_Methylphosphate = 200000724, /// Diethylphosphate: O-Diethylphosphorylation. UNIMOD_Diethylphosphate = 200000725, /// Ethylphosphate: O-Ethylphosphorylation. UNIMOD_Ethylphosphate = 200000726, /// O-pinacolylmethylphosphonate: O-pinacolylmethylphosphonylation. UNIMOD_O_pinacolylmethylphosphonate = 200000727, /// Methylphosphonate: Methylphosphonylation. UNIMOD_Methylphosphonate = 200000728, /// O-Isopropylmethylphosphonate: O-Isopropylmethylphosphonylation. UNIMOD_O_Isopropylmethylphosphonate = 200000729, /// iTRAQ8plex: Representative mass and accurate mass for 113, 114, 116 & 117. UNIMOD_iTRAQ8plex = 200000730, /// iTRAQ8plex:13C(6)15N(2): Accurate mass for 115, 118, 119 & 121. UNIMOD_iTRAQ8plex_13C_6_15N_2_ = 200000731, /// Ethanolamine: Carboxyl modification with ethanolamine. UNIMOD_Ethanolamine = 200000734, /// BEMAD_ST: Beta elimination of modified S or T followed by Michael addition of DTT. UNIMOD_BEMAD_ST = 200000735, /// BEMAD_C: Beta elimination of alkylated Cys followed by Michael addition of DTT. UNIMOD_BEMAD_C = 200000736, /// TMT6plex: Sixplex Tandem Mass Tag®. UNIMOD_TMT6plex = 200000737, /// TMT2plex: Duplex Tandem Mass Tag®. UNIMOD_TMT2plex = 200000738, /// TMT: Native Tandem Mass Tag®. UNIMOD_TMT = 200000739, /// ExacTagThiol: ExacTag Thiol label mass for 2-4-7-10 plex. UNIMOD_ExacTagThiol = 200000740, /// ExacTagAmine: ExacTag Amine label mass for 2-4-7-10 plex. UNIMOD_ExacTagAmine = 200000741, /// 4-ONE+Delta:H(-2)O(-1): Dehydrated 4-Oxononenal Michael adduct. UNIMOD_4_ONE_Delta_H__2_O__1_ = 200000743, /// NO_SMX_SEMD: Nitroso Sulfamethoxazole Sulphenamide thiol adduct. UNIMOD_NO_SMX_SEMD = 200000744, /// NO_SMX_SMCT: Nitroso Sulfamethoxazole semimercaptal thiol adduct. UNIMOD_NO_SMX_SMCT = 200000745, /// NO_SMX_SIMD: Nitroso Sulfamethoxazole Sulfinamide thiol adduct. UNIMOD_NO_SMX_SIMD = 200000746, /// Malonyl: Malonylation. UNIMOD_Malonyl = 200000747, /// 3sulfo: Derivatization by N-term modification using 3-Sulfobenzoic succinimidyl ester. UNIMOD_3sulfo = 200000748, /// trifluoro: Trifluoroleucine replacement of leucine. UNIMOD_trifluoro = 200000750, /// TNBS: Tri nitro benzene. UNIMOD_TNBS = 200000751, /// IDEnT: Isotope Distribution Encoded Tag. UNIMOD_IDEnT = 200000762, /// BEMAD_ST:2H(6): Beta elimination of modified S or T followed by Michael addition of labelled DTT. UNIMOD_BEMAD_ST_2H_6_ = 200000763, /// BEMAD_C:2H(6): Beta elimination of alkylated Cys followed by Michael addition of labelled DTT. UNIMOD_BEMAD_C_2H_6_ = 200000764, /// Met-loss: Removal of initiator methionine from protein N-terminus. UNIMOD_Met_loss = 200000765, /// Met-loss+Acetyl: Removal of initiator methionine from protein N-terminus, then acetylation of the new N-terminus. UNIMOD_Met_loss_Acetyl = 200000766, /// Menadione-HQ: Menadione hydroquinone derivative. UNIMOD_Menadione_HQ = 200000767, /// Methyl+Acetyl:2H(3): Mono-methylated lysine labelled with Acetyl_heavy. UNIMOD_Methyl_Acetyl_2H_3_ = 200000768, /// lapachenole: Lapachenole photochemically added to cysteine. UNIMOD_lapachenole = 200000771, /// Label:13C(5): 13C(5) Silac label. UNIMOD_Label_13C_5_ = 200000772, /// maleimide: Maleimide. UNIMOD_maleimide = 200000773, /// Biotin-phenacyl: Alkylation by biotinylated form of phenacyl bromide. UNIMOD_Biotin_phenacyl = 200000774, /// Carboxymethyl:13C(2): Iodoacetic acid derivative w/ 13C label. UNIMOD_Carboxymethyl_13C_2_ = 200000775, /// NEM:2H(5): D5 N-ethylmaleimide on cysteines. UNIMOD_NEM_2H_5_ = 200000776, /// AEC-MAEC:2H(4): Deuterium cysteamine modification to S or T. UNIMOD_AEC_MAEC_2H_4_ = 200000792, /// Hex(1)HexNAc(1): Hex1HexNAc1. UNIMOD_Hex_1_HexNAc_1_ = 200000793, /// Label:13C(6)+GG: 13C6 labeled ubiquitinylation residue. UNIMOD_Label_13C_6__GG = 200000799, /// Biotin:Thermo-21345: Was PentylamineBiotin. UNIMOD_Biotin_Thermo_21345 = 200000800, /// Pentylamine: Labeling transglutaminase substrate on glutamine side chain. UNIMOD_Pentylamine = 200000801, /// Biotin:Thermo-21360: Was Biotin-PEO4-hydrazide. UNIMOD_Biotin_Thermo_21360 = 200000811, /// Cy3b-maleimide: Fluorescent dye that labels cysteines. UNIMOD_Cy3b_maleimide = 200000821, /// Gly-loss+Amide: Enzymatic glycine removal leaving an amidated C-terminus. UNIMOD_Gly_loss_Amide = 200000822, /// Xlink:BMOE: Intact or monolink BMOE crosslinker. UNIMOD_Xlink_BMOE = 200000824, /// Xlink:DFDNB: Intact DFDNB crosslinker. UNIMOD_Xlink_DFDNB = 200000825, /// TMPP-Ac: Tris(2,4,6-trimethoxyphenyl)phosphonium acetic acid N-hydroxysuccinimide ester derivative. UNIMOD_TMPP_Ac = 200000827, /// Dihydroxyimidazolidine: Dihydroxy methylglyoxal adduct. UNIMOD_Dihydroxyimidazolidine = 200000830, /// Label:2H(4)+Acetyl: Acetyl 4,4,5,5-D4 Lysine. UNIMOD_Label_2H_4__Acetyl = 200000834, /// Label:13C(6)+Acetyl: Acetyl 13C(6) Silac label. UNIMOD_Label_13C_6__Acetyl = 200000835, /// Label:13C(6)15N(2)+Acetyl: Acetyl_13C(6) 15N(2) Silac label. UNIMOD_Label_13C_6_15N_2__Acetyl = 200000836, /// Arg->Npo: Arginine replacement by Nitropyrimidyl ornithine. UNIMOD_Arg__Npo = 200000837, /// EQIGG: Sumo mutant Smt3-WT tail following trypsin digestion. UNIMOD_EQIGG = 200000846, /// Arg2PG: Adduct of phenylglyoxal with Arg. UNIMOD_Arg2PG = 200000848, /// cGMP: S-guanylation. UNIMOD_cGMP = 200000849, /// cGMP+RMP-loss: S-guanylation-2. UNIMOD_cGMP_RMP_loss = 200000851, /// Label:2H(4)+GG: Ubiquitination 2H4 lysine. UNIMOD_Label_2H_4__GG = 200000853, /// MG-H1: Methylglyoxal-derived hydroimidazolone. UNIMOD_MG_H1 = 200000859, /// G-H1: Glyoxal-derived hydroimiadazolone. UNIMOD_G_H1 = 200000860, /// ZGB: NHS ester linked Green Fluorescent Bodipy Dye. UNIMOD_ZGB = 200000861, /// Label:13C(1)2H(3): SILAC. UNIMOD_Label_13C_1_2H_3_ = 200000862, /// Label:13C(6)15N(2)+GG: 13C(6) 15N(2) Lysine glygly. UNIMOD_Label_13C_6_15N_2__GG = 200000864, /// ICPL:13C(6)2H(4): Bruker Daltonics SERVA-ICPL(TM) quantification chemistry, +10 Da form. UNIMOD_ICPL_13C_6_2H_4_ = 200000866, /// QEQTGG: SUMOylation by SUMO-1. UNIMOD_QEQTGG = 200000876, /// QQQTGG: SUMOylation by SUMO-2/3. UNIMOD_QQQTGG = 200000877, /// Bodipy: Bodipy modifications onto cysteine. UNIMOD_Bodipy = 200000878, /// Biotin:Thermo-21325: Was ChromoBiotin. UNIMOD_Biotin_Thermo_21325 = 200000884, /// Label:13C(1)2H(3)+Oxidation: Oxidised methionine 13C(1)2H(3) SILAC label. UNIMOD_Label_13C_1_2H_3__Oxidation = 200000885, /// HydroxymethylOP: 2-ammonio-6-[4-(hydroxymethyl)-3-oxidopyridinium-1-yl]- hexanoate. UNIMOD_HydroxymethylOP = 200000886, /// MDCC: Covalent linkage of maleimidyl coumarin probe (Molecular Probes D-10253). UNIMOD_MDCC = 200000887, /// mTRAQ: MTRAQ light. UNIMOD_mTRAQ = 200000888, /// mTRAQ:13C(3)15N(1): MTRAQ medium. UNIMOD_mTRAQ_13C_3_15N_1_ = 200000889, /// DyLight-maleimide: Thiol-reactive dye for fluorescence labelling of proteins. UNIMOD_DyLight_maleimide = 200000890, /// Methyl-PEO12-Maleimide: Methyl-PEO12-Maleimide. UNIMOD_Methyl_PEO12_Maleimide = 200000891, /// CarbamidomethylDTT: Carbamidomethylated DTT modification of cysteine. UNIMOD_CarbamidomethylDTT = 200000893, /// CarboxymethylDTT: Carboxymethylated DTT modification of cysteine. UNIMOD_CarboxymethylDTT = 200000894, /// Biotin-PEG-PRA: Biotin polyethyleneoxide (n=3) alkyne. UNIMOD_Biotin_PEG_PRA = 200000895, /// Met->Aha: Methionine replacement by azido homoalanine. UNIMOD_Met__Aha = 200000896, /// Label:15N(4): SILAC 15N(4). UNIMOD_Label_15N_4_ = 200000897, /// pyrophospho: Pyrophosphorylation of Ser/Thr. UNIMOD_pyrophospho = 200000898, /// Met->Hpg: Methionine replacement by homopropargylglycine. UNIMOD_Met__Hpg = 200000899, /// 4AcAllylGal: 2,3,4,6-tetra-O-Acetyl-1-allyl-alpha-D-galactopyranoside modification of cysteine. UNIMOD_4AcAllylGal = 200000901, /// DimethylArsino: Reaction with dimethylarsinous (AsIII) acid. UNIMOD_DimethylArsino = 200000902, /// Lys->CamCys: Lys->Cys substitution and carbamidomethylation. UNIMOD_Lys__CamCys = 200000903, /// Phe->CamCys: Phe->Cys substitution and carbamidomethylation. UNIMOD_Phe__CamCys = 200000904, /// Leu->MetOx: Leu->Met substitution and sulfoxidation. UNIMOD_Leu__MetOx = 200000905, /// Lys->MetOx: Lys->Met substitution and sulfoxidation. UNIMOD_Lys__MetOx = 200000906, /// Galactosyl: Gluconoylation. UNIMOD_Galactosyl = 200000907, /// Xlink:SMCC[321]: Monolink of SMCC terminated with 3-(dimethylamino)-1-propylamine. UNIMOD_Xlink_SMCC_321_ = 200000908, /// Bacillosamine: 2,4-diacetamido-2,4,6-trideoxyglucopyranose. UNIMOD_Bacillosamine = 200000910, /// MTSL: Cys modification by (1-oxyl-2,2,5,5-tetramethyl-3-pyrroline-3-methyl)methanesulfonate (MTSL). UNIMOD_MTSL = 200000911, /// HNE-BAHAH: 4-hydroxy-2-nonenal and biotinamidohexanoic acid hydrazide, reduced. UNIMOD_HNE_BAHAH = 200000912, /// Methylmalonylation: Methylmalonylation on Serine. UNIMOD_Methylmalonylation = 200000914, /// Label:13C(4)15N(2)+GG: 13C(4) 15N(2) Lysine glygly. UNIMOD_Label_13C_4_15N_2__GG = 200000923, /// ethylamino: Ethyl amino. UNIMOD_ethylamino = 200000926, /// MercaptoEthanol: 2-OH-ethyl thio-Ser. UNIMOD_MercaptoEthanol = 200000928, /// Ethyl+Deamidated: Deamidation followed by esterification with ethanol. UNIMOD_Ethyl_Deamidated = 200000931, /// VFQQQTGG: SUMOylation by SUMO-2/3 (formic acid cleavage). UNIMOD_VFQQQTGG = 200000932, /// VIEVYQEQTGG: SUMOylation by SUMO-1 (formic acid cleavage). UNIMOD_VIEVYQEQTGG = 200000933, /// AMTzHexNAc2: Photocleavable Biotin + GalNAz on O-GlcNAc. UNIMOD_AMTzHexNAc2 = 200000934, /// Atto495Maleimide: High molecular absorption maleimide label for proteins. UNIMOD_Atto495Maleimide = 200000935, /// Chlorination: Chlorination of tyrosine residues. UNIMOD_Chlorination = 200000936, /// dichlorination: Dichlorination. UNIMOD_dichlorination = 200000937, /// AROD: Cysteine modifier. UNIMOD_AROD = 200000938, /// Cys->methylaminoAla: Carbamidomethylated Cys that undergoes beta-elimination and Michael addition of methylamine. UNIMOD_Cys__methylaminoAla = 200000939, /// Cys->ethylaminoAla: Carbamidomethylated Cys that undergoes beta-elimination and Michael addition of ethylamine. UNIMOD_Cys__ethylaminoAla = 200000940, /// DNPS: 2,4-Dinitrobenzenesulfenyl. UNIMOD_DNPS = 200000941, /// SulfoGMBS: High molecular absorption label for proteins. UNIMOD_SulfoGMBS = 200000942, /// DimethylamineGMBS: Modified GMBS X linker. UNIMOD_DimethylamineGMBS = 200000943, /// Label:15N(2)2H(9): SILAC label. UNIMOD_Label_15N_2_2H_9_ = 200000944, /// LG-anhydrolactam: Levuglandinyl-lysine anhydrolactam adduct. UNIMOD_LG_anhydrolactam = 200000946, /// LG-pyrrole: Levuglandinyl-lysine pyrrole adduct. UNIMOD_LG_pyrrole = 200000947, /// LG-anhyropyrrole: Levuglandinyl-lysine anhyropyrrole adduct. UNIMOD_LG_anhyropyrrole = 200000948, /// 3-deoxyglucosone: Condensation product of 3-deoxyglucosone. UNIMOD_3_deoxyglucosone = 200000949, /// Cation:Li: Replacement of proton by lithium. UNIMOD_Cation_Li = 200000950, /// Cation:Ca[II]: Replacement of 2 protons by calcium. UNIMOD_Cation_Ca_II_ = 200000951, /// Cation:Fe[II]: Replacement of 2 protons by iron. UNIMOD_Cation_Fe_II_ = 200000952, /// Cation:Ni[II]: Replacement of 2 protons by nickel. UNIMOD_Cation_Ni_II_ = 200000953, /// Cation:Zn[II]: Replacement of 2 protons by zinc. UNIMOD_Cation_Zn_II_ = 200000954, /// Cation:Ag: Replacement of proton by silver. UNIMOD_Cation_Ag = 200000955, /// Cation:Mg[II]: Replacement of 2 protons by magnesium. UNIMOD_Cation_Mg_II_ = 200000956, /// 2-succinyl: S-(2-succinyl) cysteine. UNIMOD_2_succinyl = 200000957, /// Propargylamine: Propargylamine. UNIMOD_Propargylamine = 200000958, /// Phosphopropargyl: Phospho-propargylamine. UNIMOD_Phosphopropargyl = 200000959, /// SUMO2135: SUMOylation by SUMO-1 after tryptic cleavage. UNIMOD_SUMO2135 = 200000960, /// SUMO3549: SUMOylation by SUMO-2/3 after tryptic cleavage. UNIMOD_SUMO3549 = 200000961, /// thioacylPA: Membrane protein extraction. UNIMOD_thioacylPA = 200000967, /// maleimide3: Maleimide-3-saccharide. UNIMOD_maleimide3 = 200000971, /// maleimide5: Maleimide-5-saccharide. UNIMOD_maleimide5 = 200000972, /// Puromycin: Puromycin. UNIMOD_Puromycin = 200000973, /// Carbofuran: 2,3-dihydro-2,2-dimethyl-7-benzofuranol N-methyl carbamate. UNIMOD_Carbofuran = 200000977, /// BITC: Benzyl isothiocyanate. UNIMOD_BITC = 200000978, /// PEITC: Phenethyl isothiocyanate. UNIMOD_PEITC = 200000979, /// glucosone: Condensation product of glucosone. UNIMOD_glucosone = 200000981, /// cysTMT: Native cysteine-reactive Tandem Mass Tag®. UNIMOD_cysTMT = 200000984, /// cysTMT6plex: Cysteine-reactive Sixplex Tandem Mass Tag®. UNIMOD_cysTMT6plex = 200000985, /// Label:13C(6)+Dimethyl: Dimethyl 13C(6) Silac label. UNIMOD_Label_13C_6__Dimethyl = 200000986, /// Label:13C(6)15N(2)+Dimethyl: Dimethyl 13C(6)15N(2) Silac label. UNIMOD_Label_13C_6_15N_2__Dimethyl = 200000987, /// Ammonium: Replacement of proton with ammonium ion. UNIMOD_Ammonium = 200000989, /// ISD_z+2_ion: ISD (z+2)-series. UNIMOD_ISD_z_2_ion = 200000991, /// Biotin:Sigma-B1267: Was Biotin-maleimide. UNIMOD_Biotin_Sigma_B1267 = 200000993, /// Label:15N(1): 15N(1). UNIMOD_Label_15N_1_ = 200000994, /// Label:15N(2): 15N(2). UNIMOD_Label_15N_2_ = 200000995, /// Label:15N(3): 15N(3). UNIMOD_Label_15N_3_ = 200000996, /// sulfo+amino: Aminotyrosine with sulfation. UNIMOD_sulfo_amino = 200000997, /// AHA-Alkyne: Azidohomoalanine (AHA) bound to propargylglycine-NH2 (alkyne). UNIMOD_AHA_Alkyne = 200001000, /// AHA-Alkyne-KDDDD: Azidohomoalanine (AHA) bound to DDDDK-propargylglycine-NH2 (alkyne). UNIMOD_AHA_Alkyne_KDDDD = 200001001, /// EGCG1: (-)-epigallocatechin-3-gallate. UNIMOD_EGCG1 = 200001002, /// EGCG2: (-)-dehydroepigallocatechin. UNIMOD_EGCG2 = 200001003, /// Label:13C(6)15N(4)+Methyl: Monomethylated Arg13C(6) 15N(4). UNIMOD_Label_13C_6_15N_4__Methyl = 200001004, /// Label:13C(6)15N(4)+Dimethyl: Dimethylated Arg13C(6) 15N(4). UNIMOD_Label_13C_6_15N_4__Dimethyl = 200001005, /// Label:13C(6)15N(4)+Methyl:2H(3)13C(1): 2H(3) 13C(1) monomethylated Arg13C(6) 15N(4). UNIMOD_Label_13C_6_15N_4__Methyl_2H_3_13C_1_ = 200001006, /// Label:13C(6)15N(4)+Dimethyl:2H(6)13C(2): 2H(6) 13C(2) Dimethylated Arg13C(6) 15N(4). UNIMOD_Label_13C_6_15N_4__Dimethyl_2H_6_13C_2_ = 200001007, /// Cys->CamSec: Sec Iodoacetamide derivative. UNIMOD_Cys__CamSec = 200001008, /// Thiazolidine: Formaldehyde adduct. UNIMOD_Thiazolidine = 200001009, /// DEDGFLYMVYASQETFG: Addition of DEDGFLYMVYASQETFG. UNIMOD_DEDGFLYMVYASQETFG = 200001010, /// Biotin:Invitrogen-M1602: Nalpha-(3-maleimidylpropionyl)biocytin. UNIMOD_Biotin_Invitrogen_M1602 = 200001012, /// glycidamide: Glycidamide adduct. UNIMOD_glycidamide = 200001014, /// Ahx2+Hsl: C-terminal homoserine lactone and two aminohexanoic acids. UNIMOD_Ahx2_Hsl = 200001015, /// DMPO: DMPO spin-trap nitrone adduct. UNIMOD_DMPO = 200001017, /// ICDID: Isotope-Coded Dimedone light form. UNIMOD_ICDID = 200001018, /// ICDID:2H(6): Isotope-Coded Dimedone heavy form. UNIMOD_ICDID_2H_6_ = 200001019, /// Xlink:DSS[156]: Water-quenched monolink of DSS/BS3 crosslinker. UNIMOD_Xlink_DSS_156_ = 200001020, /// Xlink:EGS[244]: Water quenched monolink of EGS cross-linker. UNIMOD_Xlink_EGS_244_ = 200001021, /// Xlink:DST[132]: Water quenched monolink of DST crosslinker. UNIMOD_Xlink_DST_132_ = 200001022, /// Xlink:DTSSP[192]: Water quenched monolink of DSP/DTSSP crosslinker. UNIMOD_Xlink_DTSSP_192_ = 200001023, /// Xlink:SMCC[237]: Water quenched monolink of SMCC. UNIMOD_Xlink_SMCC_237_ = 200001024, /// Xlink:DMP[140]: Water quenched monolink of DMP crosslinker. UNIMOD_Xlink_DMP_140_ = 200001027, /// Xlink:EGS[115]: Cleavage product of EGS protein crosslinks by hydroylamine treatment. UNIMOD_Xlink_EGS_115_ = 200001028, /// Biotin:Thermo-88310: Desthiobiotin modification of lysine. UNIMOD_Biotin_Thermo_88310 = 200001031, /// 2-nitrobenzyl: Tyrosine caged with 2-nitrobenzyl (ONB). UNIMOD_2_nitrobenzyl = 200001032, /// Cys->SecNEM: N-ethylmaleimide on selenocysteines. UNIMOD_Cys__SecNEM = 200001033, /// Cys->SecNEM:2H(5): D5 N-ethylmaleimide on selenocysteines. UNIMOD_Cys__SecNEM_2H_5_ = 200001034, /// Thiadiazole: Thiadiazolydation of Cys. UNIMOD_Thiadiazole = 200001035, /// Withaferin: Modification of cystein by withaferin. UNIMOD_Withaferin = 200001036, /// Biotin:Thermo-88317: Desthiobiotin fluorophosphonate. UNIMOD_Biotin_Thermo_88317 = 200001037, /// TAMRA-FP: TAMRA fluorophosphonate modification of serine. UNIMOD_TAMRA_FP = 200001038, /// Biotin:Thermo-21901+H2O: Maleimide-Biotin + Water. UNIMOD_Biotin_Thermo_21901_H2O = 200001039, /// Deoxyhypusine: Deoxyhypusine. UNIMOD_Deoxyhypusine = 200001041, /// Acetyldeoxyhypusine: Acetyldeoxyhypusine. UNIMOD_Acetyldeoxyhypusine = 200001042, /// Acetylhypusine: Acetylhypusine. UNIMOD_Acetylhypusine = 200001043, /// Ala->Cys: Ala->Cys substitution. UNIMOD_Ala__Cys = 200001044, /// Ala->Phe: Ala->Phe substitution. UNIMOD_Ala__Phe = 200001045, /// Ala->His: Ala->His substitution. UNIMOD_Ala__His = 200001046, /// Ala->Xle: Ala->Leu/Ile substitution. UNIMOD_Ala__Xle = 200001047, /// Ala->Lys: Ala->Lys substitution. UNIMOD_Ala__Lys = 200001048, /// Ala->Met: Ala->Met substitution. UNIMOD_Ala__Met = 200001049, /// Ala->Asn: Ala->Asn substitution. UNIMOD_Ala__Asn = 200001050, /// Ala->Gln: Ala->Gln substitution. UNIMOD_Ala__Gln = 200001051, /// Ala->Arg: Ala->Arg substitution. UNIMOD_Ala__Arg = 200001052, /// Ala->Trp: Ala->Trp substitution. UNIMOD_Ala__Trp = 200001053, /// Ala->Tyr: Ala->Tyr substitution. UNIMOD_Ala__Tyr = 200001054, /// Cys->Ala: Cys->Ala substitution. UNIMOD_Cys__Ala = 200001055, /// Cys->Asp: Cys->Asp substitution. UNIMOD_Cys__Asp = 200001056, /// Cys->Glu: Cys->Glu substitution. UNIMOD_Cys__Glu = 200001057, /// Cys->His: Cys->His substitution. UNIMOD_Cys__His = 200001058, /// Cys->Xle: Cys->Leu/Ile substitution. UNIMOD_Cys__Xle = 200001059, /// Cys->Lys: Cys->Lys substitution. UNIMOD_Cys__Lys = 200001060, /// Cys->Met: Cys->Met substitution. UNIMOD_Cys__Met = 200001061, /// Cys->Asn: Cys->Asn substitution. UNIMOD_Cys__Asn = 200001062, /// Cys->Pro: Cys->Pro substitution. UNIMOD_Cys__Pro = 200001063, /// Cys->Gln: Cys->Gln substitution. UNIMOD_Cys__Gln = 200001064, /// Cys->Thr: Cys->Thr substitution. UNIMOD_Cys__Thr = 200001065, /// Cys->Val: Cys->Val substitution. UNIMOD_Cys__Val = 200001066, /// Asp->Cys: Asp->Cys substitution. UNIMOD_Asp__Cys = 200001067, /// Asp->Phe: Asp->Phe substitution. UNIMOD_Asp__Phe = 200001068, /// Asp->Xle: Asp->Leu/Ile substitution. UNIMOD_Asp__Xle = 200001069, /// Asp->Lys: Asp->Lys substitution. UNIMOD_Asp__Lys = 200001070, /// Asp->Met: Asp->Met substitution. UNIMOD_Asp__Met = 200001071, /// Asp->Pro: Asp->Pro substitution. UNIMOD_Asp__Pro = 200001072, /// Asp->Gln: Asp->Gln substitution. UNIMOD_Asp__Gln = 200001073, /// Asp->Arg: Asp->Arg substitution. UNIMOD_Asp__Arg = 200001074, /// Asp->Ser: Asp->Ser substitution. UNIMOD_Asp__Ser = 200001075, /// Asp->Thr: Asp->Thr substitution. UNIMOD_Asp__Thr = 200001076, /// Asp->Trp: Asp->Trp substitution. UNIMOD_Asp__Trp = 200001077, /// Glu->Cys: Glu->Cys substitution. UNIMOD_Glu__Cys = 200001078, /// Glu->Phe: Glu->Phe substitution. UNIMOD_Glu__Phe = 200001079, /// Glu->His: Glu->His substitution. UNIMOD_Glu__His = 200001080, /// Glu->Xle: Glu->Leu/Ile substitution. UNIMOD_Glu__Xle = 200001081, /// Glu->Met: Glu->Met substitution. UNIMOD_Glu__Met = 200001082, /// Glu->Asn: Glu->Asn substitution. UNIMOD_Glu__Asn = 200001083, /// Glu->Pro: Glu->Pro substitution. UNIMOD_Glu__Pro = 200001084, /// Glu->Arg: Glu->Arg substitution. UNIMOD_Glu__Arg = 200001085, /// Glu->Ser: Glu->Ser substitution. UNIMOD_Glu__Ser = 200001086, /// Glu->Thr: Glu->Thr substitution. UNIMOD_Glu__Thr = 200001087, /// Glu->Trp: Glu->Trp substitution. UNIMOD_Glu__Trp = 200001088, /// Glu->Tyr: Glu->Tyr substitution. UNIMOD_Glu__Tyr = 200001089, /// Phe->Ala: Phe->Ala substitution. UNIMOD_Phe__Ala = 200001090, /// Phe->Asp: Phe->Asp substitution. UNIMOD_Phe__Asp = 200001091, /// Phe->Glu: Phe->Glu substitution. UNIMOD_Phe__Glu = 200001092, /// Phe->Gly: Phe->Gly substitution. UNIMOD_Phe__Gly = 200001093, /// Phe->His: Phe->His substitution. UNIMOD_Phe__His = 200001094, /// Phe->Lys: Phe->Lys substitution. UNIMOD_Phe__Lys = 200001095, /// Phe->Met: Phe->Met substitution. UNIMOD_Phe__Met = 200001096, /// Phe->Asn: Phe->Asn substitution. UNIMOD_Phe__Asn = 200001097, /// Phe->Pro: Phe->Pro substitution. UNIMOD_Phe__Pro = 200001098, /// Phe->Gln: Phe->Gln substitution. UNIMOD_Phe__Gln = 200001099, /// Phe->Arg: Phe->Arg substitution. UNIMOD_Phe__Arg = 200001100, /// Phe->Thr: Phe->Thr substitution. UNIMOD_Phe__Thr = 200001101, /// Phe->Trp: Phe->Trp substitution. UNIMOD_Phe__Trp = 200001102, /// Gly->Phe: Gly->Phe substitution. UNIMOD_Gly__Phe = 200001103, /// Gly->His: Gly->His substitution. UNIMOD_Gly__His = 200001104, /// Gly->Xle: Gly->Leu/Ile substitution. UNIMOD_Gly__Xle = 200001105, /// Gly->Lys: Gly->Lys substitution. UNIMOD_Gly__Lys = 200001106, /// Gly->Met: Gly->Met substitution. UNIMOD_Gly__Met = 200001107, /// Gly->Asn: Gly->Asn substitution. UNIMOD_Gly__Asn = 200001108, /// Gly->Pro: Gly->Pro substitution. UNIMOD_Gly__Pro = 200001109, /// Gly->Gln: Gly->Gln substitution. UNIMOD_Gly__Gln = 200001110, /// Gly->Thr: Gly->Thr substitution. UNIMOD_Gly__Thr = 200001111, /// Gly->Tyr: Gly->Tyr substitution. UNIMOD_Gly__Tyr = 200001112, /// His->Ala: His->Ala substitution. UNIMOD_His__Ala = 200001113, /// His->Cys: His->Cys substitution. UNIMOD_His__Cys = 200001114, /// His->Glu: His->Glu substitution. UNIMOD_His__Glu = 200001115, /// His->Phe: His->Phe substitution. UNIMOD_His__Phe = 200001116, /// His->Gly: His->Gly substitution. UNIMOD_His__Gly = 200001117, /// His->Lys: His->Lys substitution. UNIMOD_His__Lys = 200001119, /// His->Met: His->Met substitution. UNIMOD_His__Met = 200001120, /// His->Ser: His->Ser substitution. UNIMOD_His__Ser = 200001121, /// His->Thr: His->Thr substitution. UNIMOD_His__Thr = 200001122, /// His->Val: His->Val substitution. UNIMOD_His__Val = 200001123, /// His->Trp: His->Trp substitution. UNIMOD_His__Trp = 200001124, /// Xle->Ala: Leu/Ile->Ala substitution. UNIMOD_Xle__Ala = 200001125, /// Xle->Cys: Leu/Ile->Cys substitution. UNIMOD_Xle__Cys = 200001126, /// Xle->Asp: Leu/Ile->Asp substitution. UNIMOD_Xle__Asp = 200001127, /// Xle->Glu: Leu/Ile->Glu substitution. UNIMOD_Xle__Glu = 200001128, /// Xle->Gly: Leu/Ile->Gly substitution. UNIMOD_Xle__Gly = 200001129, /// Xle->Tyr: Leu/Ile->Tyr substitution. UNIMOD_Xle__Tyr = 200001130, /// Lys->Ala: Lys->Ala substitution. UNIMOD_Lys__Ala = 200001131, /// Lys->Cys: Lys->Cys substitution. UNIMOD_Lys__Cys = 200001132, /// Lys->Asp: Lys->Asp substitution. UNIMOD_Lys__Asp = 200001133, /// Lys->Phe: Lys->Phe substitution. UNIMOD_Lys__Phe = 200001134, /// Lys->Gly: Lys->Gly substitution. UNIMOD_Lys__Gly = 200001135, /// Lys->His: Lys->His substitution. UNIMOD_Lys__His = 200001136, /// Lys->Pro: Lys->Pro substitution. UNIMOD_Lys__Pro = 200001137, /// Lys->Ser: Lys->Ser substitution. UNIMOD_Lys__Ser = 200001138, /// Lys->Val: Lys->Val substitution. UNIMOD_Lys__Val = 200001139, /// Lys->Trp: Lys->Trp substitution. UNIMOD_Lys__Trp = 200001140, /// Lys->Tyr: Lys->Tyr substitution. UNIMOD_Lys__Tyr = 200001141, /// Met->Ala: Met->Ala substitution. UNIMOD_Met__Ala = 200001142, /// Met->Cys: Met->Cys substitution. UNIMOD_Met__Cys = 200001143, /// Met->Asp: Met->Asp substitution. UNIMOD_Met__Asp = 200001144, /// Met->Glu: Met->Glu substitution. UNIMOD_Met__Glu = 200001145, /// Met->Phe: Met->Phe substitution. UNIMOD_Met__Phe = 200001146, /// Met->Gly: Met->Gly substitution. UNIMOD_Met__Gly = 200001147, /// Met->His: Met->His substitution. UNIMOD_Met__His = 200001148, /// Met->Asn: Met->Asn substitution. UNIMOD_Met__Asn = 200001149, /// Met->Pro: Met->Pro substitution. UNIMOD_Met__Pro = 200001150, /// Met->Gln: Met->Gln substitution. UNIMOD_Met__Gln = 200001151, /// Met->Ser: Met->Ser substitution. UNIMOD_Met__Ser = 200001152, /// Met->Trp: Met->Trp substitution. UNIMOD_Met__Trp = 200001153, /// Met->Tyr: Met->Tyr substitution. UNIMOD_Met__Tyr = 200001154, /// Asn->Ala: Asn->Ala substitution. UNIMOD_Asn__Ala = 200001155, /// Asn->Cys: Asn->Cys substitution. UNIMOD_Asn__Cys = 200001156, /// Asn->Glu: Asn->Glu substitution. UNIMOD_Asn__Glu = 200001157, /// Asn->Phe: Asn->Phe substitution. UNIMOD_Asn__Phe = 200001158, /// Asn->Gly: Asn->Gly substitution. UNIMOD_Asn__Gly = 200001159, /// Asn->Met: Asn->Met substitution. UNIMOD_Asn__Met = 200001160, /// Asn->Pro: Asn->Pro substitution. UNIMOD_Asn__Pro = 200001161, /// Asn->Gln: Asn->Gln substitution. UNIMOD_Asn__Gln = 200001162, /// Asn->Arg: Asn->Arg substitution. UNIMOD_Asn__Arg = 200001163, /// Asn->Val: Asn->Val substitution. UNIMOD_Asn__Val = 200001164, /// Asn->Trp: Asn->Trp substitution. UNIMOD_Asn__Trp = 200001165, /// Pro->Cys: Pro->Cys substitution. UNIMOD_Pro__Cys = 200001166, /// Pro->Asp: Pro->Asp substitution. UNIMOD_Pro__Asp = 200001167, /// Pro->Glu: Pro->Glu substitution. UNIMOD_Pro__Glu = 200001168, /// Pro->Phe: Pro->Phe substitution. UNIMOD_Pro__Phe = 200001169, /// Pro->Gly: Pro->Gly substitution. UNIMOD_Pro__Gly = 200001170, /// Pro->Lys: Pro->Lys substitution. UNIMOD_Pro__Lys = 200001171, /// Pro->Met: Pro->Met substitution. UNIMOD_Pro__Met = 200001172, /// Pro->Asn: Pro->Asn substitution. UNIMOD_Pro__Asn = 200001173, /// Pro->Val: Pro->Val substitution. UNIMOD_Pro__Val = 200001174, /// Pro->Trp: Pro->Trp substitution. UNIMOD_Pro__Trp = 200001175, /// Pro->Tyr: Pro->Tyr substitution. UNIMOD_Pro__Tyr = 200001176, /// Gln->Ala: Gln->Ala substitution. UNIMOD_Gln__Ala = 200001177, /// Gln->Cys: Gln->Cys substitution. UNIMOD_Gln__Cys = 200001178, /// Gln->Asp: Gln->Asp substitution. UNIMOD_Gln__Asp = 200001179, /// Gln->Phe: Gln->Phe substitution. UNIMOD_Gln__Phe = 200001180, /// Gln->Gly: Gln->Gly substitution. UNIMOD_Gln__Gly = 200001181, /// Gln->Met: Gln->Met substitution. UNIMOD_Gln__Met = 200001182, /// Gln->Asn: Gln->Asn substitution. UNIMOD_Gln__Asn = 200001183, /// Gln->Ser: Gln->Ser substitution. UNIMOD_Gln__Ser = 200001184, /// Gln->Thr: Gln->Thr substitution. UNIMOD_Gln__Thr = 200001185, /// Gln->Val: Gln->Val substitution. UNIMOD_Gln__Val = 200001186, /// Gln->Trp: Gln->Trp substitution. UNIMOD_Gln__Trp = 200001187, /// Gln->Tyr: Gln->Tyr substitution. UNIMOD_Gln__Tyr = 200001188, /// Arg->Ala: Arg->Ala substitution. UNIMOD_Arg__Ala = 200001189, /// Arg->Asp: Arg->Asp substitution. UNIMOD_Arg__Asp = 200001190, /// Arg->Glu: Arg->Glu substitution. UNIMOD_Arg__Glu = 200001191, /// Arg->Asn: Arg->Asn substitution. UNIMOD_Arg__Asn = 200001192, /// Arg->Val: Arg->Val substitution. UNIMOD_Arg__Val = 200001193, /// Arg->Tyr: Arg->Tyr substitution. UNIMOD_Arg__Tyr = 200001194, /// Arg->Phe: Arg->Phe substitution. UNIMOD_Arg__Phe = 200001195, /// Ser->Asp: Ser->Asp substitution. UNIMOD_Ser__Asp = 200001196, /// Ser->Glu: Ser->Glu substitution. UNIMOD_Ser__Glu = 200001197, /// Ser->His: Ser->His substitution. UNIMOD_Ser__His = 200001198, /// Ser->Lys: Ser->Lys substitution. UNIMOD_Ser__Lys = 200001199, /// Ser->Met: Ser->Met substitution. UNIMOD_Ser__Met = 200001200, /// Ser->Gln: Ser->Gln substitution. UNIMOD_Ser__Gln = 200001201, /// Ser->Val: Ser->Val substitution. UNIMOD_Ser__Val = 200001202, /// Thr->Cys: Thr->Cys substitution. UNIMOD_Thr__Cys = 200001203, /// Thr->Asp: Thr->Asp substitution. UNIMOD_Thr__Asp = 200001204, /// Thr->Glu: Thr->Glu substitution. UNIMOD_Thr__Glu = 200001205, /// Thr->Phe: Thr->Phe substitution. UNIMOD_Thr__Phe = 200001206, /// Thr->Gly: Thr->Gly substitution. UNIMOD_Thr__Gly = 200001207, /// Thr->His: Thr->His substitution. UNIMOD_Thr__His = 200001208, /// Thr->Gln: Thr->Gln substitution. UNIMOD_Thr__Gln = 200001209, /// Thr->Val: Thr->Val substitution. UNIMOD_Thr__Val = 200001210, /// Thr->Trp: Thr->Trp substitution. UNIMOD_Thr__Trp = 200001211, /// Thr->Tyr: Thr->Tyr substitution. UNIMOD_Thr__Tyr = 200001212, /// Val->Cys: Val->Cys substitution. UNIMOD_Val__Cys = 200001213, /// Val->His: Val->His substitution. UNIMOD_Val__His = 200001214, /// Val->Lys: Val->Lys substitution. UNIMOD_Val__Lys = 200001215, /// Val->Asn: Val->Asn substitution. UNIMOD_Val__Asn = 200001216, /// Val->Pro: Val->Pro substitution. UNIMOD_Val__Pro = 200001217, /// Val->Gln: Val->Gln substitution. UNIMOD_Val__Gln = 200001218, /// Val->Arg: Val->Arg substitution. UNIMOD_Val__Arg = 200001219, /// Val->Ser: Val->Ser substitution. UNIMOD_Val__Ser = 200001220, /// Val->Thr: Val->Thr substitution. UNIMOD_Val__Thr = 200001221, /// Val->Trp: Val->Trp substitution. UNIMOD_Val__Trp = 200001222, /// Val->Tyr: Val->Tyr substitution. UNIMOD_Val__Tyr = 200001223, /// Trp->Ala: Trp->Ala substitution. UNIMOD_Trp__Ala = 200001224, /// Trp->Asp: Trp->Asp substitution. UNIMOD_Trp__Asp = 200001225, /// Trp->Glu: Trp->Glu substitution. UNIMOD_Trp__Glu = 200001226, /// Trp->Phe: Trp->Phe substitution. UNIMOD_Trp__Phe = 200001227, /// Trp->His: Trp->His substitution. UNIMOD_Trp__His = 200001228, /// Trp->Lys: Trp->Lys substitution. UNIMOD_Trp__Lys = 200001229, /// Trp->Met: Trp->Met substitution. UNIMOD_Trp__Met = 200001230, /// Trp->Asn: Trp->Asn substitution. UNIMOD_Trp__Asn = 200001231, /// Trp->Pro: Trp->Pro substitution. UNIMOD_Trp__Pro = 200001232, /// Trp->Gln: Trp->Gln substitution. UNIMOD_Trp__Gln = 200001233, /// Trp->Thr: Trp->Thr substitution. UNIMOD_Trp__Thr = 200001234, /// Trp->Val: Trp->Val substitution. UNIMOD_Trp__Val = 200001235, /// Trp->Tyr: Trp->Tyr substitution. UNIMOD_Trp__Tyr = 200001236, /// Tyr->Ala: Tyr->Ala substitution. UNIMOD_Tyr__Ala = 200001237, /// Tyr->Glu: Tyr->Glu substitution. UNIMOD_Tyr__Glu = 200001238, /// Tyr->Gly: Tyr->Gly substitution. UNIMOD_Tyr__Gly = 200001239, /// Tyr->Lys: Tyr->Lys substitution. UNIMOD_Tyr__Lys = 200001240, /// Tyr->Met: Tyr->Met substitution. UNIMOD_Tyr__Met = 200001241, /// Tyr->Pro: Tyr->Pro substitution. UNIMOD_Tyr__Pro = 200001242, /// Tyr->Gln: Tyr->Gln substitution. UNIMOD_Tyr__Gln = 200001243, /// Tyr->Arg: Tyr->Arg substitution. UNIMOD_Tyr__Arg = 200001244, /// Tyr->Thr: Tyr->Thr substitution. UNIMOD_Tyr__Thr = 200001245, /// Tyr->Val: Tyr->Val substitution. UNIMOD_Tyr__Val = 200001246, /// Tyr->Trp: Tyr->Trp substitution. UNIMOD_Tyr__Trp = 200001247, /// Tyr->Xle: Tyr->Leu/Ile substitution. UNIMOD_Tyr__Xle = 200001248, /// AHA-SS: Azidohomoalanine coupled to reductively cleaved tag. UNIMOD_AHA_SS = 200001249, /// AHA-SS_CAM: Carbamidomethylated form of reductively cleaved tag coupled to azidohomoalanine. UNIMOD_AHA_SS_CAM = 200001250, /// Biotin:Thermo-33033: Sulfo-SBED Label Photoreactive Biotin Crosslinker. UNIMOD_Biotin_Thermo_33033 = 200001251, /// Biotin:Thermo-33033-H: Sulfo-SBED Label Photoreactive Biotin Crosslinker minus Hydrogen. UNIMOD_Biotin_Thermo_33033_H = 200001252, /// 2-monomethylsuccinyl: S-(2-monomethylsuccinyl) cysteine. UNIMOD_2_monomethylsuccinyl = 200001253, /// Saligenin: O-toluene. UNIMOD_Saligenin = 200001254, /// Cresylphosphate: O-toluyl-phosphorylation. UNIMOD_Cresylphosphate = 200001255, /// CresylSaligeninPhosphate: Cresyl-Saligenin-phosphorylation. UNIMOD_CresylSaligeninPhosphate = 200001256, /// Ub-Br2: Ub Bromide probe addition. UNIMOD_Ub_Br2 = 200001257, /// Ub-VME: Ubiquitin vinylmethylester. UNIMOD_Ub_VME = 200001258, /// Ub-amide: Ub amide probe addition. UNIMOD_Ub_amide = 200001260, /// Ub-fluorescein: Ub Fluorescein probe addition. UNIMOD_Ub_fluorescein = 200001261, /// 2-dimethylsuccinyl: S-(2-dimethylsuccinyl) cysteine. UNIMOD_2_dimethylsuccinyl = 200001262, /// Gly: Addition of Glycine. UNIMOD_Gly = 200001263, /// pupylation: Addition of GGE. UNIMOD_pupylation = 200001264, /// Label:13C(4): 13C4 Methionine label. UNIMOD_Label_13C_4_ = 200001266, /// Label:13C(4)+Oxidation: Oxidised 13C4 labelled Methionine. UNIMOD_Label_13C_4__Oxidation = 200001267, /// HCysThiolactone: N-Homocysteine thiolactone. UNIMOD_HCysThiolactone = 200001270, /// HCysteinyl: S-homocysteinylation. UNIMOD_HCysteinyl = 200001271, /// UgiJoullie: Side reaction of HisTag. UNIMOD_UgiJoullie = 200001276, /// Dipyridyl: Cys modified with dipy ligand. UNIMOD_Dipyridyl = 200001277, /// Furan: Chemical modification of the iodinated sites of thyroglobulin by Suzuki reaction. UNIMOD_Furan = 200001278, /// Difuran: Chemical modification of the diiodinated sites of thyroglobulin by Suzuki reaction. UNIMOD_Difuran = 200001279, /// BMP-piperidinol: 1-methyl-3-benzoyl-4-hydroxy-4-phenylpiperidine. UNIMOD_BMP_piperidinol = 200001281, /// UgiJoullieProGly: Side reaction of PG with Side chain of aspartic or glutamic acid. UNIMOD_UgiJoullieProGly = 200001282, /// UgiJoullieProGlyProGly: Side reaction of PGPG with Side chain of aspartic or glutamic acid. UNIMOD_UgiJoullieProGlyProGly = 200001283, /// IMEHex(2)NeuAc(1): Glycosylation with IME linked Hex(2) NeuAc. UNIMOD_IMEHex_2_NeuAc_1_ = 200001286, /// Arg-loss: Loss of arginine due to transpeptidation. UNIMOD_Arg_loss = 200001287, /// Arg: Addition of arginine due to transpeptidation. UNIMOD_Arg = 200001288, /// Butyryl: Butyryl. UNIMOD_Butyryl = 200001289, /// Dicarbamidomethyl: Double Carbamidomethylation. UNIMOD_Dicarbamidomethyl = 200001290, /// Dimethyl:2H(6): Dimethyl-Medium. UNIMOD_Dimethyl_2H_6_ = 200001291, /// GGQ: SUMOylation leaving GlyGlyGln. UNIMOD_GGQ = 200001292, /// QTGG: SUMOylation leaving GlnThrGlyGly. UNIMOD_QTGG = 200001293, /// Label:13C(3): 13C3 label for SILAC. UNIMOD_Label_13C_3_ = 200001296, /// Label:13C(3)15N(1): SILAC or AQUA label. UNIMOD_Label_13C_3_15N_1_ = 200001297, /// Label:13C(4)15N(1): 13C4 15N1 label for SILAC. UNIMOD_Label_13C_4_15N_1_ = 200001298, /// Label:2H(10): 2H(10) label. UNIMOD_Label_2H_10_ = 200001299, /// Label:2H(4)13C(1): Label:2H(4)13C(1). UNIMOD_Label_2H_4_13C_1_ = 200001300, /// Lys: Addition of lysine due to transpeptidation. UNIMOD_Lys = 200001301, /// mTRAQ:13C(6)15N(2): MTRAQ heavy. UNIMOD_mTRAQ_13C_6_15N_2_ = 200001302, /// NeuAc: N-acetyl neuraminic acid. UNIMOD_NeuAc = 200001303, /// NeuGc: N-glycoyl neuraminic acid. UNIMOD_NeuGc = 200001304, /// Propyl: Propyl. UNIMOD_Propyl = 200001305, /// Propyl:2H(6): Propyl:2H(6). UNIMOD_Propyl_2H_6_ = 200001306, /// Propiophenone: Propiophenone. UNIMOD_Propiophenone = 200001310, /// Delta:H(6)C(3)O(1): Reduced acrolein addition +58. UNIMOD_Delta_H_6_C_3_O_1_ = 200001312, /// Delta:H(8)C(6)O(1): Reduced acrolein addition +96. UNIMOD_Delta_H_8_C_6_O_1_ = 200001313, /// biotinAcrolein298: Biotin hydrazide labeled acrolein addition +298. UNIMOD_biotinAcrolein298 = 200001314, /// MM-diphenylpentanone: 3-methyl-5-(methylamino)-1,3-diphenylpentan-1-one. UNIMOD_MM_diphenylpentanone = 200001315, /// EHD-diphenylpentanone: 2-ethyl-3-hydroxy-1,3-diphenylpentan-1-one. UNIMOD_EHD_diphenylpentanone = 200001317, /// Biotin:Thermo-21901+2H2O: Maleimide-Biotin + 2Water. UNIMOD_Biotin_Thermo_21901_2H2O = 200001320, /// DiLeu4plex115: Accurate mass for DiLeu 115 isobaric tag. UNIMOD_DiLeu4plex115 = 200001321, /// DiLeu4plex: Accurate mass for DiLeu 116 isobaric tag. UNIMOD_DiLeu4plex = 200001322, /// DiLeu4plex117: Accurate mass for DiLeu 117 isobaric tag. UNIMOD_DiLeu4plex117 = 200001323, /// DiLeu4plex118: Accurate mass for DiLeu 118 isobaric tag. UNIMOD_DiLeu4plex118 = 200001324, /// NEMsulfur: N-ethylmaleimideSulfur. UNIMOD_NEMsulfur = 200001326, /// SulfurDioxide: SulfurDioxide. UNIMOD_SulfurDioxide = 200001327, /// NEMsulfurWater: N-ethylmaleimideSulfurWater. UNIMOD_NEMsulfurWater = 200001328, /// bisANS-sulfonates: BisANS with loss of both sulfonates. UNIMOD_bisANS_sulfonates = 200001330, /// DNCB_hapten: Chemical reaction with 2,4-dinitro-1-chloro benzene (DNCB). UNIMOD_DNCB_hapten = 200001331, /// Biotin:Thermo-21911: Biotin-PEG11-maleimide. UNIMOD_Biotin_Thermo_21911 = 200001340, /// iodoTMT: Native iodoacetyl Tandem Mass Tag®. UNIMOD_iodoTMT = 200001341, /// iodoTMT6plex: Sixplex iodoacetyl Tandem Mass Tag®. UNIMOD_iodoTMT6plex = 200001342, /// Phosphogluconoylation: Phosphogluconoylation. UNIMOD_Phosphogluconoylation = 200001344, /// PS_Hapten: Reaction with phenyl salicylate (PS). UNIMOD_PS_Hapten = 200001345, /// Cy3-maleimide: Cy3 Maleimide mono-Reactive dye. UNIMOD_Cy3_maleimide = 200001348, /// benzylguanidine: Modification of the lysine side chain from NH2 to guanidine with a H removed in favor of a benzyl group. UNIMOD_benzylguanidine = 200001349, /// CarboxymethylDMAP: A fixed +1 charge tag attached to the N-terminus of peptides. UNIMOD_CarboxymethylDMAP = 200001350, /// azole: Formation of five membered aromatic heterocycle. UNIMOD_azole = 200001355, /// phosphoRibosyl: Phosphate-ribosylation. UNIMOD_phosphoRibosyl = 200001356, /// NEM:2H(5)+H2O: D5 N-ethylmaleimide+water on cysteines. UNIMOD_NEM_2H_5__H2O = 200001358, /// Crotonyl: Crotonylation. UNIMOD_Crotonyl = 200001363, /// O-Et-N-diMePhospho: O-ethyl, N-dimethyl phosphate. UNIMOD_O_Et_N_diMePhospho = 200001364, /// N-dimethylphosphate: N-dimethylphosphate. UNIMOD_N_dimethylphosphate = 200001365, /// dHex(1)Hex(1): Hex1dHex1. UNIMOD_dHex_1_Hex_1_ = 200001367, /// Methyl:2H(3)+Acetyl:2H(3): 3-fold methylated lysine labelled with Acetyl_heavy. UNIMOD_Methyl_2H_3__Acetyl_2H_3_ = 200001368, /// Label:2H(3)+Oxidation: Oxidised 2H(3) labelled Methionine. UNIMOD_Label_2H_3__Oxidation = 200001370, /// Trimethyl:2H(9): 3-fold methylation with deuterated methyl groups. UNIMOD_Trimethyl_2H_9_ = 200001371, /// Acetyl:13C(2): Heavy acetylation. UNIMOD_Acetyl_13C_2_ = 200001372, /// dHex(1)Hex(2): Hex2dHex1. UNIMOD_dHex_1_Hex_2_ = 200001375, /// dHex(1)Hex(3): Hex3dHex1. UNIMOD_dHex_1_Hex_3_ = 200001376, /// dHex(1)Hex(4): Hex4dHex1. UNIMOD_dHex_1_Hex_4_ = 200001377, /// dHex(1)Hex(5): Hex5dHex1. UNIMOD_dHex_1_Hex_5_ = 200001378, /// dHex(1)Hex(6): Hex6dHex1. UNIMOD_dHex_1_Hex_6_ = 200001379, /// methylsulfonylethyl: Reaction with methyl vinyl sulfone. UNIMOD_methylsulfonylethyl = 200001380, /// ethylsulfonylethyl: Reaction with ethyl vinyl sulfone. UNIMOD_ethylsulfonylethyl = 200001381, /// phenylsulfonylethyl: Reaction with phenyl vinyl sulfone. UNIMOD_phenylsulfonylethyl = 200001382, /// PyridoxalPhosphateH2: PLP bound to lysine reduced by sodium borohydride (NaBH4) to create amine linkage. UNIMOD_PyridoxalPhosphateH2 = 200001383, /// Homocysteic_acid: Methionine oxidation to homocysteic acid. UNIMOD_Homocysteic_acid = 200001384, /// Hydroxamic_acid: ADP-ribosylation followed by conversion to hydroxamic acid via hydroxylamine. UNIMOD_Hydroxamic_acid = 200001385, /// 3-phosphoglyceryl: 3-phosphoglyceryl. UNIMOD_3_phosphoglyceryl = 200001387, /// HN2_mustard: Modification by hydroxylated mechloroethamine (HN-2). UNIMOD_HN2_mustard = 200001388, /// HN3_mustard: Modification by hydroxylated tris-(2-chloroethyl)amine (HN-3). UNIMOD_HN3_mustard = 200001389, /// Oxidation+NEM: N-ethylmaleimide on cysteine sulfenic acid. UNIMOD_Oxidation_NEM = 200001390, /// NHS-fluorescein: Fluorescein-hexanoate-NHS hydrolysis. UNIMOD_NHS_fluorescein = 200001391, /// DiART6plex: Representative mass and accurate mass for 114. UNIMOD_DiART6plex = 200001392, /// DiART6plex115: Accurate mass for DiART6plex 115. UNIMOD_DiART6plex115 = 200001393, /// DiART6plex116/119: Accurate mass for DiART6plex 116 and 119. UNIMOD_DiART6plex116_119 = 200001394, /// DiART6plex117: Accurate mass for DiART6plex 117. UNIMOD_DiART6plex117 = 200001395, /// DiART6plex118: Accurate mass for DiART6plex 118. UNIMOD_DiART6plex118 = 200001396, /// Iodoacetanilide: Iodoacetanilide derivative. UNIMOD_Iodoacetanilide = 200001397, /// Iodoacetanilide:13C(6): 13C labelled iodoacetanilide derivative. UNIMOD_Iodoacetanilide_13C_6_ = 200001398, /// Dap-DSP: Diaminopimelic acid-DSP monolinked. UNIMOD_Dap_DSP = 200001399, /// MurNAc: N-Acetylmuramic acid. UNIMOD_MurNAc = 200001400, /// Label:2H(7)15N(4): Label:2H(7)15N(4). UNIMOD_Label_2H_7_15N_4_ = 200001402, /// Label:2H(6)15N(1): Label:2H(6)15N(1). UNIMOD_Label_2H_6_15N_1_ = 200001403, /// EEEDVIEVYQEQTGG: Sumoylation by SUMO-1 after Cyanogen bromide (CNBr) cleavage. UNIMOD_EEEDVIEVYQEQTGG = 200001405, /// EDEDTIDVFQQQTGG: Sumoylation by SUMO-2/3 after Cyanogen bromide (CNBr) cleavage. UNIMOD_EDEDTIDVFQQQTGG = 200001406, /// Hex(5)HexNAc(4)NeuAc(2): A2G2S2/G2S2. UNIMOD_Hex_5_HexNAc_4_NeuAc_2_ = 200001408, /// Hex(5)HexNAc(4)NeuAc(1): A2G2S1/G2S1. UNIMOD_Hex_5_HexNAc_4_NeuAc_1_ = 200001409, /// dHex(1)Hex(5)HexNAc(4)NeuAc(1): FA2G2S1/G2FS1. UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_ = 200001410, /// dHex(1)Hex(5)HexNAc(4)NeuAc(2): FA2G2S2/G2FS2. UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_ = 200001411, /// s-GlcNAc: O3S1HexNAc1. UNIMOD_s_GlcNAc = 200001412, /// PhosphoHex(2): H1O3P1Hex2. UNIMOD_PhosphoHex_2_ = 200001413, /// Trimethyl:13C(3)2H(9): 3-fold methylation with fully labelled methyl groups. UNIMOD_Trimethyl_13C_3_2H_9_ = 200001414, /// 15N-oxobutanoic: Loss of ammonia (15N). UNIMOD_15N_oxobutanoic = 200001419, /// spermine: Spermine adduct. UNIMOD_spermine = 200001420, /// spermidine: Spermidine adduct. UNIMOD_spermidine = 200001421, /// Biotin:Thermo-21330: Biotin_PEG4. UNIMOD_Biotin_Thermo_21330 = 200001423, /// Pentose: Pentose. UNIMOD_Pentose = 200001425, /// Hex(1)Pent(1): Hex Pent. UNIMOD_Hex_1_Pent_1_ = 200001426, /// Hex(1)HexA(1): Hex HexA. UNIMOD_Hex_1_HexA_1_ = 200001427, /// Hex(1)Pent(2): Hex Pent(2). UNIMOD_Hex_1_Pent_2_ = 200001428, /// Hex(1)HexNAc(1)Phos(1): Hex HexNAc Phos. UNIMOD_Hex_1_HexNAc_1_Phos_1_ = 200001429, /// Hex(1)HexNAc(1)Sulf(1): Hex HexNAc Sulf. UNIMOD_Hex_1_HexNAc_1_Sulf_1_ = 200001430, /// Hex(1)NeuAc(1): Hex NeuAc ---OR--- HexNAc Kdn. UNIMOD_Hex_1_NeuAc_1_ = 200001431, /// Hex(1)NeuGc(1): Hex NeuGc. UNIMOD_Hex_1_NeuGc_1_ = 200001432, /// HexNAc(3): HexNAc(3). UNIMOD_HexNAc_3_ = 200001433, /// HexNAc(1)NeuAc(1): HexNAc NeuAc. UNIMOD_HexNAc_1_NeuAc_1_ = 200001434, /// HexNAc(1)NeuGc(1): HexNAc NeuGc. UNIMOD_HexNAc_1_NeuGc_1_ = 200001435, /// Hex(1)HexNAc(1)dHex(1)Me(1): Hex HexNAc dHex Me. UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_1_ = 200001436, /// Hex(1)HexNAc(1)dHex(1)Me(2): Hex HexNAc dHex Me(2). UNIMOD_Hex_1_HexNAc_1_dHex_1_Me_2_ = 200001437, /// Hex(2)HexNAc(1): Hex(2) HexNAc. UNIMOD_Hex_2_HexNAc_1_ = 200001438, /// Hex(1)HexA(1)HexNAc(1): Hex HexA HexNAc. UNIMOD_Hex_1_HexA_1_HexNAc_1_ = 200001439, /// Hex(2)HexNAc(1)Me(1): Hex(2) HexNAc Me. UNIMOD_Hex_2_HexNAc_1_Me_1_ = 200001440, /// Hex(1)Pent(3): Hex Pent(3). UNIMOD_Hex_1_Pent_3_ = 200001441, /// Hex(1)NeuAc(1)Pent(1): Hex NeuAc Pent. UNIMOD_Hex_1_NeuAc_1_Pent_1_ = 200001442, /// Hex(2)HexNAc(1)Sulf(1): Hex(2) HexNAc Sulf. UNIMOD_Hex_2_HexNAc_1_Sulf_1_ = 200001443, /// Hex(2)NeuAc(1): Hex(2) NeuAc ---OR--- Hex HexNAc Kdn. UNIMOD_Hex_2_NeuAc_1_ = 200001444, /// dHex(2)Hex(2): Hex2 dHex2. UNIMOD_dHex_2_Hex_2_ = 200001445, /// dHex(1)Hex(2)HexA(1): DHex Hex(2) HexA. UNIMOD_dHex_1_Hex_2_HexA_1_ = 200001446, /// Hex(1)HexNAc(2)Sulf(1): Hex HexNAc(2) Sulf. UNIMOD_Hex_1_HexNAc_2_Sulf_1_ = 200001447, /// Hex(4): Hex(4). UNIMOD_Hex_4_ = 200001448, /// dHex(1)Hex(2)HexNAc(2)Pent(1): DHex Hex(2) HexNAc(2) Pent. UNIMOD_dHex_1_Hex_2_HexNAc_2_Pent_1_ = 200001449, /// Hex(2)HexNAc(2)NeuAc(1): Hex(2) HexNAc(2) NeuAc ---OR--- dHex Hex HexNAc(2) NeuGc. UNIMOD_Hex_2_HexNAc_2_NeuAc_1_ = 200001450, /// Hex(3)HexNAc(2)Pent(1): Hex(3) HexNAc(2) Pent. UNIMOD_Hex_3_HexNAc_2_Pent_1_ = 200001451, /// Hex(4)HexNAc(2): Hex(4) HexNAc(2). UNIMOD_Hex_4_HexNAc_2_ = 200001452, /// dHex(1)Hex(4)HexNAc(1)Pent(1): DHex Hex(4) HexNAc Pent. UNIMOD_dHex_1_Hex_4_HexNAc_1_Pent_1_ = 200001453, /// dHex(1)Hex(3)HexNAc(2)Pent(1): DHex Hex(3) HexNAc(2) Pent. UNIMOD_dHex_1_Hex_3_HexNAc_2_Pent_1_ = 200001454, /// Hex(3)HexNAc(2)NeuAc(1): Hex(3) HexNAc(2) NeuAc. UNIMOD_Hex_3_HexNAc_2_NeuAc_1_ = 200001455, /// Hex(4)HexNAc(2)Pent(1): Hex(4) HexNAc(2) Pent. UNIMOD_Hex_4_HexNAc_2_Pent_1_ = 200001456, /// Hex(3)HexNAc(3)Pent(1): Hex(3) HexNAc(3) Pent. UNIMOD_Hex_3_HexNAc_3_Pent_1_ = 200001457, /// Hex(5)HexNAc(2)Phos(1): Hex(5) HexNAc(2) Phos. UNIMOD_Hex_5_HexNAc_2_Phos_1_ = 200001458, /// dHex(1)Hex(4)HexNAc(2)Pent(1): DHex Hex(4) HexNAc(2) Pent. UNIMOD_dHex_1_Hex_4_HexNAc_2_Pent_1_ = 200001459, /// Hex(7)HexNAc(1): Hex(7) HexNAc. UNIMOD_Hex_7_HexNAc_1_ = 200001460, /// Hex(4)HexNAc(2)NeuAc(1): Hex(4) HexNAc(2) NeuAc ---OR--- Hex(3) HexNAc(2) dHex NeuGc. UNIMOD_Hex_4_HexNAc_2_NeuAc_1_ = 200001461, /// dHex(1)Hex(5)HexNAc(2): DHex Hex(5) HexNAc(2). UNIMOD_dHex_1_Hex_5_HexNAc_2_ = 200001462, /// dHex(1)Hex(3)HexNAc(3)Pent(1): DHex Hex(3) HexNAc(3) Pent. UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_1_ = 200001463, /// Hex(3)HexNAc(4)Sulf(1): Hex(3) HexNAc(4) Sulf. UNIMOD_Hex_3_HexNAc_4_Sulf_1_ = 200001464, /// Hex(6)HexNAc(2): M6/Man6. UNIMOD_Hex_6_HexNAc_2_ = 200001465, /// Hex(4)HexNAc(3)Pent(1): Hex(4) HexNAc(3) Pent. UNIMOD_Hex_4_HexNAc_3_Pent_1_ = 200001466, /// dHex(1)Hex(4)HexNAc(3): DHex Hex(4) HexNAc(3). UNIMOD_dHex_1_Hex_4_HexNAc_3_ = 200001467, /// Hex(5)HexNAc(3): Hex(5) HexNAc(3). UNIMOD_Hex_5_HexNAc_3_ = 200001468, /// Hex(3)HexNAc(4)Pent(1): Hex(3) HexNAc(4) Pent. UNIMOD_Hex_3_HexNAc_4_Pent_1_ = 200001469, /// Hex(6)HexNAc(2)Phos(1): Hex(6) HexNAc(2) Phos. UNIMOD_Hex_6_HexNAc_2_Phos_1_ = 200001470, /// dHex(1)Hex(4)HexNAc(3)Sulf(1): DHex Hex(4) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_4_HexNAc_3_Sulf_1_ = 200001471, /// dHex(1)Hex(5)HexNAc(2)Pent(1): DHex Hex(5) HexNAc(2) Pent. UNIMOD_dHex_1_Hex_5_HexNAc_2_Pent_1_ = 200001472, /// Hex(8)HexNAc(1): Hex(8) HexNAc. UNIMOD_Hex_8_HexNAc_1_ = 200001473, /// dHex(1)Hex(3)HexNAc(3)Pent(2): DHex Hex(3) HexNAc(3) Pent(2). UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_2_ = 200001474, /// dHex(2)Hex(3)HexNAc(3)Pent(1): DHex(2) Hex(3) HexNAc(3) Pent. UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_1_ = 200001475, /// dHex(1)Hex(3)HexNAc(4)Sulf(1): DHex Hex(3) HexNAc(4) Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_4_Sulf_1_ = 200001476, /// dHex(1)Hex(6)HexNAc(2): DHex Hex(6) HexNAc(2). UNIMOD_dHex_1_Hex_6_HexNAc_2_ = 200001477, /// dHex(1)Hex(4)HexNAc(3)Pent(1): DHex Hex(4) HexNAc(3) Pent. UNIMOD_dHex_1_Hex_4_HexNAc_3_Pent_1_ = 200001478, /// Hex(4)HexNAc(4)Sulf(1): Hex(4) HexNAc(4) Sulf. UNIMOD_Hex_4_HexNAc_4_Sulf_1_ = 200001479, /// Hex(7)HexNAc(2): M7/Man7. UNIMOD_Hex_7_HexNAc_2_ = 200001480, /// dHex(2)Hex(4)HexNAc(3): DHex(2) Hex(4) HexNAc(3). UNIMOD_dHex_2_Hex_4_HexNAc_3_ = 200001481, /// Hex(5)HexNAc(3)Pent(1): Hex(5) HexNAc(3) Pent. UNIMOD_Hex_5_HexNAc_3_Pent_1_ = 200001482, /// Hex(4)HexNAc(3)NeuGc(1): Hex(4) HexNAc(3) NeuGc. UNIMOD_Hex_4_HexNAc_3_NeuGc_1_ = 200001483, /// dHex(1)Hex(5)HexNAc(3): DHex Hex(5) HexNAc(3). UNIMOD_dHex_1_Hex_5_HexNAc_3_ = 200001484, /// dHex(1)Hex(3)HexNAc(4)Pent(1): DHex Hex(3) HexNAc(4) Pent. UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_1_ = 200001485, /// Hex(3)HexNAc(5)Sulf(1): Hex(3) HexNAc(5) Sulf. UNIMOD_Hex_3_HexNAc_5_Sulf_1_ = 200001486, /// Hex(6)HexNAc(3): Hex(6) HexNAc(3). UNIMOD_Hex_6_HexNAc_3_ = 200001487, /// Hex(3)HexNAc(4)NeuAc(1): Hex(3) HexNAc(4) NeuAc ---OR--- Hex(2) HexNAc(4) dHex NeuGc. UNIMOD_Hex_3_HexNAc_4_NeuAc_1_ = 200001488, /// Hex(4)HexNAc(4)Pent(1): Hex(4) HexNAc(4) Pent. UNIMOD_Hex_4_HexNAc_4_Pent_1_ = 200001489, /// Hex(7)HexNAc(2)Phos(1): Hex(7) HexNAc(2) Phos. UNIMOD_Hex_7_HexNAc_2_Phos_1_ = 200001490, /// Hex(4)HexNAc(4)Me(2)Pent(1): Hex(4) HexNAc(4) Me(2) Pent. UNIMOD_Hex_4_HexNAc_4_Me_2_Pent_1_ = 200001491, /// dHex(1)Hex(3)HexNAc(3)Pent(3): DHex Hex(3) HexNAc(3) Pent(3) ---OR--- Hex(4) HexNAc(2) dHex(2) NeuAc. UNIMOD_dHex_1_Hex_3_HexNAc_3_Pent_3_ = 200001492, /// dHex(1)Hex(5)HexNAc(3)Sulf(1): DHex Hex(5) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_5_HexNAc_3_Sulf_1_ = 200001493, /// dHex(2)Hex(3)HexNAc(3)Pent(2): DHex(2) Hex(3) HexNAc(3) Pent(2). UNIMOD_dHex_2_Hex_3_HexNAc_3_Pent_2_ = 200001494, /// Hex(6)HexNAc(3)Phos(1): Hex(6) HexNAc(3) Phos. UNIMOD_Hex_6_HexNAc_3_Phos_1_ = 200001495, /// Hex(4)HexNAc(5): Hex(4) HexNAc(5). UNIMOD_Hex_4_HexNAc_5_ = 200001496, /// dHex(3)Hex(3)HexNAc(3)Pent(1): DHex(3) Hex(3) HexNAc(3) Pent. UNIMOD_dHex_3_Hex_3_HexNAc_3_Pent_1_ = 200001497, /// dHex(2)Hex(4)HexNAc(3)Pent(1): DHex(2) Hex(4) HexNAc(3) Pent. UNIMOD_dHex_2_Hex_4_HexNAc_3_Pent_1_ = 200001498, /// dHex(1)Hex(4)HexNAc(4)Sulf(1): DHex Hex(4) HexNAc(4) Sulf. UNIMOD_dHex_1_Hex_4_HexNAc_4_Sulf_1_ = 200001499, /// dHex(1)Hex(7)HexNAc(2): DHex Hex(7) HexNAc(2). UNIMOD_dHex_1_Hex_7_HexNAc_2_ = 200001500, /// dHex(1)Hex(4)HexNAc(3)NeuAc(1): DHex Hex(4) HexNAc(3) NeuAc ---OR--- dHex(2) Hex(3) HexNAc(3) NeuGc. UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_ = 200001501, /// Hex(7)HexNAc(2)Phos(2): Hex(7) HexNAc(2) Phos(2). UNIMOD_Hex_7_HexNAc_2_Phos_2_ = 200001502, /// Hex(5)HexNAc(4)Sulf(1): Hex(5) HexNAc(4) Sulf. UNIMOD_Hex_5_HexNAc_4_Sulf_1_ = 200001503, /// Hex(8)HexNAc(2): M8/Man8. UNIMOD_Hex_8_HexNAc_2_ = 200001504, /// dHex(1)Hex(3)HexNAc(4)Pent(2): DHex Hex(3) HexNAc(4) Pent(2). UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_2_ = 200001505, /// dHex(1)Hex(4)HexNAc(3)NeuGc(1): DHex Hex(4) HexNAc(3) NeuGc ---OR--- Hex(5) HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuGc_1_ = 200001506, /// dHex(2)Hex(3)HexNAc(4)Pent(1): DHex(2) Hex(3) HexNAc(4) Pent. UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_1_ = 200001507, /// dHex(1)Hex(3)HexNAc(5)Sulf(1): DHex Hex(3) HexNAc(5) Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_5_Sulf_1_ = 200001508, /// dHex(1)Hex(6)HexNAc(3): DHex Hex(6) HexNAc(3). UNIMOD_dHex_1_Hex_6_HexNAc_3_ = 200001509, /// dHex(1)Hex(3)HexNAc(4)NeuAc(1): DHex Hex(3) HexNAc(4) NeuAc. UNIMOD_dHex_1_Hex_3_HexNAc_4_NeuAc_1_ = 200001510, /// dHex(3)Hex(3)HexNAc(4): DHex(3) Hex(3) HexNAc(4). UNIMOD_dHex_3_Hex_3_HexNAc_4_ = 200001511, /// dHex(1)Hex(4)HexNAc(4)Pent(1): DHex Hex(4) HexNAc(4) Pent. UNIMOD_dHex_1_Hex_4_HexNAc_4_Pent_1_ = 200001512, /// Hex(4)HexNAc(5)Sulf(1): Hex(4) HexNAc(5) Sulf. UNIMOD_Hex_4_HexNAc_5_Sulf_1_ = 200001513, /// Hex(7)HexNAc(3): Hex(7) HexNAc(3). UNIMOD_Hex_7_HexNAc_3_ = 200001514, /// dHex(1)Hex(4)HexNAc(3)NeuAc(1)Sulf(1): DHex Hex(4) HexNAc(3) NeuAc Sulf. UNIMOD_dHex_1_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_ = 200001515, /// Hex(5)HexNAc(4)Me(2)Pent(1): Hex(5) HexNAc(4) Me(2) Pent. UNIMOD_Hex_5_HexNAc_4_Me_2_Pent_1_ = 200001516, /// Hex(3)HexNAc(6)Sulf(1): Hex(3) HexNAc(6) Sulf. UNIMOD_Hex_3_HexNAc_6_Sulf_1_ = 200001517, /// dHex(1)Hex(6)HexNAc(3)Sulf(1): DHex Hex(6) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_6_HexNAc_3_Sulf_1_ = 200001518, /// dHex(1)Hex(4)HexNAc(5): DHex Hex(4) HexNAc(5). UNIMOD_dHex_1_Hex_4_HexNAc_5_ = 200001519, /// dHex(1)Hex(5)HexA(1)HexNAc(3)Sulf(1): DHex Hex(5) HexA HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_1_ = 200001520, /// Hex(7)HexNAc(3)Phos(1): Hex(7) HexNAc(3) Phos. UNIMOD_Hex_7_HexNAc_3_Phos_1_ = 200001521, /// Hex(6)HexNAc(4)Me(3): Hex(6) HexNAc(4) Me(3). UNIMOD_Hex_6_HexNAc_4_Me_3_ = 200001522, /// dHex(2)Hex(4)HexNAc(4)Sulf(1): DHex(2) Hex(4) HexNAc(4) Sulf. UNIMOD_dHex_2_Hex_4_HexNAc_4_Sulf_1_ = 200001523, /// Hex(4)HexNAc(3)NeuAc(2): Hex(4) HexNAc(3) NeuAc(2). UNIMOD_Hex_4_HexNAc_3_NeuAc_2_ = 200001524, /// dHex(1)Hex(3)HexNAc(4)Pent(3): DHex Hex(3) HexNAc(4) Pent(3). UNIMOD_dHex_1_Hex_3_HexNAc_4_Pent_3_ = 200001525, /// dHex(2)Hex(5)HexNAc(3)Pent(1): DHex(2) Hex(5) HexNAc(3) Pent. UNIMOD_dHex_2_Hex_5_HexNAc_3_Pent_1_ = 200001526, /// dHex(1)Hex(5)HexNAc(4)Sulf(1): DHex Hex(5) HexNAc(4) Sulf. UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_1_ = 200001527, /// dHex(2)Hex(3)HexNAc(4)Pent(2): DHex(2) Hex(3) HexNAc(4) Pent(2). UNIMOD_dHex_2_Hex_3_HexNAc_4_Pent_2_ = 200001528, /// dHex(1)Hex(5)HexNAc(3)NeuAc(1): DHex Hex(5) HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_ = 200001529, /// Hex(3)HexNAc(6)Sulf(2): Hex(3) HexNAc(6) Sulf(2). UNIMOD_Hex_3_HexNAc_6_Sulf_2_ = 200001530, /// Hex(9)HexNAc(2): M9/Man9. UNIMOD_Hex_9_HexNAc_2_ = 200001531, /// Hex(4)HexNAc(6): Hex(4) HexNAc(6). UNIMOD_Hex_4_HexNAc_6_ = 200001532, /// dHex(3)Hex(3)HexNAc(4)Pent(1): DHex(3) Hex(3) HexNAc(4) Pent. UNIMOD_dHex_3_Hex_3_HexNAc_4_Pent_1_ = 200001533, /// dHex(1)Hex(5)HexNAc(3)NeuGc(1): DHex Hex(5) HexNAc(3) NeuGc ---OR--- Hex(6) HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_ = 200001534, /// dHex(2)Hex(4)HexNAc(4)Pent(1): DHex(2) Hex(4) HexNAc(4) Pent. UNIMOD_dHex_2_Hex_4_HexNAc_4_Pent_1_ = 200001535, /// dHex(1)Hex(4)HexNAc(5)Sulf(1): DHex Hex(4) HexNAc(5) Sulf. UNIMOD_dHex_1_Hex_4_HexNAc_5_Sulf_1_ = 200001536, /// dHex(1)Hex(7)HexNAc(3): DHex Hex(7) HexNAc(3). UNIMOD_dHex_1_Hex_7_HexNAc_3_ = 200001537, /// dHex(1)Hex(5)HexNAc(4)Pent(1): DHex Hex(5) HexNAc(4) Pent. UNIMOD_dHex_1_Hex_5_HexNAc_4_Pent_1_ = 200001538, /// dHex(1)Hex(5)HexA(1)HexNAc(3)Sulf(2): DHex Hex(5) HexA HexNAc(3) Sulf(2). UNIMOD_dHex_1_Hex_5_HexA_1_HexNAc_3_Sulf_2_ = 200001539, /// Hex(3)HexNAc(7): Hex(3) HexNAc(7). UNIMOD_Hex_3_HexNAc_7_ = 200001540, /// dHex(2)Hex(5)HexNAc(4): DHex(2) Hex(5) HexNAc(4). UNIMOD_dHex_2_Hex_5_HexNAc_4_ = 200001541, /// dHex(2)Hex(4)HexNAc(3)NeuAc(1)Sulf(1): DHex(2) Hex(4) HexNAc(3) NeuAc Sulf. UNIMOD_dHex_2_Hex_4_HexNAc_3_NeuAc_1_Sulf_1_ = 200001542, /// dHex(1)Hex(5)HexNAc(4)Sulf(2): DHex Hex(5) HexNAc(4) Sulf(2). UNIMOD_dHex_1_Hex_5_HexNAc_4_Sulf_2_ = 200001543, /// dHex(1)Hex(5)HexNAc(4)Me(2)Pent(1): DHex Hex(5) HexNAc(4) Me(2) Pent. UNIMOD_dHex_1_Hex_5_HexNAc_4_Me_2_Pent_1_ = 200001544, /// Hex(5)HexNAc(4)NeuGc(1): Hex(5) HexNAc(4) NeuGc. UNIMOD_Hex_5_HexNAc_4_NeuGc_1_ = 200001545, /// dHex(1)Hex(3)HexNAc(6)Sulf(1): DHex Hex(3) HexNAc(6) Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_6_Sulf_1_ = 200001546, /// dHex(1)Hex(6)HexNAc(4): DHex Hex(6) HexNAc(4). UNIMOD_dHex_1_Hex_6_HexNAc_4_ = 200001547, /// dHex(1)Hex(5)HexNAc(3)NeuAc(1)Sulf(1): DHex Hex(5) HexNAc(3) NeuAc Sulf. UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuAc_1_Sulf_1_ = 200001548, /// Hex(7)HexNAc(4): Hex(7) HexNAc(4). UNIMOD_Hex_7_HexNAc_4_ = 200001549, /// dHex(1)Hex(5)HexNAc(3)NeuGc(1)Sulf(1): DHex Hex(5) HexNAc(3) NeuGc Sulf. UNIMOD_dHex_1_Hex_5_HexNAc_3_NeuGc_1_Sulf_1_ = 200001550, /// Hex(4)HexNAc(5)NeuAc(1): Hex(4) HexNAc(5) NeuAc. UNIMOD_Hex_4_HexNAc_5_NeuAc_1_ = 200001551, /// Hex(6)HexNAc(4)Me(3)Pent(1): Hex(6) HexNAc(4) Me(3) Pent. UNIMOD_Hex_6_HexNAc_4_Me_3_Pent_1_ = 200001552, /// dHex(1)Hex(7)HexNAc(3)Sulf(1): DHex Hex(7) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_7_HexNAc_3_Sulf_1_ = 200001553, /// dHex(1)Hex(7)HexNAc(3)Phos(1): DHex Hex(7) HexNAc(3) Phos. UNIMOD_dHex_1_Hex_7_HexNAc_3_Phos_1_ = 200001554, /// dHex(1)Hex(5)HexNAc(5): DHex Hex(5) HexNAc(5). UNIMOD_dHex_1_Hex_5_HexNAc_5_ = 200001555, /// dHex(1)Hex(4)HexNAc(4)NeuAc(1)Sulf(1): DHex Hex(4) HexNAc(4) NeuAc Sulf. UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_Sulf_1_ = 200001556, /// dHex(3)Hex(4)HexNAc(4)Sulf(1): DHex(3) Hex(4) HexNAc(4) Sulf. UNIMOD_dHex_3_Hex_4_HexNAc_4_Sulf_1_ = 200001557, /// Hex(3)HexNAc(7)Sulf(1): Hex(3) HexNAc(7) Sulf. UNIMOD_Hex_3_HexNAc_7_Sulf_1_ = 200001558, /// Hex(6)HexNAc(5): A3G3. UNIMOD_Hex_6_HexNAc_5_ = 200001559, /// Hex(5)HexNAc(4)NeuAc(1)Sulf(1): Hex(5) HexNAc(4) NeuAc Sulf. UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Sulf_1_ = 200001560, /// Hex(3)HexNAc(6)NeuAc(1): Hex(3) HexNAc(6) NeuAc. UNIMOD_Hex_3_HexNAc_6_NeuAc_1_ = 200001561, /// dHex(2)Hex(3)HexNAc(6): DHex(2) Hex(3) HexNAc(6). UNIMOD_dHex_2_Hex_3_HexNAc_6_ = 200001562, /// Hex(1)HexNAc(1)NeuGc(1): Hex HexNAc NeuGc. UNIMOD_Hex_1_HexNAc_1_NeuGc_1_ = 200001563, /// dHex(1)Hex(2)HexNAc(1): DHex Hex(2) HexNAc. UNIMOD_dHex_1_Hex_2_HexNAc_1_ = 200001564, /// HexNAc(3)Sulf(1): HexNAc(3) Sulf. UNIMOD_HexNAc_3_Sulf_1_ = 200001565, /// Hex(3)HexNAc(1): Hex(3) HexNAc. UNIMOD_Hex_3_HexNAc_1_ = 200001566, /// Hex(1)HexNAc(1)Kdn(1)Sulf(1): Hex HexNAc Kdn Sulf. UNIMOD_Hex_1_HexNAc_1_Kdn_1_Sulf_1_ = 200001567, /// HexNAc(2)NeuAc(1): HexNAc(2) NeuAc. UNIMOD_HexNAc_2_NeuAc_1_ = 200001568, /// HexNAc(1)Kdn(2): HexNAc Kdn(2) ---OR--- Hex(2) HexNAc HexA. UNIMOD_HexNAc_1_Kdn_2_ = 200001570, /// Hex(3)HexNAc(1)Me(1): Hex(3) HexNAc Me. UNIMOD_Hex_3_HexNAc_1_Me_1_ = 200001571, /// Hex(2)HexA(1)Pent(1)Sulf(1): Hex(2) HexA Pent Sulf. UNIMOD_Hex_2_HexA_1_Pent_1_Sulf_1_ = 200001572, /// HexNAc(2)NeuGc(1): HexNAc(2) NeuGc. UNIMOD_HexNAc_2_NeuGc_1_ = 200001573, /// Hex(4)Phos(1): Hex(4) Phos. UNIMOD_Hex_4_Phos_1_ = 200001575, /// Hex(1)HexNAc(1)NeuAc(1)Sulf(1): Hex HexNAc NeuAc Sulf. UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Sulf_1_ = 200001577, /// Hex(1)HexA(1)HexNAc(2): Hex HexA HexNAc(2). UNIMOD_Hex_1_HexA_1_HexNAc_2_ = 200001578, /// dHex(1)Hex(2)HexNAc(1)Sulf(1): DHex Hex(2) HexNAc Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_1_Sulf_1_ = 200001579, /// dHex(1)HexNAc(3): DHex HexNAc(3). UNIMOD_dHex_1_HexNAc_3_ = 200001580, /// dHex(1)Hex(1)HexNAc(1)Kdn(1): DHex Hex HexNAc Kdn ---OR--- Hex(2) dHex NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_1_Kdn_1_ = 200001581, /// Hex(1)HexNAc(3): Hex HexNAc(3). UNIMOD_Hex_1_HexNAc_3_ = 200001582, /// HexNAc(2)NeuAc(1)Sulf(1): HexNAc(2) NeuAc Sulf. UNIMOD_HexNAc_2_NeuAc_1_Sulf_1_ = 200001583, /// dHex(2)Hex(3): DHex(2) Hex(3). UNIMOD_dHex_2_Hex_3_ = 200001584, /// Hex(2)HexA(1)HexNAc(1)Sulf(1): Hex(2) HexA HexNAc Sulf. UNIMOD_Hex_2_HexA_1_HexNAc_1_Sulf_1_ = 200001585, /// dHex(2)Hex(2)HexA(1): DHex(2) Hex(2) HexA. UNIMOD_dHex_2_Hex_2_HexA_1_ = 200001586, /// dHex(1)Hex(1)HexNAc(2)Sulf(1): DHex Hex HexNAc(2) Sulf. UNIMOD_dHex_1_Hex_1_HexNAc_2_Sulf_1_ = 200001587, /// dHex(1)Hex(1)HexNAc(1)NeuAc(1): DHex Hex HexNAc NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuAc_1_ = 200001588, /// Hex(2)HexNAc(2)Sulf(1): Hex(2) HexNAc(2) Sulf. UNIMOD_Hex_2_HexNAc_2_Sulf_1_ = 200001589, /// Hex(5): Hex(5). UNIMOD_Hex_5_ = 200001590, /// HexNAc(4): HexNAc(4). UNIMOD_HexNAc_4_ = 200001591, /// HexNAc(1)NeuGc(2): HexNAc NeuGc(2). UNIMOD_HexNAc_1_NeuGc_2_ = 200001592, /// dHex(1)Hex(1)HexNAc(1)NeuGc(1): DHex Hex HexNAc NeuGc ---OR--- Hex(2) HexNAc NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_1_NeuGc_1_ = 200001593, /// dHex(2)Hex(2)HexNAc(1): DHex(2) Hex(2) HexNAc. UNIMOD_dHex_2_Hex_2_HexNAc_1_ = 200001594, /// Hex(2)HexNAc(1)NeuGc(1): Hex(2) HexNAc NeuGc. UNIMOD_Hex_2_HexNAc_1_NeuGc_1_ = 200001595, /// dHex(1)Hex(3)HexNAc(1): DHex Hex(3) HexNAc. UNIMOD_dHex_1_Hex_3_HexNAc_1_ = 200001596, /// dHex(1)Hex(2)HexA(1)HexNAc(1): DHex Hex(2) HexA HexNAc. UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_ = 200001597, /// Hex(1)HexNAc(3)Sulf(1): Hex HexNAc(3) Sulf. UNIMOD_Hex_1_HexNAc_3_Sulf_1_ = 200001598, /// Hex(4)HexNAc(1): Hex(4) HexNAc. UNIMOD_Hex_4_HexNAc_1_ = 200001599, /// Hex(1)HexNAc(2)NeuAc(1): Hex HexNAc(2) NeuAc. UNIMOD_Hex_1_HexNAc_2_NeuAc_1_ = 200001600, /// Hex(1)HexNAc(2)NeuGc(1): Hex HexNAc(2) NeuGc. UNIMOD_Hex_1_HexNAc_2_NeuGc_1_ = 200001602, /// Hex(5)Phos(1): Hex(5) Phos. UNIMOD_Hex_5_Phos_1_ = 200001604, /// dHex(2)Hex(1)HexNAc(1)Kdn(1): DHex(2) Hex HexNAc Kdn. UNIMOD_dHex_2_Hex_1_HexNAc_1_Kdn_1_ = 200001606, /// dHex(1)Hex(3)HexNAc(1)Sulf(1): DHex Hex(3) HexNAc Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_1_Sulf_1_ = 200001607, /// dHex(1)Hex(1)HexNAc(3): DHex Hex HexNAc(3). UNIMOD_dHex_1_Hex_1_HexNAc_3_ = 200001608, /// dHex(1)Hex(2)HexA(1)HexNAc(1)Sulf(1): DHex Hex(2) HexA HexNAc Sulf. UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_1_Sulf_1_ = 200001609, /// Hex(2)HexNAc(3): Hex(2) HexNAc(3). UNIMOD_Hex_2_HexNAc_3_ = 200001610, /// Hex(1)HexNAc(2)NeuAc(1)Sulf(1): Hex HexNAc(2) NeuAc Sulf. UNIMOD_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_ = 200001611, /// dHex(2)Hex(4): DHex(2) Hex(4). UNIMOD_dHex_2_Hex_4_ = 200001612, /// dHex(2)HexNAc(2)Kdn(1): DHex(2) HexNAc(2) Kdn. UNIMOD_dHex_2_HexNAc_2_Kdn_1_ = 200001614, /// dHex(1)Hex(2)HexNAc(2)Sulf(1): DHex Hex(2) HexNAc(2) Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_2_Sulf_1_ = 200001615, /// dHex(1)HexNAc(4): DHex HexNAc(4). UNIMOD_dHex_1_HexNAc_4_ = 200001616, /// Hex(1)HexNAc(1)NeuAc(1)NeuGc(1): Hex HexNAc NeuAc NeuGc. UNIMOD_Hex_1_HexNAc_1_NeuAc_1_NeuGc_1_ = 200001617, /// dHex(1)Hex(1)HexNAc(2)Kdn(1): DHex Hex HexNAc(2) Kdn ---OR--- Hex(2) HexNAc dHex NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_2_Kdn_1_ = 200001618, /// Hex(1)HexNAc(1)NeuGc(2): Hex HexNAc NeuGc(2). UNIMOD_Hex_1_HexNAc_1_NeuGc_2_ = 200001619, /// Hex(1)HexNAc(1)NeuAc(2)Ac(1): Ac Hex HexNAc NeuAc(2). UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_1_ = 200001620, /// dHex(2)Hex(2)HexA(1)HexNAc(1): DHex(2) Hex(2) HexA HexNAc. UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_1_ = 200001621, /// dHex(1)Hex(1)HexNAc(3)Sulf(1): DHex Hex HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_1_HexNAc_3_Sulf_1_ = 200001622, /// Hex(2)HexA(1)NeuAc(1)Pent(1)Sulf(1): Hex(2) HexA NeuAc Pent Sulf. UNIMOD_Hex_2_HexA_1_NeuAc_1_Pent_1_Sulf_1_ = 200001623, /// dHex(1)Hex(1)HexNAc(2)NeuAc(1): DHex Hex HexNAc(2) NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_ = 200001624, /// dHex(1)Hex(3)HexA(1)HexNAc(1): DHex Hex(3) HexA HexNAc. UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_ = 200001625, /// Hex(2)HexNAc(3)Sulf(1): Hex(2) HexNAc(3) Sulf. UNIMOD_Hex_2_HexNAc_3_Sulf_1_ = 200001626, /// Hex(5)HexNAc(1): Hex(5) HexNAc. UNIMOD_Hex_5_HexNAc_1_ = 200001627, /// HexNAc(5): HexNAc(5). UNIMOD_HexNAc_5_ = 200001628, /// Hex(1)HexNAc(1)NeuAc(2)Ac(2): Ac(2) Hex HexNAc NeuAc(2). UNIMOD_Hex_1_HexNAc_1_NeuAc_2_Ac_2_ = 200001630, /// Hex(2)HexNAc(2)NeuGc(1): Hex(2) HexNAc(2) NeuGc. UNIMOD_Hex_2_HexNAc_2_NeuGc_1_ = 200001631, /// Hex(5)Phos(3): Hex(5) Phos(3). UNIMOD_Hex_5_Phos_3_ = 200001632, /// Hex(6)Phos(1): Hex(6) Phos. UNIMOD_Hex_6_Phos_1_ = 200001633, /// dHex(1)Hex(2)HexA(1)HexNAc(2): DHex Hex(2) HexA HexNAc(2). UNIMOD_dHex_1_Hex_2_HexA_1_HexNAc_2_ = 200001634, /// dHex(2)Hex(3)HexNAc(1)Sulf(1): DHex(2) Hex(3) HexNAc Sulf. UNIMOD_dHex_2_Hex_3_HexNAc_1_Sulf_1_ = 200001635, /// Hex(1)HexNAc(3)NeuAc(1): Hex HexNAc(3) NeuAc. UNIMOD_Hex_1_HexNAc_3_NeuAc_1_ = 200001636, /// dHex(2)Hex(1)HexNAc(3): DHex(2) Hex HexNAc(3). UNIMOD_dHex_2_Hex_1_HexNAc_3_ = 200001637, /// Hex(1)HexNAc(3)NeuGc(1): Hex HexNAc(3) NeuGc. UNIMOD_Hex_1_HexNAc_3_NeuGc_1_ = 200001638, /// dHex(1)Hex(1)HexNAc(2)NeuAc(1)Sulf(1): DHex Hex HexNAc(2) NeuAc Sulf. UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_1_Sulf_1_ = 200001639, /// dHex(1)Hex(3)HexA(1)HexNAc(1)Sulf(1): DHex Hex(3) HexA HexNAc Sulf. UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_1_Sulf_1_ = 200001640, /// dHex(1)Hex(1)HexA(1)HexNAc(3): DHex Hex HexA HexNAc(3). UNIMOD_dHex_1_Hex_1_HexA_1_HexNAc_3_ = 200001641, /// Hex(2)HexNAc(2)NeuAc(1)Sulf(1): Hex(2) HexNAc(2) NeuAc Sulf. UNIMOD_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_ = 200001642, /// dHex(2)Hex(2)HexNAc(2)Sulf(1): DHex(2) Hex(2) HexNAc(2) Sulf. UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_1_ = 200001643, /// dHex(2)Hex(1)HexNAc(2)Kdn(1): DHex(2) Hex HexNAc(2) Kdn ---OR--- Hex(2) HexNAc dHex(2) NeuAc. UNIMOD_dHex_2_Hex_1_HexNAc_2_Kdn_1_ = 200001644, /// dHex(1)Hex(1)HexNAc(4): DHex Hex HexNAc(4). UNIMOD_dHex_1_Hex_1_HexNAc_4_ = 200001645, /// Hex(2)HexNAc(4): Hex(2) HexNAc(4). UNIMOD_Hex_2_HexNAc_4_ = 200001646, /// Hex(2)HexNAc(1)NeuGc(2): Hex(2) HexNAc NeuGc(2). UNIMOD_Hex_2_HexNAc_1_NeuGc_2_ = 200001647, /// dHex(2)Hex(4)HexNAc(1): DHex(2) Hex(4) HexNAc. UNIMOD_dHex_2_Hex_4_HexNAc_1_ = 200001648, /// Hex(1)HexNAc(2)NeuAc(2): Hex HexNAc(2) NeuAc(2). UNIMOD_Hex_1_HexNAc_2_NeuAc_2_ = 200001649, /// dHex(2)Hex(1)HexNAc(2)NeuAc(1): DHex(2) Hex HexNAc(2) NeuAc. UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuAc_1_ = 200001650, /// dHex(1)Hex(2)HexNAc(3)Sulf(1): DHex Hex(2) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_3_Sulf_1_ = 200001651, /// dHex(1)HexNAc(5): DHex HexNAc(5). UNIMOD_dHex_1_HexNAc_5_ = 200001652, /// dHex(2)Hex(1)HexNAc(2)NeuGc(1): DHex(2) Hex HexNAc(2) NeuGc ---OR--- Hex(2) HexNAc(2) dHex NeuAc ---OR--- Hex HexNAc(3) dHex Kdn. UNIMOD_dHex_2_Hex_1_HexNAc_2_NeuGc_1_ = 200001653, /// dHex(3)Hex(2)HexNAc(2): DHex(3) Hex(2) HexNAc(2). UNIMOD_dHex_3_Hex_2_HexNAc_2_ = 200001654, /// Hex(3)HexNAc(3)Sulf(1): Hex(3) HexNAc(3) Sulf. UNIMOD_Hex_3_HexNAc_3_Sulf_1_ = 200001655, /// dHex(2)Hex(2)HexNAc(2)Sulf(2): DHex(2) Hex(2) HexNAc(2) Sulf(2). UNIMOD_dHex_2_Hex_2_HexNAc_2_Sulf_2_ = 200001656, /// dHex(1)Hex(2)HexNAc(2)NeuGc(1): DHex Hex(2) HexNAc(2) NeuGc ---OR--- Hex(3) HexNAc(2) NeuAc. UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_1_ = 200001657, /// dHex(1)Hex(1)HexNAc(3)NeuAc(1): DHex Hex HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_ = 200001658, /// Hex(6)Phos(3): Hex(6) Phos(3). UNIMOD_Hex_6_Phos_3_ = 200001659, /// dHex(1)Hex(3)HexA(1)HexNAc(2): DHex Hex(3) HexA HexNAc(2). UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_ = 200001660, /// dHex(1)Hex(1)HexNAc(3)NeuGc(1): DHex Hex HexNAc(3) NeuGc ---OR--- Hex(2) HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuGc_1_ = 200001661, /// Hex(1)HexNAc(2)NeuAc(2)Sulf(1): Hex HexNAc(2) NeuAc(2) Sulf. UNIMOD_Hex_1_HexNAc_2_NeuAc_2_Sulf_1_ = 200001662, /// dHex(2)Hex(3)HexA(1)HexNAc(1)Sulf(1): DHex(2) Hex(3) HexA HexNAc Sulf. UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_1_Sulf_1_ = 200001663, /// Hex(1)HexNAc(1)NeuAc(3): Hex HexNAc NeuAc(3). UNIMOD_Hex_1_HexNAc_1_NeuAc_3_ = 200001664, /// Hex(2)HexNAc(3)NeuGc(1): Hex(2) HexNAc(3) NeuGc. UNIMOD_Hex_2_HexNAc_3_NeuGc_1_ = 200001665, /// dHex(1)Hex(2)HexNAc(2)NeuAc(1)Sulf(1): DHex Hex(2) HexNAc(2) NeuAc Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_ = 200001666, /// dHex(3)Hex(1)HexNAc(2)Kdn(1): DHex(3) Hex HexNAc(2) Kdn. UNIMOD_dHex_3_Hex_1_HexNAc_2_Kdn_1_ = 200001667, /// dHex(2)Hex(3)HexNAc(2)Sulf(1): DHex(2) Hex(3) HexNAc(2) Sulf. UNIMOD_dHex_2_Hex_3_HexNAc_2_Sulf_1_ = 200001668, /// dHex(2)Hex(2)HexNAc(2)Kdn(1): DHex(2) Hex(2) HexNAc(2) Kdn. UNIMOD_dHex_2_Hex_2_HexNAc_2_Kdn_1_ = 200001669, /// dHex(2)Hex(2)HexA(1)HexNAc(2)Sulf(1): DHex(2) Hex(2) HexA HexNAc(2) Sulf. UNIMOD_dHex_2_Hex_2_HexA_1_HexNAc_2_Sulf_1_ = 200001670, /// dHex(1)Hex(2)HexNAc(4): DHex Hex(2) HexNAc(4). UNIMOD_dHex_1_Hex_2_HexNAc_4_ = 200001671, /// Hex(1)HexNAc(1)NeuGc(3): Hex HexNAc NeuGc(3). UNIMOD_Hex_1_HexNAc_1_NeuGc_3_ = 200001672, /// dHex(1)Hex(1)HexNAc(3)NeuAc(1)Sulf(1): DHex Hex HexNAc(3) NeuAc Sulf. UNIMOD_dHex_1_Hex_1_HexNAc_3_NeuAc_1_Sulf_1_ = 200001673, /// dHex(1)Hex(3)HexA(1)HexNAc(2)Sulf(1): DHex Hex(3) HexA HexNAc(2) Sulf. UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_2_Sulf_1_ = 200001674, /// dHex(1)Hex(1)HexNAc(2)NeuAc(2): DHex Hex HexNAc(2) NeuAc(2). UNIMOD_dHex_1_Hex_1_HexNAc_2_NeuAc_2_ = 200001675, /// dHex(3)HexNAc(3)Kdn(1): DHex(3) HexNAc(3) Kdn. UNIMOD_dHex_3_HexNAc_3_Kdn_1_ = 200001676, /// Hex(2)HexNAc(3)NeuAc(1)Sulf(1): Hex(2) HexNAc(3) NeuAc Sulf. UNIMOD_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_ = 200001678, /// dHex(2)Hex(2)HexNAc(3)Sulf(1): DHex(2) Hex(2) HexNAc(3) Sulf. UNIMOD_dHex_2_Hex_2_HexNAc_3_Sulf_1_ = 200001679, /// dHex(2)HexNAc(5): DHex(2) HexNAc(5). UNIMOD_dHex_2_HexNAc_5_ = 200001680, /// Hex(2)HexNAc(2)NeuAc(2): Hex(2) HexNAc(2) NeuAc(2). UNIMOD_Hex_2_HexNAc_2_NeuAc_2_ = 200001681, /// dHex(2)Hex(2)HexNAc(2)NeuAc(1): DHex(2) Hex(2) HexNAc(2) NeuAc ---OR--- Hex HexNAc(3) dHex(2) Kdn. UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_ = 200001682, /// dHex(1)Hex(3)HexNAc(3)Sulf(1): DHex Hex(3) HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_3_Sulf_1_ = 200001683, /// dHex(2)Hex(2)HexNAc(2)NeuGc(1): DHex(2) Hex(2) HexNAc(2) NeuGc ---OR--- Hex(3) HexNAc(2) dHex NeuAc ---OR--- Hex(2) HexNAc(3) dHex Kdn. UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuGc_1_ = 200001684, /// Hex(2)HexNAc(5): Hex(2) HexNAc(5). UNIMOD_Hex_2_HexNAc_5_ = 200001685, /// dHex(1)Hex(3)HexNAc(2)NeuGc(1): DHex Hex(3) HexNAc(2) NeuGc. UNIMOD_dHex_1_Hex_3_HexNAc_2_NeuGc_1_ = 200001686, /// Hex(1)HexNAc(3)NeuAc(2): Hex HexNAc(3) NeuAc(2). UNIMOD_Hex_1_HexNAc_3_NeuAc_2_ = 200001687, /// dHex(1)Hex(2)HexNAc(3)NeuAc(1): DHex Hex(2) HexNAc(3) NeuAc. UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_ = 200001688, /// dHex(3)Hex(2)HexNAc(3): DHex(3) Hex(2) HexNAc(3). UNIMOD_dHex_3_Hex_2_HexNAc_3_ = 200001689, /// Hex(7)Phos(3): Hex(7) Phos(3). UNIMOD_Hex_7_Phos_3_ = 200001690, /// dHex(1)Hex(4)HexA(1)HexNAc(2): DHex Hex(4) HexA HexNAc(2). UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_2_ = 200001691, /// Hex(3)HexNAc(3)NeuAc(1): Hex(3) HexNAc(3) NeuAc ---OR--- Hex(2) HexNAc(3) dHex NeuGc ---OR--- Hex(2) HexNAc(4) Kdn. UNIMOD_Hex_3_HexNAc_3_NeuAc_1_ = 200001692, /// dHex(1)Hex(3)HexA(2)HexNAc(2): DHex Hex(3) HexA(2) HexNAc(2). UNIMOD_dHex_1_Hex_3_HexA_2_HexNAc_2_ = 200001693, /// Hex(2)HexNAc(2)NeuAc(2)Sulf(1): Hex(2) HexNAc(2) NeuAc(2) Sulf. UNIMOD_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_ = 200001694, /// dHex(2)Hex(2)HexNAc(2)NeuAc(1)Sulf(1): DHex(2) Hex(2) HexNAc(2) NeuAc Sulf. UNIMOD_dHex_2_Hex_2_HexNAc_2_NeuAc_1_Sulf_1_ = 200001695, /// Hex(3)HexNAc(3)NeuGc(1): Hex(3) HexNAc(3) NeuGc. UNIMOD_Hex_3_HexNAc_3_NeuGc_1_ = 200001696, /// dHex(4)Hex(1)HexNAc(2)Kdn(1): DHex(4) Hex HexNAc(2) Kdn. UNIMOD_dHex_4_Hex_1_HexNAc_2_Kdn_1_ = 200001697, /// dHex(3)Hex(2)HexNAc(2)Kdn(1): DHex(3) Hex(2) HexNAc(2) Kdn. UNIMOD_dHex_3_Hex_2_HexNAc_2_Kdn_1_ = 200001698, /// dHex(3)Hex(2)HexA(1)HexNAc(2)Sulf(1): DHex(3) Hex(2) HexA HexNAc(2) Sulf. UNIMOD_dHex_3_Hex_2_HexA_1_HexNAc_2_Sulf_1_ = 200001699, /// Hex(2)HexNAc(4)NeuAc(1): Hex(2) HexNAc(4) NeuAc. UNIMOD_Hex_2_HexNAc_4_NeuAc_1_ = 200001700, /// dHex(2)Hex(2)HexNAc(4): DHex(2) Hex(2) HexNAc(4). UNIMOD_dHex_2_Hex_2_HexNAc_4_ = 200001701, /// dHex(2)Hex(3)HexA(1)HexNAc(2)Sulf(1): DHex(2) Hex(3) HexA HexNAc(2) Sulf. UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_2_Sulf_1_ = 200001702, /// dHex(4)HexNAc(3)Kdn(1): DHex(4) HexNAc(3) Kdn. UNIMOD_dHex_4_HexNAc_3_Kdn_1_ = 200001703, /// Hex(2)HexNAc(1)NeuGc(3): Hex(2) HexNAc NeuGc(3). UNIMOD_Hex_2_HexNAc_1_NeuGc_3_ = 200001705, /// dHex(4)Hex(1)HexNAc(1)Kdn(2): DHex(4) Hex HexNAc Kdn(2). UNIMOD_dHex_4_Hex_1_HexNAc_1_Kdn_2_ = 200001706, /// dHex(1)Hex(2)HexNAc(3)NeuAc(1)Sulf(1): DHex Hex(2) HexNAc(3) NeuAc Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_3_NeuAc_1_Sulf_1_ = 200001707, /// dHex(1)Hex(2)HexNAc(2)NeuAc(2): DHex Hex(2) HexNAc(2) NeuAc(2). UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_ = 200001708, /// dHex(3)Hex(1)HexNAc(3)Kdn(1): DHex(3) Hex HexNAc(3) Kdn. UNIMOD_dHex_3_Hex_1_HexNAc_3_Kdn_1_ = 200001709, /// Hex(3)HexNAc(3)NeuAc(1)Sulf(1): Hex(3) HexNAc(3) NeuAc Sulf. UNIMOD_Hex_3_HexNAc_3_NeuAc_1_Sulf_1_ = 200001711, /// Hex(3)HexNAc(2)NeuAc(2): Hex(3) HexNAc(2) NeuAc(2). UNIMOD_Hex_3_HexNAc_2_NeuAc_2_ = 200001712, /// Hex(3)HexNAc(3)NeuGc(1)Sulf(1): Hex(3) HexNAc(3) NeuGc Sulf. UNIMOD_Hex_3_HexNAc_3_NeuGc_1_Sulf_1_ = 200001713, /// dHex(1)Hex(2)HexNAc(2)NeuGc(2): DHex Hex(2) HexNAc(2) NeuGc(2). UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_2_ = 200001714, /// dHex(2)Hex(3)HexNAc(2)NeuGc(1): DHex(2) Hex(3) HexNAc(2) NeuGc ---OR--- Hex(4) HexNAc(2) dHex NeuAc. UNIMOD_dHex_2_Hex_3_HexNAc_2_NeuGc_1_ = 200001715, /// dHex(1)Hex(3)HexA(1)HexNAc(3)Sulf(1): DHex Hex(3) HexA HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_3_HexA_1_HexNAc_3_Sulf_1_ = 200001716, /// Hex(2)HexNAc(3)NeuAc(2): Hex(2) HexNAc(3) NeuAc(2). UNIMOD_Hex_2_HexNAc_3_NeuAc_2_ = 200001717, /// dHex(2)Hex(2)HexNAc(3)NeuAc(1): DHex(2) Hex(2) HexNAc(3) NeuAc. UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuAc_1_ = 200001718, /// dHex(4)Hex(2)HexNAc(3): DHex(4) Hex(2) HexNAc(3). UNIMOD_dHex_4_Hex_2_HexNAc_3_ = 200001719, /// Hex(2)HexNAc(3)NeuAc(1)NeuGc(1): Hex(2) HexNAc(3) NeuAc NeuGc. UNIMOD_Hex_2_HexNAc_3_NeuAc_1_NeuGc_1_ = 200001720, /// dHex(2)Hex(2)HexNAc(3)NeuGc(1): DHex(2) Hex(2) HexNAc(3) NeuGc ---OR--- Hex(3) HexNAc(3) dHex NeuAc ---OR--- Hex(2) HexNAc(4) dHex Kdn. UNIMOD_dHex_2_Hex_2_HexNAc_3_NeuGc_1_ = 200001721, /// dHex(3)Hex(3)HexNAc(3): DHex(3) Hex(3) HexNAc(3). UNIMOD_dHex_3_Hex_3_HexNAc_3_ = 200001722, /// Hex(8)Phos(3): Hex(8) Phos(3). UNIMOD_Hex_8_Phos_3_ = 200001723, /// dHex(1)Hex(2)HexNAc(2)NeuAc(2)Sulf(1): DHex Hex(2) HexNAc(2) NeuAc(2) Sulf. UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuAc_2_Sulf_1_ = 200001724, /// Hex(2)HexNAc(3)NeuGc(2): Hex(2) HexNAc(3) NeuGc(2). UNIMOD_Hex_2_HexNAc_3_NeuGc_2_ = 200001725, /// dHex(4)Hex(2)HexNAc(2)Kdn(1): DHex(4) Hex(2) HexNAc(2) Kdn. UNIMOD_dHex_4_Hex_2_HexNAc_2_Kdn_1_ = 200001726, /// dHex(1)Hex(2)HexNAc(4)NeuAc(1): DHex Hex(2) HexNAc(4) NeuAc. UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_1_ = 200001727, /// dHex(3)Hex(2)HexNAc(4): DHex(3) Hex(2) HexNAc(4). UNIMOD_dHex_3_Hex_2_HexNAc_4_ = 200001728, /// Hex(1)HexNAc(1)NeuGc(4): Hex HexNAc NeuGc(4). UNIMOD_Hex_1_HexNAc_1_NeuGc_4_ = 200001729, /// dHex(4)Hex(1)HexNAc(3)Kdn(1): DHex(4) Hex HexNAc(3) Kdn. UNIMOD_dHex_4_Hex_1_HexNAc_3_Kdn_1_ = 200001730, /// Hex(4)HexNAc(4)Sulf(2): Hex(4) HexNAc(4) Sulf(2). UNIMOD_Hex_4_HexNAc_4_Sulf_2_ = 200001732, /// dHex(3)Hex(2)HexNAc(3)Kdn(1): DHex(3) Hex(2) HexNAc(3) Kdn ---OR--- Hex(3) HexNAc(2) dHex(3) NeuAc. UNIMOD_dHex_3_Hex_2_HexNAc_3_Kdn_1_ = 200001733, /// dHex(2)Hex(2)HexNAc(5): DHex(2) Hex(2) HexNAc(5). UNIMOD_dHex_2_Hex_2_HexNAc_5_ = 200001735, /// dHex(2)Hex(3)HexA(1)HexNAc(3)Sulf(1): DHex(2) Hex(3) HexA HexNAc(3) Sulf. UNIMOD_dHex_2_Hex_3_HexA_1_HexNAc_3_Sulf_1_ = 200001736, /// dHex(1)Hex(4)HexA(1)HexNAc(3)Sulf(1): DHex Hex(4) HexA HexNAc(3) Sulf. UNIMOD_dHex_1_Hex_4_HexA_1_HexNAc_3_Sulf_1_ = 200001737, /// Hex(3)HexNAc(3)NeuAc(2): Hex(3) HexNAc(3) NeuAc(2). UNIMOD_Hex_3_HexNAc_3_NeuAc_2_ = 200001738, /// dHex(2)Hex(3)HexNAc(3)NeuAc(1): DHex(2) Hex(3) HexNAc(3) NeuAc ---OR--- Hex(2) HexNAc(4) dHex(2) Kdn. UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_1_ = 200001739, /// dHex(4)Hex(3)HexNAc(3): DHex(4) Hex(3) HexNAc(3). UNIMOD_dHex_4_Hex_3_HexNAc_3_ = 200001740, /// Hex(9)Phos(3): Hex(9) Phos(3). UNIMOD_Hex_9_Phos_3_ = 200001742, /// dHex(2)HexNAc(7): DHex(2) HexNAc(7). UNIMOD_dHex_2_HexNAc_7_ = 200001743, /// Hex(2)HexNAc(1)NeuGc(4): Hex(2) HexNAc NeuGc(4). UNIMOD_Hex_2_HexNAc_1_NeuGc_4_ = 200001744, /// Hex(3)HexNAc(3)NeuAc(2)Sulf(1): Hex(3) HexNAc(3) NeuAc(2) Sulf. UNIMOD_Hex_3_HexNAc_3_NeuAc_2_Sulf_1_ = 200001745, /// dHex(2)Hex(3)HexNAc(5): DHex(2) Hex(3) HexNAc(5). UNIMOD_dHex_2_Hex_3_HexNAc_5_ = 200001746, /// dHex(1)Hex(2)HexNAc(2)NeuGc(3): DHex Hex(2) HexNAc(2) NeuGc(3). UNIMOD_dHex_1_Hex_2_HexNAc_2_NeuGc_3_ = 200001747, /// dHex(2)Hex(4)HexA(1)HexNAc(3)Sulf(1): DHex(2) Hex(4) HexA HexNAc(3) Sulf. UNIMOD_dHex_2_Hex_4_HexA_1_HexNAc_3_Sulf_1_ = 200001748, /// Hex(2)HexNAc(3)NeuAc(3): Hex(2) HexNAc(3) NeuAc(3). UNIMOD_Hex_2_HexNAc_3_NeuAc_3_ = 200001749, /// dHex(1)Hex(3)HexNAc(3)NeuAc(2): DHex Hex(3) HexNAc(3) NeuAc(2). UNIMOD_dHex_1_Hex_3_HexNAc_3_NeuAc_2_ = 200001750, /// dHex(3)Hex(3)HexNAc(3)NeuAc(1): DHex(3) Hex(3) HexNAc(3) NeuAc. UNIMOD_dHex_3_Hex_3_HexNAc_3_NeuAc_1_ = 200001751, /// Hex(2)HexNAc(3)NeuGc(3): Hex(2) HexNAc(3) NeuGc(3). UNIMOD_Hex_2_HexNAc_3_NeuGc_3_ = 200001752, /// Hex(10)Phos(3): Hex(10) Phos(3). UNIMOD_Hex_10_Phos_3_ = 200001753, /// dHex(1)Hex(2)HexNAc(4)NeuAc(2): DHex Hex(2) HexNAc(4) NeuAc(2). UNIMOD_dHex_1_Hex_2_HexNAc_4_NeuAc_2_ = 200001754, /// Hex(1)HexNAc(1)NeuGc(5): Hex HexNAc NeuGc(5). UNIMOD_Hex_1_HexNAc_1_NeuGc_5_ = 200001755, /// Hex(4)HexNAc(4)NeuAc(1)Sulf(2): Hex(4) HexNAc(4) NeuAc Sulf(2). UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_2_ = 200001756, /// Hex(4)HexNAc(4)NeuGc(1)Sulf(2): Hex(4) HexNAc(4) NeuGc Sulf(2). UNIMOD_Hex_4_HexNAc_4_NeuGc_1_Sulf_2_ = 200001757, /// dHex(2)Hex(3)HexNAc(3)NeuAc(2): DHex(2) Hex(3) HexNAc(3) NeuAc(2). UNIMOD_dHex_2_Hex_3_HexNAc_3_NeuAc_2_ = 200001758, /// Hex(4)HexNAc(4)NeuAc(1)Sulf(3): Hex(4) HexNAc(4) NeuAc Sulf(3). UNIMOD_Hex_4_HexNAc_4_NeuAc_1_Sulf_3_ = 200001759, /// dHex(2)Hex(2)HexNAc(2): DHex(2) Hex(2) HexNAc(2). UNIMOD_dHex_2_Hex_2_HexNAc_2_ = 200001760, /// dHex(1)Hex(3)HexNAc(2): DHex Hex(3) HexNAc(2). UNIMOD_dHex_1_Hex_3_HexNAc_2_ = 200001761, /// dHex(1)Hex(2)HexNAc(3): DHex Hex(2) HexNAc(3). UNIMOD_dHex_1_Hex_2_HexNAc_3_ = 200001762, /// Hex(3)HexNAc(3): Hex(3) HexNAc(3). UNIMOD_Hex_3_HexNAc_3_ = 200001763, /// dHex(1)Hex(3)HexNAc(2)Sulf(1): DHex Hex(3) HexNAc(2) Sulf. UNIMOD_dHex_1_Hex_3_HexNAc_2_Sulf_1_ = 200001764, /// dHex(2)Hex(3)HexNAc(2): DHex(2) Hex(3) HexNAc(2). UNIMOD_dHex_2_Hex_3_HexNAc_2_ = 200001765, /// dHex(1)Hex(4)HexNAc(2): DHex Hex(4) HexNAc(2). UNIMOD_dHex_1_Hex_4_HexNAc_2_ = 200001766, /// dHex(2)Hex(2)HexNAc(3): DHex(2) Hex(2) HexNAc(3). UNIMOD_dHex_2_Hex_2_HexNAc_3_ = 200001767, /// dHex(1)Hex(3)HexNAc(3): DHex Hex(3) HexNAc(3). UNIMOD_dHex_1_Hex_3_HexNAc_3_ = 200001768, /// Hex(4)HexNAc(3): Hex(4) HexNAc(3). UNIMOD_Hex_4_HexNAc_3_ = 200001769, /// dHex(2)Hex(4)HexNAc(2): DHex(2) Hex(4) HexNAc(2). UNIMOD_dHex_2_Hex_4_HexNAc_2_ = 200001770, /// dHex(2)Hex(3)HexNAc(3): DHex(2) Hex(3) HexNAc(3). UNIMOD_dHex_2_Hex_3_HexNAc_3_ = 200001771, /// Hex(3)HexNAc(5): A3. UNIMOD_Hex_3_HexNAc_5_ = 200001772, /// Hex(4)HexNAc(3)NeuAc(1): Hex(4) HexNAc(3) NeuAc ---OR--- Hex(3) HexNAc(4) Kdn. UNIMOD_Hex_4_HexNAc_3_NeuAc_1_ = 200001773, /// dHex(2)Hex(3)HexNAc(4): DHex(2) Hex(3) HexNAc(4). UNIMOD_dHex_2_Hex_3_HexNAc_4_ = 200001774, /// dHex(1)Hex(3)HexNAc(5): DHex Hex(3) HexNAc(5). UNIMOD_dHex_1_Hex_3_HexNAc_5_ = 200001775, /// Hex(3)HexNAc(6): A4. UNIMOD_Hex_3_HexNAc_6_ = 200001776, /// Hex(4)HexNAc(4)NeuAc(1): Hex(4) HexNAc(4) NeuAc. UNIMOD_Hex_4_HexNAc_4_NeuAc_1_ = 200001777, /// dHex(2)Hex(4)HexNAc(4): DHex(2) Hex(4) HexNAc(4) ---OR--- Hex(4) HexNAc(4) dHex Pent Me. UNIMOD_dHex_2_Hex_4_HexNAc_4_ = 200001778, /// Hex(6)HexNAc(4): Hex(6) HexNAc(4). UNIMOD_Hex_6_HexNAc_4_ = 200001779, /// Hex(5)HexNAc(5): Hex(5) HexNAc(5). UNIMOD_Hex_5_HexNAc_5_ = 200001780, /// dHex(1)Hex(3)HexNAc(6): DHex Hex(3) HexNAc(6). UNIMOD_dHex_1_Hex_3_HexNAc_6_ = 200001781, /// dHex(1)Hex(4)HexNAc(4)NeuAc(1): DHex Hex(4) HexNAc(4) NeuAc ---OR--- Hex(3) HexNAc(5) dHex Kdn. UNIMOD_dHex_1_Hex_4_HexNAc_4_NeuAc_1_ = 200001782, /// dHex(3)Hex(4)HexNAc(4): DHex(3) Hex(4) HexNAc(4). UNIMOD_dHex_3_Hex_4_HexNAc_4_ = 200001783, /// dHex(1)Hex(3)HexNAc(5)NeuAc(1): DHex Hex(3) HexNAc(5) NeuAc. UNIMOD_dHex_1_Hex_3_HexNAc_5_NeuAc_1_ = 200001784, /// dHex(2)Hex(4)HexNAc(5): DHex(2) Hex(4) HexNAc(5). UNIMOD_dHex_2_Hex_4_HexNAc_5_ = 200001785, /// Hex(1)HexNAc(1)NeuAc(1)Ac(1): Ac Hex HexNAc NeuAc. UNIMOD_Hex_1_HexNAc_1_NeuAc_1_Ac_1_ = 200001786, /// Label:13C(2)15N(2): 13C(2) 15N(2). UNIMOD_Label_13C_2_15N_2_ = 200001787, /// Xlink:DSS[155]: Ammonium-quenched monolink of DSS/BS3 crosslinker. UNIMOD_Xlink_DSS_155_ = 200001789, /// NQIGG: SUMOylation by Giardia lamblia. UNIMOD_NQIGG = 200001799, /// Carboxyethylpyrrole: Carboxyethylpyrrole. UNIMOD_Carboxyethylpyrrole = 200001800, /// Fluorescein-tyramine: Fluorescein-tyramine adduct by peroxidase activity. UNIMOD_Fluorescein_tyramine = 200001801, /// GEE: Transamidation of glycine ethyl ester to glutamine. UNIMOD_GEE = 200001824, /// RNPXL: Simulate peptide-RNA conjugates. UNIMOD_RNPXL = 200001825, /// Glu->pyro-Glu+Methyl: Pyro-Glu from E + Methylation. UNIMOD_Glu__pyro_Glu_Methyl = 200001826, /// Glu->pyro-Glu+Methyl:2H(2)13C(1): Pyro-Glu from E + Methylation Medium. UNIMOD_Glu__pyro_Glu_Methyl_2H_2_13C_1_ = 200001827, /// LRGG+methyl: LeumethylArgGlyGly. UNIMOD_LRGG_methyl = 200001828, /// LRGG+dimethyl: LeudimethylArgGlyGly. UNIMOD_LRGG_dimethyl = 200001829, /// Biotin-tyramide: Biotin-Phenol. UNIMOD_Biotin_tyramide = 200001830, /// Tris: Tris adduct causes 104 Da addition at asparagine-succinimide intermediate. UNIMOD_Tris = 200001831, /// IASD: Iodoacetamide derivative of stilbene (reaction product with thiol). UNIMOD_IASD = 200001832, /// NP40: NP-40 synthetic polymer terminus. UNIMOD_NP40 = 200001833, /// Tween20: Tween 20 synthetic polymer terminus. UNIMOD_Tween20 = 200001834, /// Tween80: Tween 80 synthetic polymer terminus. UNIMOD_Tween80 = 200001835, /// Triton: Triton synthetic polymer terminus. UNIMOD_Triton = 200001836, /// Brij35: Brij 35 synthetic polymer terminus. UNIMOD_Brij35 = 200001837, /// Brij58: Brij 58 synthetic polymer terminus. UNIMOD_Brij58 = 200001838, /// betaFNA: Beta-Funaltrexamine. UNIMOD_betaFNA = 200001839, /// dHex(1)Hex(7)HexNAc(4): Fucosylated biantennary + 2 alphaGal. UNIMOD_dHex_1_Hex_7_HexNAc_4_ = 200001840, /// Biotin:Thermo-21328: EZ-Link Sulfo-NHS-SS-Biotin. UNIMOD_Biotin_Thermo_21328 = 200001841, /// PhosphoCytidine: Cytidine monophosphate. UNIMOD_PhosphoCytidine = 200001843, /// AzidoF: Azidophenylalanine. UNIMOD_AzidoF = 200001845, /// Dimethylaminoethyl: Cys alkylation by dimethylaminoethyl halide. UNIMOD_Dimethylaminoethyl = 200001846, /// Gluratylation: Glutarylation. UNIMOD_Gluratylation = 200001848, /// hydroxyisobutyryl: 2-hydroxyisobutyrylation. UNIMOD_hydroxyisobutyryl = 200001849, /// MeMePhosphorothioate: S-Methyl Methyl phosphorothioate. UNIMOD_MeMePhosphorothioate = 200001868, /// Cation:Fe[III]: Replacement of 3 protons by iron. UNIMOD_Cation_Fe_III_ = 200001870, /// DTT: DTT adduct of cysteine. UNIMOD_DTT = 200001871, /// DYn-2: Sulfenic Acid specific probe. UNIMOD_DYn_2 = 200001872, /// MesitylOxide: Acetone chemical artifact. UNIMOD_MesitylOxide = 200001873, /// methylol: Formaldehyde induced modifications. UNIMOD_methylol = 200001875, /// Xlink:DSS[259]: Tris-quenched monolink of DSS/BS3 crosslinker. UNIMOD_Xlink_DSS_259_ = 200001877, /// Xlink:DSSO[176]: Water-quenched monolink of DSSO crosslinker. UNIMOD_Xlink_DSSO_176_ = 200001878, /// Xlink:DSSO[175]: Ammonia-quenched monolink of DSSO crosslinker. UNIMOD_Xlink_DSSO_175_ = 200001879, /// Xlink:DSSO[279]: Tris-quenched monolink of DSSO crosslinker. UNIMOD_Xlink_DSSO_279_ = 200001880, /// Xlink:DSSO[54]: Alkene fragment of DSSO crosslinker. UNIMOD_Xlink_DSSO_54_ = 200001881, /// Xlink:DSSO[86]: Thiol fragment of DSSO crosslinker. UNIMOD_Xlink_DSSO_86_ = 200001882, /// Xlink:DSSO[104]: Sulfenic acid fragment of DSSO crosslinker. UNIMOD_Xlink_DSSO_104_ = 200001883, /// Xlink:BuUrBu[111]: BuUr fragment of BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_111_ = 200001885, /// Xlink:BuUrBu[85]: Bu fragment of BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_85_ = 200001886, /// Xlink:BuUrBu[213]: Ammonia quenched monolink of BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_213_ = 200001887, /// Xlink:BuUrBu[214]: Water quenched monolink of BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_214_ = 200001888, /// Xlink:BuUrBu[317]: Tris quenched monolink of BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_317_ = 200001889, /// Xlink:DSSO[158]: Intact DSSO crosslinker. UNIMOD_Xlink_DSSO_158_ = 200001896, /// Xlink:EGS[226]: Intact EGS cross-linker. UNIMOD_Xlink_EGS_226_ = 200001897, /// Xlink:DSS[138]: Intact DSS/BS3 crosslinker. UNIMOD_Xlink_DSS_138_ = 200001898, /// Xlink:BuUrBu[196]: Intact BuUrBu crosslinker. UNIMOD_Xlink_BuUrBu_196_ = 200001899, /// Xlink:DTBP[172]: Intact DTBP crosslinker. UNIMOD_Xlink_DTBP_172_ = 200001900, /// Xlink:DST[114]: Intact DST crosslinker. UNIMOD_Xlink_DST_114_ = 200001901, /// Xlink:DTSSP[174]: Intact DSP/DTSSP crosslinker. UNIMOD_Xlink_DTSSP_174_ = 200001902, /// Xlink:SMCC[219]: Intact SMCC cross-link. UNIMOD_Xlink_SMCC_219_ = 200001903, /// Xlink:BS2G[96]: Intact BS2-G crosslinker. UNIMOD_Xlink_BS2G_96_ = 200001905, /// Xlink:BS2G[113]: Ammonium-quenched monolink of BS2-G crosslinker. UNIMOD_Xlink_BS2G_113_ = 200001906, /// Xlink:BS2G[114]: Water-quenched monolink of BS2-G crosslinker. UNIMOD_Xlink_BS2G_114_ = 200001907, /// Xlink:BS2G[217]: Tris-quenched monolink of BS2-G crosslinker. UNIMOD_Xlink_BS2G_217_ = 200001908, /// Cation:Al[III]: Replacement of 3 protons by aluminium. UNIMOD_Cation_Al_III_ = 200001910, /// Xlink:DMP[139]: Ammonia quenched monolink of DMP crosslinker. UNIMOD_Xlink_DMP_139_ = 200001911, /// Xlink:DMP[122]: Intact DMP crosslinker. UNIMOD_Xlink_DMP_122_ = 200001912, /// glyoxalAGE: Glyoxal-derived AGE. UNIMOD_glyoxalAGE = 200001913, /// Met->AspSA: Methionine oxidation to aspartic semialdehyde. UNIMOD_Met__AspSA = 200001914, /// Decarboxylation: Decarboxylation. UNIMOD_Decarboxylation = 200001915, /// Aspartylurea: Aspartylurea. UNIMOD_Aspartylurea = 200001916, /// Formylasparagine: In Bachi as Formylaspargine (typo?). UNIMOD_Formylasparagine = 200001917, /// Carbonyl: Aldehyde and ketone modifications. UNIMOD_Carbonyl = 200001918, /// AFB1_Dialdehyde: Adduction of aflatoxin B1 Dialdehyde to lysine. UNIMOD_AFB1_Dialdehyde = 200001920, /// Pro->HAVA: Proline oxidation to 5-hydroxy-2-aminovaleric acid. UNIMOD_Pro__HAVA = 200001922, /// Delta:H(-4)O(2): Tryptophan oxidation to beta-unsaturated-2,4-bis-tryptophandione. UNIMOD_Delta_H__4_O_2_ = 200001923, /// Delta:H(-4)O(3): Tryptophan oxidation to hydroxy-bis-tryptophandione. UNIMOD_Delta_H__4_O_3_ = 200001924, /// Delta:O(4): Tryptophan oxidation to dihydroxy-N-formaylkynurenine. UNIMOD_Delta_O_4_ = 200001925, /// Delta:H(3)C(3)O(2): Methylglyoxal-derived carboxyethyllysine. UNIMOD_Delta_H_3_C_3_O_2_ = 200001926, /// Delta:H(4)C(5)O(1): Methylglyoxal-derived argpyrimidine. UNIMOD_Delta_H_4_C_5_O_1_ = 200001927, /// Delta:H(10)C(8)O(1): Crotonaldehyde-derived dimethyl-FDP-lysine. UNIMOD_Delta_H_10_C_8_O_1_ = 200001928, /// Delta:H(6)C(7)O(4): Methylglyoxal-derived tetrahydropyrimidine. UNIMOD_Delta_H_6_C_7_O_4_ = 200001929, /// Pent(2): Pent(2). UNIMOD_Pent_2_ = 200001930, /// Pent(1)HexNAc(1): Pent HexNAc. UNIMOD_Pent_1_HexNAc_1_ = 200001931, /// Hex(2)Sulf(1): Hex(2) O(3) S. UNIMOD_Hex_2_Sulf_1_ = 200001932, /// Hex(1)Pent(2)Me(1): Hex:1 Pent:2 Me:1. UNIMOD_Hex_1_Pent_2_Me_1_ = 200001933, /// HexNAc(2)Sulf(1): HexNAc(2) Sulf. UNIMOD_HexNAc_2_Sulf_1_ = 200001934, /// Hex(1)Pent(3)Me(1): Hex Pent(3) Me. UNIMOD_Hex_1_Pent_3_Me_1_ = 200001935, /// Hex(2)Pent(2): Hex(2) Pent(2). UNIMOD_Hex_2_Pent_2_ = 200001936, /// Hex(2)Pent(2)Me(1): Hex(2) Pent(2) Me. UNIMOD_Hex_2_Pent_2_Me_1_ = 200001937, /// Hex(4)HexA(1): Hex(4) HexA. UNIMOD_Hex_4_HexA_1_ = 200001938, /// Hex(2)HexNAc(1)Pent(1)HexA(1): Hex(2) HexNAc Pent HexA. UNIMOD_Hex_2_HexNAc_1_Pent_1_HexA_1_ = 200001939, /// Hex(3)HexNAc(1)HexA(1): Hex(3) HexNAc HexA. UNIMOD_Hex_3_HexNAc_1_HexA_1_ = 200001940, /// Hex(1)HexNAc(2)dHex(2)Sulf(1): Hex HexNAc(2) dHex(2) Sulf. UNIMOD_Hex_1_HexNAc_2_dHex_2_Sulf_1_ = 200001941, /// HexA(2)HexNAc(3): HexA(2) HexNAc(3). UNIMOD_HexA_2_HexNAc_3_ = 200001942, /// dHex(1)Hex(4)HexA(1): DHex Hex(4) HexA. UNIMOD_dHex_1_Hex_4_HexA_1_ = 200001943, /// Hex(5)HexA(1): Hex(5) HexA. UNIMOD_Hex_5_HexA_1_ = 200001944, /// Hex(4)HexA(1)HexNAc(1): Hex(4) HexA HexNAc. UNIMOD_Hex_4_HexA_1_HexNAc_1_ = 200001945, /// dHex(3)Hex(3)HexNAc(1): DHex(3) Hex(3) HexNAc. UNIMOD_dHex_3_Hex_3_HexNAc_1_ = 200001946, /// Hex(6)HexNAc(1): Hex(6) HexNAc. UNIMOD_Hex_6_HexNAc_1_ = 200001947, /// Hex(1)HexNAc(4)dHex(1)Sulf(1): Sulf dHex Hex HexNAc(4). UNIMOD_Hex_1_HexNAc_4_dHex_1_Sulf_1_ = 200001948, /// dHex(1)Hex(2)HexNAc(1)NeuAc(2): DHex Hex(2) HexNAc NeuAc(2). UNIMOD_dHex_1_Hex_2_HexNAc_1_NeuAc_2_ = 200001949, /// dHex(3)Hex(3)HexNAc(2): DHex(3) Hex(3) HexNAc(2). UNIMOD_dHex_3_Hex_3_HexNAc_2_ = 200001950, /// dHex(2)Hex(1)HexNAc(4)Sulf(1): DHex(2) Hex HexNAc(4) Sulf. UNIMOD_dHex_2_Hex_1_HexNAc_4_Sulf_1_ = 200001951, /// dHex(1)Hex(2)HexNAc(4)Sulf(2): DHex Hex(2) HexNAc(4) Sulf(2). UNIMOD_dHex_1_Hex_2_HexNAc_4_Sulf_2_ = 200001952, /// Hex(9): Hex(9). UNIMOD_Hex_9_ = 200001953, /// dHex(2)Hex(3)HexNAc(3)Sulf(1): Sulf dHex(2) Hex(3) HexNAc(3). UNIMOD_dHex_2_Hex_3_HexNAc_3_Sulf_1_ = 200001954, /// dHex(2)Hex(5)HexNAc(2)Me(1): Me dHex(2) Hex(5) HexNAc(2). UNIMOD_dHex_2_Hex_5_HexNAc_2_Me_1_ = 200001955, /// dHex(2)Hex(2)HexNAc(4)Sulf(2): Sulf(2) dHex(2) Hex(2) HexNAc(4). UNIMOD_dHex_2_Hex_2_HexNAc_4_Sulf_2_ = 200001956, /// Hex(9)HexNAc(1): Hex(9) HexNAc. UNIMOD_Hex_9_HexNAc_1_ = 200001957, /// dHex(3)Hex(2)HexNAc(4)Sulf(2): DHex(3) Hex(2) HexNAc(4) Sulf(2). UNIMOD_dHex_3_Hex_2_HexNAc_4_Sulf_2_ = 200001958, /// Hex(4)HexNAc(4)NeuGc(1): Hex(4) HexNAc(4) NeuGc. UNIMOD_Hex_4_HexNAc_4_NeuGc_1_ = 200001959, /// dHex(4)Hex(3)HexNAc(2)NeuAc(1): DHex(4) Hex(3) HexNAc(2) NeuAc(1). UNIMOD_dHex_4_Hex_3_HexNAc_2_NeuAc_1_ = 200001960, /// Hex(3)HexNAc(5)NeuAc(1): Hex(3) HexNAc(5) NeuAc(1). UNIMOD_Hex_3_HexNAc_5_NeuAc_1_ = 200001961, /// Hex(10)HexNAc(1): Hex(10) HexNAc(1). UNIMOD_Hex_10_HexNAc_1_ = 200001962, /// dHex(1)Hex(8)HexNAc(2): DHex Hex(8) HexNAc(2). UNIMOD_dHex_1_Hex_8_HexNAc_2_ = 200001963, /// Hex(3)HexNAc(4)NeuAc(2): Hex(3) HexNAc(4) NeuAc(2). UNIMOD_Hex_3_HexNAc_4_NeuAc_2_ = 200001964, /// dHex(2)Hex(3)HexNAc(4)NeuAc(1): DHex(2) Hex(3) HexNAc(4) NeuAc. UNIMOD_dHex_2_Hex_3_HexNAc_4_NeuAc_1_ = 200001965, /// dHex(2)Hex(2)HexNAc(6)Sulf(1): DHex(2) Hex(2) HexNAc(6) Sulf. UNIMOD_dHex_2_Hex_2_HexNAc_6_Sulf_1_ = 200001966, /// Hex(5)HexNAc(4)NeuAc(1)Ac(1): Hex(5) HexNAc(4) NeuAc Ac. UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_1_ = 200001967, /// Hex(3)HexNAc(3)NeuAc(3): Hex(3) HexNAc(3) NeuAc(3). UNIMOD_Hex_3_HexNAc_3_NeuAc_3_ = 200001968, /// Hex(5)HexNAc(4)NeuAc(1)Ac(2): Hex(5) HexNAc(4) NeuAc Ac(2). UNIMOD_Hex_5_HexNAc_4_NeuAc_1_Ac_2_ = 200001969, /// Unknown:162: Unidentified modification of 162.1258 found in open search. UNIMOD_Unknown_162 = 200001970, /// Unknown:177: Unidentified modification of 176.7462 found in open search. UNIMOD_Unknown_177 = 200001971, /// Unknown:210: Unidentified modification of 210.1616 found in open search. UNIMOD_Unknown_210 = 200001972, /// Unknown:216: Unidentified modification of 216.1002 found in open search. UNIMOD_Unknown_216 = 200001973, /// Unknown:234: Unidentified modification of 234.0742 found in open search. UNIMOD_Unknown_234 = 200001974, /// Unknown:248: Unidentified modification of 248.1986 found in open search. UNIMOD_Unknown_248 = 200001975, /// Unknown:250: Unidentified modification of 249.981 found in open search. UNIMOD_Unknown_250 = 200001976, /// Unknown:302: Unidentified modification of 301.9864 found in open search. UNIMOD_Unknown_302 = 200001977, /// Unknown:306: Unidentified modification of 306.0952 found in open search. UNIMOD_Unknown_306 = 200001978, /// Unknown:420: Unidentified modification of 420.0506 found in open search. UNIMOD_Unknown_420 = 200001979, /// Diethylphosphothione: O-diethylphosphothione. UNIMOD_Diethylphosphothione = 200001986, /// Dimethylphosphothione: O-dimethylphosphothione. UNIMOD_Dimethylphosphothione = 200001987, /// monomethylphosphothione: O-methylphosphothione. UNIMOD_monomethylphosphothione = 200001989, /// CIGG: Ubiquitin D (FAT10) leaving after chymotrypsin digestion Cys-Ile-Gly-Gly. UNIMOD_CIGG = 200001990, /// GNLLFLACYCIGG: Ubiquitin D (FAT10) leaving after trypsin digestion Gly-Asn-Leu-Leu-Phe-Leu-Ala-Cys-Tyr-Cys-Ile-Gly-Gly. UNIMOD_GNLLFLACYCIGG = 200001991, /// serotonylation: 5-glutamyl serotonin. UNIMOD_serotonylation = 200001992, /// TMPP-Ac:13C(9): Heavy tris(2,4,6-trimethoxyphenyl)phosphonium acetic acid N-hydroxysuccinimide ester derivative. UNIMOD_TMPP_Ac_13C_9_ = 200001993, /// Xlink:DST[56]: DST crosslinker cleaved by sodium periodate. UNIMOD_Xlink_DST_56_ = 200001999, /// ZQG: Carbobenzoxy-L-glutaminyl-glycine. UNIMOD_ZQG = 200002001, /// Haloxon: O-Dichloroethylphosphate. UNIMOD_Haloxon = 200002006, /// Methamidophos-S: S-methyl amino phosphinate. UNIMOD_Methamidophos_S = 200002007, /// Methamidophos-O: O-methyl amino phosphinate. UNIMOD_Methamidophos_O = 200002008, /// Nitrene: Loss of O2; nitro photochemical decomposition. UNIMOD_Nitrene = 200002014, /// shTMT: Super Heavy Tandem Mass Tag. UNIMOD_shTMT = 200002015, /// TMTpro: TMTpro 16plex Tandem Mass Tag. UNIMOD_TMTpro = 200002016, /// TMTpro_zero: Native TMTpro Tandem Mass Tag. UNIMOD_TMTpro_zero = 200002017, /// Kdo: Glycosylation with KDO. UNIMOD_Kdo = 200002022, /// Andro-H2O: Andrographolide with the loss of H2O. UNIMOD_Andro_H2O = 200002025, /// His+O(2): Photo-induced histidine adduct. UNIMOD_His_O_2_ = 200002027, /// Hex(6)HexNAc(5)NeuAc(3): A3G3S3. UNIMOD_Hex_6_HexNAc_5_NeuAc_3_ = 200002028, /// Hex(7)HexNAc(6): A4G4. UNIMOD_Hex_7_HexNAc_6_ = 200002029, /// Met+O(2): Photo-induced Methionine Adduct. UNIMOD_Met_O_2_ = 200002033, /// Gly+O(2): Photo-induced Glycine Adduct. UNIMOD_Gly_O_2_ = 200002034, /// Pro+O(2): Photo-induced Proline adduct. UNIMOD_Pro_O_2_ = 200002035, /// Lys+O(2): Photo-induced Lysine adduct. UNIMOD_Lys_O_2_ = 200002036, /// Glu+O(2): Photo-induced Glutamate adduct. UNIMOD_Glu_O_2_ = 200002037, /// LTX+Lophotoxin: Addition of lophotoxin to tyrosine. UNIMOD_LTX_Lophotoxin = 200002039, /// MBS+peptide: MBS_233p24 plus peptide 1250p53. UNIMOD_MBS_peptide = 200002040, /// 3-hydroxybenzyl-phosphate: 3-hydroxybenzyl phosphate. UNIMOD_3_hydroxybenzyl_phosphate = 200002041, /// phenyl-phosphate: Phenyl phosphate. UNIMOD_phenyl_phosphate = 200002042, /// unit: A unit of measurement is a standardized quantity of a physical quality. UO_unit = 300000000, /// length unit: A unit which is a standard measure of the distance between two points. UO_length_unit = 300000001, /// mass unit: A unit which is a standard measure of the amount of matter/energy of a physical object. UO_mass_unit = 300000002, /// time unit: A unit which is a standard measure of the dimension in which events occur in sequence. UO_time_unit = 300000003, /// electric current unit: A unit which is a standard measure of the flow of electric charge. UO_electric_current_unit = 300000004, /// temperature unit: A unit which is a standard measure of the average kinetic energy of the particles in a sample of matter. UO_temperature_unit = 300000005, /// substance unit: A unit which is a standardised quantity of an element or compound with uniform composition. UO_substance_unit = 300000006, /// luminous intensity unit: A unit which is a standard measure of the wavelength-weighted power emitted by a light source in a particular direction. UO_luminous_intensity_unit = 300000007, /// meter: A length unit which is equal to the length of the path traveled by light in vacuum during a time interval of 1/299 792 458 of a second. UO_meter = 300000008, /// kilogram: A mass unit which is equal to the mass of the International Prototype Kilogram kept by the BIPM at Svres, France. UO_kilogram = 300000009, /// second: A time unit which is equal to the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the caesium 133 atom. UO_second = 300000010, /// ampere: An electric current unit which is equal to the constant current which, if maintained in two straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 m apart in vacuum, would produce between these conductors a force equal to 2 x 10^[-7] newton per meter of length. UO_ampere = 300000011, /// kelvin: A thermodynamic temperature unit which is equal to the fraction 1/273.16 of the thermodynamic temperature of the triple point of water. UO_kelvin = 300000012, /// mole: A substance unit which is equal to the amount of substance of a molecular system which contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12. UO_mole = 300000013, /// candela: A luminous intensity unit which equal to the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540 x 1012 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian. UO_candela = 300000014, /// centimeter: A length unit which is equal to one hundredth of a meter or 10^[-2] m. UO_centimeter = 300000015, /// millimeter: A length unit which is equal to one thousandth of a meter or 10^[-3] m. UO_millimeter = 300000016, /// micrometer: A length unit which is equal to one millionth of a meter or 10^[-6] m. UO_micrometer = 300000017, /// nanometer: A length unit which is equal to one thousandth of one millionth of a meter or 10^[-9] m. UO_nanometer = 300000018, /// angstrom: A length unit which is equal to 10 [-10] m. UO_angstrom = 300000019, /// picometer: A length unit which is equal to 10^[-12] m. UO_picometer = 300000020, /// gram: A mass unit which is equal to one thousandth of a kilogram or 10^[-3] kg. UO_gram = 300000021, /// milligram: A mass unit which is equal to one thousandth of a gram or 10^[-3] g. UO_milligram = 300000022, /// microgram: A mass unit which is equal to one millionth of a gram or 10^[-6] g. UO_microgram = 300000023, /// nanogram: A mass unit which is equal to one thousandth of one millionth of a gram or 10^[-9] g. UO_nanogram = 300000024, /// picogram: A mass unit which is equal to 10^[-12] g. UO_picogram = 300000025, /// femtogram: A mass unit which is equal to 10^[-15] g. UO_femtogram = 300000026, /// degree Celsius: A temperature unit which is equal to one kelvin degree. However, they have their zeros at different points. The centigrade scale has its zero at 273.15 K. UO_degree_Celsius = 300000027, /// millisecond: A time unit which is equal to one thousandth of a second or 10^[-3] s. UO_millisecond = 300000028, /// microsecond: A time unit which is equal to one millionth of a second or 10^[-6] s. UO_microsecond = 300000029, /// picosecond: A time unit which is equal to 10^[-12] s. UO_picosecond = 300000030, /// minute: A time unit which is equal to 60 seconds. UO_minute = 300000031, /// hour: A time unit which is equal to 3600 seconds or 60 minutes. UO_hour = 300000032, /// day: A time unit which is equal to 24 hours. UO_day = 300000033, /// week: A time unit which is equal to 7 days. UO_week = 300000034, /// month: A time unit which is approximately equal to the length of time of one of cycle of the moon's phases which in science is taken to be equal to 30 days. UO_month = 300000035, /// year: A time unit which is equal to 12 months which in science is taken to be equal to 365.25 days. UO_year = 300000036, /// milliampere: An electric current unit current which is equal to one thousandth of an ampere or 10^[-3] A. UO_milliampere = 300000037, /// microampere: An electric current unit current which is equal to one millionth of an ampere or 10^[-6] A. UO_microampere = 300000038, /// micromole: A substance unit equal to a millionth of a mol or 10^[-6] mol. UO_micromole_300000039 = 300000039, /// millimole: A substance unit equal to a thousandth of a mol or 10^[-3] mol. UO_millimole = 300000040, /// nanomole: A substance unit equal to one thousandth of one millionth of a mole or 10^[-9] mol. UO_nanomole = 300000041, /// picomole: A substance unit equal to 10^[-12] mol. UO_picomole = 300000042, /// femtomole: A substance unit equal to 10^[-15] mol. UO_femtomole = 300000043, /// attomole: A substance unit equal to 10^[-18] mol. UO_attomole = 300000044, /// base unit: A unit which is one of a particular measure to which all measures of that type can be related. UO_base_unit = 300000045, /// prefix: UO_prefix = 300000046, /// area unit: A unit which is a standard measure of the amount of a 2-dimensional flat surface. UO_area_unit = 300000047, /// acceleration unit: A unit which is a standard measure of the rate of change of velocity in either speed or direction. UO_acceleration_unit = 300000048, /// angular velocity unit: A unit which is a standard measure of the rate of angular movement about an axis; the angle rotated in a given time. UO_angular_velocity_unit = 300000049, /// angular acceleration unit: A unit which is a standard measure of the rate of change of angular velocity. UO_angular_acceleration_unit = 300000050, /// concentration unit: A unit which represents a standard measurement of how much of a given substance there is mixed with another substance. UO_concentration_unit = 300000051, /// mass density unit: A density unit which is a standard measure of the mass of a substance in a given volume. UO_mass_density_unit = 300000052, /// luminance unit: A unit which is a standard measure of the luminous intensity impinging on a given area. UO_luminance_unit = 300000053, /// area density unit: A density unit which is a standard measure of the mass exerting an influence on a given area. UO_area_density_unit = 300000054, /// molar mass unit: A unit which is a standard measure of the mass of a homogeneous substance containing 6.02 x 1023 atoms or molecules. UO_molar_mass_unit = 300000055, /// molar volume unit: A unit which is a standard measure of the volume of a homogeneous substance containing 6.02 x 1023 atoms or molecules. UO_molar_volume_unit = 300000056, /// momentum unit: A unit which is a standard measure of the quantity of motion measured by the product of mass and velocity. UO_momentum_unit = 300000057, /// rotational frequency unit: A unit which is a standard measure of the number of rotations in a given time. UO_rotational_frequency_unit = 300000058, /// specific volume unit: A unit which is a standard measure of the volume of a given mass of substance (the reciprocal of density). UO_specific_volume_unit = 300000059, /// speed/velocity unit: A unit which is a standard measure of the rate of movement. Speed is measured in the same physical units of measurement as velocity, but does not contain the element of direction that velocity has. Speed is thus the magnitude component of velocity. UO_speed_velocity_unit = 300000060, /// unit of molarity: A concentration unit which is a standard measure of the number of moles of a given substance per liter of solution. UO_unit_of_molarity = 300000061, /// molar: A unit of concentration which expresses a concentration of 1 mole of solute per liter of solution (mol/L). UO_molar = 300000062, /// millimolar: A unit of molarity which is equal to one thousandth of a molar or 10^[-3] M. UO_millimolar = 300000063, /// micromolar: A unit of molarity which is equal to one millionth of a molar or 10^[-6] M. UO_micromolar = 300000064, /// nanomolar: A unit of molarity which is equal to one thousandth of one millionth of a molar or 10^[-9] M. UO_nanomolar = 300000065, /// picomolar: A unit of molarity which is equal to 10^[-12] M. UO_picomolar = 300000066, /// unit of molality: A concentration unit which is a standard measure of the number of moles of a given substance per kilogram of solvent. UO_unit_of_molality = 300000067, /// molal: A unit of concentration which expresses a concentration of a solution of 1 mole per kilogram of solvent (mol/kg). UO_molal = 300000068, /// millimolal: A molality unit which is equal to one thousandth of a molal or 10^[-3] m. UO_millimolal = 300000069, /// micromolal: A molality unit which is equal to one millionth of a molal or 10^[-6] m. UO_micromolal = 300000070, /// nanomolal: A molality unit which is equal to one thousandth of one millionth of a molal or 10^[-9] m. UO_nanomolal = 300000071, /// picomolal: A molality unit which is equal to 10^[-12] m. UO_picomolal = 300000072, /// femtomolar: A unit of molarity which is equal to 10^[-15] M. UO_femtomolar = 300000073, /// unit of normality: A unit of concentration which highlights the chemical nature of salts. UO_unit_of_normality = 300000074, /// normal: A unit of concentration which is one gram equivalent of a solute per liter of solution. A gram equivalent weight or equivalent is a measure of the reactive capacity of a given molecule. UO_normal = 300000075, /// mole fraction: A concentration unit which denotes the number of moles of solute as a proportion of the total number of moles in a solution. UO_mole_fraction = 300000076, /// meter per second per second: An acceleration unit which is equal to the acceleration an object changing its velocity by 1meter/s over a time period that equals one second. UO_meter_per_second_per_second = 300000077, /// radian per second per second: An angular unit acceleration which is equal to the angular acceleration of an object changing its angular velocity by 1rad/s over a time period that equals one second. UO_radian_per_second_per_second = 300000078, /// radian per second: An angular unit velocity which is equal to about 9.54930 rpm (revolutions per minute). UO_radian_per_second = 300000079, /// square meter: An area unit which is equal to an area enclosed by a square with sides each 1 meter long. UO_square_meter = 300000080, /// square centimeter: An area unit which is equal to one ten thousandth of a square meter or 10^[-4] m^[2]. UO_square_centimeter = 300000081, /// square millimeter: An area unit which is equal to one millionth of a square meter or 10^[-6] m^[2]. UO_square_millimeter = 300000082, /// kilogram per cubic meter: A mass unit density which is equal to mass of an object in kilograms divided by the volume in cubic meters. UO_kilogram_per_cubic_meter = 300000083, /// gram per cubic centimeter: A mass unit density which is equal to mass of an object in grams divided by the volume in cubic centimeters. UO_gram_per_cubic_centimeter = 300000084, /// candela per square meter: A luminance unit which is equal to a luminous intensity of one candela radiating from a surface whose area is one square meter. UO_candela_per_square_meter = 300000085, /// kilogram per square meter: An area density unit which is equal to the mass of an object in kilograms divided by the surface area in meters squared. UO_kilogram_per_square_meter = 300000086, /// kilogram per mole: A molar mass unit which is equal to one kilogram of mass of one mole of chemical element or chemical compound. UO_kilogram_per_mole = 300000087, /// gram per mole: A molar mass unit which is equal to one gram of mass of one mole of chemical element or chemical compound. UO_gram_per_mole = 300000088, /// cubic meter per mole: A molar volume unit which is equal to 1 cubic meter occupied by one mole of a substance in the form of a solid, liquid, or gas. UO_cubic_meter_per_mole = 300000089, /// cubic centimeter per mole: A molar volume unit which is equal to 1 cubic centimeter occupied by one mole of a substance in the form of a solid, liquid, or gas. UO_cubic_centimeter_per_mole = 300000090, /// kilogram meter per second: A momentum unit which is equal to the momentum of a one kilogram mass object with a speed of one meter per second. UO_kilogram_meter_per_second = 300000091, /// turns per second: A rotational frequency unit which is equal to the number complete turn in a period of time that equals to 1 second. UO_turns_per_second = 300000092, /// cubic meter per kilogram: A specific volume unit which is equal to one cubic meter volume occupied by one kilogram of a particular substance. UO_cubic_meter_per_kilogram = 300000093, /// meter per second: A speed/velocity unit which is equal to the speed of an object traveling 1 meter distance in one second. UO_meter_per_second = 300000094, /// volume unit: A unit which is a standard measure of the amount of space occupied by any substance, whether solid, liquid, or gas. UO_volume_unit = 300000095, /// cubic meter: A volume unit which is equal to the volume of a cube with edges one meter in length. One cubic meter equals to 1000 liters. UO_cubic_meter = 300000096, /// cubic centimeter: A volume unit which is equal to one millionth of a cubic meter or 10^[-9] m^[3], or to 1 ml. UO_cubic_centimeter = 300000097, /// milliliter: A volume unit which is equal to one thousandth of a liter or 10^[-3] L, or to 1 cubic centimeter. UO_milliliter = 300000098, /// liter: A volume unit which is equal to one thousandth of a cubic meter or 10^[-3] m^[3], or to 1 decimeter. UO_liter = 300000099, /// cubic decimeter: A volume unit which is equal to one thousand of a cubic meter or 10^[-3] m^[3], or to 1 L. UO_cubic_decimeter = 300000100, /// microliter: A volume unit which is equal to one millionth of a liter or 10^[-6] L. UO_microliter = 300000101, /// nanoliter: A volume unit which is equal to one thousandth of one millionth of a liter or 10^[-9] L. UO_nanoliter = 300000102, /// picoliter: A volume unit which is equal to 10^[-12] L. UO_picoliter = 300000103, /// femtoliter: A volume unit which is equal to 10^[-15] L. UO_femtoliter = 300000104, /// frequency unit: A unit which is a standard measure of the number of repetitive actions in a particular time. UO_frequency_unit = 300000105, /// hertz: A frequency unit which is equal to 1 complete cycle of a recurring phenomenon in 1 second. UO_hertz = 300000106, /// force unit: A unit which is a standard measure of the force is applied when a mass is accelerated. UO_force_unit = 300000107, /// newton: A force unit which is equal to the force required to cause an acceleration of 1m/s2 of a mass of 1 Kg in the direction of the force. UO_newton = 300000108, /// pressure unit: A unit which is a standard measure of the force applied to a given area. UO_pressure_unit = 300000109, /// pascal: A pressure unit which is equal to the pressure or stress on a surface caused by a force of 1 newton spread over a surface of 1 m^[2]. UO_pascal = 300000110, /// energy unit: A unit which is a standard measure of the work done by a certain force (gravitational, electric, magnetic, force of inertia, etc). UO_energy_unit = 300000111, /// joule: An energy unit which is equal to the energy required when a force of 1 newton moves an object 1 meter in the direction of the force. UO_joule = 300000112, /// power unit: A unit which is a standard measure power or the rate of doing work. UO_power_unit = 300000113, /// watt: A power unit which is equal to the power used when work is done at the rate of 1 joule per second. UO_watt = 300000114, /// illuminance unit: A unit which is a standard measure of the luminous flux incident on a unit area. UO_illuminance_unit = 300000115, /// lux: An illuminance unit which is equal to the illuminance produced by 1 lumen evenly spread over an area 1 m^[2]. UO_lux = 300000116, /// luminous flux unit: A unit which is a standard measure of the flow of radiant energy. UO_luminous_flux_unit = 300000117, /// lumen: A luminous flux unit which is equal to the luminous flux emitted into 1 steradian by a point source of 1 candela. UO_lumen = 300000118, /// catalytic activity unit: A unit which is a standard measure of the amount of the action of a catalyst. UO_catalytic_activity_unit = 300000119, /// katal: A catalytic unit activity which is equal to the activity of a catalyst in moles per second, such as the amount of an enzyme needed to transform one mole of substrate per second. UO_katal = 300000120, /// angle unit: A unit which is a standard measure of the figure or space formed by the junction of two lines or planes. UO_angle_unit = 300000121, /// plane angle unit: A unit which is a standard measure of the angle formed by two straight lines in the same plane. UO_plane_angle_unit = 300000122, /// radian: A plane angle unit which is equal to the angle subtended at the center of a circle by an arc equal in length to the radius of the circle, approximately 57 degrees 17 minutes and 44.6 seconds. UO_radian = 300000123, /// solid angle unit: A unit which is a standard measure of the angle formed by three or more planes intersecting at a common point. UO_solid_angle_unit = 300000124, /// steradian: A solid angle unit which is equal to the solid angle subtended at the center of a sphere by an area on the surface of the sphere that is equal to the radius squared. UO_steradian = 300000125, /// radiation unit: A unit which is a standard measure of the amount of radiation emitted by a given radiation source as well as the amount of radiation absorbed or deposited in a specific material by a radiation source. UO_radiation_unit = 300000127, /// activity (of a radionuclide) unit: A unit which is a standard measure of the transformation (disintegration) rate of a radioactive substance. UO_activity__of_a_radionuclide__unit = 300000128, /// absorbed dose unit: A unit which is a standard measure of the energy imparted by ionizing radiation to unit mass of matter such as tissue. UO_absorbed_dose_unit = 300000129, /// dose equivalent unit: A unit which is a standard measure of the expression of dose in terms of its biological effect. UO_dose_equivalent_unit = 300000130, /// exposure unit: A unit which is a standard measure of the quantity that expresses the ability of radiation to ionize air and thereby create electric charges which can be collected and measured. UO_exposure_unit = 300000131, /// becquerel: An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per second or there is one atom disintegration per second (dps). UO_becquerel = 300000132, /// curie: An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which there are 3.7 x 10^[10] atom disintegration per second (dps). UO_curie = 300000133, /// gray: An absorbed dose unit which is equal to the absorption of one joule of radiation energy by one kilogram of matter. UO_gray = 300000134, /// rad: An absorbed dose unit which is equal to 0.01 gray (Gy). UO_rad = 300000135, /// roentgen: An exposure unit which is equal to the amount of radiation required to liberate positive and negative charges of one electrostatic unit of charge in 1 cm^[3] of air at standard temperature and pressure (STP). This corresponds to the generation of approximately 2.0810^[9] ion pairs. UO_roentgen = 300000136, /// sievert: A dose equivalent unit which is equal to the absorption of one joule of radiation energy by one kilogram of matter. UO_sievert = 300000137, /// millisievert: A dose equivalent unit which is equal to one thousandth of a sievert or 10^[-3] Sv. UO_millisievert = 300000138, /// microsievert: A dose equivalent unit which is equal to one millionth of a sievert or 10^[-6] Sv. UO_microsievert = 300000139, /// Roentgen equivalent man: A dose equivalent unit which when multiplied by hundred is equal to one sievert or 1 Sv. 1 Sv is equal to 100 rem. UO_Roentgen_equivalent_man = 300000140, /// microgray: An absorbed dose unit which is equal to one millionth of a gray or 10^[-6] Gy. UO_microgray = 300000141, /// milligray: An absorbed dose unit which is equal to one thousandth of a gray or 10^[-3] Gy. UO_milligray = 300000142, /// nanogray: An absorbed dose unit which is equal to one thousandth of a millionth of a gray or 10^[-9] Gy. UO_nanogray = 300000143, /// nanosievert: A dose equivalent unit which is equal to one thousandth of a millionth of a sievert or 10^[-9] Sv. UO_nanosievert = 300000144, /// millicurie: An activity (of a radionuclide) unit which is equal to one thousandth of a curie or 10^[-3] Ci. UO_millicurie = 300000145, /// microcurie: An activity (of a radionuclide) unit which is equal to one millionth of a curie or 10^[-6] Ci. UO_microcurie = 300000146, /// disintegrations per minute: An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per minute or there is one atom disintegration per minute. UO_disintegrations_per_minute = 300000147, /// counts per minute: An activity (of a radionuclide) unit which is equal to the number of light emissions produced by ionizing radiation in one minute. UO_counts_per_minute = 300000148, /// nanosecond: A time unit which is equal to one thousandth of one millionth of a second or 10^[-9] s. UO_nanosecond = 300000150, /// century: A time unit which is equal to 100 years. UO_century = 300000151, /// half life: A time unit which represents the period over which the activity or concentration of a specified chemical or element falls to half its original activity or concentration. UO_half_life = 300000152, /// foot candle: An illuminance unit which is equal to the illuminance produced by 1 lumen evenly spread over an area 1 foot^[2]. One footcandle is equal to 10.76 lux. UO_foot_candle = 300000153, /// irradiance unit: A unit which is a standard measure of the power of electromagnetic radiation at a surface, per unit area. UO_irradiance_unit = 300000154, /// watt per square meter: An irradiance unit which is equal to 1 watt of radiant power incident per one square meter surface area. UO_watt_per_square_meter = 300000155, /// einstein per square meter per second: An irradiance unit which is equal to one einstein per square meter per second. One einstein is one mole of photons, regardless of their frequency. Therefore, the number of photons in an einstein is Avogadro's number. UO_einstein_per_square_meter_per_second = 300000156, /// light unit: A unit which is a standard measure of the intensity of light. UO_light_unit = 300000157, /// watt per steradian per square meter: A radiance unit which is equal to one watt of radiant power incident per steradian solid angle per one square meter projected area of the source, as viewed from the given direction. UO_watt_per_steradian_per_square_meter = 300000158, /// radiant intensity unit: A unit which is a standard measure of the intensity of electromagnetic radiation. UO_radiant_intensity_unit = 300000159, /// microeinstein per square meter per second: An irradiance unit which is equal to one microeinstein per square meter per second or 10^[-6] microeinstein/sm^[2]. UO_microeinstein_per_square_meter_per_second = 300000160, /// radiance unit: A unit which is a standard measure of the power of electromagnetic radiation through space or through a material medium in the form of electromagnetic waves. UO_radiance_unit = 300000161, /// watt per steradian: A radiant intensity unit which is equal to one kilogram meter squared per second cubed per steradian. UO_watt_per_steradian = 300000162, /// mass percentage: A dimensionless concentration unit which denotes the mass of a substance in a mixture as a percentage of the mass of the entire mixture. UO_mass_percentage = 300000163, /// mass volume percentage: A dimensionless concentration unit which denotes the mass of the substance in a mixture as a percentage of the volume of the entire mixture. UO_mass_volume_percentage = 300000164, /// volume percentage: A dimensionless concentration unit which denotes the volume of the solute in mL per 100 mL of the resulting solution. UO_volume_percentage = 300000165, /// parts per notation unit: A dimensionless concentration notation which describes the amount of one substance in another. It is the ratio of the amount of the substance of interest to the amount of that substance plus the amount of the substance. UO_parts_per_notation_unit = 300000166, /// parts per hundred: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 100 regardless of the units of measure as long as they are the same. UO_parts_per_hundred = 300000167, /// parts per thousand: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1000 regardless of the units of measure as long as they are the same. UO_parts_per_thousand = 300000168, /// parts per million: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[6]. UO_parts_per_million = 300000169, /// parts per billion: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000 regardless of the units of measure as long as they are the same or 1 part in 10^[9]. UO_parts_per_billion = 300000170, /// parts per trillion: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[12]. UO_parts_per_trillion = 300000171, /// parts per quadrillion: A dimensionless concentration notation which denotes the amount of a given substance in a total amount of 1,000,000,000,000 regardless of the units of measure used as long as they are the same or 1 part in 10^[15]. UO_parts_per_quadrillion = 300000172, /// gram per milliliter: A mass unit density which is equal to mass of an object in grams divided by the volume in milliliter. UO_gram_per_milliliter = 300000173, /// kilogram per liter: A mass unit density which is equal to mass of an object in kilograms divided by the volume in liters. UO_kilogram_per_liter = 300000174, /// gram per liter: A mass unit density which is equal to mass of an object in grams divided by the volume in liters. UO_gram_per_liter = 300000175, /// milligram per milliliter: A mass unit density which is equal to mass of an object in milligrams divided by the volume in milliliters. UO_milligram_per_milliliter = 300000176, /// unit per volume unit: A concentration unit which is a standard measure of the number of units, as an agreed arbitrary amount, of a given substance per a specific volume of solution. UO_unit_per_volume_unit = 300000177, /// unit per milliliter: A unit per milliliter unit which is equal to one unit of an agreed arbitrary amount per one milliliter. UO_unit_per_milliliter = 300000178, /// unit per liter: A unit per milliliter unit which is equal to one unit of an agreed arbitrary amount per one liter. UO_unit_per_liter = 300000179, /// mass per unit volume: A concentration unit which is a standard measure of the mass of a substance in a given volume (density). UO_mass_per_unit_volume = 300000180, /// enzyme unit: A catalytic unit activity which is equal to the amount of the enzyme that catalyzes the conversion of 1 micro mole of substrate per minute. UO_enzyme_unit = 300000181, /// density unit: A unit which is a standard measure of the influence exerted by some mass. UO_density_unit = 300000182, /// linear density unit: A density unit which is a standard measure of the mass exerting an influence on a one-dimensional object. UO_linear_density_unit = 300000183, /// kilogram per meter: An area density unit which is equal to the mass of an object in kilograms divided by one meter. UO_kilogram_per_meter = 300000184, /// degree: A plane angle unit which is equal to 1/360 of a full rotation or 1.7453310^[-2] rad. UO_degree = 300000185, /// dimensionless unit: A unit which is a standard measure of physical quantity consisting of only a numerical number without any units. UO_dimensionless_unit = 300000186, /// percent: A dimensionless ratio unit which denotes numbers as fractions of 100. UO_percent = 300000187, /// pi: A dimensionless unit which denoted an irrational real number, approximately equal to 3.14159 which is the ratio of a circle's circumference to its diameter in Euclidean geometry. UO_pi = 300000188, /// count unit: A dimensionless unit which denotes a simple count of things. UO_count_unit = 300000189, /// ratio: A dimensionless unit which denotes an amount or magnitude of one quantity relative to another. UO_ratio_300000190 = 300000190, /// fraction: A dimensionless ratio unit which relates the part (the numerator) to the whole (the denominator). UO_fraction = 300000191, /// molecule count: A dimensionless count unit which denotes the number of molecules. UO_molecule_count = 300000192, /// purity percentage: A dimensionless percent unit which denotes the homogeneity of a biomaterial. UO_purity_percentage = 300000193, /// confluence percentage: A dimensionless percent unit which denotes the density of an attached or monolayer culture (e.g., cell culture). UO_confluence_percentage = 300000194, /// degree Fahrenheit: A temperature unit which is equal to 5/9ths of a kelvin. Negative 40 degrees Fahrenheit is equal to negative 40 degrees Celsius. UO_degree_Fahrenheit = 300000195, /// pH: A dimensionless concentration notation which denotes the acidity of a solution in terms of activity of hydrogen ions (H+). UO_pH = 300000196, /// liter per kilogram: A specific volume unit which is equal to one liter volume occupied by one kilogram of a particular substance. UO_liter_per_kilogram = 300000197, /// milliliter per kilogram: A specific volume unit which is equal to a thousandth of a liter per kilogram or 10^[-3] l/kg. UO_milliliter_per_kilogram = 300000198, /// microliter per kilogram: A specific volume unit which is equal to one millionth of a liter per kilogram or 10^[-6] l/kg. UO_microliter_per_kilogram = 300000199, /// cell concentration unit: A concentration unit which denotes the average cell number in a given volume. UO_cell_concentration_unit = 300000200, /// cells per milliliter: A unit of cell concentration which is equal to one cell in a volume of 1 milliliter. UO_cells_per_milliliter = 300000201, /// catalytic (activity) concentration unit: A concentration unit which is a standard measure of the amount of the action of a catalyst in a given volume. UO_catalytic__activity__concentration_unit = 300000202, /// katal per cubic meter: A catalytic (activity) concentration unit which is equal to 1 katal activity of a catalyst in a given volume of one cubic meter. UO_katal_per_cubic_meter = 300000203, /// katal per liter: A catalytic (activity) concentration unit which is equal to 1 katal activity of a catalyst in a given volume of one thousandth of a cubic meter. UO_katal_per_liter = 300000204, /// volume per unit volume: A dimensionless concentration unit which denotes the given volume of the solute in the total volume of the resulting solution. UO_volume_per_unit_volume = 300000205, /// milliliter per cubic meter: A volume per unit volume unit which is equal to one millionth of a liter of solute in one cubic meter of solution. UO_milliliter_per_cubic_meter = 300000206, /// milliliter per liter: A volume per unit volume unit which is equal to one millionth of a liter of solute in one liter of solution. UO_milliliter_per_liter = 300000207, /// gram per deciliter: A mass density unit which is equal to mass of an object in grams divided by the volume in deciliters. UO_gram_per_deciliter = 300000208, /// deciliter: A volume unit which is equal to one tenth of a liter or 10^[-1] L. UO_deciliter = 300000209, /// colony forming unit: A dimensionless count unit which a measure of viable bacterial numbers. UO_colony_forming_unit = 300000210, /// plaque forming unit: A dimensionless count unit which a measure of plague forming units in a given volume. UO_plaque_forming_unit = 300000211, /// colony forming unit per volume: A concentration unit which a measure of viable bacterial numbers in a given volume. UO_colony_forming_unit_per_volume = 300000212, /// colony forming unit per milliliter: A colony forming unit which a measure of viable bacterial numbers in one milliliter. UO_colony_forming_unit_per_milliliter = 300000213, /// plaque forming unit per volume: A concentration unit which a measure of plague forming units in a given volume. UO_plaque_forming_unit_per_volume = 300000214, /// plaque forming unit per milliliter: A concentration unit which a measure of plague forming units in one milliliter. UO_plaque_forming_unit_per_milliliter = 300000215, /// disintegrations per second: An activity (of a radionuclide) unit which is equal to the activity of a quantity of radioactive material in which one nucleus decays per second or there is one atom disintegration per second. UO_disintegrations_per_second = 300000216, /// electric potential difference unit: A unit which is a standard measure of the work done per unit charge as a charge is moved between two points in an electric field. UO_electric_potential_difference_unit = 300000217, /// volt: An electric potential difference unit which is equal to the work per unit charge. One volt is the potential difference required to move one coulomb of charge between two points in a circuit while using one joule of energy. UO_volt = 300000218, /// electric charge: A unit which is a standard measure of the quantity of unbalanced electricity in a body (either positive or negative) and construed as an excess or deficiency of electrons. UO_electric_charge = 300000219, /// coulomb: An electrical charge unit which is equal to the amount of charge transferred by a current of 1 ampere in 1 second. UO_coulomb = 300000220, /// dalton: An independently to the base SI units defined mass unit which is equal to one twelfth of the mass of an unbound atom of the carbon-12 nuclide, at rest and in its ground state. UO_dalton = 300000221, /// kilodalton: A mass unit which is equal to one thousand daltons. UO_kilodalton = 300000222, /// watt-hour: An energy unit which is equal to the amount of electrical energy equivalent to a one-watt load drawing power for one hour. UO_watt_hour = 300000223, /// kilowatt-hour: An energy unit which is equal to 1,000 watt-hours. UO_kilowatt_hour = 300000224, /// magnetic flux unit: A unit which is a standard measure of quantity of magnetism, taking account of the strength and the extent of a magnetic field. UO_magnetic_flux_unit = 300000225, /// weber: A magnetic flux unit which is equal to the amount of flux that when linked with a single turn of wire for an interval of one second will induce an electromotive force of one volt. UO_weber = 300000226, /// magnetic flux density unit: A unit which is a standard measure of the strength of a magnetic field. UO_magnetic_flux_density_unit = 300000227, /// tesla: A magnetic flux density unit which is equal to one weber per square meter. UO_tesla = 300000228, /// volt-hour: A magnetic flux unit which is equal to 3600 Wb. UO_volt_hour = 300000229, /// kilovolt-hour: A magnetic flux unit which is equal to one thousand volt-hours. UO_kilovolt_hour = 300000230, /// information unit: A unit which is a standard measure of the amount of information. UO_information_unit = 300000231, /// bit: An information unit which refers to a digit in the binary numeral system, which consists of base 2 digits (ie there are only 2 possible values: 0 or 1). UO_bit = 300000232, /// byte: An information unit which is equal to 8 bits. UO_byte = 300000233, /// kilobyte: An information unit which is equal to 1000 bytes. UO_kilobyte = 300000234, /// megabyte: An information unit which is equal to 1000 kB. UO_megabyte = 300000235, /// image resolution unit: An information unit which is a standard measure of the detail an image holds. UO_image_resolution_unit = 300000236, /// chroma sampling unit: An image resolution unit which is a standard measure of the amount of spatial detail in an image. UO_chroma_sampling_unit = 300000237, /// dynamic range unit: An image resolution unit which is a standard measure of the amount of contrast available in a pixel. UO_dynamic_range_unit = 300000238, /// spatial resolution unit: An image resolution unit which is a standard measure of the way luminance and chrominance may be sampled at different levels. UO_spatial_resolution_unit = 300000239, /// dots per inch: A spatial resolution unit which is a standard measure of the printing resolution, in particular the number of individual dots of ink a printer or toner can produce within a linear one-inch space. UO_dots_per_inch = 300000240, /// micron pixel: A spatial resolution unit which is equal to a pixel size of one micrometer. UO_micron_pixel = 300000241, /// pixels per inch: A spatial resolution unit which is a standard measure of the resolution of a computer display, related to the size of the display in inches and the total number of pixels in the horizontal and vertical directions. UO_pixels_per_inch = 300000242, /// pixels per millimeter: A spatial resolution unit which is a standard measure of the number of pixels in one millimeter length or width of a digital image divided by the physical length or width of a printed image. UO_pixels_per_millimeter = 300000243, /// base pair: A count unit which contains one nucleotide. UO_base_pair = 300000244, /// kibibyte: An information unit which is equal to 1024 B. UO_kibibyte = 300000245, /// mebibyte: An information unit which is equal to 1024 KiB. UO_mebibyte = 300000246, /// millivolt: An electric potential difference unit which is equal to one thousandth of a volt or 10^[-3] V. UO_millivolt = 300000247, /// kilovolt: An electric potential difference unit which is equal to one thousand volts or 10^[3] V. UO_kilovolt = 300000248, /// microvolt: An electric potential difference unit which is equal to one millionth of a volt or 10^[-6] V. UO_microvolt = 300000249, /// nanovolt: An electric potential difference unit which is equal to one billionth of a volt or 10^[-12] V. UO_nanovolt = 300000250, /// picovolt: An electric potential difference unit which is equal to one trillionth of a volt or 10^[-12] V. UO_picovolt = 300000251, /// megavolt: An electric potential difference unit which is equal to one million volts or 10^[6] V. UO_megavolt = 300000252, /// surface tension unit: A unit which is a standard measure of the ability of a liguid to attraction of molecules at its surface as a result of unbalanced molecular cohesive forces. UO_surface_tension_unit = 300000253, /// newton per meter: A surface tension unit which is equal to one newton per meter. UO_newton_per_meter = 300000254, /// dyne per cm: A surface tension unit which is equal to one dyne per centimeter. UO_dyne_per_cm = 300000255, /// viscosity unit: A unit which is a standard measure of the internal resistance of fluids to flow. UO_viscosity_unit = 300000256, /// pascal second: A viscosity unit which is equal to one pascale per second. UO_pascal_second = 300000257, /// poise: A viscosity unit which is equal to one dyne second per square centimeter. UO_poise = 300000258, /// decibel: A ratio unit which is an indicator of sound power per unit area. UO_decibel = 300000259, /// effective dose unit: A unit which is a standard measure of the estimate of the stochastic effect that a non-uniform radiation dose has on a human. UO_effective_dose_unit = 300000260, /// conduction unit: A unit which represents a standard measurement of the transmission of an entity through a medium. UO_conduction_unit = 300000261, /// electrical conduction unit: A unit which represents a standard measurement of the movement of electrically charged particles through a transmission medium (electrical conductor). UO_electrical_conduction_unit = 300000262, /// heat conduction unit: A unit which represents a standard measurement of the spontaneous transfer of thermal energy through matter, from a region of higher temperature to a region of lower temperature. UO_heat_conduction_unit = 300000263, /// siemens: An electrical conduction unit which is equal to A/V. UO_siemens = 300000264, /// watt per meter kelvin: An heat conduction unit which is equal to one watt divided by meter kelvin. UO_watt_per_meter_kelvin = 300000265, /// electronvolt: A non-SI unit of energy (eV) defined as the energy acquired by a single unbound electron when it passes through an electrostatic potential difference of one volt. An electronvolt is equal to 1.602 176 53(14) x 10^-19 J. UO_electronvolt = 300000266, /// electric field strength unit: The electric field strength is a unit which is a measure of the potential difference between two points some distance apart. UO_electric_field_strength_unit = 300000267, /// volt per meter: The volt per meter is a unit of electric field strength equal to the a potential difference of 1 volt existing between two points that are 1 meter apart. UO_volt_per_meter = 300000268, /// absorbance unit: A dimensionless logarithmic unit assigned to a measure of absorbance of light through a partially absorbing substance, defined as -log10(I/I_0) where I = transmitted light and I_0 = incident light. UO_absorbance_unit = 300000269, /// volumetric flow rate unit: A unit which is a standard measure of the volume of fluid which passes through a given surface per unit time . UO_volumetric_flow_rate_unit = 300000270, /// microliters per minute: A volumetric flow rate unit which is equal to one microliter volume through a given surface in one minute. UO_microliters_per_minute = 300000271, /// millimetres of mercury: A unit of pressure equal to the amount of fluid pressure one millimeter deep in mercury at zero degrees centigrade on Earth. UO_millimetres_of_mercury = 300000272, /// milligram per liter: A mass unit density which is equal to mass of an object in milligrams divided by the volume in liters. UO_milligram_per_liter = 300000273, /// microgram per milliliter: A mass unit density which is equal to mass of an object in micrograms divided by the volume in millliters. UO_microgram_per_milliliter = 300000274, /// nanogram per milliliter: A mass unit density which is equal to mass of an object in nanograms divided by the volume in milliliters. UO_nanogram_per_milliliter = 300000275, /// amount per container: A concentration unit which is a standard measure of the amount of a substance in a given container. UO_amount_per_container = 300000276, /// ug/disk: A unit which is equal to one microgram per disk, where a disk is some physical surface/container upon which the substance is deposited. UO_ug_disk = 300000277, /// nmole/disk: A unit which is equal to one nanomole per disk, where a disk is some physical surface/container upon which the substance is deposited. UO_nmole_disk = 300000278, /// milliunits per milliliter: A unit per milliliter unit which is equal to one thousandth of a unit of an agreed arbitrary amount per one milliliter. UO_milliunits_per_milliliter = 300000279, /// rate unit: A unit which represents a standard measurement occurrence of a process per unit time. UO_rate_unit = 300000280, /// count per nanomolar second: A rate unit which is equal to one over one nanomolar second. UO_count_per_nanomolar_second = 300000281, /// count per molar second: A rate unit which is equal to one over one molar second. UO_count_per_molar_second = 300000282, /// kilogram per hectare: An area density unit which is equal to the mass of an object in kilograms divided by the surface area in hectares. UO_kilogram_per_hectare = 300000283, /// count per nanomolar: A rate unit which is equal to one over one nanomolar. UO_count_per_nanomolar = 300000284, /// count per molar: A rate unit which is equal to one over one molar. UO_count_per_molar = 300000285, /// yotta: A prefix in the metric system denoting a factor of ten to the power of 24. UO_yotta = 300000286, /// hecto: A prefix in the metric system denoting a factor of one hundred. UO_hecto = 300000287, /// zetta: A prefix in the metric system denoting a factor of ten to the power of 21. UO_zetta = 300000288, /// exa: A prefix in the metric system denoting a factor of ten to the power of 18. UO_exa = 300000289, /// peta: A prefix in the metric system denoting a factor of ten to the power of 15. UO_peta = 300000290, /// tera: A prefix in the metric system denoting a factor of ten to the power of 12. UO_tera = 300000291, /// giga: A prefix in the metric system denoting a factor of ten to the power of 9. UO_giga = 300000292, /// mega: A prefix in the metric system denoting a factor of million. UO_mega = 300000293, /// kilo: A prefix in the metric system denoting a factor of one thousand. UO_kilo = 300000294, /// deca: A prefix in the metric system denoting a factor of ten. UO_deca = 300000295, /// deci: A prefix in the metric system denoting a factor of one tenth. UO_deci = 300000296, /// milli: A prefix in the metric system denoting a factor of one thousand. UO_milli_300000297 = 300000297, /// centi: A prefix in the metric system denoting a factor of one hundred. UO_centi = 300000298, /// micro: A prefix in the metric system denoting a factor of 10 to the power of -6. UO_micro = 300000299, /// nano: A prefix in the metric system denoting a factor of 10 to the power of -9. UO_nano = 300000300, /// microgram per liter: A mass unit density which is equal to mass of an object in micrograms divided by the volume in liters. UO_microgram_per_liter = 300000301, /// pico: A prefix in the metric system denoting a factor of 10 to the power of -12. UO_pico = 300000302, /// femto: A prefix in the metric system denoting a factor of 10 to the power of -15. UO_femto = 300000303, /// atto: A prefix in the metric system denoting a factor of 10 to the power of -18. UO_atto = 300000304, /// zepto: A prefix in the metric system denoting a factor of 10 to the power of -21. UO_zepto = 300000305, /// yocto: A prefix in the metric system denoting a factor of 10 to the power of -24. UO_yocto = 300000306, /// dose unit: A concentration unit which is a standard measure of the amount of a toxic or pharmaceutical substance administered to a recipient subject, expressed in terms of the size of the subject. UO_dose_unit = 300000307, /// milligram per kilogram: A dose unit which is equal to 1 milligram of a toxic or pharmaceutical substance per kilogram body weight of the recipient subject. UO_milligram_per_kilogram = 300000308, /// milligram per square meter: A dose unit which is equal to 1 milligram of a toxic or pharmaceutical substance per square meter of surface area of the recipient subject. UO_milligram_per_square_meter = 300000309, /// dosage unit: A concentration unit which is a standard measure of the amount of a toxic or pharmaceutical substance administered over time to a recipient subject, expressed in terms of the size of the subject. UO_dosage_unit = 300000310, /// milligram per kilogram per day: A dosage unit which is equal to 1 milligram per day of a toxic or pharmaceutical substance per kilogram body weight of the recipient subject. UO_milligram_per_kilogram_per_day = 300000311, /// relative light unit: A derived unit which is a measure of relative light intensity, as typically measured by a luminometer, spectrophotometer, or fluorimeter in biological research applications. UO_relative_light_unit = 300000312, /// relative luminescence unit: A relative light unit which is a measure of relative luminescence intensity. UO_relative_luminescence_unit = 300000313, /// relative fluorescence unit: A relative light unit which is a measure of relative fluorescence intensity. UO_relative_fluorescence_unit = 300000314, /// turbidity unit: A unit used to indicate the clarity of water or other solutions or suspensions, as measured by the ability of the solution or suspension to scatter light of a defined wavelength range. UO_turbidity_unit = 300000315, /// cells per microliter: A unit of cell concentration which is equal to one cell in a volume of 1 microliter. UO_cells_per_microliter = 300000316, /// cells per well: A unit of cell concentration which is equal to 1 cell in a well or discrete container of arbitrary volume. UO_cells_per_well = 300000317, /// formazin nephelometric unit: 1000 formazin turbidity units (FNU) on the empirical formazin turbidity scale represents reflectance of insol. reaction products of 0.0725 g hydrazine sulfate with 0.7250 g hexamethylenetetramine diluted to 1 L. UO_formazin_nephelometric_unit = 300000318, /// radioactivity concentration: A concentration unit which is a standard measure of the amount of radioactivity in a given volume. UO_radioactivity_concentration = 300000319, /// curie per liter: A unit of radioactivity concentration which is equal to one curie in a volume of 1 liter. UO_curie_per_liter = 300000320, /// microcurie per milliliter: A unit of radioactivity concentration which is equal to one micro curie in a volume of 1 liter. UO_microcurie_per_milliliter = 300000321, /// fold dilution: A unit that is the ratio of concentration of two solutions of interest, typically with one solution derived from the other by the addition of solvent. UO_fold_dilution = 300000322, /// ton per hectare: An area density unit which is equal to the mass of an object in tons divided by the surface area in hectares. UO_ton_per_hectare = 300000323, /// square angstrom: An area unit which is equal to an area enclosed by a square with sides each 1 angstrom long. UO_square_angstrom = 300000324, /// megaHertz: A frequency unit which is equal to one million hertz or 10^[6] V. UO_megaHertz = 300000325, /// centiMorgan: A unit used to express distances on a genetic map. In genetic mapping, distances between markers are determined by measuring the rate of meoitic recombination between them, which increases proportionately with the distance separating them. A cM is defined as the length of an interval in which there is a 1% probability of recombination. On the average, 1 cM is roughly equivalent to 1 megabase (Mb) of DNA, although this can vary widely due to hot and cold spots of recombination. UO_centiMorgan = 300000326, /// centiRay: A unit of genetic map distance defined corresponding to an interval in which there is a 1% probability of X-irradiation induced breakage. To be completely specified, the unit must be qualified by the radiation in dosage in rads (e.g. cR8000), because this determines the actual breakage probability. UO_centiRay = 300000327, /// kilo base pair: A unit equal to one thousand base pairs. UO_kilo_base_pair = 300000328, /// mega base pair: A unit equal to one million base pairs UO_mega_base_pair = 300000329, /// giga base pair: A unit equal to one billion base pairs. UO_giga_base_pair = 300000330, /// gigabyte: An information unit which is equal to 1000000000 bytes. UO_gigabyte = 300000331, /// terabyte: An information unit which is equal to 1000 gigabytes. UO_terabyte = 300000332, /// square micrometer: An area unit which is equal to an area enclosed by a square with sides each 1 micrometer long. UO_square_micrometer = 300010001, /// millisiemens: An electrical conduction unit which is equal to one thousandth of a siemen or 10^[-3] siemens. UO_millisiemens = 300010002, /// micromole per litre: A specific concentration unit which is equal to 1 micromole in a given volume of one thousandth of a cubic meter. UO_micromole_per_litre = 300010003, /// micromole per kilogram: A specific concentration unit which is equal to 1 micromole of a given substance per kilogram of solvent. UO_micromole_per_kilogram = 300010004, /// millimeters per day: A speed/velocity unit which is equal to the speed of an object traveling 1 millimeter distance in one day. UO_millimeters_per_day = 300010005, /// ratio: A dimensionless ratio unit which, given a pair of quantities a and b, for which b is a multiple of a, denotes b by giving the multiplier (coefficient) c for a to result in b. UO_ratio_300010006 = 300010006, /// volt-second per square centimeter: An electrical mobility unit which is equal to one volt second per square centimeter. UO_volt_second_per_square_centimeter = 300010007, /// kilometer per hour: A speed/velocity unit which is equal to the speed of an object traveling 1 kilometer distance in one hour. UO_kilometer_per_hour = 300010008, /// milli: A mass unit which is equal to 1/12 the mass of 12C UO_milli_300010009 = 300010009, /// hectare: An area unit which is equal to an area of 10,000 square meters. Equivalent to 2.471 acres. UO_hectare = 300010010, /// inch: A length unit which is equal to 0.0254 metres. UO_inch = 300010011, /// thou: A length unit which is equal to 0.0254 millimetres. UO_thou = 300010012, /// foot: A length unit which is equal to 0.3048 metres, or 12 inches. UO_foot = 300010013, /// yard: A length unit which is equal to 0.9144 metres, or 3 feet. UO_yard = 300010014, /// chain: A length unit which is equal to 20.1168 metres, 66 feet, or 22 yards. UO_chain = 300010015, /// furlong: A length unit which is equal to 20,116.8 metres, 660 feet, or 10 chains. UO_furlong = 300010016, /// mile: A length unit which is equal to 1,609.344 metres, or 8 furlongs. UO_mile = 300010017, /// league: A length unit which is equal to 3 miles, or 4,828.032 metres UO_league = 300010018, /// maritime length unit: A maritime length unit is one used primarily at sea. UO_maritime_length_unit = 300010019, /// fathom: A maritime length unit which is equal to 6.08 feet, or 1.853184 metres UO_fathom = 300010020, /// cable: A maritime length unit which is equal to 608 feet, 100 fathoms, or 185.3184 metres UO_cable = 300010021, /// nautical mile: A maritime length unit which is equal to 6,080 feet, 10 cables, or 1,853.184 metres UO_nautical_mile = 300010022, /// perch: An area unit which is equal to an area of 25.292,852,64 square meters, or 1 square rod. UO_perch = 300010023, /// rood: An area unit which is equivalent to 1 furlong x 1 rod. This is equal to an area of 1,011.714,1056 square meters, or 40 square rods. UO_rood = 300010024, /// acre: An area unit which is equivalent to 1 furlong x 1 chain. This is equal to an area of 4,046.856,4224 square meters, or 43,500 square feet. UO_acre = 300010025, /// fluid ounce: An imperial volume unit which is equivalent to 28.413,0625 millilitres. UO_fluid_ounce = 300010026, /// gill: An imperial volume unit which is equivalent to 142.065,3125 millilitres. UO_gill = 300010027, /// pint: An imperial volume unit which is equivalent to 568.261,25 millilitres. UO_pint = 300010028, /// quart: An imperial volume unit which is equivalent to 1,136.5225 millilitres, or two pints. UO_quart = 300010029, /// gallon: An imperial volume unit which is equivalent to 4,546.09 millilitres, or 8 pints. UO_gallon = 300010030, /// grain: An imperial mass unit which is equivalent to 64.798,91 milligrams. UO_grain = 300010031, /// drachm: An imperial mass unit which is equivalent to 1.771,845,195,3125 grams, or 1/256 of 1 pound. UO_drachm = 300010032, /// ounce: An imperial mass unit which is equivalent to 28.349,523,125 grams, or 1/16 of 1 pound. UO_ounce = 300010033, /// pound: An imperial mass unit which is equivalent to 453.592,37 grams. UO_pound = 300010034, /// stone: An imperial mass unit which is equivalent to 6,350.293,18 grams, or 14 pounds. UO_stone = 300010035, /// quarter: An imperial mass unit which is equivalent to 12.700,586,36 kilograms, or 28 pounds. UO_quarter = 300010036, /// hundredweight: An imperial mass unit which is equivalent to 50.802,345,44 kilograms, 112 pounds, or 8 stone. UO_hundredweight = 300010037, /// ton: An imperial mass unit which is equivalent to 1,016.046,9088 kilograms, or 2,240 pounds. UO_ton = 300010038, /// slug: An imperial gravitational unit which is equivalent to a mass that accelerates by 1ft/s² when a force of one pound (lbf) is exerted on it. UO_slug = 300010039, /// teaspoon: A metric teaspoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 5mL volume. UO_teaspoon = 300010040, /// united states customary teaspoon: A United States customary units teaspoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 4.93 mL volume. UO_united_states_customary_teaspoon = 300010041, /// tablespoon: A metric tablespoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 15mL volume. UO_tablespoon = 300010042, /// australian metric tablespoon: An Australian metric tablespoon is a unit of measurement of volume used in Australia for cooking recipes and pharmaceutic prescriptions. It equals a 20mL volume. UO_australian_metric_tablespoon = 300010043, /// united states customary tablespoon: A United States customary units tablespoon is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 14.79 mL volume. UO_united_states_customary_tablespoon = 300010044, /// metric cup: A metric cup is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions. It equals a 250mL volume. UO_metric_cup = 300010045, /// united states customary cup: A United States customary units cup is a unit of measurement of volume widely used in cooking recipes and pharmaceutic prescriptions in America. It equals a 236.59 mL volume. UO_united_states_customary_cup = 300010046, /// united states fda cup: A United States FDA cup is a unit of measurement of volume used by the US Federal Department of Agriculture as a nutritional serving measure. It equals a 240 mL volume. UO_united_states_fda_cup = 300010047, /// micromole: A substance unit which is equal to one millionth of a mole. UO_micromole_300010048 = 300010048, /// gram per square meter: An area density unit which is equal to the mass of an object in grams divided by the surface area in meters squared. UO_gram_per_square_meter = 300010049, /// nanogram per microliter: A mass unit density which is equal to mass of an object in nanograms divided by the volume in microliters. UO_nanogram_per_microliter = 300010050, /// large calorie: A unit of energy widely used in nutrition, equivalent to the amount of heat needed to cause one kilogram of water to rise in temperature by one degree Celsius. UO_large_calorie = 300010051, /// pounds per square inch: A pressure unit which is equal to 6894.757 pascal. UO_pounds_per_square_inch = 300010052, /// micrograms per wheaton bottle: A unit of mass concentration defined as the number of micrograms of a substance per 250 ml Wheaton bottle. UO_micrograms_per_wheaton_bottle = 300010053, /// picoampere: An electric current unit current which is equal to one trillionth of an ampere or 10^[-12] A. UO_picoampere = 300010054, /// centigray: An absorbed dose unit which is equal to 0.01 gray (Gy) UO_centigray = 300010055, /// gigaelectronvolt: A unit of energy that is equal to one thousand million electronvolts. UO_gigaelectronvolt = 300010056, /// gigaelectronvolt per nucleon: Derived unit which is equal to the total kinetic energy of an atomic nucleus in GeV divided by the number of nucleons in the nucleus UO_gigaelectronvolt_per_nucleon = 300010057, /// megaelectronvolt per nucleon: Derived unit which is equal to the total kinetic energy of an atomic nucleus in MeV divided by the number of nucleons in the nucleus UO_megaelectronvolt_per_nucleon = 300010058, /// kiloelectronvolt per micron: A derived unit equal to the energy deposited by ionizing radiation per micron of path length in matter UO_kiloelectronvolt_per_micron = 300010059, /// gray per minute: A derived absorbed dose unit which is equal to one gray absorbed per minute. UO_gray_per_minute = 300010060, /// centigray per minute: A derived absorbed dose unit which is equal to one centigray absorbed per minute. UO_centigray_per_minute = 300010061, /// milligray per minute: A derived absorbed dose unit which is equal to one milligray absorbed per minute. UO_milligray_per_minute = 300010062, /// milligray per day: A derived absorbed dose unit which is equal to one milligray absorbed per day. UO_milligray_per_day = 300010063 }; // enum CVID /// Information about an ontology or CV source and a short 'lookup' tag to refer to. struct PWIZ_API_DECL CV { /// the short label to be used as a reference tag with which to refer to this particular Controlled Vocabulary source description (e.g., from the cvLabel attribute, in CVParamType elements). std::string id; /// the URI for the resource. std::string URI; /// the usual name for the resource (e.g. The PSI-MS Controlled Vocabulary). std::string fullName; /// the version of the CV from which the referred-to terms are drawn. std::string version; /// returns true iff id, URI, fullName, and version are all pairwise equal bool operator==(const CV& that) const; /// returns ture iff id, URI, fullName, and version are all empty bool empty() const; }; /// returns a CV object for the specified namespace (prefix); /// currently supported namespaces are: MS UO PWIZ_API_DECL const CV& cv(const std::string& prefix); /// structure for holding CV term info struct PWIZ_API_DECL CVTermInfo { CVID cvid; std::string id; std::string name; std::string def; bool isObsolete; typedef std::vector id_list; id_list parentsIsA; id_list parentsPartOf; std::multimap otherRelations; std::vector exactSynonyms; std::multimap propertyValues; CVTermInfo() : cvid((CVID)-1) {} const std::string& shortName() const; std::string prefix() const; }; /// returns CV term info for the specified CVID PWIZ_API_DECL const CVTermInfo& cvTermInfo(CVID cvid); /// returns CV term info for the specified id (accession number) PWIZ_API_DECL const CVTermInfo& cvTermInfo(const char* id); PWIZ_API_DECL const CVTermInfo& cvTermInfo(const std::string& id); /// returns true iff child IsA parent in the CV PWIZ_API_DECL bool cvIsA(CVID child, CVID parent); /// returns vector of all valid CVIDs PWIZ_API_DECL const std::vector& cvids(); } // namespace cv } // namespace pwiz #endif // _CV_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/cv.inl000066400000000000000000000106371444255175000211700ustar00rootroot00000000000000// // $Id: cv.inl 3333 2012-04-09 20:41:05Z bpratt $ // // // Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // NOTE: // This is a code fragment - it's meant to be #included in the // cvgen-created cv.cpp file. It won't compile by itself. // // The idea is to simplify the maintenance of non-generated cv access code // by placing it in its own file. This file's contents were formerly // written to cv.cpp by cvgen, which made maintenance somewhat confusing // and awkward. // PWIZ_API_DECL bool CV::operator==(const CV& that) const { return id == that.id && fullName == that.fullName && URI == that.URI && version == that.version; } PWIZ_API_DECL bool CV::empty() const { return id.empty() && fullName.empty() && URI.empty() && version.empty(); } PWIZ_API_DECL const CV& cv(const string& prefix) { const map& cvMap = CVTermData::instance->cvMap(); if (cvMap.find(prefix) == cvMap.end()) throw invalid_argument("[cv()] no CV associated with prefix \"" + prefix + "\""); return cvMap.find(prefix)->second; } PWIZ_API_DECL const string& CVTermInfo::shortName() const { const string* result = &name; for (vector::const_iterator it=exactSynonyms.begin(); it!=exactSynonyms.end(); ++it) if (result->size() > it->size()) result = &*it; return *result; } PWIZ_API_DECL string CVTermInfo::prefix() const { return id.substr(0, id.find_first_of(":")); } PWIZ_API_DECL const CVTermInfo& cvTermInfo(CVID cvid) { const map& infoMap = CVTermData::instance->infoMap(); map::const_iterator itr = infoMap.find(cvid); if (itr == infoMap.end()) throw invalid_argument("[cvTermInfo()] no term associated with CVID \"" + lexical_cast(cvid) + "\""); return itr->second; } inline unsigned int stringToCVID(const std::string& str) { errno = 0; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; unsigned int value = (unsigned int) strtoul (stringToConvert, const_cast(&endOfConversion), 10); if (( value == 0u && stringToConvert == endOfConversion) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast(); return value; } PWIZ_API_DECL const CVTermInfo& cvTermInfo(const std::string& id) { return cvTermInfo(id.c_str()); } PWIZ_API_DECL const CVTermInfo& cvTermInfo(const char* id) { if (id) for (int o=0;o& infoMap = CVTermData::instance->infoMap(); map::const_iterator find = infoMap.find(cvid); if (find == infoMap.end()) { throw out_of_range("Invalid cvParam accession \"" + lexical_cast(cvid) + "\""); } return find->second; } } return CVTermData::instance->infoMap().find(CVID_Unknown)->second; } PWIZ_API_DECL bool cvIsA(CVID child, CVID parent) { if (child == parent) return true; const CVTermInfo& info = cvTermInfo(child); for (CVTermInfo::id_list::const_iterator it=info.parentsIsA.begin(); it!=info.parentsIsA.end(); ++it) if (cvIsA(*it,parent)) return true; return false; } PWIZ_API_DECL const vector& cvids() { return CVTermData::instance->cvids(); } libpwizlite-3.0.5/src/pwiz/data/common/diff_std.cpp000066400000000000000000000173351444255175000223440ustar00rootroot00000000000000// // $Id: diff_std.hpp 1656 2009-12-30 20:54:17Z chambm $ // // // Original author: Robert Burke // // Copyright 2009 Spielberg Family Center for Applied Proteomics // University of Southern California, Los Angeles, California 90033 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "diff_std.hpp" #include "pwiz/utility/misc/String.hpp" namespace pwiz { namespace data { namespace diff_impl { PWIZ_API_DECL void diff(const std::string& a, const std::string& b, std::string& a_b, std::string& b_a, const BaseDiffConfig& config) { diff_string(a, b, a_b, b_a); } // special string matching for ids, which // tend to have versions embedded at the end PWIZ_API_DECL void diff_ids(const std::string& a, const std::string& b, std::string& a_b, std::string& b_a, const BaseDiffConfig& config) { if (config.ignoreVersions && (a != b)) { // look for x.x.x at the of each string int aa,bb; int ndotsa=0; int ndotsb=0; for (aa=a.length();aa--;) { if (a[aa]=='.') ndotsa++; else if (!isdigit(a[aa])) break; } for (bb=b.length();bb--;) { if (b[bb]=='.') ndotsb++; else if (!isdigit(b[bb])) break; } if ((2==ndotsa) && (2==ndotsb) && (bb > 0) && (aa > 0) && (a.substr(0,aa) == b.substr(0,bb))) return; } diff_string(a, b, a_b, b_a); } PWIZ_API_DECL void diff(const boost::logic::tribool& a, const boost::logic::tribool& b, boost::logic::tribool& a_b, boost::logic::tribool& b_a, const BaseDiffConfig& config) { if (a != b) { a_b = a; b_a = b; } else { a_b = boost::logic::indeterminate; b_a = boost::logic::indeterminate; } } PWIZ_API_DECL void diff(const CV& a, const CV& b, CV& a_b, CV& b_a, const BaseDiffConfig& config) { diff_string(a.URI, b.URI, a_b.URI, b_a.URI); diff_string(a.id, b.id, a_b.id, b_a.id); diff_string(a.fullName, b.fullName, a_b.fullName, b_a.fullName); if (!config.ignoreVersions) diff_string(a.version, b.version, a_b.version, b_a.version); } PWIZ_API_DECL void diff(CVID a, CVID b, CVID& a_b, CVID& b_a, const BaseDiffConfig& config) { if (a!=b) { a_b = a; b_a = b; } else { a_b = b_a = CVID_Unknown; } } PWIZ_API_DECL void diff(const CVParam& a, const CVParam& b, CVParam& a_b, CVParam& b_a, const BaseDiffConfig& config) { diff(a.cvid, b.cvid, a_b.cvid, b_a.cvid, config); // start with a cheap string compare if (a.value==b.value) { a_b.value.clear(); b_a.value.clear(); } else { bool asString = false; // lexical_cast is happy to read "1.1" as "1" - and "1.9" the same way if ((std::string::npos == a.value.find_first_of(".eE")) && (std::string::npos == b.value.find_first_of(".eE"))) // any float-like chars? { bool successA, successB; // compare as ints if possible int ia = lexical_cast(a.value, successA); int ib = lexical_cast(b.value, successB); if (!successA || !successB) asString = true; else { if (ia != ib) { a_b.value = lexical_cast(ia); b_a.value = lexical_cast(ib); } else // watch for something like "1a" vs "1b" { if ((std::string::npos == a.value.find_first_not_of("0123456789")) && (std::string::npos == b.value.find_first_not_of("0123456789"))) { a_b.value.clear(); b_a.value.clear(); } else { asString = true; } } } } else { // use precision to compare floating point values bool successA, successB; double aValue = lexical_cast(a.value, successA); double bValue = lexical_cast(b.value, successB); if (!successA || !successB) asString = true; else { double a_bValue, b_aValue; diff_floating(aValue, bValue, a_bValue, b_aValue, config); if (a_bValue || b_aValue) { a_b.value = lexical_cast(a_bValue); b_a.value = lexical_cast(b_aValue); } else { a_b.value.clear(); b_a.value.clear(); } } } if (asString) { diff_string(a.value, b.value, a_b.value, b_a.value); } } diff(a.units, b.units, a_b.units, b_a.units, config); // provide names for context if (!a_b.empty() && a_b.cvid==CVID_Unknown) a_b.cvid = a.cvid; if (!b_a.empty() && b_a.cvid==CVID_Unknown) b_a.cvid = b.cvid; } PWIZ_API_DECL void diff(const UserParam& a, const UserParam& b, UserParam& a_b, UserParam& b_a, const BaseDiffConfig& config) { diff_string(a.name, b.name, a_b.name, b_a.name); diff_string(a.value, b.value, a_b.value, b_a.value); diff_string(a.type, b.type, a_b.type, b_a.type); diff(a.units, b.units, a_b.units, b_a.units, config); // provide names for context if (!a_b.empty() && a_b.name.empty()) a_b.name = a.name; if (!b_a.empty() && b_a.name.empty()) b_a.name = b.name; } PWIZ_API_DECL void diff(const ParamContainer& a, const ParamContainer& b, ParamContainer& a_b, ParamContainer& b_a, const BaseDiffConfig& config) { vector_diff_deep(a.paramGroupPtrs, b.paramGroupPtrs, a_b.paramGroupPtrs, b_a.paramGroupPtrs, config); vector_diff_diff(a.cvParams, b.cvParams, a_b.cvParams, b_a.cvParams, config); vector_diff_diff(a.userParams, b.userParams, a_b.userParams, b_a.userParams, config); } PWIZ_API_DECL void diff(const ParamGroup& a, const ParamGroup& b, ParamGroup& a_b, ParamGroup& b_a, const BaseDiffConfig& config) { diff(static_cast(a), b, a_b, b_a, config); diff_ids(a.id, b.id, a_b.id, b_a.id, config); // provide id for context if (!a_b.empty() || !b_a.empty()) { a_b.id = a.id; b_a.id = b.id; } } } // namespace diff_impl } // namespace data } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/common/diff_std.hpp000066400000000000000000000304471444255175000223500ustar00rootroot00000000000000// // $Id$ // // // Original author: Robert Burke // // Copyright 2009 Spielberg Family Center for Applied Proteomics // University of Southern California, Los Angeles, California 90033 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _DIFF_STD_HPP_ #define _DIFF_STD_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include #include #include "ParamTypes.hpp" #include namespace pwiz { namespace data { struct BaseDiffConfig { BaseDiffConfig(double _precision = 1e-6) : precision(_precision), partialDiffOK(false), ignoreVersions(false) {} double precision; bool partialDiffOK; // if true, can stop checking at first difference found bool ignoreVersions; // if true, don't sweat version number mismatches }; namespace diff_impl { PWIZ_API_DECL void diff(const std::string& a, const std::string& b, std::string& a_b, std::string& b_a, const BaseDiffConfig& config); // special handling for strings which are likely // to differ only by a trailing version number PWIZ_API_DECL void diff_ids(const std::string& a, const std::string& b, std::string& a_b, std::string& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const boost::logic::tribool& a, const boost::logic::tribool& b, boost::logic::tribool& a_b, boost::logic::tribool& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const CV& a, const CV& b, CV& a_b, CV& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(CVID a, CVID b, CVID& a_b, CVID& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const CVParam& a, const CVParam& b, CVParam& a_b, CVParam& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const UserParam& a, const UserParam& b, UserParam& a_b, UserParam& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const ParamContainer& a, const ParamContainer& b, ParamContainer& a_b, ParamContainer& b_a, const BaseDiffConfig& config); PWIZ_API_DECL void diff(const ParamGroup& a, const ParamGroup& b, ParamGroup& a_b, ParamGroup& b_a, const BaseDiffConfig& config); } // namespace diff_impl /// /// Calculate diffs of objects in a ProteoWizard data model hierarchy. /// /// A diff between two objects a and b calculates the set differences /// a\b and b\a. /// /// The Diff struct acts as a functor, but also stores the /// results of the diff calculation. /// /// The bool conversion operator is provided to indicate whether /// the two objects are different (either a\b or b\a is non-empty). /// /// object_type requirements: /// object_type a; /// a.empty(); /// pwiz::data::diff::diff(const object_type& a, const object_type& b, object_result_type& a_b, object_result_type& b_a); /// /// config_type must be pwiz::data::diff::BaseDiffConfig or derived from it /// template struct Diff { Diff(const config_type& config = config_type()) : config_(config) {} Diff(const object_type& a, const object_type& b, const config_type& config = config_type()) : config_(config) { diff_impl::diff(a, b, a_b, b_a, config_); } object_result_type a_b; object_result_type b_a; /// conversion to bool, with same semantics as *nix diff command: /// true == different /// false == not different operator bool() {return !(a_b.empty() && b_a.empty());} Diff& operator()(const object_type& a, const object_type& b) { diff_impl::diff(a, b, a_b, b_a, config_); return *this; } private: config_type config_; }; template std::string diff_string(const diff_type& diff) { std::ostringstream os; textwriter_type write(os, 1); if (!diff.a_b.empty()) { os << "+\n"; write(diff.a_b); } if (!diff.b_a.empty()) { os << "-\n"; write(diff.b_a); } return os.str(); } /// stream insertion of Diff results template std::ostream& operator<<(std::ostream& os, const Diff& diff) { textwriter_type write(os, 1); if (!diff.a_b.empty()) { os << "+\n"; write(diff.a_b); } if (!diff.b_a.empty()) { os << "-\n"; write(diff.b_a); } return os; } namespace diff_impl { template void diff_string(const string_type& a, const string_type& b, string_type& a_b, string_type& b_a) { a_b.clear(); b_a.clear(); if (a != b) { a_b = a; b_a = b; } } template void diff_char(const char_type& a, const char_type& b, char_type& a_b, char_type& b_a) { a_b = 0; b_a = 0; if (a != b) { a_b = a; b_a = b; } } template void diff_integral(const integral_type& a, const integral_type& b, integral_type& a_b, integral_type& b_a, const BaseDiffConfig& config) { a_b = integral_type(); b_a = integral_type(); if (a != b) { a_b = static_cast(a); b_a = static_cast(b); } } template void diff_floating(const floating_type& a, const floating_type& b, floating_type& a_b, floating_type& b_a, const BaseDiffConfig& config) { a_b = 0; b_a = 0; if (fabs(a - b) > config.precision + std::numeric_limits::epsilon()) { a_b = fabs(a - b); b_a = fabs(a - b); } } /// measure maximum relative difference between elements in the vectors template floating_type maxdiff(const std::vector& a, const std::vector& b) { if (a.size() != b.size()) throw std::runtime_error("[Diff::maxdiff()] Sizes differ."); typename std::vector::const_iterator i = a.begin(); typename std::vector::const_iterator j = b.begin(); floating_type max = 0; for (; i!=a.end(); ++i, ++j) { floating_type denominator = std::min(*i, *j); if (denominator == 0) denominator = 1; floating_type current = fabs(*i - *j)/denominator; if (max < current) max = current; } return max; } template void vector_diff(const std::vector& a, const std::vector& b, std::vector& a_b, std::vector& b_a) { // calculate set differences of two vectors a_b.clear(); b_a.clear(); for (typename std::vector::const_iterator it=a.begin(); it!=a.end(); ++it) if (std::find(b.begin(), b.end(), *it) == b.end()) a_b.push_back(*it); for (typename std::vector::const_iterator it=b.begin(); it!=b.end(); ++it) if (std::find(a.begin(), a.end(), *it) == a.end()) b_a.push_back(*it); } template struct HasID { const std::string& id_; HasID(const std::string& id) : id_(id) {} bool operator()(const boost::shared_ptr& objectPtr) {return objectPtr->id == id_;} }; template class Same { public: Same(const object_type& object, const config_type& config) : mine_(object), config_(config) {} bool operator()(const object_type& yours) { // true iff yours is the same as mine return !Diff(mine_, yours, config_); } private: const object_type& mine_; const config_type& config_; }; template void vector_diff_diff(const std::vector& a, const std::vector& b, std::vector& a_b, std::vector& b_a, const config_type& config) { // calculate set differences of two vectors, using diff on each object a_b.clear(); b_a.clear(); for (typename std::vector::const_iterator it=a.begin(); it!=a.end(); ++it) if (std::find_if(b.begin(), b.end(), Same(*it, config)) == b.end()) a_b.push_back(*it); for (typename std::vector::const_iterator it=b.begin(); it!=b.end(); ++it) if (std::find_if(a.begin(), a.end(), Same(*it, config)) == a.end()) b_a.push_back(*it); } template class SameDeep { public: SameDeep(const object_type& object, const config_type& config) : mine_(object), config_(config) {} bool operator()(const boost::shared_ptr& yours) { // true iff yours is the same as mine return !Diff(mine_, *yours, config_); } private: const object_type& mine_; const config_type& config_; }; template void vector_diff_deep(const std::vector< boost::shared_ptr >& a, const std::vector< boost::shared_ptr >& b, std::vector< boost::shared_ptr >& a_b, std::vector< boost::shared_ptr >& b_a, const config_type& config) { // calculate set differences of two vectors of ObjectPtrs (deep compare using diff) a_b.clear(); b_a.clear(); config_type quick_config(config); quick_config.partialDiffOK = true; // for fastest check in SameDeep for (typename std::vector< boost::shared_ptr >::const_iterator it=a.begin(); it!=a.end(); ++it) if (std::find_if(b.begin(), b.end(), SameDeep(**it, quick_config)) == b.end()) a_b.push_back(*it); for (typename std::vector< boost::shared_ptr >::const_iterator it=b.begin(); it!=b.end(); ++it) if (std::find_if(a.begin(), a.end(), SameDeep(**it, quick_config)) == a.end()) b_a.push_back(*it); } template void ptr_diff(const boost::shared_ptr& a, const boost::shared_ptr& b, boost::shared_ptr& a_b, boost::shared_ptr& b_a, const config_type& config) { if (!a.get() && !b.get()) return; boost::shared_ptr a_temp = a.get() ? a : boost::shared_ptr(new object_type); boost::shared_ptr b_temp = b.get() ? b : boost::shared_ptr(new object_type); if (!a_b.get()) a_b = boost::shared_ptr(new object_type); if (!b_a.get()) b_a = boost::shared_ptr(new object_type); diff(*a_temp, *b_temp, *a_b, *b_a, config); if (a_b->empty()) a_b = boost::shared_ptr(); if (b_a->empty()) b_a = boost::shared_ptr(); } } // namespace diff_impl } // namespace data } // namespace pwiz #endif // _DIFF_STD_HPP_ libpwizlite-3.0.5/src/pwiz/data/common/obo.hpp000066400000000000000000000044771444255175000213510ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _OBO_HPP_ #define _OBO_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include #include namespace pwiz { namespace data { /// a single controlled vocabulary term struct PWIZ_API_DECL Term { typedef unsigned int id_type; typedef std::vector id_list; typedef std::multimap > relation_map; const static id_type MAX_ID; std::string prefix; id_type id; std::string name; std::string def; id_list parentsIsA; id_list parentsPartOf; relation_map relations; // other than is_a and part_of std::multimap propertyValues; std::vector exactSynonyms; bool isObsolete; Term(id_type id = MAX_ID) : id(id), isObsolete(false) {} bool operator< (const Term& rhs) const {return id < rhs.id;} }; /// /// Represents a selectively parsed OBO file. /// /// Note that the following are currently ignored during parsing: /// - comments /// - dbxrefs /// - synonym tags other than exact_synonym /// - non-Term stanzas /// struct PWIZ_API_DECL OBO { std::string filename; std::vector header; std::set prefixes; // e.g. "MS", "UO" std::set terms; OBO(){} OBO(const std::string& filename); }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Term& term); PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const OBO& obo); } // namespace data } // namespace pwiz #endif // _OBO_HPP_ libpwizlite-3.0.5/src/pwiz/data/misc/000077500000000000000000000000001444255175000175105ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/data/misc/CalibrationParameters.hpp000066400000000000000000000064011444255175000244750ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CALIBRATIONPARAMETERS_HPP_ #define _CALIBRATIONPARAMETERS_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include namespace pwiz { namespace data { const double thermoA_FT_ = 1.075e8; const double thermoB_FT_ = -3.455e8; const double thermoA_Orbitrap_ = 4.753e10; const double thermoB_Orbitrap_ = 0; #pragma pack(1) struct CalibrationParameters { double A; double B; enum InstrumentModel {FT, Orbitrap}; InstrumentModel instrumentModel; CalibrationParameters(double a=0, double b=0, InstrumentModel im=FT); double mz(double frequency) const; double frequency(double mz) const; bool operator==(const CalibrationParameters& that) const; bool operator!=(const CalibrationParameters& that) const; static CalibrationParameters thermo_FT(); static CalibrationParameters thermo_Orbitrap(); }; #pragma pack() inline std::ostream& operator<<(std::ostream& os, const CalibrationParameters& p) { os << "(" << p.A << "," << p.B << ")"; return os; } inline CalibrationParameters::CalibrationParameters(double a, double b, InstrumentModel im) : A(a), B(b), instrumentModel(im) {} inline double CalibrationParameters::mz(double frequency) const { if (frequency == 0) throw std::runtime_error("[CalibrationParameters::mz()] Division by zero.\n"); return (instrumentModel==Orbitrap) ? A/(frequency*frequency) : A/frequency + B/(frequency*frequency); } inline double CalibrationParameters::frequency(double mz) const { if (mz == 0) throw std::runtime_error("[CalibrationParameters::frequency()] Division by zero.\n"); return (instrumentModel==Orbitrap) ? sqrt(A/mz) : (A+sqrt(A*A + 4*B*mz))/(2*mz); } inline bool CalibrationParameters::operator==(const CalibrationParameters& that) const { return A==that.A && B==that.B && instrumentModel==that.instrumentModel; } inline bool CalibrationParameters::operator!=(const CalibrationParameters& that) const { return !operator==(that); } inline CalibrationParameters CalibrationParameters::thermo_FT() { return CalibrationParameters(thermoA_FT_, thermoB_FT_, FT); } inline CalibrationParameters CalibrationParameters::thermo_Orbitrap() { return CalibrationParameters(thermoA_Orbitrap_, thermoB_Orbitrap_, Orbitrap); } } // namespace data } // namespace pwiz #endif // _CALIBRATIONPARAMETERS_HPP_ libpwizlite-3.0.5/src/pwiz/data/misc/FrequencyData.hpp000066400000000000000000000120501444255175000227520ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _FREQUENCYDATA_HPP_ #define _FREQUENCYDATA_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "SampleDatum.hpp" #include "CalibrationParameters.hpp" #include #include #include namespace pwiz { namespace data { typedef SampleDatum< double, std::complex > FrequencyDatum; /// Class for binary storage of complex frequency data. /// Stores raw frequency-domain data, as well as meta-data. Also includes /// basic access and analysis functions. class PWIZ_API_DECL FrequencyData { public: /// \name types //@{ enum PWIZ_API_DECL IOMode {Binary, Text, Automatic}; typedef std::vector container; typedef container::iterator iterator; typedef container::const_iterator const_iterator; //@} /// \name instantiation //@{ FrequencyData(); FrequencyData(const std::string& filename, IOMode mode=Automatic); FrequencyData(const FrequencyData& that, const_iterator begin, const_iterator end); FrequencyData(const FrequencyData& that, const_iterator center, int radius); ~FrequencyData(); //@} /// \name I/O //@{ void read(const std::string& filename, IOMode mode=Automatic); void read(std::istream& is, IOMode mode=Binary); void write(const std::string& filename, IOMode mode=Binary) const; void write(std::ostream& os, IOMode mode=Binary) const; //@} /// \name data access //@{ /// const access to underlying data const container& data() const; /// non-const access to underlying data -- must call analyze() to recache after any changes container& data(); //@} /// \name metadata //@{ int scanNumber() const; void scanNumber(int value); double retentionTime() const; void retentionTime(double value); const CalibrationParameters& calibrationParameters() const; void calibrationParameters(const CalibrationParameters& cp); double observationDuration() const; void observationDuration(double value); double noiseFloor() const; void noiseFloor(double value); //@} /// \name data transformation //@{ /// transform all underlying data: (x,y) -> (x+shift,y*scale) void transform(double shift, std::complex scale); /// return current shift of data (compared to original) double shift() const; /// return current scale of data (compared to original) std::complex scale() const; /// normalize by transform( -max.x, 1/abs(max.y) ) void normalize(); /// addition void operator+=(const FrequencyData& that); //@} /// \name analysis //@{ /// recache statistics calculations after any direct data changes via non-const data() void analyze(); /// returns an iterator to FrequencyDatum with highest magnitude const_iterator max() const; double mean() const; double meanSquare() const; double sumSquares() const; double variance() const; /// special calculation of noise floor for data with zero holes, /// e.g. data obtained from RAW file m/z-intensity pairs double cutoffNoiseFloor() const; /// calculation of the observation duration from the data double observationDurationEstimatedFromData() const; //@} /// \name auxilliary //@{ /// Finds the FrequencyDatum nearest the desired frequency. const_iterator findNearest(double frequency) const; //@} /// \name auxilliary functions //@{ /// Returns a pair. static std::pair magnitudeSample(const FrequencyDatum& datum); //@} private: struct Impl; std::auto_ptr impl_; /// Hidden to prevent unintended copying of large amounts of data. FrequencyData(FrequencyData& that); /// Hidden to prevent unintended copying of large amounts of data. FrequencyData& operator=(FrequencyData& that); }; } // namespace data } // namespace pwiz #endif // _FREQUENCYDATA_HPP_ libpwizlite-3.0.5/src/pwiz/data/misc/FrequencyDataTestData.hpp000066400000000000000000000021511444255175000244050ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _FREQUENCYDATATESTDATA_HPP_ #define _FREQUENCYDATATESTDATA_HPP_ struct RawMassDatum { double mz; double intensity; }; extern RawMassDatum sampleMassData_[]; extern const unsigned int sampleMassDataSize_; extern const char* sampleFrequencyData_; #endif // _FREQUENCYDATATESTDATA_HPP_ libpwizlite-3.0.5/src/pwiz/data/misc/MinimumPepXML.hpp000066400000000000000000000424601444255175000226700ustar00rootroot00000000000000// // $Id$ // // // Original author: Kate Hoff // // Copyright 2009 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MINIMUMPEPXML_HPP_ #define _MINIMUMPEPXML_HPP_ #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/data/misc/PeakData.hpp" #include "boost/shared_ptr.hpp" #include "boost/logic/tribool_io.hpp" #include #include using namespace pwiz::minimxml; using namespace pwiz::data::peakdata; namespace pwiz{ namespace data{ namespace pepxml{ void setLogStream(std::ostream& os); struct PWIZ_API_DECL Specificity { Specificity() : minSpace(1) {} /// One or more 1-letter residue codes. Enzyme cleaves on the /// sense side of the residue(s) listed in cut unless one of the /// residues listed in no_cut is adjacent to the potential /// cleavage site. std::string cut; /// Zero or more 1-letter residue codes. Enzyme cleaves on the /// sense side of the residue(s) listed in cut unless one of the /// residues listed in no_cut is adjacent to the potential /// cleavage site. std::string noCut; /// Defines whether cleavage occurs on the C-terminal or /// N-terminal side of the residue(s) listed in cut (values "C" or /// "N") std::string sense; /// minimum separation between adjacent cleavages. default 1. size_t minSpace; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const Specificity& that) const; bool operator!=(const Specificity& that) const; }; struct PWIZ_API_DECL SampleEnzyme { SampleEnzyme() : independent(boost::indeterminate) {} /// Controlled code name for the enzyme that can be referred to by /// applications. std::string name; /// Free text to describe alternative names, special conditions, /// etc. std::string description; /// Semispecific means that at least one end of a pepide must /// conform to the cleavage specificity, (unless the peptide was /// at the terminus of the parent sequence). Nonspecific means /// that neither end of a peptide must conform to the cleavage /// specificity. std::string fidelity; /// If there are multiple specificities and independent is true, /// then a single peptide cannot exhibit one specificity at one /// terminus and a different specificity at the other. If /// independent is false, then a single peptide can exhibit mixed /// specificities. boost::tribool independent; Specificity specificity; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SampleEnzyme& that) const; bool operator!=(const SampleEnzyme& that) const; }; struct PWIZ_API_DECL SearchDatabase { SearchDatabase(){} std::string localPath; std::string databaseName; std::string databaseReleaseIdentifier; size_t sizeInDbEntries; size_t sizeOfResidues; std::string type; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SearchDatabase& that) const; bool operator!=(const SearchDatabase& that) const; }; struct PWIZ_API_DECL Q3RatioResult { Q3RatioResult() : lightFirstScan(0), lightLastScan(0), lightMass(0), heavyFirstScan(0), heavyLastScan(0), heavyMass(0), lightArea(0), heavyArea(0), q2LightArea(0), q2HeavyArea(0), decimalRatio(0) {} int lightFirstScan; int lightLastScan; double lightMass; int heavyFirstScan; int heavyLastScan; double heavyMass; double lightArea; double heavyArea; double q2LightArea; double q2HeavyArea; double decimalRatio; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const Q3RatioResult& that) const; bool operator!=(const Q3RatioResult& that) const; }; struct PWIZ_API_DECL RocDataPoint { double min_prob; double sensitivity; double error; long num_corr; long num_incorr; }; struct PWIZ_API_DECL ErrorPoint { double error; double min_prob; long num_corr; long num_incorr; }; struct PWIZ_API_DECL DistributionPoint { double fvalue; long obs_1_distr; double model_1_pos_distr; double model_1_neg_distr; long obs_2_distr; double model_2_pos_distr; double model_2_neg_distr; long obs_3_distr; double model_3_pos_distr; double model_3_neg_distr; }; struct PWIZ_API_DECL MixtureModel { long precursor_ion_charge; std::string comments; double prior_probability; double est_tot_correct; long tot_num_spectra; long num_iterations; // TODO Child tags go here... Don't forget to add the struct for // them too }; struct PWIZ_API_DECL PeptideProphetSummary { std::string version; std::string author; double min_prob; std::string options; double est_tot_num_correct; std::vector inputFile; std::vector roc_data_point; std::vector error_point; std::vector distribution_point; std::vector mixture_model; }; struct PWIZ_API_DECL PeptideProphetResult { PeptideProphetResult() : probability(0) {} double probability; std::vector allNttProb; std::string analysis; // TODO add search_score_summary and its parameter (2+ occurances) void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const PeptideProphetResult& that) const; bool operator!=(const PeptideProphetResult& that) const; }; struct PWIZ_API_DECL AnalysisResult { AnalysisResult() : analysis("peptideprophet_result") {} std::string analysis; PeptideProphetResult peptideProphetResult; Q3RatioResult q3RatioResult; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const AnalysisResult& that) const; bool operator!=(const AnalysisResult& that) const; }; struct PWIZ_API_DECL AlternativeProtein { AlternativeProtein(){} std::string protein; std::string proteinDescr; std::string numTolTerm; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const AlternativeProtein& that) const; bool operator!=(const AlternativeProtein& that) const; }; struct PWIZ_API_DECL ModAminoAcidMass { ModAminoAcidMass() : position(0), mass(0) {} int position; double mass; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const ModAminoAcidMass& that) const; bool operator!=(const ModAminoAcidMass& that) const; }; struct PWIZ_API_DECL ModificationInfo { ModificationInfo(){} std::string modifiedPeptide; ModAminoAcidMass modAminoAcidMass; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const ModificationInfo& that) const; bool operator!=(const ModificationInfo& that) const; }; struct PWIZ_API_DECL Parameter { Parameter(const std::string& name = "", const std::string& value = "") : name(name), value(value) {} std::string name; std::string value; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const Parameter& that) const; bool operator!=(const Parameter& that) const; }; typedef boost::shared_ptr ParameterPtr; struct PWIZ_API_DECL SearchScore : Parameter { SearchScore(const std::string& name = "", const std::string& value = "") : Parameter(name, value) {} void write(XMLWriter& writer) const; void read(std::istream& is); }; typedef boost::shared_ptr SearchScorePtr; struct PWIZ_API_DECL SearchHit { SearchHit() : hitRank(0),numTotalProteins(0), numMatchedIons(0), totalNumIons(0), calcNeutralPepMass(0), massDiff(0), numTolTerm(0), numMissedCleavages(0), isRejected(0) {} int hitRank; std::string peptide; std::string peptidePrevAA; std::string peptideNextAA; std::string protein; std::string proteinDescr; int numTotalProteins; int numMatchedIons; int totalNumIons; double calcNeutralPepMass; double massDiff; int numTolTerm; int numMissedCleavages; int isRejected; // bool? AnalysisResult analysisResult; std::vector alternativeProteins; ModificationInfo modificationInfo; std::vector searchScore; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SearchHit& that) const; bool operator!=(const SearchHit& that) const; }; typedef boost::shared_ptr SearchHitPtr; PWIZ_API_DECL bool operator==(const SearchHitPtr left, const SearchHitPtr right); struct PWIZ_API_DECL SearchResult { SearchResult(size_t searchId = 0) :searchId(searchId){} /// Unique identifier to search summary size_t searchId; std::vector searchHit; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SearchResult& that) const; bool operator!=(const SearchResult& that) const; }; typedef boost::shared_ptr SearchResultPtr; PWIZ_API_DECL bool operator==(SearchResultPtr left, SearchResultPtr right); struct PWIZ_API_DECL EnzymaticSearchConstraint { EnzymaticSearchConstraint() : maxNumInternalCleavages(0), minNumTermini(0){} std::string enzyme; int maxNumInternalCleavages; int minNumTermini; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const EnzymaticSearchConstraint& that) const; bool operator!=(const EnzymaticSearchConstraint& that) const; }; struct PWIZ_API_DECL AminoAcidModification { AminoAcidModification() : massDiff(0), mass(0) {} std::string aminoAcid; double massDiff; double mass; std::string variable; std::string peptideTerminus; std::string binary; std::string description; std::string symbol; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const AminoAcidModification& that) const; bool operator!=(const AminoAcidModification& that) const; }; /// Database search settings struct PWIZ_API_DECL SearchSummary { SearchSummary(){} /// Full path location of mzXML file for this search run (without /// the .mzXML extension) std::string baseName; /// SEQUEST, Mascot, COMET, etc std::string searchEngine; /// average or monoisotopic std::string precursorMassType; /// average or monoisotopic std::string fragmentMassType; /// Format of file storing the runner up peptides (if not present /// in pepXML) std::string searchID; /// runner up search hit data type extension (e.g. .tgz) SearchDatabase searchDatabase; /// matches id in search hit size_t search_id; EnzymaticSearchConstraint enzymaticSearchConstraint; std::vector aminoAcidModifications; std::vector parameters; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SearchSummary& that) const; bool operator!=(const SearchSummary& that) const; }; typedef boost::shared_ptr SearchSummaryPtr; PWIZ_API_DECL bool operator==(const SearchSummaryPtr left, const SearchSummaryPtr right); /// Reference for analysis applied to current run (time corresponds /// with analysis_summary/@time, id corresponds with /// analysis_result/@id) struct PWIZ_API_DECL AnalysisTimestamp { /// Date of analysis std::string time; /// Analysis name std::string analsysis; /// Unique identifier for each type of analysis size_t id; // Evil ##any data goes here }; struct PWIZ_API_DECL SpectrumQuery { SpectrumQuery() : startScan(0), endScan(0), precursorNeutralMass(0), assumedCharge(0), index(0), retentionTimeSec(0) {} std::string spectrum; /// first scan number integrated into MS/MS spectrum int startScan; /// last scan number integrated into MS/MS spectrum int endScan; double precursorNeutralMass; /// Precursor ion charge used for search int assumedCharge; /// Search constraint applied specifically to this query int index; /// Unique identifier double retentionTimeSec; std::vector searchResult; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const SpectrumQuery& that) const; bool operator!=(const SpectrumQuery& that) const; }; typedef boost::shared_ptr SpectrumQueryPtr; PWIZ_API_DECL bool operator==(const SpectrumQueryPtr left, const SpectrumQueryPtr right); struct PWIZ_API_DECL MSMSRunSummary { MSMSRunSummary(){} std::string base_name; std::string raw_data_type; std::string raw_data; std::string msManufacturer; std::string msModel; std::string msIonization; std::string msMassAnalyzer; std::string msDetector; SampleEnzyme sampleEnzyme; std::vector searchSummary; std::vector spectrumQueries; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const MSMSRunSummary& that) const; bool operator!=(const MSMSRunSummary& that) const; }; struct PWIZ_API_DECL AnalysisSummary { /// Time analysis complete (unique id) std::string time; /// Name of analysis program std::string analysis; /// Release std::string version; // All the unknown stuff goes here // TODO deal with the results of // std::vector peptideprophet_summary; }; typedef boost::shared_ptr AnalysisSummaryPtr; struct PWIZ_API_DECL DataFilter { size_t number; /// File from which derived std::string parent_file; std::string windows_parent; /// filtering criteria applied to data std::string description; }; typedef boost::shared_ptr DataFilterPtr; /// Source and filtering criteria used to generate dataset struct PWIZ_API_DECL DatasetDerivation { /// number preceding filter generations size_t generation_no; std::vector dataFilters; }; typedef boost::shared_ptr DatasetDerivationPtr; struct PWIZ_API_DECL MSMSPipelineAnalysis { MSMSPipelineAnalysis(){} std::string date; std::string summaryXML; std::string xmlns; std::string xmlnsXSI; std::string XSISchemaLocation; /// full path file name of mzXML (minus the .mzXML) std::string baseName; /// raw data type extension (e.g. .mzXML) std::string raw_data_type; /// raw data type extension (e.g. .mzXML) std::string raw_data; /// Manufacturer of MS/MS instrument std::string msManufacturer; /// Instrument model (cf mzXML) std::string msModel; /// Instrument model (cf mzXML) std::string msIonization; /// Ion trap, etc (cf mzXML) std::string msMassAnalyzer; /// EMT, etc(cf mzXML) std::string msDetector; AnalysisSummaryPtr analysisSummary; DatasetDerivationPtr datasetDerivation; MSMSRunSummary msmsRunSummary; void write(XMLWriter& writer) const; void read(std::istream& is); bool operator==(const MSMSPipelineAnalysis& that) const; bool operator!=(const MSMSPipelineAnalysis& that) const; }; struct PWIZ_API_DECL Match { Match() : score(0), feature(new Feature()) {} Match(const SpectrumQuery& _spectrumQuery, FeaturePtr _feature, double _score = 0) : score(_score), spectrumQuery(_spectrumQuery), feature(_feature) {} double score; double calculatedMass; double massDeviation; // ( feature mz - proton mass ) * charge - calculatedMass (not absolute val!) SpectrumQuery spectrumQuery; FeaturePtr feature; void write(minimxml::XMLWriter& writer) const; void read(std::istream& is); bool operator==(const Match& that) const; bool operator!=(const Match& that) const; private: Match(Match&); Match operator=(Match&); }; typedef boost::shared_ptr MatchPtr; PWIZ_API_DECL bool operator==(const MatchPtr left, const MatchPtr right); struct PWIZ_API_DECL MatchData { MatchData(){} MatchData(std::string wfc, std::string snc) : warpFunctionCalculator(wfc), searchNbhdCalculator(snc) {} MatchData(std::vector _matches) : matches(_matches){} std::string warpFunctionCalculator; std::string searchNbhdCalculator; std::vector matches; void write(minimxml::XMLWriter& writer) const; void read(std::istream& is); bool operator==(const MatchData& that) const; bool operator!=(const MatchData& that) const; }; } // namespace pepxml } // namespace data } // namespace pwiz #endif // _MINIMUMPEPXML_HPP_ // LocalWords: RatioResult libpwizlite-3.0.5/src/pwiz/data/misc/PeakData.hpp000066400000000000000000000212001444255175000216660ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _PEAKDATA_HPP_ #define _PEAKDATA_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "CalibrationParameters.hpp" #include "pwiz/utility/misc/MSIHandler.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "pwiz/utility/math/OrderedPair.hpp" #include "boost/shared_ptr.hpp" #include #include namespace pwiz { namespace data { namespace peakdata { using namespace pwiz::util; using namespace pwiz::minimxml; using namespace minimxml::SAXParser; const int PeakDataFormatVersion_Major = 1; const int PeakDataFormatVersion_Minor = 1; struct PWIZ_API_DECL Peak { int id; double mz; double retentionTime; double intensity; // peak height double area; // sum/total intensity double error; // error in model fit std::vector data; // optional attributes enum Attribute { Attribute_Frequency, Attribute_Phase, Attribute_Decay }; typedef std::map Attributes; Attributes attributes; Peak(double _mz = 0, double _retentionTime = 0); double getAttribute(Attribute attribute) const; bool operator==(const Peak& that) const; bool operator!=(const Peak& that) const; void write(minimxml::XMLWriter& writer) const; void read(std::istream& is); }; struct HandlerPeak : public SAXParser::Handler { Peak* peak; HandlerPeak(Peak* _peak = 0) : peak(_peak) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const std::string& name, const Attributes& attributes, stream_offset position); virtual Status characters(const SAXParser::saxstring& text, stream_offset position); }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Peak& peak); PWIZ_API_DECL std::istream& operator>>(std::istream& is, Peak& peak); struct PWIZ_API_DECL PeakFamily { double mzMonoisotopic; int charge; double score; std::vector peaks; PeakFamily() : mzMonoisotopic(0), charge(0), score(0) {} double sumAmplitude() const {return 0;} double sumArea() const {return 0;} void write(minimxml::XMLWriter& writer) const; void read(std::istream& is); bool operator==(const PeakFamily& that) const; bool operator!=(const PeakFamily& that) const; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const PeakFamily& peakFamily); PWIZ_API_DECL std::istream& operator>>(std::istream& is, PeakFamily& peakFamily); struct PWIZ_API_DECL Scan { size_t index; std::string nativeID; int scanNumber; // TODO: remove double retentionTime; double observationDuration; CalibrationParameters calibrationParameters; std::vector peakFamilies; Scan() : index(0), scanNumber(0), retentionTime(0), observationDuration(0) {} void write(minimxml::XMLWriter& writer) const; void read(std::istream& is); bool operator==(const Scan& scan) const; bool operator!=(const Scan& scan) const; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Scan& scan); PWIZ_API_DECL std::istream& operator>>(std::istream& is, Scan& scan); struct PWIZ_API_DECL Software { std::string name; std::string version; std::string source; struct PWIZ_API_DECL Parameter { std::string name; std::string value; Parameter() : name(""), value("") {}; Parameter(std::string name_, std::string value_) : name(name_), value(value_) {} void write(minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); bool operator==(const Parameter& that) const; bool operator!=(const Parameter& that) const; }; std::vector parameters; Software() : name(""), version(""), source(""), parameters(0) {} void write(minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); bool operator==(const Software& that) const; bool operator!=(const Software& that) const; }; struct PWIZ_API_DECL PeakData { std::string sourceFilename; Software software; std::vector scans; void write(pwiz::minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); bool operator==(const PeakData& that) const; bool operator!=(const PeakData& that) const; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const PeakData& pd); PWIZ_API_DECL std::istream& operator>>(std::istream& is, PeakData& pd); /// /// struct for an eluted peak (PEAK ELution) /// struct PWIZ_API_DECL Peakel { // metadata double mz; double retentionTime; double maxIntensity; double totalIntensity; double mzVariance; // peak data std::vector peaks; // construction Peakel(); Peakel(const Peak& peak); /// recalculates all metadata based on peak data void calculateMetadata(); // retention times grabbed from peak data; assume peaks are ordered by retention time double retentionTimeMin() const; double retentionTimeMax() const; void write(pwiz::minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); bool operator==(const Peakel& that) const; bool operator!=(const Peakel& that) const; }; typedef boost::shared_ptr PeakelPtr; struct HandlerPeakel : public SAXParser::Handler { Peakel* peakel; HandlerPeakel(Peakel* _peakel = 0) : peakel(_peakel){} virtual Status startElement(const std::string& name, const Attributes& attributes, stream_offset position); private: HandlerPeak _handlerPeak; size_t _peakCount; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Peakel& peakel); PWIZ_API_DECL std::istream& operator>>(std::istream& is, Peakel& peakel); struct PWIZ_API_DECL Feature { Feature(); Feature(const MSIHandler::Record& record); std::string id; // assigned by feature detection, for easier lookup double mz; double retentionTime; int charge; double totalIntensity; double rtVariance; double score; double error; std::vector peakels; void calculateMetadata(); // retention time range calculation based on first two Peakels double retentionTimeMin() const; double retentionTimeMax() const; void write(pwiz::minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); bool operator==(const Feature& that) const; bool operator!=(const Feature& that) const; // note: copy/assignment are shallow copy (same peakels) }; typedef boost::shared_ptr FeaturePtr; struct HandlerFeature : public SAXParser::Handler // included in header file for accession by MatchData { Feature* feature; HandlerFeature(Feature* _feature = 0) : feature(_feature){} virtual Status startElement(const std::string& name, const Attributes& attributes, stream_offset position); private: HandlerPeakel _handlerPeakel; size_t _peakelCount; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Feature& feature); PWIZ_API_DECL std::istream& operator>>(std::istream& is, Feature& feature); struct PWIZ_API_DECL FeatureFile { FeatureFile(){} std::vector features; void write(pwiz::minimxml::XMLWriter& xmlWriter) const; void read(std::istream& is); private: FeatureFile(FeatureFile&); FeatureFile operator=(FeatureFile&); }; } // namespace peakdata } // namespace data } // namespace pwiz #endif // _PEAKDATA_HPP_ libpwizlite-3.0.5/src/pwiz/data/misc/SampleDatum.hpp000066400000000000000000000053611444255175000224420ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SAMPLEDATUM_HPP_ #define _SAMPLEDATUM_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include namespace pwiz { namespace data { template struct SampleDatum { abscissa_type x; ordinate_type y; SampleDatum(abscissa_type _x=0, ordinate_type _y=0) : x(_x), y(_y) {} }; template bool operator==(const SampleDatum& a, const SampleDatum& b) { return (a.x==b.x && a.y==b.y); } namespace SampleDatumConstant { const char open_ = '<'; const char separator_ = ';'; // MSVC feature: this cannot be ',' const char close_ = '>'; } // namespace SampleDatumConstant template std::ostream& operator<<(std::ostream& os, const SampleDatum& datum) { os << SampleDatumConstant::open_ << datum.x << SampleDatumConstant::separator_ << datum.y << SampleDatumConstant::close_; return os; } template std::istream& operator>>(std::istream& is, SampleDatum& datum) { std::string buffer; is >> buffer; if (!is) return is; std::istringstream iss(buffer); char open, separator, close; abscissa_type x; ordinate_type y; iss >> open >> x >> separator >> y >> close; if (open != SampleDatumConstant::open_ || separator != SampleDatumConstant::separator_ || close != SampleDatumConstant::close_) throw std::runtime_error("[SampleDatum::operator>>] Invalid format."); datum.x = x; datum.y = y; return is; } } // namespace data } // namespace pwiz #endif // _SAMPLEDATUM_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/000077500000000000000000000000001444255175000200265ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/data/msdata/BinaryDataEncoder.cpp000066400000000000000000000656661444255175000240730ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/Base64.hpp" #include "pwiz/utility/misc/endian.hpp" #include "boost/static_assert.hpp" #include "boost/iostreams/filtering_streambuf.hpp" #include "boost/iostreams/filtering_stream.hpp" #include "boost/iostreams/copy.hpp" #include #include "iosfwd" #include "boost/iostreams/categories.hpp" #include "boost/iostreams/filter/zlib.hpp" #include "boost/iostreams/device/array.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/data/msdata/MSNumpress.hpp" namespace pwiz { namespace msdata { using namespace pwiz::util; using namespace pwiz::cv; using namespace boost::iostreams; // // BinaryDataEncoder::Impl // class BinaryDataEncoder::Impl { public: Impl(const Config& config) : config_(config) {} template void encode(const vector& data, string& result, size_t* binaryByteCount); void encode(const double* data, size_t dataSize, std::string& result, size_t* binaryByteCount); void encode(const std::int64_t* data, size_t dataSize, std::string& result, size_t* binaryByteCount); void decode(const char *encodedData, size_t len, pwiz::util::BinaryData& result); void decode(const char *encodedData, size_t len, pwiz::util::BinaryData& result); template void decode(const string& encodedData, pwiz::util::BinaryData& result) { decode(encodedData.c_str(),encodedData.length(),result); } const Config & getConfig() const { return config_; } private: Config config_; }; BOOST_STATIC_ASSERT(sizeof(float) == 4); BOOST_STATIC_ASSERT(sizeof(double) == 8); template struct DoubleToFloat { float operator()(T d) {return T32(d);} }; template void BinaryDataEncoder::Impl::encode(const vector& data, string& result, size_t* binaryByteCount) { if (data.empty()) return; encode(&data[0], data.size(), result, binaryByteCount); } // formerly returned a string, but those are not guaranteed to have // contiguous storage space in older C++ standards, so use vector instead // thx to Johan Teleman template void filterArray(const void* byteBuffer, size_t byteCount, vector &result) { result.reserve(byteCount); // preallocate (more than we need), for speed filtering_ostream fos; fos.push(filter_type()); fos.push(back_inserter(result)); fos.write((const char*)byteBuffer, byteCount); fos.pop(); fos.pop(); // forces buffer to flush /* // original implementation, using technique in boost iostreams docs // this doesn't flush properly in all cases -- see unit test ostringstream result; array_source source(reinterpret_cast(byteBuffer), byteCount); filtering_streambuf in; in.push(filter_type()); in.push(source); boost::iostreams::copy(in, result); return result.str(); */ } void BinaryDataEncoder::Impl::encode(const double* data, size_t dataSize, std::string& result, size_t* binaryByteCount) { typedef double T; typedef float T32; // using MSNumpress, from johan.teleman@immun.lth.se size_t byteCount; const void* byteBuffer; vector compressed; vector numpressed; vector data32; vector data64endianized; if (Numpress_None != config_.numpress) { // lossy numerical representation try { switch(config_.numpress) { case Numpress_Linear: numpressed.resize(dataSize * sizeof(T) + 8); break; case Numpress_Pic: numpressed.resize(dataSize * sizeof(T)); break; case Numpress_Slof: numpressed.resize(dataSize * 2 + 8); break; default: throw runtime_error("[BinaryDataEncoder::encode()] unknown numpress mode"); break; } vector unpressed; // for checking excessive accuracy loss int n=-1; double numpressErrorTolerance = 0.0; switch (config_.numpress) { case Numpress_Linear: if (config_.numpressLinearAbsMassAcc > 0.0) { double fp = MSNumpress::optimalLinearFixedPointMass(data, dataSize, config_.numpressLinearAbsMassAcc); if (fp < 0.0) { // failure: cannot achieve that accuracy, thus don't numpress (see below) n = 0; byteCount = MSNumpress::encodeLinear(data, dataSize, &numpressed[0], config_.numpressFixedPoint); } else { byteCount = MSNumpress::encodeLinear(data, dataSize, &numpressed[0], fp); } } else { byteCount = MSNumpress::encodeLinear(data, dataSize, &numpressed[0], config_.numpressFixedPoint); } numpressed.resize(byteCount); if ((numpressErrorTolerance=config_.numpressLinearErrorTolerance) > 0) // decompress to check accuracy loss MSNumpress::decodeLinear(numpressed,unpressed); break; case Numpress_Pic: byteCount = MSNumpress::encodePic(data, dataSize, &numpressed[0]); numpressed.resize(byteCount); numpressErrorTolerance = 0.5; // it's an integer rounding, so always +- 0.5 MSNumpress::decodePic(numpressed,unpressed); // but susceptible to overflow, so always check break; case Numpress_Slof: byteCount = MSNumpress::encodeSlof(data, dataSize, &numpressed[0], config_.numpressFixedPoint); numpressed.resize(byteCount); if ((numpressErrorTolerance=config_.numpressSlofErrorTolerance) > 0) // decompress to check accuracy loss MSNumpress::decodeSlof(numpressed,unpressed); break; default: break; } // now check to see if encoding introduces excessive error if (numpressErrorTolerance) { if (Numpress_Pic == config_.numpress) // integer rounding, abs accuracy is +- 0.5 { for (n=(int)dataSize;n--;) // check for overflow, strange rounding { if ((!boost::math::isfinite(unpressed[n])) || (fabs(data[n]-unpressed[n])>=1.0)) break; } } else // check for tolerance as well as overflow { for (n=(int)dataSize;n--;) { double d,u; if (!boost::math::isfinite(u = unpressed[n])||!boost::math::isfinite(d = data[n])) break; if (!d) { if (fabs(u) > numpressErrorTolerance) break; } else if (!u) { if (fabs(d) > numpressErrorTolerance) break; } else if (fabs(1.0-(d/u)) > numpressErrorTolerance) break; } } } if (n>=0) config_.numpress = Numpress_None; // excessive error, don't numpress else byteBuffer = reinterpret_cast(&numpressed[0]); } catch (int e) { cerr << "MZNumpress encoder threw exception: " << e << endl; } catch (...) { cerr << "Unknown exception while encoding " << dataSize << " doubles" << endl; } } if (Numpress_None == config_.numpress) { // may need 64->32bit conversion and byte ordering // // We use buffer abstractions, since we may need to change buffers during // downconversion and compression -- these are eventually passed to // the Base64 encoder. Note that: // - byteBuffer and byteCount must remain valid at the end of any block // in this function // - by default, no processing is done, resulting in no buffer changes // and fall through to Base64 encoding // byteBuffer = reinterpret_cast(data); byteCount = dataSize * sizeof(T); // 64-bit -> 32-bit downconversion if (config_.precision == Precision_32) { data32.resize(dataSize); transform(data, data+dataSize, data32.begin(), DoubleToFloat()); byteBuffer = reinterpret_cast(&data32[0]); byteCount = data32.size() * sizeof(T32); } // byte ordering #ifdef PWIZ_LITTLE_ENDIAN bool mustEndianize = (config_.byteOrder == ByteOrder_BigEndian); #elif defined(PWIZ_BIG_ENDIAN) bool mustEndianize = (config_.byteOrder == ByteOrder_LittleEndian); #endif if (mustEndianize) { if (config_.precision == Precision_32) { unsigned int* p = reinterpret_cast(&data32[0]); transform(p, p+data32.size(), p, endianize32); } else // Precision_64 { data64endianized.resize(dataSize); const unsigned long long* from = reinterpret_cast(data); unsigned long long* to = reinterpret_cast(&data64endianized[0]); transform(from, from+dataSize, to, endianize64); byteBuffer = reinterpret_cast(&data64endianized[0]); byteCount = dataSize * sizeof(T); } } } // zlib compression (is done after 32/64bit conversion and after numpress) if (config_.compression == Compression_Zlib) { filterArray(byteBuffer, byteCount,compressed); if (!compressed.empty()) { byteBuffer = reinterpret_cast(&compressed[0]); byteCount = compressed.size(); } else { throw runtime_error("[BinaryDataEncoder::encode()] Compression error?"); } } // Base64 encoding result.resize(Base64::binaryToTextSize(byteCount)); // std::string storage is not guaranteed contiguous in older C++ standards, // and on long strings this has caused problems in the wild. So test for // actual contiguousness, and fall back to std::vector if needed // thx Johan Teleman size_t textSize; char *first = &result[0]; char *last = &result[result.size()-1]; if ((int)result.size() == 1+(last-first)) // pointer math agrees with [] operator textSize = Base64::binaryToText(byteBuffer, byteCount, &result[0]); else { std::vector contig; // work in this contiguous memory then copy to string contig.resize(result.size()); textSize = Base64::binaryToText(byteBuffer, byteCount, &contig[0]); copy(contig.begin(), contig.end(), result.begin()); } result.resize(textSize); if (binaryByteCount != NULL) *binaryByteCount = byteCount; // size before base64 encoding } void BinaryDataEncoder::Impl::encode(const std::int64_t* data, size_t dataSize, std::string& result, size_t* binaryByteCount) { typedef std::int64_t T; typedef std::int32_t T32; // using MSNumpress, from johan.teleman@immun.lth.se size_t byteCount; const void* byteBuffer; vector compressed; vector numpressed; vector data32; vector data64endianized; // // We use buffer abstractions, since we may need to change buffers during // downconversion and compression -- these are eventually passed to // the Base64 encoder. Note that: // - byteBuffer and byteCount must remain valid at the end of any block // in this function // - by default, no processing is done, resulting in no buffer changes // and fall through to Base64 encoding // byteBuffer = reinterpret_cast(data); byteCount = dataSize * sizeof(T); // 64-bit -> 32-bit downconversion if (config_.precision == Precision_32) { data32.resize(dataSize); transform(data, data + dataSize, data32.begin(), DoubleToFloat()); byteBuffer = reinterpret_cast(&data32[0]); byteCount = data32.size() * sizeof(T32); } // byte ordering #ifdef PWIZ_LITTLE_ENDIAN bool mustEndianize = (config_.byteOrder == ByteOrder_BigEndian); #elif defined(PWIZ_BIG_ENDIAN) bool mustEndianize = (config_.byteOrder == ByteOrder_LittleEndian); #endif if (mustEndianize) { if (config_.precision == Precision_32) { unsigned int* p = reinterpret_cast(&data32[0]); transform(p, p + data32.size(), p, endianize32); } else // Precision_64 { data64endianized.resize(dataSize); const unsigned long long* from = reinterpret_cast(data); unsigned long long* to = reinterpret_cast(&data64endianized[0]); transform(from, from + dataSize, to, endianize64); byteBuffer = reinterpret_cast(&data64endianized[0]); byteCount = dataSize * sizeof(T); } } // zlib compression (is done after 32/64bit conversion and after numpress) if (config_.compression == Compression_Zlib) { filterArray(byteBuffer, byteCount, compressed); if (!compressed.empty()) { byteBuffer = reinterpret_cast(&compressed[0]); byteCount = compressed.size(); } else { throw runtime_error("[BinaryDataEncoder::encode()] Compression error?"); } } // Base64 encoding result.resize(Base64::binaryToTextSize(byteCount)); // std::string storage is not guaranteed contiguous in older C++ standards, // and on long strings this has caused problems in the wild. So test for // actual contiguousness, and fall back to std::vector if needed // thx Johan Teleman size_t textSize; char *first = &result[0]; char *last = &result[result.size() - 1]; if ((int)result.size() == 1 + (last - first)) // pointer math agrees with [] operator textSize = Base64::binaryToText(byteBuffer, byteCount, &result[0]); else { std::vector contig; // work in this contiguous memory then copy to string contig.resize(result.size()); textSize = Base64::binaryToText(byteBuffer, byteCount, &contig[0]); copy(contig.begin(), contig.end(), result.begin()); } result.resize(textSize); if (binaryByteCount != NULL) *binaryByteCount = byteCount; // size before base64 encoding } template void copyBuffer(const void* byteBuffer, size_t byteCount, pwiz::util::BinaryData& result) { const float_type* floatBuffer = reinterpret_cast(byteBuffer); if (byteCount % sizeof(float_type) != 0) throw runtime_error("[BinaryDataEncoder::copyBuffer()] Bad byteCount."); size_t floatCount = byteCount / sizeof(float_type); result.resize(floatCount); copy(floatBuffer, floatBuffer+floatCount, result.begin()); } void BinaryDataEncoder::Impl::decode(const char *encodedData, size_t length, pwiz::util::BinaryData& result) { typedef double T; typedef float T32; if (!encodedData || !length) return; // Base64 decoding vector binary(Base64::textToBinarySize(length)); size_t binarySize = Base64::textToBinary(encodedData, length, &binary[0]); binary.resize(binarySize); // buffer abstractions void* byteBuffer = &binary[0]; size_t byteCount = binarySize; size_t initialSize; // decompression vector decompressed; switch (config_.compression) { case Compression_Zlib: { filterArray(byteBuffer, byteCount,decompressed); if (!decompressed.empty()) { byteBuffer = reinterpret_cast(&decompressed[0]); } byteCount = decompressed.size(); } break; case Compression_None: break; default: throw runtime_error("[BinaryDataEncoder::decode()] unknown compression type"); break; } // numpress expansion or endian correction switch (config_.numpress) { case Numpress_Linear: initialSize = byteCount * 2; if (result.size() < initialSize) result.resize(initialSize); try { size_t count = MSNumpress::decodeLinear((const unsigned char *)byteBuffer, byteCount, &result[0]); result.resize(count); } catch (...) { throw runtime_error("BinaryDataEncoder::Impl::decode error in numpress linear decompression"); } break; case Numpress_Pic: initialSize = byteCount * 2; if (result.size() < initialSize) result.resize(initialSize); try { size_t count = MSNumpress::decodePic((const unsigned char *)byteBuffer, byteCount, &result[0]); result.resize(count); } catch (...) { throw runtime_error("BinaryDataEncoder::Impl::decode error in numpress pic decompression"); } break; case Numpress_Slof: initialSize = byteCount / 2; if (result.size() < initialSize) result.resize(initialSize); try { size_t count = MSNumpress::decodeSlof((const unsigned char *)byteBuffer, byteCount, &result[0]); result.resize(count); } catch (...) { throw runtime_error("BinaryDataEncoder::Impl::decode error in numpress slof decompression"); } break; case Numpress_None: { // endianization for non-numpress cases #ifdef PWIZ_LITTLE_ENDIAN bool mustEndianize = (config_.byteOrder == ByteOrder_BigEndian); #elif defined(PWIZ_BIG_ENDIAN) bool mustEndianize = (config_.byteOrder == ByteOrder_LittleEndian); #endif if (mustEndianize) { if (config_.precision == Precision_32) { unsigned int* p = reinterpret_cast(byteBuffer); size_t floatCount = byteCount / sizeof(T32); transform(p, p+floatCount, p, endianize32); } else // Precision_64 { unsigned long long* p = reinterpret_cast(byteBuffer); size_t doubleCount = byteCount / sizeof(T); transform(p, p+doubleCount, p, endianize64); } } // (upconversion and) copy to result buffer if (config_.precision == Precision_32) copyBuffer(byteBuffer, byteCount, result); else // Precision_64 copyBuffer(byteBuffer, byteCount, result); } break; default: throw runtime_error("BinaryDataEncoder::Impl::decode unknown numpress method"); break; } } void BinaryDataEncoder::Impl::decode(const char *encodedData, size_t length, pwiz::util::BinaryData& result) { typedef std::int64_t T; typedef std::int32_t T32; if (!encodedData || !length) return; // Base64 decoding vector binary(Base64::textToBinarySize(length)); size_t binarySize = Base64::textToBinary(encodedData, length, &binary[0]); binary.resize(binarySize); // buffer abstractions void* byteBuffer = &binary[0]; size_t byteCount = binarySize; // decompression vector decompressed; switch (config_.compression) { case Compression_Zlib: { filterArray(byteBuffer, byteCount, decompressed); if (!decompressed.empty()) { byteBuffer = reinterpret_cast(&decompressed[0]); byteCount = decompressed.size(); } else { throw runtime_error("[BinaryDataEncoder::decode()] Compression error?"); } } break; case Compression_None: break; default: throw runtime_error("[BinaryDataEncoder::decode()] unknown compression type"); break; } // endianization for non-numpress cases #ifdef PWIZ_LITTLE_ENDIAN bool mustEndianize = (config_.byteOrder == ByteOrder_BigEndian); #elif defined(PWIZ_BIG_ENDIAN) bool mustEndianize = (config_.byteOrder == ByteOrder_LittleEndian); #endif if (mustEndianize) { if (config_.precision == Precision_32) { unsigned int* p = reinterpret_cast(byteBuffer); size_t floatCount = byteCount / sizeof(T32); transform(p, p + floatCount, p, endianize32); } else // Precision_64 { unsigned long long* p = reinterpret_cast(byteBuffer); size_t doubleCount = byteCount / sizeof(T); transform(p, p + doubleCount, p, endianize64); } } // (upconversion and) copy to result buffer if (config_.precision == Precision_32) copyBuffer(byteBuffer, byteCount, result); else // Precision_64 copyBuffer(byteBuffer, byteCount, result); } // // BinaryDataEncoder // PWIZ_API_DECL BinaryDataEncoder::BinaryDataEncoder(const Config& config) : impl_(new Impl(config)) {} PWIZ_API_DECL void BinaryDataEncoder::encode(const std::vector& data, std::string& result, size_t* binaryByteCount /*= NULL*/) const { impl_->encode(data, result, binaryByteCount); } PWIZ_API_DECL void BinaryDataEncoder::encode(const double* data, size_t dataSize, std::string& result, size_t* binaryByteCount /*= NULL*/) const { impl_->encode(data, dataSize, result, binaryByteCount); } PWIZ_API_DECL void BinaryDataEncoder::decode(const char * encodedData, size_t len, pwiz::util::BinaryData &result) const { impl_->decode(encodedData, len, result); } PWIZ_API_DECL void BinaryDataEncoder::encode(const std::vector& data, std::string& result, size_t* binaryByteCount /*= NULL*/) const { impl_->encode(data, result, binaryByteCount); } PWIZ_API_DECL void BinaryDataEncoder::encode(const std::int64_t* data, size_t dataSize, std::string& result, size_t* binaryByteCount /*= NULL*/) const { impl_->encode(data, dataSize, result, binaryByteCount); } PWIZ_API_DECL void BinaryDataEncoder::decode(const char * encodedData, size_t len, pwiz::util::BinaryData &result) const { impl_->decode(encodedData, len, result); } PWIZ_API_DECL const BinaryDataEncoder::Config& BinaryDataEncoder::getConfig() const // get the config actually used - may differ from input for numpress use { return impl_->getConfig(); } void writeConfig(ostream& os, const BinaryDataEncoder::Config& config, CVID cvid) { BinaryDataEncoder::Precision p; BinaryDataEncoder::Numpress c; map::const_iterator pOverrideItr; map::const_iterator cOverrideItr; cOverrideItr = config.numpressOverrides.find(cvid); if (cOverrideItr != config.numpressOverrides.end()) c = cOverrideItr->second; else c = config.numpress; const char *commaspace = (BinaryDataEncoder::Compression_Zlib == config.compression)?", ":" "; switch (c) { case BinaryDataEncoder::Numpress_Linear: os << "Compression-Numpress-Linear" << commaspace; break; case BinaryDataEncoder::Numpress_Pic: os << "Compression-Numpress-Pic" << commaspace; break; case BinaryDataEncoder::Numpress_Slof: os << "Compression-Numpress-Slof" << commaspace; break; case BinaryDataEncoder::Numpress_None: break; default: throw runtime_error("[BinaryDataEncoder::writeConfig] Unknown binary numpress mode"); break; } switch (config.compression) { case BinaryDataEncoder::Compression_Zlib : os << "Compression-Zlib"; break; case BinaryDataEncoder::Compression_None : if (BinaryDataEncoder::Numpress_None == c) os << "Compression-None"; break; default: throw runtime_error("[BinaryDataEncoder::writeConfig] Unknown binary numeric compression"); } pOverrideItr = config.precisionOverrides.find(cvid); if (pOverrideItr != config.precisionOverrides.end()) p = pOverrideItr->second; else p = config.precision; switch (p) { case BinaryDataEncoder::Precision_64: os << ", 64-bit"; break; case BinaryDataEncoder::Precision_32: os << ", 32-bit"; break; } } PWIZ_API_DECL ostream& operator<<(ostream& os, const BinaryDataEncoder::Config& config) { BinaryDataEncoder::Config usedConfig = config; os << endl << " m/z: "; writeConfig(os, config, MS_m_z_array); os << endl << " intensity: "; writeConfig(os, config, MS_intensity_array); os << endl << " rt: "; writeConfig(os, config, MS_time_array); os << endl << (config.byteOrder==BinaryDataEncoder::ByteOrder_LittleEndian ? "ByteOrder_LittleEndian" : "ByteOrder_BigEndian") << endl; return os; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/BinaryDataEncoder.hpp000066400000000000000000000111611444255175000240550ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _BINARYDATAENCODER_HPP_ #define _BINARYDATAENCODER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/BinaryData.hpp" #include "boost/shared_ptr.hpp" #include #include #include #include "pwiz/data/common/cv.hpp" #include namespace pwiz { namespace msdata { const double BinaryDataEncoder_default_numpressSlofErrorTolerance = 0.0002; // 2/100th of one percent const double BinaryDataEncoder_default_numpressLinearErrorTolerance = 2e-9; const double BinaryDataEncoder_default_numpressPicErrorTolerance = 0.5; // rounds to nearest integer /// binary-to-text encoding class PWIZ_API_DECL BinaryDataEncoder { public: enum Precision {Precision_32, Precision_64}; enum ByteOrder {ByteOrder_LittleEndian, ByteOrder_BigEndian}; enum Compression {Compression_None, Compression_Zlib}; enum Numpress {Numpress_None, Numpress_Linear, Numpress_Pic, Numpress_Slof}; // lossy numerical representations /// encoding/decoding configuration struct PWIZ_API_DECL Config { Precision precision; ByteOrder byteOrder; Compression compression; // zlib or none Numpress numpress; // lossy numerical compression double numpressFixedPoint; // for Numpress_* use, 0=derive best value double numpressLinearErrorTolerance; // guarantee abs(1.0-(encoded/decoded)) <= this, 0=do not guarantee anything double numpressSlofErrorTolerance; // guarantee abs(1.0-(encoded/decoded)) <= this, 0=do not guarantee anything double numpressLinearAbsMassAcc; // absolute mass error for lossy linear compression in Th (e.g. use 1e-4 for 1ppm @ 100 Th) std::map precisionOverrides; std::map numpressOverrides; Config() : precision(Precision_64), byteOrder(ByteOrder_LittleEndian), compression(Compression_None), numpress(Numpress_None), numpressFixedPoint(0.0), numpressLinearErrorTolerance(BinaryDataEncoder_default_numpressLinearErrorTolerance), numpressSlofErrorTolerance(BinaryDataEncoder_default_numpressSlofErrorTolerance), numpressLinearAbsMassAcc(-1.0) {} }; BinaryDataEncoder(const Config& config = Config()); const Config& getConfig() const; // get the config actually used - may differ from input for numpress use /// encode binary data as a text string void encode(const std::vector& data, std::string& result, size_t* binaryByteCount = NULL) const; void encode(const std::vector& data, std::string& result, size_t* binaryByteCount = NULL) const; /// encode binary data as a text string void encode(const double* data, size_t dataSize, std::string& result, size_t* binaryByteCount = NULL) const; void encode(const std::int64_t* data, size_t dataSize, std::string& result, size_t* binaryByteCount = NULL) const; /// decode text-encoded data as binary void decode(const char *encodedData, size_t len, pwiz::util::BinaryData& result) const; void decode(const std::string& encodedData, pwiz::util::BinaryData& result) const { decode(encodedData.c_str(),encodedData.length(),result); } void decode(const char *encodedData, size_t len, pwiz::util::BinaryData& result) const; void decode(const std::string& encodedData, pwiz::util::BinaryData& result) const { decode(encodedData.c_str(), encodedData.length(), result); } private: class Impl; boost::shared_ptr impl_; BinaryDataEncoder(const BinaryDataEncoder&); BinaryDataEncoder& operator=(const BinaryDataEncoder&); }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const BinaryDataEncoder::Config& config); } // namespace msdata } // namespace pwiz #endif // _BINARYDATAENCODER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/ChromatogramListBase.hpp000066400000000000000000000032371444255175000246160ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2009 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHROMATOGRAMLISTBASE_HPP_ #define _CHROMATOGRAMLISTBASE_HPP_ #include "pwiz/data/msdata/MSData.hpp" #include namespace pwiz { namespace msdata { /// common functionality for base ChromatogramList implementations class PWIZ_API_DECL ChromatogramListBase : public ChromatogramList { public: /// implementation of ChromatogramList virtual const boost::shared_ptr dataProcessingPtr() const {return dp_;} /// set DataProcessing virtual void setDataProcessingPtr(DataProcessingPtr dp) {dp_ = dp;} const char* polarityStringForFilter(CVID polarityType) const { return (polarityType == MS_negative_scan) ? "- " : ""; // For backward compatibility, let assumptions about postive ion mode remain } protected: DataProcessingPtr dp_; }; } // namespace msdata } // namespace pwiz #endif // _CHROMATOGRAMLISTBASE_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/ChromatogramList_mz5.hpp000066400000000000000000000034371444255175000246200ustar00rootroot00000000000000// // $Id$ // // // Original authors: Mathias Wilhelm // Marc Kirchner // // Copyright 2011 Proteomics Center // Children's Hospital Boston, Boston, MA 02135 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHROMATOGRAMLIST_MZ5_HPP_ #define _CHROMATOGRAMLIST_MZ5_HPP_ #include "ChromatogramListBase.hpp" #include "mz5/Datastructures_mz5.hpp" #include "mz5/ReferenceRead_mz5.hpp" #include "mz5/Configuration_mz5.hpp" #include "mz5/Connection_mz5.hpp" namespace pwiz { namespace msdata { /// implementation of ChromatogramList, backed by an mz5 file class PWIZ_API_DECL ChromatogramList_mz5: public ChromatogramListBase { public: /** * Creates a chromatogramListPtr. * @param readPtr helper class to read mz5 files * @param connectionptr connection to an mz5 file * @param msd MSData file */ static ChromatogramListPtr create(boost::shared_ptr readPtr, boost::shared_ptr connectionPtr, const MSData& msd); /** * Destructor. */ virtual ~ChromatogramList_mz5(); }; } // namespace msdata } // namespace pwiz #endif // _CHROMATOGRAMLIST_MZ5_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/ChromatogramList_mzML.cpp000066400000000000000000000101651444255175000247530ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "ChromatogramList_mzML.hpp" #include "IO.hpp" #include "References.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "boost/iostreams/positioning.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { using namespace pwiz::minimxml; using namespace pwiz::cv; using boost::iostreams::offset_to_position; namespace { class ChromatogramList_mzMLImpl : public ChromatogramList_mzML { public: ChromatogramList_mzMLImpl(shared_ptr is, const MSData& msd, const Index_mzML_Ptr& index); // ChromatogramList implementation virtual size_t size() const {return index_->chromatogramCount();} virtual const ChromatogramIdentity& chromatogramIdentity(size_t index) const; virtual size_t find(const std::string& id) const; virtual ChromatogramPtr chromatogram(size_t index, bool getBinaryData) const; private: shared_ptr is_; const MSData& msd_; Index_mzML_Ptr index_; }; ChromatogramList_mzMLImpl::ChromatogramList_mzMLImpl(shared_ptr is, const MSData& msd, const Index_mzML_Ptr& index) : is_(is), msd_(msd), index_(index) { } const ChromatogramIdentity& ChromatogramList_mzMLImpl::chromatogramIdentity(size_t index) const { if (index >= index_->chromatogramCount()) throw runtime_error("[ChromatogramList_mzML::chromatogramIdentity()] Index out of bounds."); return index_->chromatogramIdentity(index); } size_t ChromatogramList_mzMLImpl::find(const string& id) const { return index_->findChromatogramId(id); } ChromatogramPtr ChromatogramList_mzMLImpl::chromatogram(size_t index, bool getBinaryData) const { if (index >= index_->chromatogramCount()) throw runtime_error("[ChromatogramList_mzML::chromatogram()] Index out of bounds."); // allocate Chromatogram object and read it in ChromatogramPtr result(new Chromatogram); if (!result.get()) throw runtime_error("[ChromatogramList_mzML::chromatogram()] Out of memory."); IO::BinaryDataFlag binaryDataFlag = getBinaryData ? IO::ReadBinaryData : IO::IgnoreBinaryData; try { is_->seekg(offset_to_position(index_->chromatogramIdentity(index).sourceFilePosition)); if (!*is_) throw runtime_error("[ChromatogramList_mzML::chromatogram()] Error seeking to ."); IO::read(*is_, *result, binaryDataFlag); // test for reading the wrong chromatogram if (result->index != index) throw runtime_error("[ChromatogramList_mzML::chromatogram()] Index entry points to the wrong chromatogram."); } catch (runtime_error&) { // TODO: log warning about missing/corrupt index // recreate index index_->recreate(); is_->seekg(offset_to_position(index_->chromatogramIdentity(index).sourceFilePosition)); IO::read(*is_, *result, binaryDataFlag); } // resolve any references into the MSData object References::resolve(*result, msd_); return result; } } // namespace PWIZ_API_DECL ChromatogramListPtr ChromatogramList_mzML::create(shared_ptr is, const MSData& msd, const Index_mzML_Ptr& indexPtr) { if (!is.get() || !*is) throw runtime_error("[ChromatogramList_mzML::create()] Bad istream."); return ChromatogramListPtr(new ChromatogramList_mzMLImpl(is, msd, indexPtr)); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/ChromatogramList_mzML.hpp000066400000000000000000000026531444255175000247630ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHROMATOGRAMLIST_MZML_HPP_ #define _CHROMATOGRAMLIST_MZML_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "ChromatogramListBase.hpp" #include "Index_mzML.hpp" #include namespace pwiz { namespace msdata { /// implementation of ChromatogramList, backed by an mzML file class PWIZ_API_DECL ChromatogramList_mzML : public ChromatogramListBase { public: static ChromatogramListPtr create(boost::shared_ptr is, const MSData& msd, const Index_mzML_Ptr& indexPtr); }; } // namespace msdata } // namespace pwiz #endif // _CHROMATOGRAMLIST_MZML_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/DefaultReaderList.cpp000066400000000000000000000407151444255175000241040ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "DefaultReaderList.hpp" #include "SpectrumList_mzXML.hpp" #include "SpectrumList_MGF.hpp" #include "SpectrumList_MSn.hpp" #include "SpectrumList_BTDX.hpp" #include "Serializer_mzML.hpp" #include "Serializer_mzXML.hpp" #include "Serializer_MGF.hpp" #include "Serializer_MSn.hpp" #ifndef WITHOUT_MZ5 #include "Serializer_mz5.hpp" #endif #include "References.hpp" #include "ChromatogramListBase.hpp" #include "pwiz/data/msdata/Version.hpp" #ifndef WITHOUT_MZ5 #include "mz5/Connection_mz5.hpp" #endif namespace pwiz { namespace msdata { using namespace pwiz::minimxml; namespace { void appendSourceFile(const string& filename, MSData& msd) { SourceFilePtr sourceFile(new SourceFile); bfs::path p(filename); sourceFile->id = sourceFile->name = BFS_STRING(p.leaf()); sourceFile->location = "file:///" + BFS_COMPLETE(p.branch_path()).string(); msd.fileDescription.sourceFilePtrs.push_back(sourceFile); } SoftwarePtr getSoftwarePwiz(vector& softwarePtrs) { string version = pwiz::msdata::Version::str(); for (vector::const_iterator it=softwarePtrs.begin(); it!=softwarePtrs.end(); ++it) if ((*it)->hasCVParam(MS_pwiz) && (*it)->version==version) return *it; SoftwarePtr sp(new Software); sp->id = "pwiz_" + version; sp->set(MS_pwiz); sp->version = pwiz::msdata::Version::str(); softwarePtrs.push_back(sp); return sp; } void fillInCommonMetadata(const string& filename, MSData& msd) { appendSourceFile(filename, msd); msd.cvs = defaultCVList(); SoftwarePtr softwarePwiz = getSoftwarePwiz(msd.softwarePtrs); DataProcessingPtr dpPwiz(new DataProcessing); dpPwiz->id = "pwiz_Reader_conversion"; dpPwiz->processingMethods.push_back(ProcessingMethod()); dpPwiz->processingMethods.back().softwarePtr = softwarePwiz; dpPwiz->processingMethods.back().cvParams.push_back(MS_Conversion_to_mzML); // give ownership of dpPwiz to the SpectrumList (and ChromatogramList) SpectrumListBase* sl = dynamic_cast(msd.run.spectrumListPtr.get()); ChromatogramListBase* cl = dynamic_cast(msd.run.chromatogramListPtr.get()); if (sl) sl->setDataProcessingPtr(dpPwiz); if (cl) cl->setDataProcessingPtr(dpPwiz); // the file-level ids can't be empty if (msd.id.empty() || msd.run.id.empty()) msd.id = msd.run.id = bfs::basename(filename); } // return true if filename has form xxxx.ext or xxxx.ext.gz static bool has_extension(std::string const &test_filename,const char *ext) { std::string filename(test_filename); if (bal::iends_with(filename, ".gz")) filename.erase(filename.length()-3); return bal::iends_with(filename, ext); } } // namespace // // Reader_mzML // PWIZ_API_DECL std::string Reader_mzML::identify(const std::string& filename, const std::string& head) const { istringstream iss(head); return std::string((type(iss) != Type_Unknown)?getType():""); } PWIZ_API_DECL void Reader_mzML::read(const std::string& filename, const std::string& head, MSData& result, int runIndex, const Config& config) const { if (runIndex != 0) throw ReaderFail("[Reader_mzML::read] multiple runs not supported"); shared_ptr is(new pwiz::util::random_access_compressed_ifstream(filename.c_str())); if (!is.get() || !*is) throw runtime_error(("[Reader_mzML::read] Unable to open file " + filename).c_str()); switch (type(*is)) { case Type_mzML: { Serializer_mzML::Config config; config.indexed = false; Serializer_mzML serializer(config); serializer.read(is, result); break; } case Type_mzML_Indexed: { Serializer_mzML serializer; serializer.read(is, result); break; } case Type_Unknown: default: { throw runtime_error("[MSDataFile::Reader_mzML] This isn't happening."); } } fillInCommonMetadata(filename, result); } PWIZ_API_DECL void Reader_mzML::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back(), 0, config); } Reader_mzML::Type Reader_mzML::type(istream& is) const { try { string rootElement = xml_root_element(is); if (rootElement == "indexedmzML") return Type_mzML_Indexed; if (rootElement == "mzML") return Type_mzML; } catch (runtime_error&) { } return Type_Unknown; } // // Reader_mzXML // PWIZ_API_DECL std::string Reader_mzXML::identify(const std::string& filename, const std::string& head) const { std::string result; try { string rootElement = xml_root_element(head); result = (rootElement == "mzXML" || rootElement == "msRun")?getType():""; } catch (runtime_error&) { } return result; } PWIZ_API_DECL void Reader_mzXML::read(const std::string& filename, const std::string& head, MSData& result, int runsIndex, const Config& config) const { if (runsIndex != 0) throw ReaderFail("[Reader_mzXML::read] multiple runs not supported"); shared_ptr is(new pwiz::util::random_access_compressed_ifstream(filename.c_str())); if (!is.get() || !*is) throw runtime_error(("[Reader_mzXML::read] Unable to open file " + filename).c_str()); try { // assume there is a scan index Serializer_mzXML serializer; serializer.read(is, result); fillInCommonMetadata(filename, result); result.fileDescription.sourceFilePtrs.back()->set(MS_scan_number_only_nativeID_format); result.fileDescription.sourceFilePtrs.back()->set(MS_ISB_mzXML_format); return; } catch (SpectrumList_mzXML::index_not_found&) {} // error looking for index -- try again, but generate index is->seekg(0); Serializer_mzXML::Config serializerConfig; serializerConfig.indexed = false; Serializer_mzXML serializer(serializerConfig); serializer.read(is, result); fillInCommonMetadata(filename, result); result.fileDescription.sourceFilePtrs.back()->set(MS_scan_number_only_nativeID_format); result.fileDescription.sourceFilePtrs.back()->set(MS_ISB_mzXML_format); return; } PWIZ_API_DECL void Reader_mzXML::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back(), 0, config); } // // Reader_MGF // PWIZ_API_DECL std::string Reader_MGF::identify(const string& filename, const string& head) const { return std::string(((bal::to_lower_copy(bfs::extension(filename)) == ".mgf"))?getType():""); } PWIZ_API_DECL void Reader_MGF::read(const string& filename, const string& head, MSData& result, int runIndex, const Config& config) const { if (runIndex != 0) throw ReaderFail("[Reader_MGF::read] multiple runs not supported"); shared_ptr is(new pwiz::util::random_access_compressed_ifstream(filename.c_str())); if (!is.get() || !*is) throw runtime_error(("[Reader_MGF::read] Unable to open file " + filename)); Serializer_MGF serializer; serializer.read(is, result); fillInCommonMetadata(filename, result); result.fileDescription.sourceFilePtrs.back()->set(MS_multiple_peak_list_nativeID_format); result.fileDescription.sourceFilePtrs.back()->set(MS_Mascot_MGF_format); return; } PWIZ_API_DECL void Reader_MGF::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back()); } // // Reader_MSn // PWIZ_API_DECL std::string Reader_MSn::identify(const string& filename, const string& head) const { if (has_extension(filename, ".ms1") || has_extension(filename, ".cms1") || has_extension(filename, ".bms1")) return "MS1"; if (has_extension(filename, ".ms2") || has_extension(filename, ".cms2") || has_extension(filename, ".bms2")) return "MS2"; return ""; } PWIZ_API_DECL void Reader_MSn::read(const string& filename, const string& head, MSData& result, int runIndex, const Config& config) const { if (runIndex != 0) throw ReaderFail("[Reader_MSn::read] multiple runs not supported"); MSn_Type filetype = MSn_Type_UNKNOWN; if (has_extension(filename, ".ms1")) filetype = MSn_Type_MS1; else if (has_extension(filename, ".cms1")) filetype = MSn_Type_CMS1; else if (has_extension(filename, ".bms1")) filetype = MSn_Type_BMS1; else if (has_extension(filename, ".ms2")) filetype = MSn_Type_MS2; else if (has_extension(filename, ".cms2")) filetype = MSn_Type_CMS2; else if (has_extension(filename, ".bms2")) filetype = MSn_Type_BMS2; shared_ptr is(new pwiz::util::random_access_compressed_ifstream(filename.c_str())); if (!is.get() || !*is) throw runtime_error(("[Reader_MSn::read] Unable to open file " + filename)); Serializer_MSn serializer(filetype); serializer.read(is, result); fillInCommonMetadata(filename, result); result.fileDescription.sourceFilePtrs.back()->set(MS_scan_number_only_nativeID_format); result.fileDescription.sourceFilePtrs.back()->set(MS_MS2_format); } PWIZ_API_DECL void Reader_MSn::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back()); } // // Reader_BTDX // PWIZ_API_DECL std::string Reader_BTDX::identify(const string& filename, const string& head) const { std::string result; try { // TODO: congratulate Bruker for their unique root element name string rootElement = xml_root_element(head); result = (rootElement == "root")?getType():""; } catch (runtime_error&) { } return result; } PWIZ_API_DECL void Reader_BTDX::read(const string& filename, const string& head, MSData& result, int runIndex, const Config& config) const { if (runIndex != 0) throw ReaderFail("[Reader_BTDX::read] multiple runs not supported"); shared_ptr is(new pwiz::util::random_access_compressed_ifstream(filename.c_str())); if (!is.get() || !*is) throw runtime_error(("[Reader_BTDX::read] Unable to open file " + filename)); result.fileDescription.fileContent.set(MS_MSn_spectrum); result.fileDescription.fileContent.set(MS_centroid_spectrum); SourceFilePtr sourceFile(new SourceFile); sourceFile->id = "BTDX1"; bfs::path p(filename); sourceFile->name = BFS_STRING(p.leaf()); sourceFile->location = "file:///" + BFS_COMPLETE(p.branch_path()).string(); result.fileDescription.sourceFilePtrs.push_back(sourceFile); result.id = result.run.id = bfs::basename(filename); result.run.spectrumListPtr = SpectrumListPtr(SpectrumList_BTDX::create(is, result)); result.run.chromatogramListPtr = ChromatogramListPtr(new ChromatogramListSimple); return; } PWIZ_API_DECL void Reader_BTDX::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back()); } // // Reader_mz5 // // TODO: add mz5 specific header and check this. This version only checks whether the file is a HDF5 file. namespace { const char mz5Header[] = {'\x89', '\x48', '\x44', '\x46', '\x0d', '\x0a', '\x1a', '\x0a'}; const size_t mz5HeaderSize = sizeof(mz5Header) / sizeof(char); } // namespace PWIZ_API_DECL std::string Reader_mz5::identify(const string& filename, const string& head) const { if (head.length() < mz5HeaderSize) return ""; for (size_t i=0; i < mz5HeaderSize; ++i) if (head[i] != mz5Header[i]) return ""; try { #ifndef WITHOUT_MZ5 mz5::Connection_mz5 c(filename, mz5::Connection_mz5::ReadOnly); #endif return getType(); } catch (ReaderFail& e) { if (bal::contains(e.what(), "MZ5 does not support Unicode")) throw e; } catch (std::runtime_error&) { return ""; } catch (...) { return ""; } return ""; } PWIZ_API_DECL void Reader_mz5::read(const string& filename, const string& head, MSData& result, int runIndex, const Config& config) const { #ifdef WITHOUT_MZ5 throw ReaderFail("[Reader_mz5::read] library was not built with mz5 support."); #else if (runIndex != 0) throw ReaderFail("[Reader_mz5::read] multiple runs not supported, yet..."); Serializer_mz5 serializer; serializer.read(filename, result); // TODO: add "conversion to mz5 tag", sourceFile history and pwiz // the file-level ids can't be empty if (result.id.empty() || result.run.id.empty()) result.id = result.run.id = bfs::basename(filename); #endif } PWIZ_API_DECL void Reader_mz5::read(const std::string& filename, const std::string& head, std::vector& results, const Config& config) const { // TODO multiple read mz5 results.push_back(MSDataPtr(new MSData)); read(filename, head, *results.back()); } /// default Reader list PWIZ_API_DECL DefaultReaderList::DefaultReaderList() { emplace_back(new Reader_mzML); emplace_back(new Reader_mzXML); emplace_back(new Reader_MGF); emplace_back(new Reader_MS1); emplace_back(new Reader_MS2); emplace_back(new Reader_BTDX); emplace_back(new Reader_mz5); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/DefaultReaderList.hpp000066400000000000000000000136031444255175000241050ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _DEFAULTREADERLIST_HPP_ #define _DEFAULTREADERLIST_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "Reader.hpp" namespace pwiz { namespace msdata { class PWIZ_API_DECL Reader_mzML : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; virtual const char* getType() const {return "mzML";} virtual CVID getCvType() const {return MS_mzML_format;} virtual std::vector getFileExtensions() const {return {".mzml", ".xml"};} private: enum Type { Type_mzML, Type_mzML_Indexed, Type_Unknown }; Type type(std::istream& is) const; }; class PWIZ_API_DECL Reader_mzXML : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; virtual const char* getType() const {return "mzXML";} virtual CVID getCvType() const {return MS_ISB_mzXML_format;} virtual std::vector getFileExtensions() const {return {".mzxml", ".xml"};} }; class PWIZ_API_DECL Reader_MGF : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; virtual const char* getType() const {return "Mascot Generic";} virtual CVID getCvType() const {return MS_Mascot_MGF_format;} virtual std::vector getFileExtensions() const {return {".mgf"};} }; class PWIZ_API_DECL Reader_MSn : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; }; class PWIZ_API_DECL Reader_MS1 : public Reader_MSn { public: virtual const char* getType() const {return "MS1";} virtual CVID getCvType() const {return MS_MS1_format;} virtual std::vector getFileExtensions() const { return { ".ms1", ".cms1", ".bms1" }; } }; class PWIZ_API_DECL Reader_MS2 : public Reader_MSn { public: // no-op function: Reader_MS1 is the only one that should do any work (and it just uses Reader_MSn::identify) virtual std::string identify(const std::string& filename, const std::string& head) const { return ""; } virtual const char* getType() const {return "MS2";} virtual CVID getCvType() const {return MS_MS2_format;} virtual std::vector getFileExtensions() const { return { ".ms2", ".cms2", ".bms2" }; } }; class PWIZ_API_DECL Reader_BTDX : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; virtual const char* getType() const {return "Bruker Data Exchange";} virtual CVID getCvType() const {return MS_Bruker_XML_format;} virtual std::vector getFileExtensions() const {return {".xml"};} }; class PWIZ_API_DECL Reader_mz5 : public Reader { public: virtual std::string identify(const std::string& filename, const std::string& head) const; virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; virtual const char* getType() const {return "MZ5";} virtual CVID getCvType() const {return MS_mz5_format;} virtual std::vector getFileExtensions() const {return {".mz5"};} }; /// default Reader list class PWIZ_API_DECL DefaultReaderList : public ReaderList { public: DefaultReaderList(); }; } // namespace msdata } // namespace pwiz #endif // _DEFAULTREADERLIST_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Diff.hpp000066400000000000000000000137671444255175000214250ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _DIFF_HPP_ #define _DIFF_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" namespace pwiz { namespace msdata { struct DiffConfig; } } namespace pwiz { namespace data { namespace diff_impl { using namespace msdata; PWIZ_API_DECL void diff(const SourceFile& a, const SourceFile& b, SourceFile& a_b, SourceFile& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const FileDescription& a, const FileDescription& b, FileDescription& a_b, FileDescription& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Sample& a, const Sample& b, Sample& a_b, Sample& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Component& a, const Component& b, Component& a_b, Component& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const ComponentList& a, const ComponentList& b, ComponentList& a_b, ComponentList& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Software& a, const Software& b, Software& a_b, Software& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const InstrumentConfiguration& a, const InstrumentConfiguration& b, InstrumentConfiguration& a_b, InstrumentConfiguration& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const ProcessingMethod& a, const ProcessingMethod& b, ProcessingMethod& a_b, ProcessingMethod& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const DataProcessing& a, const DataProcessing& b, DataProcessing& a_b, DataProcessing& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const ScanSettings& a, const ScanSettings& b, ScanSettings& a_b, ScanSettings& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Precursor& a, const Precursor& b, Precursor& a_b, Precursor& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Product& a, const Product& b, Product& a_b, Product& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Scan& a, const Scan& b, Scan& a_b, Scan& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const ScanList& a, const ScanList& b, ScanList& a_b, ScanList& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const BinaryDataArray& a, const BinaryDataArray& b, BinaryDataArray& a_b, BinaryDataArray& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const IntegerDataArray& a, const IntegerDataArray& b, IntegerDataArray& a_b, IntegerDataArray& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Spectrum& a, const Spectrum& b, Spectrum& a_b, Spectrum& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Chromatogram& a, const Chromatogram& b, Chromatogram& a_b, Chromatogram& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const SpectrumList& a, const SpectrumList& b, SpectrumListSimple& a_b, SpectrumListSimple& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const ChromatogramList& a, const ChromatogramList& b, ChromatogramListSimple& a_b, ChromatogramListSimple& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const Run& a, const Run& b, Run& a_b, Run& b_a, const DiffConfig& config); PWIZ_API_DECL void diff(const MSData& a, const MSData& b, MSData& a_b, MSData& b_a, const DiffConfig& config); } // namespace diff_impl } // namespace data } // namespace pwiz // this include must come after the above declarations or GCC won't see them #include "pwiz/data/common/diff_std.hpp" namespace pwiz { namespace msdata { /// configuration struct for diffing MSData types struct PWIZ_API_DECL DiffConfig : public pwiz::data::BaseDiffConfig { /// ignore members of SpectrumIdentity and ChromatogramIdentity bool ignoreIdentity; /// ignore all file level metadata, and most scan level metadata, /// i.e. verify scan binary data, plus important scan metadata: /// - msLevel /// - precursor.ionSelection bool ignoreMetadata; /// ignore arrays like mobility, charge state, noise, SNR, etc. bool ignoreExtraBinaryDataArrays; bool ignoreSpectra; bool ignoreChromatograms; bool ignoreDataProcessing; DiffConfig() : pwiz::data::BaseDiffConfig(), ignoreIdentity(false), ignoreMetadata(false), ignoreExtraBinaryDataArrays(false), ignoreSpectra(false), ignoreChromatograms(false), ignoreDataProcessing(false) {} }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const pwiz::data::Diff& diff); } // namespace msdata } // namespace pwiz #endif // _DIFF_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/IO.cpp000066400000000000000000003000361444255175000210430ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "IO.hpp" #include "References.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" #include "SpectrumWorkerThreads.hpp" namespace pwiz { namespace msdata { namespace IO { using namespace minimxml; using namespace minimxml::SAXParser; using namespace util; template void writeList(minimxml::XMLWriter& writer, const vector& objectPtrs, const string& label) { if (!objectPtrs.empty()) { XMLWriter::Attributes attributes; attributes.add("count", objectPtrs.size()); writer.startElement(label, attributes); for (typename vector::const_iterator it = objectPtrs.begin(); it != objectPtrs.end(); ++it) write(writer, **it); writer.endElement(); } } // // CV // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const CV& cv) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(cv.id)); attributes.add("fullName", cv.fullName); attributes.add("version", cv.version); attributes.add("URI", cv.URI); writer.startElement("cv", attributes, XMLWriter::EmptyElement); } struct HandlerCV : public SAXParser::Handler { CV* cv; HandlerCV(CV* _cv = 0) : cv(_cv) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "cv") throw runtime_error(("[IO::HandlerCV] Unexpected element name: " + name).c_str()); decode_xml_id(getAttribute(attributes, "id", cv->id)); getAttribute(attributes, "fullName", cv->fullName); getAttribute(attributes, "version", cv->version); getAttribute(attributes, "URI", cv->URI); return Status::Ok; } }; PWIZ_API_DECL void read(std::istream& is, CV& cv) { HandlerCV handler(&cv); SAXParser::parse(is, handler); } // // UserParam // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const UserParam& userParam) { XMLWriter::Attributes attributes; attributes.add("name", userParam.name); if (!userParam.value.empty()) attributes.add("value", userParam.value); if (!userParam.type.empty()) attributes.add("type", userParam.type); if (userParam.units != CVID_Unknown) { attributes.add("unitAccession", cvTermInfo(userParam.units).id); attributes.add("unitName", cvTermInfo(userParam.units).name); } writer.startElement("userParam", attributes, XMLWriter::EmptyElement); } struct HandlerUserParam : public SAXParser::Handler { UserParam* userParam; HandlerUserParam(UserParam* _userParam = 0) : userParam(_userParam) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "userParam") throw runtime_error(("[IO::HandlerUserParam] Unexpected element name: " + name).c_str()); if (!userParam) throw runtime_error("[IO::HandlerUserParam] Null userParam."); getAttribute(attributes, "name", userParam->name); getAttribute(attributes, "value", userParam->value); getAttribute(attributes, "type", userParam->type); string unitAccession; getAttribute(attributes, "unitAccession", unitAccession); if (!unitAccession.empty()) userParam->units = cvTermInfo(unitAccession).cvid; return Status::Ok; } }; PWIZ_API_DECL void read(std::istream& is, UserParam& userParam) { HandlerUserParam handler(&userParam); SAXParser::parse(is, handler); } // // CVParam // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const CVParam& cvParam) { XMLWriter::Attributes attributes; attributes.add("cvRef", cvTermInfo(cvParam.cvid).prefix()); attributes.add("accession", cvTermInfo(cvParam.cvid).id); attributes.add("name", cvTermInfo(cvParam.cvid).name); attributes.add("value", cvParam.value); if (cvParam.units != CVID_Unknown) { attributes.add("unitCvRef", cvTermInfo(cvParam.units).prefix()); attributes.add("unitAccession", cvTermInfo(cvParam.units).id); attributes.add("unitName", cvTermInfo(cvParam.units).name); } writer.startElement("cvParam", attributes, XMLWriter::EmptyElement); } struct HandlerCVParam : public SAXParser::Handler { CVParam* cvParam; HandlerCVParam(CVParam* _cvParam = 0) : cvParam(_cvParam) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "cvParam") throw runtime_error(("[IO::HandlerCVParam] Unexpected element name: " + name).c_str()); if (!cvParam) throw runtime_error("[IO::HandlerCVParam] Null cvParam."); const char *accession = getAttribute(attributes, "accession", NoXMLUnescape); if (accession) cvParam->cvid = cvTermInfo(accession).cvid; getAttribute(attributes, "value", cvParam->value); const char *unitAccession = getAttribute(attributes, "unitAccession", NoXMLUnescape); if (unitAccession) cvParam->units = cvTermInfo(unitAccession).cvid; return Status::Ok; } }; PWIZ_API_DECL void read(std::istream& is, CVParam& cvParam) { HandlerCVParam handler(&cvParam); SAXParser::parse(is, handler); } // // ParamContainer // // // note: These are auxilliary functions to be called by ParamContainer subclasses // PWIZ_API_DECL void writeParamGroupRef(minimxml::XMLWriter& writer, const ParamGroup& paramGroup) { XMLWriter::Attributes attributes; attributes.add("ref", paramGroup.id); writer.startElement("referenceableParamGroupRef", attributes, XMLWriter::EmptyElement); } PWIZ_API_DECL void writeParamContainer(minimxml::XMLWriter& writer, const ParamContainer& pc) { for (vector::const_iterator it=pc.paramGroupPtrs.begin(); it!=pc.paramGroupPtrs.end(); ++it) writeParamGroupRef(writer, **it); for (vector::const_iterator it=pc.cvParams.begin(); it!=pc.cvParams.end(); ++it) write(writer, *it); for (vector::const_iterator it=pc.userParams.begin(); it!=pc.userParams.end(); ++it) write(writer, *it); } struct HandlerParamContainer : public SAXParser::Handler { ParamContainer* paramContainer; HandlerParamContainer(ParamContainer* _paramContainer = 0) : paramContainer(_paramContainer) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!paramContainer) throw runtime_error("[IO::HandlerParamContainer] Null paramContainer."); if (name == "cvParam") { paramContainer->cvParams.push_back(CVParam()); handlerCVParam_.cvParam = ¶mContainer->cvParams.back(); return Status(Status::Delegate, &handlerCVParam_); } else if (name == "userParam") { paramContainer->userParams.push_back(UserParam()); handlerUserParam_.userParam = ¶mContainer->userParams.back(); return Status(Status::Delegate, &handlerUserParam_); } else if (name == "referenceableParamGroupRef") { // note: placeholder string id; decode_xml_id(getAttribute(attributes, "ref", id)); if (!id.empty()) paramContainer->paramGroupPtrs.push_back(ParamGroupPtr(new ParamGroup(id))); return Status::Ok; } throw runtime_error(("[IO::HandlerParamContainer] Unknown element " + name).c_str()); } private: HandlerCVParam handlerCVParam_; HandlerUserParam handlerUserParam_; }; struct HandlerNamedParamContainer : public HandlerParamContainer { const string name_; HandlerNamedParamContainer(const string& name, ParamContainer* paramContainer = 0) : HandlerParamContainer(paramContainer), name_(name) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == name_) return Status::Ok; return HandlerParamContainer::startElement(name, attributes, position); } }; // // ParamGroup // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ParamGroup& paramGroup) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(paramGroup.id)); writer.startElement("referenceableParamGroup", attributes); writeParamContainer(writer, paramGroup); writer.endElement(); } struct HandlerParamGroup : public HandlerParamContainer { ParamGroup* paramGroup; HandlerParamGroup(ParamGroup* _paramGroup = 0) : paramGroup(_paramGroup) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!paramGroup) throw runtime_error("[IO::HandlerParamGroup] Null paramGroup."); if (name == "referenceableParamGroup") { decode_xml_id(getAttribute(attributes, "id", paramGroup->id)); return Status::Ok; } HandlerParamContainer::paramContainer = paramGroup; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, ParamGroup& paramGroup) { HandlerParamGroup handler(¶mGroup); SAXParser::parse(is, handler); } // // FileContent // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const FileContent& fc) { writer.startElement("fileContent"); writeParamContainer(writer, fc); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, FileContent& fc) { HandlerNamedParamContainer handler("fileContent", &fc); SAXParser::parse(is, handler); } // // SourceFile // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SourceFile& sf) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(sf.id)); attributes.add("name", sf.name); attributes.add("location", sf.location); writer.startElement("sourceFile", attributes); writeParamContainer(writer, sf); writer.endElement(); } void writeSourceFileRef(minimxml::XMLWriter& writer, const SourceFile& sourceFile) { XMLWriter::Attributes attributes; attributes.add("ref", encode_xml_id_copy(sourceFile.id)); writer.startElement("sourceFileRef", attributes, XMLWriter::EmptyElement); } struct HandlerSourceFile : public HandlerParamContainer { SourceFile* sourceFile; HandlerSourceFile(SourceFile* _sourceFile = 0) : sourceFile(_sourceFile) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!sourceFile) throw runtime_error("[IO::HandlerSourceFile] Null sourceFile."); if (name == "sourceFile") { decode_xml_id(getAttribute(attributes, "id", sourceFile->id)); getAttribute(attributes, "name", sourceFile->name); getAttribute(attributes, "location", sourceFile->location); return Status::Ok; } HandlerParamContainer::paramContainer = sourceFile; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, SourceFile& sf) { HandlerSourceFile handler(&sf); SAXParser::parse(is, handler); } // // Contact // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Contact& c) { writer.startElement("contact"); writeParamContainer(writer, c); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, Contact& c) { HandlerNamedParamContainer handler("contact", &c); SAXParser::parse(is, handler); } // // FileDescription // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const FileDescription& fd) { writer.startElement("fileDescription"); write(writer, fd.fileContent); writeList(writer, fd.sourceFilePtrs, "sourceFileList"); for (vector::const_iterator it=fd.contacts.begin(); it!=fd.contacts.end(); ++it) write(writer, *it); writer.endElement(); } struct HandlerFileDescription : public SAXParser::Handler { FileDescription* fileDescription; HandlerFileDescription(FileDescription* _fileDescription = 0) : fileDescription(_fileDescription), handlerFileContent_("fileContent"), handlerContact_("contact") {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!fileDescription) throw runtime_error("[IO::HandlerFileDescription] Null fileDescription."); if (name == "fileDescription") { return Status::Ok; } else if (name == "fileContent") { handlerFileContent_.paramContainer = &fileDescription->fileContent; return Status(Status::Delegate, &handlerFileContent_); } else if (name == "sourceFileList") { return Status::Ok; } else if (name == "sourceFile") { fileDescription->sourceFilePtrs.push_back(SourceFilePtr(new SourceFile)); handlerSourceFile_.sourceFile = fileDescription->sourceFilePtrs.back().get(); return Status(Status::Delegate, &handlerSourceFile_); } else if (name == "contact") { fileDescription->contacts.push_back(Contact()); handlerContact_.paramContainer = &fileDescription->contacts.back(); return Status(Status::Delegate, &handlerContact_); } throw runtime_error(("[IO::HandlerFileDescription] Unknown element " + name).c_str()); } private: HandlerNamedParamContainer handlerFileContent_; HandlerSourceFile handlerSourceFile_; HandlerNamedParamContainer handlerContact_; }; PWIZ_API_DECL void read(std::istream& is, FileDescription& fd) { HandlerFileDescription handler(&fd); SAXParser::parse(is, handler); } // // Sample // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Sample& sample) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(sample.id)); attributes.add("name", sample.name); writer.startElement("sample", attributes); writeParamContainer(writer, sample); writer.endElement(); } struct HandlerSample : public HandlerParamContainer { Sample* sample; HandlerSample(Sample* _sample = 0) : sample(_sample) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!sample) throw runtime_error("[IO::HandlerSample] Null sample."); if (name == "sample") { decode_xml_id(getAttribute(attributes, "id", sample->id)); getAttribute(attributes, "name", sample->name); return Status::Ok; } HandlerParamContainer::paramContainer = sample; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, Sample& sample) { HandlerSample handler(&sample); SAXParser::parse(is, handler); } // // Component (Source, Analyzer, Detector) // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Component& component) { XMLWriter::Attributes attributes; attributes.add("order", component.order); switch (component.type) { case ComponentType_Source: writer.startElement("source", attributes); break; case ComponentType_Analyzer: writer.startElement("analyzer", attributes); break; case ComponentType_Detector: writer.startElement("detector", attributes); break; case ComponentType_Unknown: throw runtime_error("[IO::write] Unknown component type."); } writeParamContainer(writer, component); writer.endElement(); } struct HandlerComponent : public HandlerParamContainer { Component* component; HandlerComponent(Component* _component = 0) : component(_component) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!component) throw runtime_error("[IO::HandlerComponent] Null component."); if (name=="source" || name=="analyzer" || name=="detector") { getAttribute(attributes, "order", component->order); return Status::Ok; } HandlerParamContainer::paramContainer = component; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, Component& component) { HandlerComponent handler(&component); SAXParser::parse(is, handler); } // // ComponentList // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ComponentList& componentList) { if (componentList.empty()) // componentList not required by schema return; int count = (int) componentList.size(); XMLWriter::Attributes attributes; attributes.add("count", count); writer.startElement("componentList", attributes); for (size_t i=0; i < componentList.size(); ++i) write(writer, componentList[i]); writer.endElement(); } struct HandlerComponentList : public SAXParser::Handler { ComponentList* componentList; HandlerComponentList(ComponentList* _componentList = 0) : componentList(_componentList) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!componentList) throw runtime_error("[IO::HandlerComponentList] Null componentList."); if (name == "componentList") { return Status::Ok; } else if (name == "source") { componentList->push_back(Component(ComponentType_Source, 1)); handlerComponent_.component = &componentList->back(); return Status(Status::Delegate, &handlerComponent_); } else if (name == "analyzer") { componentList->push_back(Component(ComponentType_Analyzer, 1)); handlerComponent_.component = &componentList->back(); return Status(Status::Delegate, &handlerComponent_); } else if (name == "detector") { componentList->push_back(Component(ComponentType_Detector, 1)); handlerComponent_.component = &componentList->back(); return Status(Status::Delegate, &handlerComponent_); } throw runtime_error(("[IO::HandlerComponentList] Unexpected element name: " + name).c_str()); } private: HandlerComponent handlerComponent_; }; PWIZ_API_DECL void read(std::istream& is, ComponentList& componentList) { HandlerComponentList handler(&componentList); SAXParser::parse(is, handler); } // // Software // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Software& software) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(software.id)); attributes.add("version", software.version); writer.startElement("software", attributes); writeParamContainer(writer, software); writer.endElement(); } struct HandlerSoftware : public HandlerParamContainer { Software* software; HandlerSoftware(Software* _software = 0) : software(_software) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!software) throw runtime_error("[IO::HandlerSoftware] Null software."); if (name == "software") { decode_xml_id(getAttribute(attributes, "id", software->id)); getAttribute(attributes, "version", software->version); return Status::Ok; } // mzML 1.0 else if (version == 1 && name == "softwareParam") { string accession; getAttribute(attributes, "accession", accession); if (!accession.empty()) software->set(cvTermInfo(accession).cvid); getAttribute(attributes, "version", software->version); return Status::Ok; } HandlerParamContainer::paramContainer = software; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, Software& software) { HandlerSoftware handler(&software); SAXParser::parse(is, handler); } // // InstrumentConfiguration // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const InstrumentConfiguration& instrumentConfiguration) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(instrumentConfiguration.id)); writer.startElement("instrumentConfiguration", attributes); writeParamContainer(writer, instrumentConfiguration); if (!instrumentConfiguration.componentList.empty()) // optional element write(writer, instrumentConfiguration.componentList); if (instrumentConfiguration.softwarePtr.get()) { attributes.clear(); attributes.add("ref", encode_xml_id_copy(instrumentConfiguration.softwarePtr->id)); writer.startElement("softwareRef", attributes, XMLWriter::EmptyElement); } writer.endElement(); } struct HandlerInstrumentConfiguration : public HandlerParamContainer { InstrumentConfiguration* instrumentConfiguration; HandlerInstrumentConfiguration(InstrumentConfiguration* _instrumentConfiguration = 0) : instrumentConfiguration(_instrumentConfiguration) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!instrumentConfiguration) throw runtime_error("[IO::HandlerInstrumentConfiguration] Null instrumentConfiguration."); if (name == "instrumentConfiguration") { decode_xml_id(getAttribute(attributes, "id", instrumentConfiguration->id)); return Status::Ok; } else if (name == "componentList") { handlerComponentList_.componentList = &instrumentConfiguration->componentList; return Status(Status::Delegate, &handlerComponentList_); } else if (name == "softwareRef") { // note: placeholder string ref; decode_xml_id(getAttribute(attributes, "ref", ref)); if (!ref.empty()) instrumentConfiguration->softwarePtr = SoftwarePtr(new Software(ref)); return Status::Ok; } HandlerParamContainer::paramContainer = instrumentConfiguration; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerComponentList handlerComponentList_; }; PWIZ_API_DECL void read(std::istream& is, InstrumentConfiguration& instrumentConfiguration) { HandlerInstrumentConfiguration handler(&instrumentConfiguration); SAXParser::parse(is, handler); } // // ProcessingMethod // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ProcessingMethod& processingMethod) { XMLWriter::Attributes attributes; attributes.add("order", processingMethod.order); if (processingMethod.softwarePtr.get()) attributes.add("softwareRef", encode_xml_id_copy(processingMethod.softwarePtr->id)); writer.startElement("processingMethod", attributes); writeParamContainer(writer, processingMethod); writer.endElement(); } struct HandlerProcessingMethod : public HandlerParamContainer { ProcessingMethod* processingMethod; string defaultSoftwareRef; HandlerProcessingMethod(ProcessingMethod* _processingMethod = 0) : processingMethod(_processingMethod) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!processingMethod) throw runtime_error("[IO::HandlerProcessingMethod] Null processingMethod."); if (name == "processingMethod") { getAttribute(attributes, "order", processingMethod->order); // note: placeholder string softwareRef; decode_xml_id(getAttribute(attributes, "softwareRef", softwareRef)); if (!softwareRef.empty()) processingMethod->softwarePtr = SoftwarePtr(new Software(softwareRef)); else if (!defaultSoftwareRef.empty()) processingMethod->softwarePtr = SoftwarePtr(new Software(defaultSoftwareRef)); return Status::Ok; } HandlerParamContainer::paramContainer = processingMethod; return HandlerParamContainer::startElement(name, attributes, position); } }; PWIZ_API_DECL void read(std::istream& is, ProcessingMethod& processingMethod) { HandlerProcessingMethod handler(&processingMethod); SAXParser::parse(is, handler); } // // DataProcessing // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const DataProcessing& dataProcessing) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(dataProcessing.id)); writer.startElement("dataProcessing", attributes); for (vector::const_iterator it=dataProcessing.processingMethods.begin(); it!=dataProcessing.processingMethods.end(); ++it) write(writer, *it); writer.endElement(); } struct HandlerDataProcessing : public HandlerParamContainer { DataProcessing* dataProcessing; HandlerDataProcessing(DataProcessing* _dataProcessing = 0) : dataProcessing(_dataProcessing) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!dataProcessing) throw runtime_error("[IO::HandlerDataProcessing] Null dataProcessing."); if (name == "dataProcessing") { decode_xml_id(getAttribute(attributes, "id", dataProcessing->id)); // mzML 1.0 if (version == 1) { string softwareRef; getAttribute(attributes, "softwareRef", softwareRef); if (!softwareRef.empty()) handlerProcessingMethod_.defaultSoftwareRef = softwareRef; } return Status::Ok; } else if (name == "processingMethod") { dataProcessing->processingMethods.push_back(ProcessingMethod()); handlerProcessingMethod_.processingMethod = &dataProcessing->processingMethods.back(); return Status(Status::Delegate, &handlerProcessingMethod_); } throw runtime_error(("[IO::HandlerDataProcessing] Unexpected element name: " + name).c_str()); } private: HandlerProcessingMethod handlerProcessingMethod_; }; PWIZ_API_DECL void read(std::istream& is, DataProcessing& dataProcessing) { HandlerDataProcessing handler(&dataProcessing); SAXParser::parse(is, handler); } // // Target // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Target& t) { writer.startElement("target"); writeParamContainer(writer, t); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, Target& t) { HandlerNamedParamContainer handler("target", &t); SAXParser::parse(is, handler); } // // ScanSettings // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanSettings& scanSettings) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(scanSettings.id)); writer.startElement("scanSettings", attributes); if (!scanSettings.sourceFilePtrs.empty()) { attributes.clear(); attributes.add("count", scanSettings.sourceFilePtrs.size()); writer.startElement("sourceFileRefList", attributes); for (vector::const_iterator it=scanSettings.sourceFilePtrs.begin(); it!=scanSettings.sourceFilePtrs.end(); ++it) writeSourceFileRef(writer, **it); writer.endElement(); // sourceFileRefList } if (!scanSettings.targets.empty()) { XMLWriter::Attributes attributes; attributes.add("count", scanSettings.targets.size()); writer.startElement("targetList", attributes); for (vector::const_iterator it=scanSettings.targets.begin(); it!=scanSettings.targets.end(); ++it) write(writer, *it); writer.endElement(); // targetList } writer.endElement(); } struct HandlerScanSettings : public HandlerParamContainer { ScanSettings* scanSettings; HandlerScanSettings(ScanSettings* _scanSettings = 0) : scanSettings(_scanSettings), handlerTarget_("target") {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!scanSettings) throw runtime_error("[IO::HandlerScanSettings] Null scanSettings."); if ((version == 1 && name == "acquisitionSettings") /* mzML 1.0 */ || name == "scanSettings") { decode_xml_id(getAttribute(attributes, "id", scanSettings->id)); return Status::Ok; } else if (name=="sourceFileRefList" || name=="targetList") { return Status::Ok; } else if (name=="sourceFileRef") { // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "ref", sourceFileRef)); if (!sourceFileRef.empty()) scanSettings->sourceFilePtrs.push_back(SourceFilePtr(new SourceFile(sourceFileRef))); return Status::Ok; } else if (name=="target") { scanSettings->targets.push_back(Target()); handlerTarget_.paramContainer = &scanSettings->targets.back(); return Status(Status::Delegate, &handlerTarget_); } throw runtime_error(("[IO::HandlerScanSettings] Unexpected element name: " + name).c_str()); } private: HandlerNamedParamContainer handlerTarget_; }; PWIZ_API_DECL void read(std::istream& is, ScanSettings& scanSettings) { HandlerScanSettings handler(&scanSettings); SAXParser::parse(is, handler); } // // IsolationWindow // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const IsolationWindow& isolationWindow) { writer.startElement("isolationWindow"); writeParamContainer(writer, isolationWindow); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, IsolationWindow& isolationWindow) { HandlerNamedParamContainer handler("isolationWindow", &isolationWindow); SAXParser::parse(is, handler); } // // SelectedIon // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SelectedIon& selectedIon) { writer.startElement("selectedIon"); writeParamContainer(writer, selectedIon); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, SelectedIon& selectedIon) { HandlerNamedParamContainer handler("selectedIon", &selectedIon); SAXParser::parse(is, handler); } // // Activation // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Activation& activation) { writer.startElement("activation"); writeParamContainer(writer, activation); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, Activation& activation) { HandlerNamedParamContainer handler("activation", &activation); SAXParser::parse(is, handler); } // // Precursor // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Precursor& precursor) { XMLWriter::Attributes attributes; if (precursor.spectrumID.empty()) { if (!precursor.externalSpectrumID.empty()) { if (!precursor.sourceFilePtr.get()) throw runtime_error("[IO::write] External spectrum references must refer to a source file"); attributes.add("sourceFileRef", encode_xml_id_copy(precursor.sourceFilePtr->id)); attributes.add("externalSpectrumID", precursor.externalSpectrumID); } } else attributes.add("spectrumRef", precursor.spectrumID); // not an XML:IDREF writer.startElement("precursor", attributes); writeParamContainer(writer, precursor); if (!precursor.isolationWindow.empty()) { writer.startElement("isolationWindow"); writeParamContainer(writer, precursor.isolationWindow); writer.endElement(); // isolationWindow } if (!precursor.selectedIons.empty()) { attributes.clear(); attributes.add("count", precursor.selectedIons.size()); writer.startElement("selectedIonList", attributes); for (vector::const_iterator it=precursor.selectedIons.begin(); it!=precursor.selectedIons.end(); ++it) { writer.startElement("selectedIon"); writeParamContainer(writer, *it); writer.endElement(); // selectedIon } writer.endElement(); // selectedIonList } writer.startElement("activation"); writeParamContainer(writer, precursor.activation); writer.endElement(); // activation writer.endElement(); } struct HandlerPrecursor : public HandlerParamContainer { Precursor* precursor; const map* legacyIdRefToNativeId; HandlerPrecursor(Precursor* _precursor = 0, const map* legacyIdRefToNativeId = 0) : precursor(_precursor), legacyIdRefToNativeId(legacyIdRefToNativeId), handlerIsolationWindow_("isolationWindow"), handlerSelectedIon_("selectedIon"), handlerActivation_("activation") {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!precursor) throw runtime_error("[IO::HandlerPrecursor] Null precursor."); if (name == "precursor") { getAttribute(attributes, "spectrumRef", precursor->spectrumID); // not an XML:IDREF getAttribute(attributes, "externalSpectrumID", precursor->externalSpectrumID); // mzML 1.0 if (version == 1 && legacyIdRefToNativeId && !precursor->spectrumID.empty()) { map::const_iterator itr = legacyIdRefToNativeId->find(precursor->spectrumID); if (itr != legacyIdRefToNativeId->end()) precursor->spectrumID = itr->second; } // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "sourceFileRef", sourceFileRef)); if (!sourceFileRef.empty()) precursor->sourceFilePtr = SourceFilePtr(new SourceFile(sourceFileRef)); return Status::Ok; } else if (name == "isolationWindow") { handlerIsolationWindow_.paramContainer = &precursor->isolationWindow; return Status(Status::Delegate, &handlerIsolationWindow_); } else if (name == "selectedIon") { precursor->selectedIons.push_back(SelectedIon()); handlerSelectedIon_.paramContainer = &precursor->selectedIons.back(); return Status(Status::Delegate, &handlerSelectedIon_); } else if (name == "activation") { handlerActivation_.paramContainer = &precursor->activation; return Status(Status::Delegate, &handlerActivation_); } else if (name == "selectedIonList") { return Status::Ok; } HandlerParamContainer::paramContainer = precursor; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerNamedParamContainer handlerIsolationWindow_; HandlerNamedParamContainer handlerSelectedIon_; HandlerNamedParamContainer handlerActivation_; }; PWIZ_API_DECL void read(std::istream& is, Precursor& precursor, const map* legacyIdRefToNativeId) { HandlerPrecursor handler(&precursor, legacyIdRefToNativeId); SAXParser::parse(is, handler); } // // Product // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Product& product) { XMLWriter::Attributes attributes; writer.startElement("product", attributes); if (!product.isolationWindow.empty()) { writer.startElement("isolationWindow"); writeParamContainer(writer, product.isolationWindow); writer.endElement(); // isolationWindow } writer.endElement(); } struct HandlerProduct : public SAXParser::Handler { Product* product; HandlerProduct(Product* _product = 0) : product(_product), handlerIsolationWindow_("isolationWindow") {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!product) throw runtime_error("[IO::HandlerProduct] Null product."); if (name == "product") { return Status::Ok; } else if (name == "isolationWindow") { handlerIsolationWindow_.paramContainer = &product->isolationWindow; return Status(Status::Delegate, &handlerIsolationWindow_); } throw runtime_error(("[IO::HandlerProduct] Unknown element " + name).c_str()); } private: HandlerNamedParamContainer handlerIsolationWindow_; }; PWIZ_API_DECL void read(std::istream& is, Product& product) { HandlerProduct handler(&product); SAXParser::parse(is, handler); } // // ScanWindow // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanWindow& scanWindow) { writer.startElement("scanWindow"); writeParamContainer(writer, scanWindow); writer.endElement(); } PWIZ_API_DECL void read(std::istream& is, ScanWindow& scanWindow) { HandlerNamedParamContainer handler("scanWindow", &scanWindow); SAXParser::parse(is, handler); } // // Scan // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Scan& scan, const MSData& msd) { XMLWriter::Attributes attributes; if (scan.spectrumID.empty()) { if (!scan.externalSpectrumID.empty()) { if (!scan.sourceFilePtr.get()) throw runtime_error("[IO::write] External spectrum references must refer to a source file"); attributes.add("sourceFileRef", encode_xml_id_copy(scan.sourceFilePtr->id)); attributes.add("externalSpectrumID", scan.externalSpectrumID); } } else attributes.add("spectrumRef", scan.spectrumID); // not an XML:IDREF // don't write the instrumentConfigurationRef if it's set to the default const InstrumentConfigurationPtr& defaultIC = msd.run.defaultInstrumentConfigurationPtr; if (scan.instrumentConfigurationPtr.get() && (!defaultIC.get() || scan.instrumentConfigurationPtr != defaultIC)) attributes.add("instrumentConfigurationRef", encode_xml_id_copy(scan.instrumentConfigurationPtr->id)); writer.startElement("scan", attributes); writeParamContainer(writer, scan); if (!scan.scanWindows.empty()) { attributes.clear(); attributes.add("count", scan.scanWindows.size()); writer.startElement("scanWindowList", attributes); for (vector::const_iterator it=scan.scanWindows.begin(); it!=scan.scanWindows.end(); ++it) write(writer, *it); writer.endElement(); } writer.endElement(); } struct HandlerScan : public HandlerParamContainer { Scan* scan; HandlerScan(Scan* _scan = 0) : scan(_scan), handlerScanWindow_("scanWindow") {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!scan) throw runtime_error("[IO::HandlerScan] Null scan."); if (name != "cvParam") { // most common, but not handled here if (name == "scan") { getAttribute(attributes, "spectrumRef", scan->spectrumID); // not an XML:IDREF getAttribute(attributes, "externalSpectrumID", scan->externalSpectrumID); // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "sourceFileRef", sourceFileRef)); if (!sourceFileRef.empty()) scan->sourceFilePtr = SourceFilePtr(new SourceFile(sourceFileRef)); // note: placeholder string instrumentConfigurationRef; decode_xml_id(getAttribute(attributes, "instrumentConfigurationRef", instrumentConfigurationRef)); if (!instrumentConfigurationRef.empty()) scan->instrumentConfigurationPtr = InstrumentConfigurationPtr(new InstrumentConfiguration(instrumentConfigurationRef)); return Status::Ok; } else if (version == 1 && name == "acquisition") { // note: spectrumRef, externalNativeID, and externalSpectrumID are mutually exclusive getAttribute(attributes, "spectrumRef", scan->spectrumID); // not an XML:IDREF if (scan->spectrumID.empty()) { string externalNativeID; getAttribute(attributes, "externalNativeID", externalNativeID); if (externalNativeID.empty()) getAttribute(attributes, "externalSpectrumID", scan->externalSpectrumID); else try { lexical_cast(externalNativeID); //cerr << "[IO::HandlerScan] Warning - mzML 1.0: ::externalNativeID\n"; scan->externalSpectrumID = "scan=" + externalNativeID; } catch(exception&) { //cerr << "[IO::HandlerScan] Warning - mzML 1.0: non-integral ::externalNativeID; externalSpectrumID format unknown\n"; scan->externalSpectrumID = externalNativeID; } } // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "sourceFileRef", sourceFileRef)); if (!sourceFileRef.empty()) scan->sourceFilePtr = SourceFilePtr(new SourceFile(sourceFileRef)); return Status::Ok; } else if (name == "scanWindowList") { return Status::Ok; } else if (name == "scanWindow") { scan->scanWindows.push_back(ScanWindow()); handlerScanWindow_.paramContainer = &scan->scanWindows.back(); return Status(Status::Delegate, &handlerScanWindow_); } } // end if not cvParam HandlerParamContainer::paramContainer = scan; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerNamedParamContainer handlerScanWindow_; }; PWIZ_API_DECL void read(std::istream& is, Scan& scan) { HandlerScan handler(&scan); SAXParser::parse(is, handler); } // // ScanList // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanList& scanList, const MSData& msd) { XMLWriter::Attributes attributes; attributes.add("count", scanList.scans.size()); writer.startElement("scanList", attributes); writeParamContainer(writer, scanList); for (vector::const_iterator it=scanList.scans.begin(); it!=scanList.scans.end(); ++it) write(writer, *it, msd); writer.endElement(); } struct HandlerScanList : public HandlerParamContainer { ScanList* scanList; HandlerScanList(ScanList* _scanList = 0) : scanList(_scanList) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!scanList) throw runtime_error("[IO::HandlerScanList] Null scanList."); if (name == "scanList" || name == "acquisitionList") { return Status::Ok; } else if (name == "scan" || name == "acquisition") { scanList->scans.push_back(Scan()); handlerScan_.version = version; handlerScan_.scan = &scanList->scans.back(); return Status(Status::Delegate, &handlerScan_); } HandlerParamContainer::paramContainer = scanList; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerScan handlerScan_; }; PWIZ_API_DECL void read(std::istream& is, ScanList& scanList) { HandlerScanList handler(&scanList); SAXParser::parse(is, handler); } // // BinaryData // template void writeBinaryDataArray(minimxml::XMLWriter& writer, const BinaryDataArrayType& binaryDataArray, const BinaryDataEncoder::Config& config) { BinaryDataEncoder::Config usedConfig = config; map::const_iterator overrideItr = config.precisionOverrides.find(binaryDataArray.cvParamChild(MS_binary_data_array).cvid); if (overrideItr != config.precisionOverrides.end()) usedConfig.precision = overrideItr->second; map::const_iterator n_overrideItr = config.numpressOverrides.find(binaryDataArray.cvParamChild(MS_binary_data_array).cvid); if (n_overrideItr != config.numpressOverrides.end()) usedConfig.numpress = n_overrideItr->second; BinaryDataEncoder encoder(usedConfig); string encoded; encoder.encode(binaryDataArray.data, encoded); usedConfig = encoder.getConfig(); // config may have changed if numpress error was excessive XMLWriter::Attributes attributes; // primary array types can never override the default array length if (!binaryDataArray.hasCVParam(MS_m_z_array) && !binaryDataArray.hasCVParam(MS_time_array) && !binaryDataArray.hasCVParam(MS_intensity_array)) { attributes.add("arrayLength", binaryDataArray.data.size()); } attributes.add("encodedLength", encoded.size()); if (binaryDataArray.dataProcessingPtr.get()) attributes.add("dataProcessingRef", encode_xml_id_copy(binaryDataArray.dataProcessingPtr->id)); writer.startElement("binaryDataArray", attributes); if (BinaryDataEncoder::Numpress_None == usedConfig.numpress) { if (usedConfig.precision == BinaryDataEncoder::Precision_32) write(writer, typeid(BinaryDataArrayType) == typeid(IntegerDataArray) ? MS_32_bit_integer : MS_32_bit_float); else write(writer, typeid(BinaryDataArrayType) == typeid(IntegerDataArray) ? MS_64_bit_integer : MS_64_bit_float); } if (usedConfig.byteOrder == BinaryDataEncoder::ByteOrder_BigEndian) throw runtime_error("[IO::write()] mzML: must use little endian encoding."); bool zlib = false; // Handle numpress+zlib switch (usedConfig.compression) { case BinaryDataEncoder::Compression_None: if (BinaryDataEncoder::Numpress_None == usedConfig.numpress) write(writer, MS_no_compression); break; case BinaryDataEncoder::Compression_Zlib: zlib = true; if (BinaryDataEncoder::Numpress_None == usedConfig.numpress) write(writer, MS_zlib_compression); break; default: throw runtime_error("[IO::write()] Unsupported compression method."); break; } switch (usedConfig.numpress) { case BinaryDataEncoder::Numpress_Linear: write(writer, MS_32_bit_float); // This should actually be ignored by any reader since numpress defines word size and format, but it makes output standards-compliant and is pretty close to true anyway write(writer, zlib ? MS_MS_Numpress_linear_prediction_compression_followed_by_zlib_compression : MS_MS_Numpress_linear_prediction_compression); break; case BinaryDataEncoder::Numpress_Pic: write(writer, MS_32_bit_integer); // This should actually be ignored by any reader since numpress defines word size and format, but it makes output standards-compliant and is pretty close to true anyway write(writer, zlib ? MS_MS_Numpress_positive_integer_compression_followed_by_zlib_compression : MS_MS_Numpress_positive_integer_compression); break; case BinaryDataEncoder::Numpress_Slof: write(writer, MS_32_bit_float); // This should actually be ignored by any reader since numpress defines word size and format, but it makes output standards-compliant and is pretty close to true anyway write(writer, zlib ? MS_MS_Numpress_short_logged_float_compression_followed_by_zlib_compression : MS_MS_Numpress_short_logged_float_compression); break; case BinaryDataEncoder::Numpress_None: break; default: throw runtime_error("[IO::write()] Unsupported numpress method."); break; } writeParamContainer(writer, binaryDataArray); writer.pushStyle(XMLWriter::StyleFlag_InlineInner); writer.startElement("binary"); writer.characters(encoded, false); // base64 doesn't use any reserved characters writer.endElement(); writer.popStyle(); writer.endElement(); } PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const BinaryDataArray& binaryDataArray, const BinaryDataEncoder::Config& config) { writeBinaryDataArray(writer, binaryDataArray, config); } PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const IntegerDataArray& binaryDataArray, const BinaryDataEncoder::Config& config) { writeBinaryDataArray(writer, binaryDataArray, config); } struct HandlerBinaryDataArray : public HandlerParamContainer { std::vector* binaryDataArrayPtrs; std::vector* integerDataArrayPtrs; const MSData* msd; size_t defaultArrayLength; BinaryDataEncoder::Config config; ParamContainer paramContainer; DataProcessingPtr dataProcessingPtr; CVID cvidBinaryDataType; BinaryDataFlag binaryDataFlag; BinaryDataArray* binaryDataArray; IntegerDataArray* integerDataArray; HandlerBinaryDataArray(std::vector* binaryDataArrayPtrs = 0, std::vector* integerDataArrayPtrs = 0, const MSData* _msd = 0, BinaryDataFlag binaryDataFlag = ReadBinaryData) : binaryDataArrayPtrs(binaryDataArrayPtrs), integerDataArrayPtrs(integerDataArrayPtrs), msd(_msd), defaultArrayLength(0), binaryDataFlag(binaryDataFlag), arrayLength_(0), encodedLength_(0) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "cvParam") // most common, but not handled here { if (name == "binaryDataArray") { paramContainer.clear(); // note: placeholder string dataProcessingRef; decode_xml_id(getAttribute(attributes, "dataProcessingRef", dataProcessingRef)); if (!dataProcessingRef.empty()) dataProcessingPtr.reset(new DataProcessing(dataProcessingRef)); else dataProcessingPtr.reset(); getAttribute(attributes, "encodedLength", encodedLength_, NoXMLUnescape); getAttribute(attributes, "arrayLength", arrayLength_, NoXMLUnescape, defaultArrayLength); return Status::Ok; } else if (name == "binary") { if (msd) References::resolve(paramContainer, *msd); config = getConfig(); CVID binaryArrayType; if (binaryDataFlag == ReadBinaryDataOnly) binaryArrayType = paramContainer.cvParamChild(MS_binary_data_array).cvid; switch (cvidBinaryDataType) { case MS_32_bit_float: case MS_64_bit_float: { if (binaryDataFlag == ReadBinaryDataOnly) { binaryDataArray = nullptr; for (const auto& arrayPtr : *binaryDataArrayPtrs) if (arrayPtr->hasCVParam(binaryArrayType)) { binaryDataArray = &*arrayPtr; break; } if (binaryDataArray != nullptr) return Status::Ok; } BinaryDataArrayPtr binaryDataArray = boost::make_shared(); binaryDataArrayPtrs->emplace_back(binaryDataArray); swap(static_cast(*binaryDataArray), paramContainer); binaryDataArray->dataProcessingPtr = dataProcessingPtr; this->binaryDataArray = &*binaryDataArrayPtrs->back(); } break; case MS_32_bit_integer: case MS_64_bit_integer: { if (binaryDataFlag == ReadBinaryDataOnly) { integerDataArray = nullptr; for (const auto& arrayPtr : *integerDataArrayPtrs) if (arrayPtr->hasCVParam(binaryArrayType)) { integerDataArray = &*arrayPtr; break; } if (integerDataArray != nullptr) return Status::Ok; } IntegerDataArrayPtr binaryDataArray = boost::make_shared(); integerDataArrayPtrs->emplace_back(binaryDataArray); swap(static_cast(*binaryDataArray), paramContainer); binaryDataArray->dataProcessingPtr = dataProcessingPtr; this->integerDataArray = &*integerDataArrayPtrs->back(); } break; case CVID_Unknown: default: throw runtime_error("[IO::HandlerBinaryDataArray] Unknown binary data type."); } return Status::Ok; } } // end if not cvParam HandlerParamContainer::paramContainer = ¶mContainer; return HandlerParamContainer::startElement(name, attributes, position); } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { if (binaryDataFlag == IgnoreBinaryData) return Status::Ok; BinaryDataEncoder encoder(config); switch (cvidBinaryDataType) { case MS_32_bit_float: case MS_64_bit_float: { encoder.decode(text.c_str(), text.length(), binaryDataArray->data); if (binaryDataArray->data.size() != arrayLength_) throw runtime_error((format("[IO::HandlerBinaryDataArray] At position %d: expected array of size %d, but decoded array is actually size %d.") % position % arrayLength_ % binaryDataArray->data.size()).str()); } break; case MS_32_bit_integer: case MS_64_bit_integer: { encoder.decode(text.c_str(), text.length(), integerDataArray->data); if (integerDataArray->data.size() != arrayLength_) throw runtime_error((format("[IO::HandlerBinaryDataArray] At position %d: expected array of size %d, but decoded array is actually size %d.") % position % arrayLength_ % integerDataArray->data.size()).str()); } break; case CVID_Unknown: default: throw runtime_error("[IO::HandlerBinaryDataArray] Unknown binary data type."); } if (text.length() != encodedLength_) throw runtime_error("[IO::HandlerBinaryDataArray] At position " + lexical_cast(position) + ": encoded lengths differ."); return Status::Ok; } private: size_t arrayLength_; size_t encodedLength_; CVID extractCVParam(ParamContainer& container, CVID cvid) { vector& params = container.cvParams; vector::iterator it = find_if(params.begin(), params.end(), CVParamIsChildOf(cvid)); CVID result = CVID_Unknown; if (it != params.end()) { // found the cvid in container -- erase the CVParam result = it->cvid; params.erase(it); } else { // didn't find it -- search recursively, but don't erase anything CVParam temp = container.cvParamChild(cvid); result = temp.cvid; } return result; } void extractCVParams(ParamContainer& container, CVID cvid, vector &results) { vector& params = container.cvParams; vector::iterator it; while ((it = find_if(params.begin(), params.end(),CVParamIsChildOf(cvid))) != params.end()) { // found the cvid in container -- erase the CVParam results.push_back(it->cvid); params.erase(it); } // also search recursively, but don't erase anything vector CVParams = container.cvParamChildren(cvid); BOOST_FOREACH(const CVParam& cvParam, CVParams) results.push_back(cvParam.cvid); } BinaryDataEncoder::Config getConfig() { BinaryDataEncoder::Config config; // // Note: these CVParams are really info about the encoding, and not // part of the BinaryDataArray. We look at them to see how to decode the data, // and remove them from the BinaryDataArray struct (extractCVParam does the removal). // cvidBinaryDataType = extractCVParam(paramContainer, MS_binary_data_type); // handle mix of zlib and numpress compression CVID cvidCompressionType; config.compression = BinaryDataEncoder::Compression_None; config.numpress = BinaryDataEncoder::Numpress_None; vector children; extractCVParams(paramContainer, MS_binary_data_compression_type, children); BOOST_FOREACH(cvidCompressionType,children) { switch (cvidCompressionType) { case MS_no_compression: config.compression = BinaryDataEncoder::Compression_None; break; case MS_zlib_compression: config.compression = BinaryDataEncoder::Compression_Zlib; break; case MS_MS_Numpress_linear_prediction_compression: config.numpress = BinaryDataEncoder::Numpress_Linear; break; case MS_MS_Numpress_positive_integer_compression: config.numpress = BinaryDataEncoder::Numpress_Pic; break; case MS_MS_Numpress_short_logged_float_compression: config.numpress = BinaryDataEncoder::Numpress_Slof; break; case MS_MS_Numpress_linear_prediction_compression_followed_by_zlib_compression: config.numpress = BinaryDataEncoder::Numpress_Linear; config.compression = BinaryDataEncoder::Compression_Zlib; break; case MS_MS_Numpress_positive_integer_compression_followed_by_zlib_compression: config.numpress = BinaryDataEncoder::Numpress_Pic; config.compression = BinaryDataEncoder::Compression_Zlib; break; case MS_MS_Numpress_short_logged_float_compression_followed_by_zlib_compression: config.numpress = BinaryDataEncoder::Numpress_Slof; config.compression = BinaryDataEncoder::Compression_Zlib; break; default: throw runtime_error("[IO::HandlerBinaryDataArray] Unknown compression type."); } } // if numpress is on, make sure output is directed to BinaryDataArray instead of IntegerDataArray if (BinaryDataEncoder::Numpress_None != config.numpress) switch (cvidBinaryDataType) { case MS_32_bit_integer: cvidBinaryDataType = MS_32_bit_float; break; case MS_64_bit_integer: cvidBinaryDataType = MS_64_bit_float; break; case CVID_Unknown: throw runtime_error("[IO::HandlerBinaryDataArray] Unknown binary data type."); default: break; } switch (cvidBinaryDataType) { case MS_32_bit_float: case MS_32_bit_integer: if (BinaryDataEncoder::Numpress_None == config.numpress) config.precision = BinaryDataEncoder::Precision_32; break; case MS_64_bit_float: case MS_64_bit_integer: config.precision = BinaryDataEncoder::Precision_64; break; case CVID_Unknown: if (BinaryDataEncoder::Numpress_None == config.numpress) // 32 vs 64 bit is meaningless in numpress throw runtime_error("[IO::HandlerBinaryDataArray] Missing binary data type."); break; default: throw runtime_error("[IO::HandlerBinaryDataArray] Unknown binary data type."); } return config; } }; PWIZ_API_DECL void read(std::istream& is, std::vector& binaryDataArrayPtrs, std::vector& integerDataArrayPtrs, const MSData* msd) { HandlerBinaryDataArray handler(&binaryDataArrayPtrs, &integerDataArrayPtrs, msd); SAXParser::parse(is, handler); } // // Spectrum // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Spectrum& spectrum, const MSData& msd, const BinaryDataEncoder::Config& config) { XMLWriter::Attributes attributes; attributes.add("index", spectrum.index); attributes.add("id", spectrum.id); // not an XML:ID if (!spectrum.spotID.empty()) attributes.add("spotID", spectrum.spotID); attributes.add("defaultArrayLength", spectrum.defaultArrayLength); if (spectrum.dataProcessingPtr.get()) attributes.add("dataProcessingRef", encode_xml_id_copy(spectrum.dataProcessingPtr->id)); if (spectrum.sourceFilePtr.get()) attributes.add("sourceFileRef", encode_xml_id_copy(spectrum.sourceFilePtr->id)); writer.startElement("spectrum", attributes); writeParamContainer(writer, spectrum); write(writer, spectrum.scanList, msd); if (!spectrum.precursors.empty()) { XMLWriter::Attributes attributes; attributes.add("count", spectrum.precursors.size()); writer.startElement("precursorList", attributes); for (vector::const_iterator it=spectrum.precursors.begin(); it!=spectrum.precursors.end(); ++it) write(writer, *it); writer.endElement(); } if (!spectrum.products.empty()) { XMLWriter::Attributes attributes; attributes.add("count", spectrum.products.size()); writer.startElement("productList", attributes); for (vector::const_iterator it=spectrum.products.begin(); it!=spectrum.products.end(); ++it) write(writer, *it); writer.endElement(); } if (spectrum.binaryDataArrayPtrs.size() + spectrum.integerDataArrayPtrs.size() > 0) { attributes.clear(); attributes.add("count", spectrum.binaryDataArrayPtrs.size() + spectrum.integerDataArrayPtrs.size()); writer.startElement("binaryDataArrayList", attributes); for (const auto& itr : spectrum.binaryDataArrayPtrs) writeBinaryDataArray(writer, *itr, config); for (const auto& itr : spectrum.integerDataArrayPtrs) writeBinaryDataArray(writer, *itr, config); writer.endElement(); // binaryDataArrayList } writer.endElement(); // spectrum } struct HandlerSpectrum : public HandlerParamContainer { BinaryDataFlag binaryDataFlag; Spectrum* spectrum; const SpectrumIdentityFromXML *spectrumID; const map* legacyIdRefToNativeId; const MSData* msd; HandlerSpectrum(BinaryDataFlag _binaryDataFlag, Spectrum* _spectrum = 0, const map* legacyIdRefToNativeId = 0, const MSData* _msd = 0, const SpectrumIdentityFromXML *_spectrumID = 0) : binaryDataFlag(_binaryDataFlag), spectrum(_spectrum), spectrumID(_spectrumID), legacyIdRefToNativeId(legacyIdRefToNativeId), msd(_msd), handlerPrecursor_(0, legacyIdRefToNativeId) { } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!spectrum) throw runtime_error("[IO::HandlerSpectrum] Null spectrum."); if (name != "cvParam") // the most common, but not handled here { if (name == "spectrum") { spectrum->sourceFilePosition = position; getAttribute(attributes, "index", spectrum->index); getAttribute(attributes, "spotID", spectrum->spotID); getAttribute(attributes, "defaultArrayLength", spectrum->defaultArrayLength); getAttribute(attributes, "id", spectrum->id); // not an XML:ID // mzML 1.0 if (version == 1 && legacyIdRefToNativeId) { map::const_iterator itr = legacyIdRefToNativeId->find(spectrum->id); if (itr != legacyIdRefToNativeId->end()) spectrum->id = itr->second; } // note: placeholder string dataProcessingRef; decode_xml_id(getAttribute(attributes, "dataProcessingRef", dataProcessingRef)); if (!dataProcessingRef.empty()) spectrum->dataProcessingPtr = DataProcessingPtr(new DataProcessing(dataProcessingRef)); // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "sourceFileRef", sourceFileRef)); if (!sourceFileRef.empty()) spectrum->sourceFilePtr = SourceFilePtr(new SourceFile(sourceFileRef)); return Status::Ok; } else if (version == 1 && name == "acquisitionList" /* mzML 1.0 */ || name == "scanList") { handlerScanList_.scanList = &spectrum->scanList; handlerScanList_.version = version; return Status(Status::Delegate, &handlerScanList_); } else if (name == "precursorList" || name == "productList") { return Status::Ok; } else if (name == "precursor") { spectrum->precursors.push_back(Precursor()); handlerPrecursor_.precursor = &spectrum->precursors.back(); handlerPrecursor_.version = version; return Status(Status::Delegate, &handlerPrecursor_); } else if (name == "product") { spectrum->products.push_back(Product()); handlerProduct_.product = &spectrum->products.back(); return Status(Status::Delegate, &handlerProduct_); } else if (name == "binaryDataArray") { handlerBinaryDataArray_.binaryDataArrayPtrs = &spectrum->binaryDataArrayPtrs; handlerBinaryDataArray_.integerDataArrayPtrs = &spectrum->integerDataArrayPtrs; handlerBinaryDataArray_.defaultArrayLength = spectrum->defaultArrayLength; handlerBinaryDataArray_.msd = msd; handlerBinaryDataArray_.binaryDataFlag = binaryDataFlag; return Status(Status::Delegate, &handlerBinaryDataArray_); } else if (name == "binaryDataArrayList") { // pretty likely to come right back here and read the // binary data once the header info has been inspected, // so note position if (spectrumID) { spectrumID->sourceFilePositionForBinarySpectrumData = position; } return Status::Ok; } else if (version == 1 && name == "spectrumDescription") // mzML 1.0 { // read cvParams, userParams, and referenceableParamGroups in into return Status::Ok; } else if (version == 1 && name == "scan") // mzML 1.0 { spectrum->scanList.scans.push_back(Scan()); handlerScan_.version = version; handlerScan_.scan = &spectrum->scanList.scans.back(); return Status(Status::Delegate, &handlerScan_); } } // end if name != cvParam HandlerParamContainer::paramContainer = spectrum; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerScanList handlerScanList_; HandlerPrecursor handlerPrecursor_; HandlerProduct handlerProduct_; HandlerBinaryDataArray handlerBinaryDataArray_; HandlerScan handlerScan_; }; PWIZ_API_DECL void read(std::istream& is, Spectrum& spectrum, BinaryDataFlag binaryDataFlag, int version, const map* legacyIdRefToNativeId, const MSData* msd, const SpectrumIdentityFromXML *id) { HandlerSpectrum handler(binaryDataFlag, &spectrum, legacyIdRefToNativeId, msd, id); handler.version = version; SAXParser::parse(is, handler); } // // Chromatogram // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Chromatogram& chromatogram, const BinaryDataEncoder::Config& config) { XMLWriter::Attributes attributes; attributes.add("index", chromatogram.index); attributes.add("id", chromatogram.id); // not an XML:ID attributes.add("defaultArrayLength", chromatogram.defaultArrayLength); if (chromatogram.dataProcessingPtr.get()) attributes.add("dataProcessingRef", encode_xml_id_copy(chromatogram.dataProcessingPtr->id)); writer.startElement("chromatogram", attributes); writeParamContainer(writer, chromatogram); if (!chromatogram.precursor.empty()) write(writer, chromatogram.precursor); if (!chromatogram.product.empty()) write(writer, chromatogram.product); if (chromatogram.binaryDataArrayPtrs.size() + chromatogram.integerDataArrayPtrs.size() > 0) { attributes.clear(); attributes.add("count", chromatogram.binaryDataArrayPtrs.size() + chromatogram.integerDataArrayPtrs.size()); writer.startElement("binaryDataArrayList", attributes); for (const auto& itr : chromatogram.binaryDataArrayPtrs) writeBinaryDataArray(writer, *itr, config); for (const auto& itr : chromatogram.integerDataArrayPtrs) writeBinaryDataArray(writer, *itr, config); writer.endElement(); // binaryDataArrayList } writer.endElement(); // spectrum } struct HandlerChromatogram : public HandlerParamContainer { BinaryDataFlag binaryDataFlag; Chromatogram* chromatogram; HandlerChromatogram(BinaryDataFlag _binaryDataFlag, Chromatogram* _chromatogram = 0) : binaryDataFlag(_binaryDataFlag), chromatogram(_chromatogram) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!chromatogram) throw runtime_error("[IO::HandlerChromatogram] Null chromatogram."); if (name == "chromatogram") { chromatogram->sourceFilePosition = position; getAttribute(attributes, "id", chromatogram->id); // not an XML:ID getAttribute(attributes, "index", chromatogram->index); getAttribute(attributes, "defaultArrayLength", chromatogram->defaultArrayLength); // note: placeholder string dataProcessingRef; decode_xml_id(getAttribute(attributes, "dataProcessingRef", dataProcessingRef)); if (!dataProcessingRef.empty()) chromatogram->dataProcessingPtr = DataProcessingPtr(new DataProcessing(dataProcessingRef)); return Status::Ok; } else if (name == "precursor") { handlerPrecursor_.precursor = &chromatogram->precursor; return Status(Status::Delegate, &handlerPrecursor_); } else if (name == "product") { handlerProduct_.product = &chromatogram->product; return Status(Status::Delegate, &handlerProduct_); } else if (name == "binaryDataArray") { handlerBinaryDataArray_.binaryDataArrayPtrs = &chromatogram->binaryDataArrayPtrs; handlerBinaryDataArray_.integerDataArrayPtrs = &chromatogram->integerDataArrayPtrs; handlerBinaryDataArray_.defaultArrayLength = chromatogram->defaultArrayLength; handlerBinaryDataArray_.binaryDataFlag = binaryDataFlag; return Status(Status::Delegate, &handlerBinaryDataArray_); } else if (name == "binaryDataArrayList") { return Status::Ok; } HandlerParamContainer::paramContainer = chromatogram; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerPrecursor handlerPrecursor_; HandlerProduct handlerProduct_; HandlerBinaryDataArray handlerBinaryDataArray_; }; PWIZ_API_DECL void read(std::istream& is, Chromatogram& chromatogram, BinaryDataFlag binaryDataFlag) { HandlerChromatogram handler(binaryDataFlag, &chromatogram); SAXParser::parse(is, handler); } // // SpectrumList // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SpectrumList& spectrumList, const MSData& msd, const BinaryDataEncoder::Config& config, vector* spectrumPositions, const IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) { XMLWriter::Attributes attributes; attributes.add("count", spectrumList.size()); if (spectrumList.dataProcessingPtr().get()) attributes.push_back(make_pair("defaultDataProcessingRef", spectrumList.dataProcessingPtr()->id)); writer.startElement("spectrumList", attributes); // required by schema, even if empty SpectrumWorkerThreads spectrumWorkers(spectrumList, useWorkerThreads); for (size_t i=0; ibroadcastUpdateMessage( IterationListener::UpdateMessage(i, spectrumList.size(), "writing spectra")); if (status == IterationListener::Status_Cancel) break; // save write position if (spectrumPositions) spectrumPositions->push_back(writer.positionNext()); // write the spectrum //SpectrumPtr spectrum = spectrumList.spectrum(i, true); SpectrumPtr spectrum = spectrumWorkers.processBatch(i); BOOST_ASSERT(spectrum->binaryDataArrayPtrs.empty() || spectrum->defaultArrayLength == spectrum->getMZArray()->data.size()); if (spectrum->index != i) throw runtime_error("[IO::write(SpectrumList)] Bad index."); write(writer, *spectrum, msd, config); } writer.endElement(); } struct HandlerSpectrumListSimple : public HandlerParamContainer { SpectrumListSimple* spectrumListSimple; HandlerSpectrumListSimple(SpectrumListSimple* _spectrumListSimple = 0) : spectrumListSimple(_spectrumListSimple), handlerSpectrum_(ReadBinaryData) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!spectrumListSimple) throw runtime_error("[IO::HandlerSpectrumListSimple] Null spectrumListSimple."); if (name == "spectrumList") { // note: placeholder string defaultDataProcessingRef; decode_xml_id(getAttribute(attributes, "defaultDataProcessingRef", defaultDataProcessingRef)); if (!defaultDataProcessingRef.empty()) spectrumListSimple->dp = DataProcessingPtr(new DataProcessing(defaultDataProcessingRef)); return Status::Ok; } else if (name == "spectrum") { spectrumListSimple->spectra.push_back(SpectrumPtr(new Spectrum)); handlerSpectrum_.version = version; handlerSpectrum_.spectrum = spectrumListSimple->spectra.back().get(); return Status(Status::Delegate, &handlerSpectrum_); } throw runtime_error(("[IO::HandlerSpectrumListSimple] Unexpected element name: " + name).c_str()); } private: HandlerSpectrum handlerSpectrum_; }; PWIZ_API_DECL void read(std::istream& is, SpectrumListSimple& spectrumListSimple) { HandlerSpectrumListSimple handler(&spectrumListSimple); SAXParser::parse(is, handler); } // // ChromatogramList // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ChromatogramList& chromatogramList, const BinaryDataEncoder::Config& config, vector* chromatogramPositions, const IterationListenerRegistry* iterationListenerRegistry) { if (chromatogramList.empty()) // chromatogramList not required by schema return; XMLWriter::Attributes attributes; attributes.add("count", chromatogramList.size()); if (chromatogramList.dataProcessingPtr().get()) attributes.push_back(make_pair("defaultDataProcessingRef", chromatogramList.dataProcessingPtr()->id)); writer.startElement("chromatogramList", attributes); for (size_t i=0; ibroadcastUpdateMessage( IterationListener::UpdateMessage(i, chromatogramList.size(), "writing chromatograms")); if (status == IterationListener::Status_Cancel) break; // save write position if (chromatogramPositions) chromatogramPositions->push_back(writer.positionNext()); // write the chromatogram ChromatogramPtr chromatogram = chromatogramList.chromatogram(i, true); if (chromatogram->index != i) throw runtime_error("[IO::write(ChromatogramList)] Bad index."); write(writer, *chromatogram, config); } writer.endElement(); } struct HandlerChromatogramListSimple : public HandlerParamContainer { ChromatogramListSimple* chromatogramListSimple; HandlerChromatogramListSimple(ChromatogramListSimple* _chromatogramListSimple = 0) : chromatogramListSimple(_chromatogramListSimple), handlerChromatogram_(ReadBinaryData) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!chromatogramListSimple) throw runtime_error("[IO::HandlerChromatogramListSimple] Null chromatogramListSimple."); if (name == "chromatogramList") { // note: placeholder string defaultDataProcessingRef; decode_xml_id(getAttribute(attributes, "defaultDataProcessingRef", defaultDataProcessingRef)); if (!defaultDataProcessingRef.empty()) chromatogramListSimple->dp = DataProcessingPtr(new DataProcessing(defaultDataProcessingRef)); return Status::Ok; } else if (name == "chromatogram") { chromatogramListSimple->chromatograms.push_back(ChromatogramPtr(new Chromatogram)); handlerChromatogram_.chromatogram = chromatogramListSimple->chromatograms.back().get(); return Status(Status::Delegate, &handlerChromatogram_); } throw runtime_error(("[IO::HandlerChromatogramListSimple] Unexpected element name: " + name).c_str()); } private: HandlerChromatogram handlerChromatogram_; }; PWIZ_API_DECL void read(std::istream& is, ChromatogramListSimple& chromatogramListSimple) { HandlerChromatogramListSimple handler(&chromatogramListSimple); SAXParser::parse(is, handler); } // // Run // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Run& run, const MSData& msd, const BinaryDataEncoder::Config& config, vector* spectrumPositions, vector* chromatogramPositions, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) { XMLWriter::Attributes attributes; attributes.add("id", encode_xml_id_copy(run.id)); // defaultInstrumentConfigurationPtr is mandatory for schematic validity; // at least one (possibly unknown) instrument configuration is mandatory for schematic validity; // therefore we set this attribute to a reasonable default if the client didn't set it if (run.defaultInstrumentConfigurationPtr.get()) attributes.add("defaultInstrumentConfigurationRef", encode_xml_id_copy(run.defaultInstrumentConfigurationPtr->id)); else if (!msd.instrumentConfigurationPtrs.empty()) attributes.add("defaultInstrumentConfigurationRef", encode_xml_id_copy(msd.instrumentConfigurationPtrs.front()->id)); else attributes.add("defaultInstrumentConfigurationRef", "IC"); if (run.samplePtr.get()) attributes.add("sampleRef", encode_xml_id_copy(run.samplePtr->id)); if (!run.startTimeStamp.empty()) attributes.add("startTimeStamp", run.startTimeStamp); if (run.defaultSourceFilePtr.get()) attributes.add("defaultSourceFileRef", encode_xml_id_copy(run.defaultSourceFilePtr->id)); writer.startElement("run", attributes); writeParamContainer(writer, run); bool hasSpectrumList = run.spectrumListPtr.get() && run.spectrumListPtr->size() > 0; bool hasChromatogramList = run.chromatogramListPtr.get() && run.chromatogramListPtr->size() > 0; if (hasSpectrumList) write(writer, *run.spectrumListPtr, msd, config, spectrumPositions, iterationListenerRegistry, useWorkerThreads); if (hasChromatogramList) write(writer, *run.chromatogramListPtr, config, chromatogramPositions, iterationListenerRegistry); writer.endElement(); } struct HandlerRun : public HandlerParamContainer { SpectrumListFlag spectrumListFlag; Run* run; HandlerRun(SpectrumListFlag _spectrumListFlag, Run* _run = 0) : spectrumListFlag(_spectrumListFlag), run(_run) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!run) throw runtime_error("[IO::HandlerRun] Null run."); if (name == "run") { decode_xml_id(getAttribute(attributes, "id", run->id)); getAttribute(attributes, "startTimeStamp", run->startTimeStamp); // note: placeholder string defaultInstrumentConfigurationRef; decode_xml_id(getAttribute(attributes, "defaultInstrumentConfigurationRef", defaultInstrumentConfigurationRef)); if (!defaultInstrumentConfigurationRef.empty()) run->defaultInstrumentConfigurationPtr = InstrumentConfigurationPtr(new InstrumentConfiguration(defaultInstrumentConfigurationRef)); // note: placeholder string sampleRef; decode_xml_id(getAttribute(attributes, "sampleRef", sampleRef)); if (!sampleRef.empty()) run->samplePtr = SamplePtr(new Sample(sampleRef)); // note: placeholder string defaultSourceFileRef; decode_xml_id(getAttribute(attributes, "defaultSourceFileRef", defaultSourceFileRef)); if (!defaultSourceFileRef.empty()) run->defaultSourceFilePtr = SourceFilePtr(new SourceFile(defaultSourceFileRef)); return Status::Ok; } else if (name == "spectrumList") { if (spectrumListFlag == IgnoreSpectrumList) return Status::Done; shared_ptr temp(new SpectrumListSimple); handlerSpectrumListSimple_.spectrumListSimple = temp.get(); run->spectrumListPtr = temp; return Status(Status::Delegate, &handlerSpectrumListSimple_); } else if (name == "chromatogramList") { shared_ptr temp(new ChromatogramListSimple); handlerChromatogramListSimple_.chromatogramListSimple = temp.get(); run->chromatogramListPtr = temp; return Status(Status::Delegate, &handlerChromatogramListSimple_); } else if (version == 1 && name == "sourceFileRefList") { return Status::Ok; } else if (version == 1 && name == "sourceFileRef") { // note: placeholder string sourceFileRef; decode_xml_id(getAttribute(attributes, "ref", sourceFileRef)); if (!sourceFileRef.empty()) run->defaultSourceFilePtr = SourceFilePtr(new SourceFile(sourceFileRef)); return Status::Ok; } HandlerParamContainer::paramContainer = run; return HandlerParamContainer::startElement(name, attributes, position); } private: HandlerSpectrumListSimple handlerSpectrumListSimple_; HandlerChromatogramListSimple handlerChromatogramListSimple_; }; PWIZ_API_DECL void read(std::istream& is, Run& run, SpectrumListFlag spectrumListFlag) { HandlerRun handler(spectrumListFlag, &run); SAXParser::parse(is, handler); } // // MSData // PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const MSData& msd, const BinaryDataEncoder::Config& config, vector* spectrumPositions, vector* chromatogramPositions, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) { XMLWriter::Attributes attributes; attributes.add("xmlns", "http://psi.hupo.org/ms/mzml"); attributes.add("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); attributes.add("xsi:schemaLocation", "http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML" + msd.version() + ".xsd"); if (!msd.accession.empty()) attributes.add("accession", msd.accession); attributes.add("id", msd.id); // not an XML:ID attributes.add("version", msd.version()); writer.startElement("mzML", attributes); if (!msd.cvs.empty()) { attributes.clear(); attributes.add("count", msd.cvs.size()); writer.startElement("cvList", attributes); for (vector::const_iterator it=msd.cvs.begin(); it!=msd.cvs.end(); ++it) write(writer, *it); writer.endElement(); } write(writer, msd.fileDescription); writeList(writer, msd.paramGroupPtrs, "referenceableParamGroupList"); writeList(writer, msd.samplePtrs, "sampleList"); writeList(writer, msd.softwarePtrs, "softwareList"); writeList(writer, msd.scanSettingsPtrs, "scanSettingsList"); // instrumentConfigurationList and at least one instrumentConfiguration is mandatory for schematic validity if (msd.instrumentConfigurationPtrs.empty()) { // the base term "instrument model" indicates the instrument is unknown vector list(1, InstrumentConfigurationPtr(new InstrumentConfiguration("IC"))); list.back()->set(MS_instrument_model); writeList(writer, list, "instrumentConfigurationList"); } else writeList(writer, msd.instrumentConfigurationPtrs, "instrumentConfigurationList"); writeList(writer, msd.allDataProcessingPtrs(), "dataProcessingList"); write(writer, msd.run, msd, config, spectrumPositions, chromatogramPositions, iterationListenerRegistry, useWorkerThreads); writer.endElement(); } struct HandlerMSData : public SAXParser::Handler { MSData* msd; HandlerMSData(SpectrumListFlag spectrumListFlag, MSData* _msd = 0) : msd(_msd), handlerRun_(spectrumListFlag) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!msd) throw runtime_error("[IO::HandlerMSData] Null msd."); if (name == "mzML") { getAttribute(attributes, "accession", msd->accession); getAttribute(attributes, "id", msd->id); // not an XML:ID // "http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML.xsd" string schemaLocation; getAttribute(attributes, "xsi:schemaLocation", schemaLocation); if (schemaLocation.empty()) getAttribute(attributes, "version", msd->version_); // deprecated? else { schemaLocation = schemaLocation.substr(schemaLocation.find(' ')+1); string xsdName = BFS_STRING(bfs::path(schemaLocation).filename()); msd->version_ = xsdName.substr(4, xsdName.length()-8); // read between "mzML" and ".xsd" } if (msd->version_.find("1.0") == 0) version = 1; return Status::Ok; } else if (name == "cvList" || name == "referenceableParamGroupList" || name == "sampleList" || name == "instrumentConfigurationList" || name == "softwareList" || name == "dataProcessingList" || (version == 1 && name == "acquisitionSettingsList") /* mzML 1.0 */ || name == "scanSettingsList") { // ignore these, unless we want to validate the count attribute return Status::Ok; } else if (name == "cv") { msd->cvs.push_back(CV()); handlerCV_.cv = &msd->cvs.back(); return Status(Status::Delegate, &handlerCV_); } else if (name == "fileDescription") { handlerFileDescription_.fileDescription = &msd->fileDescription; return Status(Status::Delegate, &handlerFileDescription_); } else if (name == "referenceableParamGroup") { msd->paramGroupPtrs.push_back(ParamGroupPtr(new ParamGroup)); handlerParamGroup_.paramGroup = msd->paramGroupPtrs.back().get(); return Status(Status::Delegate, &handlerParamGroup_); } else if (name == "sample") { msd->samplePtrs.push_back(SamplePtr(new Sample)); handlerSample_.sample = msd->samplePtrs.back().get(); return Status(Status::Delegate, &handlerSample_); } else if (name == "instrumentConfiguration") { msd->instrumentConfigurationPtrs.push_back(InstrumentConfigurationPtr(new InstrumentConfiguration)); handlerInstrumentConfiguration_.instrumentConfiguration = msd->instrumentConfigurationPtrs.back().get(); return Status(Status::Delegate, &handlerInstrumentConfiguration_); } else if (name == "software") { msd->softwarePtrs.push_back(SoftwarePtr(new Software)); handlerSoftware_.version = version; handlerSoftware_.software = msd->softwarePtrs.back().get(); return Status(Status::Delegate, &handlerSoftware_); } else if (name == "dataProcessing") { msd->dataProcessingPtrs.push_back(DataProcessingPtr(new DataProcessing)); handlerDataProcessing_.version = version; handlerDataProcessing_.dataProcessing = msd->dataProcessingPtrs.back().get(); return Status(Status::Delegate, &handlerDataProcessing_); } else if (version == 1 && name == "acquisitionSettings" /* mzML 1.0 */ || name == "scanSettings") { msd->scanSettingsPtrs.push_back(ScanSettingsPtr(new ScanSettings)); handlerScanSettings_.version = version; handlerScanSettings_.scanSettings = msd->scanSettingsPtrs.back().get(); return Status(Status::Delegate, &handlerScanSettings_); } else if (name == "run") { handlerRun_.version = version; handlerRun_.run = &msd->run; return Status(Status::Delegate, &handlerRun_); } throw runtime_error(("[IO::HandlerMSData] Unexpected element name: " + name).c_str()); } private: HandlerCV handlerCV_; HandlerFileDescription handlerFileDescription_; HandlerParamGroup handlerParamGroup_; HandlerSample handlerSample_; HandlerInstrumentConfiguration handlerInstrumentConfiguration_; HandlerSoftware handlerSoftware_; HandlerDataProcessing handlerDataProcessing_; HandlerScanSettings handlerScanSettings_; HandlerRun handlerRun_; }; PWIZ_API_DECL void read(std::istream& is, MSData& msd, SpectrumListFlag spectrumListFlag) { HandlerMSData handler(spectrumListFlag, &msd); SAXParser::parse(is, handler); References::resolve(msd); } } // namespace IO } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/IO.hpp000066400000000000000000000231601444255175000210500ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _IO_HPP_ #define _IO_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/utility/misc/IterationListener.hpp" #include "boost/iostreams/positioning.hpp" namespace pwiz { namespace msdata { /// Identifying information for a spectrum /// subclassed to add private information for faster file IO in mzML and mzXML struct PWIZ_API_DECL SpectrumIdentityFromXML : SpectrumIdentity { /// for efficient read of peak lists after previous read of /// scan header in mzML and mzXML - avoids reparsing the header mutable boost::iostreams::stream_offset sourceFilePositionForBinarySpectrumData; SpectrumIdentityFromXML() : SpectrumIdentity(), sourceFilePositionForBinarySpectrumData((boost::iostreams::stream_offset)-1) {} }; /// Identifying information for a spectrum as read from mzML or mzXML /// subclassed to add private information for faster file IO in mzXML struct PWIZ_API_DECL SpectrumIdentityFromMzXML : SpectrumIdentityFromXML { /// for efficient read of peak lists after previous read of /// scan header in mzXML - avoids reparsing the header mutable unsigned int peaksCount; SpectrumIdentityFromMzXML() : SpectrumIdentityFromXML(), peaksCount(0) {} }; namespace IO { PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const CV& cv); PWIZ_API_DECL void read(std::istream& is, CV& cv); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const UserParam& userParam); PWIZ_API_DECL void read(std::istream& is, UserParam& userParam); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const CVParam& cv); PWIZ_API_DECL void read(std::istream& is, CVParam& cv); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ParamGroup& paramGroup); PWIZ_API_DECL void read(std::istream& is, ParamGroup& paramGroup); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const FileContent& fc); PWIZ_API_DECL void read(std::istream& is, FileContent& fc); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SourceFile& sf); PWIZ_API_DECL void read(std::istream& is, SourceFile& sf); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Contact& c); PWIZ_API_DECL void read(std::istream& is, Contact& c); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const FileDescription& fd); PWIZ_API_DECL void read(std::istream& is, FileDescription& fd); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Sample& sf); PWIZ_API_DECL void read(std::istream& is, Sample& sf); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Component& component); PWIZ_API_DECL void read(std::istream& is, Component& component); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ComponentList& componentList); PWIZ_API_DECL void read(std::istream& is, ComponentList& componentList); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Software& software); PWIZ_API_DECL void read(std::istream& is, Software& software); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const InstrumentConfiguration& instrumentConfiguration); PWIZ_API_DECL void read(std::istream& is, InstrumentConfiguration& instrumentConfiguration); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ProcessingMethod& processingMethod); PWIZ_API_DECL void read(std::istream& is, ProcessingMethod& processingMethod); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const DataProcessing& dataProcessing); PWIZ_API_DECL void read(std::istream& is, DataProcessing& dataProcessing); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Target& t); PWIZ_API_DECL void read(std::istream& is, Target& t); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanSettings& scanSettings); PWIZ_API_DECL void read(std::istream& is, ScanSettings& scanSettings); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const IsolationWindow& isolationWindow); PWIZ_API_DECL void read(std::istream& is, IsolationWindow& isolationWindow); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SelectedIon& selectedIon); PWIZ_API_DECL void read(std::istream& is, SelectedIon& selectedIon); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Activation& activation); PWIZ_API_DECL void read(std::istream& is, Activation& activation); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Precursor& precursor); PWIZ_API_DECL void read(std::istream& is, Precursor& precursor, const std::map* legacyIdRefToNativeId = 0); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Product& product); PWIZ_API_DECL void read(std::istream& is, Product& product); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanWindow& selectionWindow); PWIZ_API_DECL void read(std::istream& is, ScanWindow& selectionWindow); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Scan& scan, const MSData& msd); PWIZ_API_DECL void read(std::istream& is, Scan& scan); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ScanList& scanList, const MSData& msd); PWIZ_API_DECL void read(std::istream& is, ScanList& scanList); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const BinaryDataArray& binaryDataArray, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config()); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const IntegerDataArray& binaryDataArray, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config()); PWIZ_API_DECL void read(std::istream& is, std::vector& binaryDataArrayPtrs, std::vector& integerDataArrayPtrs, const MSData* msd = 0); // // enum for preference in binary data read - ignore, read, read only binary if possible // enum PWIZ_API_DECL BinaryDataFlag {IgnoreBinaryData, ReadBinaryData, ReadBinaryDataOnly }; PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Spectrum& spectrum, const MSData& msd, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config()); PWIZ_API_DECL void read(std::istream& is, Spectrum& spectrum, BinaryDataFlag binaryDataFlag = IgnoreBinaryData, int version = 0, const std::map* legacyIdRefToNativeId = 0, const MSData* msd = 0, const SpectrumIdentityFromXML *id = 0); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Chromatogram& chromatogram, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config()); PWIZ_API_DECL void read(std::istream& is, Chromatogram& chromatogram, BinaryDataFlag binaryDataFlag = IgnoreBinaryData); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const SpectrumList& spectrumList, const MSData& msd, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config(), std::vector* spectrumPositions = 0, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true); PWIZ_API_DECL void read(std::istream& is, SpectrumListSimple& spectrumListSimple); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const ChromatogramList& chromatogramList, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config(), std::vector* chromatogramPositions = 0, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0); PWIZ_API_DECL void read(std::istream& is, ChromatogramListSimple& chromatogramListSimple); enum PWIZ_API_DECL SpectrumListFlag {IgnoreSpectrumList, ReadSpectrumList}; PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const Run& run, const MSData& msd, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config(), std::vector* spectrumPositions = 0, std::vector* chromatogramPositions = 0, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true); PWIZ_API_DECL void read(std::istream& is, Run& run, SpectrumListFlag spectrumListFlag = IgnoreSpectrumList); PWIZ_API_DECL void write(minimxml::XMLWriter& writer, const MSData& msd, const BinaryDataEncoder::Config& config = BinaryDataEncoder::Config(), std::vector* spectrumPositions = 0, std::vector* chromatogramPositions = 0, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true); PWIZ_API_DECL void read(std::istream& is, MSData& msd, SpectrumListFlag spectrumListFlag = IgnoreSpectrumList); } // namespace IO } // namespace msdata } // namespace pwiz #endif // _IO_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Index_mzML.cpp000066400000000000000000000365561444255175000225570ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers vanderbilt.edu> // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Index_mzML.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "boost/iostreams/positioning.hpp" #include "pwiz/data/msdata/IO.hpp" using namespace pwiz::util; using namespace pwiz::minimxml; using boost::iostreams::offset_to_position; namespace pwiz { namespace msdata { struct Index_mzML::Impl { Impl(const boost::shared_ptr& is, int schemaVersion) : is_(is), schemaVersion_(schemaVersion), spectrumCount_(0), chromatogramCount_(0) { createIndex(); } void recreate() const; void readIndex() const; void createIndex() const; void createMaps() const; boost::shared_ptr is_; int schemaVersion_; mutable size_t spectrumCount_; mutable vector spectrumIndex_; mutable map spectrumIdToIndex_; mutable map spotIDToIndexList_; mutable map legacyIdRefToNativeId_; mutable size_t chromatogramCount_; mutable vector chromatogramIndex_; mutable map chromatogramIdToIndex_; }; namespace { class HandlerIndexListOffset : public SAXParser::Handler { public: HandlerIndexListOffset(stream_offset& indexListOffset) : indexListOffset_(indexListOffset) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "indexListOffset") throw runtime_error("[Index_mzML::HandlerIndexOffset] Unexpected element name: " + name); return Status::Ok; } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { indexListOffset_ = lexical_cast(text); return Status::Ok; } private: stream_offset& indexListOffset_; }; struct HandlerOffset : public SAXParser::Handler { SpectrumIdentity* spectrumIdentity; ChromatogramIdentity* chromatogramIdentity; map* legacyIdRefToNativeId; HandlerOffset() : spectrumIdentity(0), chromatogramIdentity(0) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "offset") throw runtime_error("[Index_mzML::HandlerOffset] Unexpected element name: " + name); if (spectrumIdentity) { getAttribute(attributes, "idRef", spectrumIdentity->id); getAttribute(attributes, "spotID", spectrumIdentity->spotID); // mzML 1.0 if (version == 1) { string idRef, nativeID; getAttribute(attributes, "idRef", idRef); getAttribute(attributes, "nativeID", nativeID); if (nativeID.empty()) spectrumIdentity->id = idRef; else { try { lexical_cast(nativeID); spectrumIdentity->id = "scan=" + nativeID; } catch(exception&) { spectrumIdentity->id = nativeID; } (*legacyIdRefToNativeId)[idRef] = spectrumIdentity->id; } } } else if (chromatogramIdentity) { getAttribute(attributes, "idRef", chromatogramIdentity->id); } else throw runtime_error("[Index_mzML::HandlerOffset] Null identity."); return Status::Ok; } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { if (spectrumIdentity) spectrumIdentity->sourceFilePosition = lexical_cast(text); else if (chromatogramIdentity) chromatogramIdentity->sourceFilePosition = lexical_cast(text); else throw runtime_error("[Index_mzML::HandlerOffset] Null identity."); return Status::Ok; } }; class HandlerIndexList : public SAXParser::Handler { public: HandlerIndexList(int schemaVersion_, size_t& spectrumCount, vector& spectrumIndex, map& legacyIdRefToNativeId, size_t& chromatogramCount, vector& chromatogramIndex) : spectrumCount_(spectrumCount), spectrumIndex_(spectrumIndex), chromatogramCount_(chromatogramCount), chromatogramIndex_(chromatogramIndex), validIndexOffset_(false) { handlerOffset_.version = schemaVersion_; handlerOffset_.legacyIdRefToNativeId = &legacyIdRefToNativeId; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "indexList") { validIndexOffset_ = true; // looks like indexOffset landed us in the right place return Status::Ok; } else if (!validIndexOffset_) // "indexList" should have been first element throw runtime_error("[Index_mzML::HandlerIndex] element \"indexList\" not found at expected offset - bad indexOffset value, probably"); else if (name == "index") { string indexName; getAttribute(attributes, "name", indexName); if (indexName == "spectrum") inSpectrumIndex_ = true; else if (indexName == "chromatogram") inSpectrumIndex_ = false; else throw runtime_error("[Index_mzML::HandlerIndex] Unexpected index name: " + indexName); return Status::Ok; } else if (name == "offset") { if (inSpectrumIndex_) { handlerOffset_.chromatogramIdentity = 0; spectrumIndex_.push_back(SpectrumIdentityFromXML()); handlerOffset_.spectrumIdentity = &spectrumIndex_.back(); handlerOffset_.spectrumIdentity->index = spectrumCount_; ++spectrumCount_; } else { handlerOffset_.spectrumIdentity = 0; chromatogramIndex_.push_back(ChromatogramIdentity()); handlerOffset_.chromatogramIdentity = &chromatogramIndex_.back(); handlerOffset_.chromatogramIdentity->index = chromatogramCount_; ++chromatogramCount_; } return Status(Status::Delegate, &handlerOffset_); } else throw runtime_error("[Index_mzML::HandlerIndex] Unexpected element name: " + name); } private: size_t& spectrumCount_; vector& spectrumIndex_; size_t& chromatogramCount_; vector& chromatogramIndex_; bool validIndexOffset_; bool inSpectrumIndex_; HandlerOffset handlerOffset_; }; class HandlerIndexCreator : public SAXParser::Handler { public: HandlerIndexCreator(int schemaVersion_, size_t& spectrumCount, vector& spectrumIndex, map& legacyIdRefToNativeId, size_t& chromatogramCount, vector& chromatogramIndex) : spectrumCount_(spectrumCount), spectrumIndex_(spectrumIndex), chromatogramCount_(chromatogramCount), chromatogramIndex_(chromatogramIndex), legacyIdRefToNativeId(&legacyIdRefToNativeId) { version = schemaVersion_; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "spectrum") { SpectrumIdentityFromXML* si; spectrumIndex_.push_back(SpectrumIdentityFromXML()); si = &spectrumIndex_.back(); getAttribute(attributes, "id", si->id); getAttribute(attributes, "spotID", si->spotID); // mzML 1.0 if (version == 1) { string idRef, nativeID; getAttribute(attributes, "id", idRef); getAttribute(attributes, "nativeID", nativeID); if (nativeID.empty()) si->id = idRef; else { try { lexical_cast(nativeID); si->id = "scan=" + nativeID; } catch (exception&) { si->id = nativeID; } (*legacyIdRefToNativeId)[idRef] = si->id; } } si->index = spectrumCount_; si->sourceFilePosition = position; ++spectrumCount_; } else if (name == "chromatogram") { ChromatogramIdentity* ci; chromatogramIndex_.push_back(ChromatogramIdentity()); ci = &chromatogramIndex_.back(); getAttribute(attributes, "id", ci->id); ci->index = chromatogramCount_; ci->sourceFilePosition = position; ++chromatogramCount_; } else if (name == "indexList") return Status::Done; return Status::Ok; } private: size_t& spectrumCount_; vector& spectrumIndex_; size_t& chromatogramCount_; vector& chromatogramIndex_; map* legacyIdRefToNativeId; }; } // namespace void Index_mzML::Impl::readIndex() const { // find const int bufferSize = 512; string buffer(bufferSize, '\0'); is_->seekg(-bufferSize, std::ios::end); is_->read(&buffer[0], bufferSize); string::size_type indexIndexOffset = buffer.find(""); if (indexIndexOffset == string::npos) throw index_error("Index_mzML::readIndex()] not found."); is_->seekg(-bufferSize + static_cast(indexIndexOffset), std::ios::end); if (!*is_) throw index_error("Index_mzML::readIndex()] Error seeking to ."); // read boost::iostreams::stream_offset indexListOffset = 0; HandlerIndexListOffset handlerIndexListOffset(indexListOffset); SAXParser::parse(*is_, handlerIndexListOffset); if (indexListOffset == 0) throw index_error("Index_mzML::readIndex()] Error parsing ."); // read is_->seekg(offset_to_position(indexListOffset)); if (!*is_) throw index_error("[Index_mzML::readIndex()] Error seeking to ."); HandlerIndexList handlerIndexList(schemaVersion_, spectrumCount_, spectrumIndex_, legacyIdRefToNativeId_, chromatogramCount_, chromatogramIndex_); SAXParser::parse(*is_, handlerIndexList); } void Index_mzML::Impl::createIndex() const { //boost::call_once(indexSizeSet_.flag, boost::bind(&SpectrumList_mzMLImpl::setIndexSize, this)); spectrumIndex_.clear(); chromatogramIndex_.clear(); // resize the index assuming the count attribute is accurate //index_.resize(size_); try { readIndex(); } catch (runtime_error&) { // TODO: log warning that the index was corrupt/missing is_->clear(); is_->seekg(0); HandlerIndexCreator handler(schemaVersion_, spectrumCount_, spectrumIndex_, legacyIdRefToNativeId_, chromatogramCount_, chromatogramIndex_); SAXParser::parse(*is_, handler); } createMaps(); } void Index_mzML::Impl::createMaps() const { // actually just init - build when/if actually called for spectrumIdToIndex_.clear(); spotIDToIndexList_.clear(); chromatogramIdToIndex_.clear(); } PWIZ_API_DECL Index_mzML::Index_mzML(boost::shared_ptr is, const MSData& msd) : impl_(new Impl(is, bal::starts_with(msd.version(), "1.0") ? 1 : 0)) {} PWIZ_API_DECL void Index_mzML::recreate() {impl_->createIndex();} PWIZ_API_DECL size_t Index_mzML::spectrumCount() const {return impl_->spectrumCount_;} PWIZ_API_DECL const SpectrumIdentityFromXML& Index_mzML::spectrumIdentity(size_t index) const {return impl_->spectrumIndex_[index];} PWIZ_API_DECL const map& Index_mzML::legacyIdRefToNativeId() const {return impl_->legacyIdRefToNativeId_;} PWIZ_API_DECL size_t Index_mzML::chromatogramCount() const {return impl_->chromatogramCount_;} PWIZ_API_DECL const ChromatogramIdentity& Index_mzML::chromatogramIdentity(size_t index) const {return impl_->chromatogramIndex_[index];} PWIZ_API_DECL size_t Index_mzML::findSpectrumId(const std::string& id) const { if (!impl_->spectrumIdToIndex_.size()) { // first use BOOST_FOREACH(const SpectrumIdentityFromXML& si, impl_->spectrumIndex_) { impl_->spectrumIdToIndex_[si.id] = si.index; } } map::const_iterator itr = impl_->spectrumIdToIndex_.find(id); return itr == impl_->spectrumIdToIndex_.end() ? spectrumCount() : itr->second; } PWIZ_API_DECL IndexList Index_mzML::findSpectrumBySpotID(const std::string& spotID) const { if (!impl_->spotIDToIndexList_.size()) { // first use BOOST_FOREACH(const SpectrumIdentityFromXML& si, impl_->spectrumIndex_) { if (!si.spotID.empty()) impl_->spotIDToIndexList_[si.spotID].push_back(si.index); } } map::const_iterator itr = impl_->spotIDToIndexList_.find(spotID); return itr == impl_->spotIDToIndexList_.end() ? IndexList() : itr->second; } PWIZ_API_DECL size_t Index_mzML::findChromatogramId(const std::string& id) const { if (!impl_->chromatogramIdToIndex_.size()) { // first use BOOST_FOREACH(const ChromatogramIdentity& ci, impl_->chromatogramIndex_) impl_->chromatogramIdToIndex_[ci.id] = ci.index; } map::const_iterator itr = impl_->chromatogramIdToIndex_.find(id); return itr == impl_->chromatogramIdToIndex_.end() ? chromatogramCount() : itr->second; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Index_mzML.hpp000066400000000000000000000036251444255175000225530ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers vanderbilt.edu> // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _INDEX_MZML_HPP_ #define _INDEX_MZML_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include #include #include namespace pwiz { namespace msdata { struct SpectrumIdentityFromXML; // forward ref class index_error : public std::runtime_error { public: index_error(const char* msg) : runtime_error(msg) {} }; struct PWIZ_API_DECL Index_mzML { Index_mzML(boost::shared_ptr is, const MSData& msd); void recreate(); size_t spectrumCount() const; const SpectrumIdentityFromXML& spectrumIdentity(size_t index) const; size_t findSpectrumId(const std::string& id) const; IndexList findSpectrumBySpotID(const std::string& spotID) const; const std::map& legacyIdRefToNativeId() const; size_t chromatogramCount() const; const ChromatogramIdentity& chromatogramIdentity(size_t index) const; size_t findChromatogramId(const std::string& id) const; private: struct Impl; boost::shared_ptr impl_; }; typedef boost::shared_ptr Index_mzML_Ptr; } // namespace msdata } // namespace pwiz #endif // _INDEX_MZML_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/LegacyAdapter.cpp000066400000000000000000000276061444255175000232520ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #define PWIZ_SOURCE #include "LegacyAdapter.hpp" #include "pwiz/data/common/CVTranslator.hpp" #include "boost/lambda/lambda.hpp" #include "boost/lambda/bind.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { using namespace pwiz::data; // // LegacyAdapter_Instrument::Impl // struct LegacyAdapter_Instrument::Impl { Impl(InstrumentConfiguration& _instrumentConfiguration, const CVTranslator& _cvTranslator) : instrumentConfiguration(_instrumentConfiguration), cvTranslator(_cvTranslator) {} InstrumentConfiguration& instrumentConfiguration; const CVTranslator& cvTranslator; string get(const ParamContainer& paramContainer, CVID cvid, const string& userParamName); void set(ParamContainer& paramContainer, CVID cvid, const string& userParamName, const string& value); }; namespace { void removeCVParams(vector& cvParams, CVID cvid) { cvParams.erase( remove_if(cvParams.begin(), cvParams.end(), CVParamIsChildOf(cvid)), cvParams.end()); } void removeUserParams(vector& userParams, const string& name) { using boost::lambda::_1; userParams.erase( remove_if(userParams.begin(), userParams.end(), boost::lambda::bind(&UserParam::name,_1)==name), userParams.end()); } } // namespace string LegacyAdapter_Instrument::Impl::get(const ParamContainer& paramContainer, CVID cvid, const string& userParamName) { // cvParam CVParam param = paramContainer.cvParamChild(cvid); if (param.cvid != CVID_Unknown) return param.name(); // userParam string result = paramContainer.userParam(userParamName).value; if (result.empty()) result = "Unknown"; return result; } void LegacyAdapter_Instrument::Impl::set(ParamContainer& paramContainer, CVID cvid, const string& userParamName, const string& value) { // remove existing params removeCVParams(paramContainer.cvParams, cvid); removeUserParams(paramContainer.userParams, userParamName); // try to translate to cvParam CVID result = cvTranslator.translate(value); if (cvIsA(result, cvid)) { paramContainer.cvParams.push_back(result); return; } // otherwise encode as userParam paramContainer.userParams.push_back(UserParam(userParamName, value)); } // // LegacyAdapter_Instrument // PWIZ_API_DECL LegacyAdapter_Instrument::LegacyAdapter_Instrument(InstrumentConfiguration& instrumentConfiguration, const CVTranslator& cvTranslator) : impl_(new Impl(instrumentConfiguration, cvTranslator)) {} PWIZ_API_DECL string LegacyAdapter_Instrument::manufacturer() const { // look first for cvParam CVParam model = impl_->instrumentConfiguration.cvParamChild(MS_instrument_model); if (model.cvid != CVID_Unknown && model != MS_instrument_model) { // get the parent term const CVTermInfo& modelInfo = cvTermInfo(model.cvid); if (modelInfo.parentsIsA.empty()) throw runtime_error("[LegacyAdapter_Instrument::manufacturer()] Model has no parents."); // s/ instrument model// string result = cvTermInfo(modelInfo.parentsIsA[0]).name; string::size_type index_suffix = result.find(" instrument model"); if (index_suffix != string::npos) result.erase(index_suffix); return result; } // then try userParam string result = impl_->instrumentConfiguration.userParam("msManufacturer").value; if (result.empty()) result = "Unknown"; return result; } PWIZ_API_DECL string LegacyAdapter_Instrument::model() const { return impl_->get(impl_->instrumentConfiguration, MS_instrument_model, "msModel"); } PWIZ_API_DECL void LegacyAdapter_Instrument::manufacturerAndModel(const string& valueManufacturer, const string& valueModel) { // remove existing params removeCVParams(impl_->instrumentConfiguration.cvParams, MS_instrument_model); removeUserParams(impl_->instrumentConfiguration.userParams, "msManufacturer"); removeUserParams(impl_->instrumentConfiguration.userParams, "msModel"); // try to translate to cvParam CVID cvid = impl_->cvTranslator.translate(valueModel); if (cvIsA(cvid, MS_instrument_model)) { impl_->instrumentConfiguration.cvParams.push_back(cvid); return; } // otherwise encode as userParam impl_->instrumentConfiguration.userParams.push_back(UserParam("msManufacturer", valueManufacturer)); impl_->instrumentConfiguration.userParams.push_back(UserParam("msModel", valueModel)); } PWIZ_API_DECL string LegacyAdapter_Instrument::ionisation() const { try { return impl_->get(impl_->instrumentConfiguration.componentList.source(0), MS_ionization_type, "msIonisation"); } catch (...) { return "Unknown"; // Empty component list is legal } } PWIZ_API_DECL void LegacyAdapter_Instrument::ionisation(const string& value) { impl_->set(impl_->instrumentConfiguration.componentList.source(0), MS_ionization_type, "msIonisation", value); } PWIZ_API_DECL string LegacyAdapter_Instrument::analyzer() const { try { return impl_->get(impl_->instrumentConfiguration.componentList.analyzer(0), MS_mass_analyzer_type, "msMassAnalyzer"); } catch (...) { return "Unknown"; // Empty component list is legal } } PWIZ_API_DECL void LegacyAdapter_Instrument::analyzer(const string& value) { impl_->set(impl_->instrumentConfiguration.componentList.analyzer(0), MS_mass_analyzer_type, "msMassAnalyzer", value); } PWIZ_API_DECL string LegacyAdapter_Instrument::detector() const { try { return impl_->get(impl_->instrumentConfiguration.componentList.detector(0), MS_detector_type, "msDetector"); } catch (...) { return "Unknown"; // Empty component list is legal } } PWIZ_API_DECL void LegacyAdapter_Instrument::detector(const string& value) { impl_->set(impl_->instrumentConfiguration.componentList.detector(0), MS_detector_type, "msDetector", value); } // // LegacyAdapter_Software::Impl // struct LegacyAdapter_Software::Impl { SoftwarePtr software; MSData& msd; const CVTranslator& cvTranslator; Impl(SoftwarePtr _software, MSData& _msd, const CVTranslator& _cvTranslator) : software(_software), msd(_msd), cvTranslator(_cvTranslator) { if (!software.get()) throw runtime_error("[LegacyAdapter_Software] Null SoftwarePtr."); } }; // // LegacyAdapter_Software // namespace { ProcessingMethod& getProcessingMethod(SoftwarePtr software, MSData& msd) { // find ProcessingMethod associated with Software for (vector::const_iterator it=msd.dataProcessingPtrs.begin(); it!=msd.dataProcessingPtrs.end(); ++it) { if (!it->get()) continue; for (vector::iterator jt=(*it)->processingMethods.begin(); jt!=(*it)->processingMethods.end(); ++jt) { if (jt->softwarePtr.get()==software.get()) return *jt; } } // create a new DataProcessing if we didn't find one const string& softwareID = software->id; if (softwareID.empty()) throw runtime_error("[LegacyAdapter_Software::getProcessingMethod()] " "Software::id not set."); DataProcessingPtr dp = DataProcessingPtr(new DataProcessing(softwareID + " processing")); dp->processingMethods.push_back(ProcessingMethod()); dp->processingMethods.back().softwarePtr = software; msd.dataProcessingPtrs.push_back(dp); return dp->processingMethods.back(); } string getProcessingMethodUserParamValue(const string& name, const SoftwarePtr& software, const MSData& msd) { for (vector::const_iterator it=msd.dataProcessingPtrs.begin(); it!=msd.dataProcessingPtrs.end(); ++it) { if (!it->get()) continue; for (vector::const_iterator jt=(*it)->processingMethods.begin(); jt!=(*it)->processingMethods.end(); ++jt) { if (jt->softwarePtr.get() != software.get()) continue; UserParam result = jt->userParam(name); if (!result.empty()) return result.value; } } return string(); } } // namespace LegacyAdapter_Software::LegacyAdapter_Software(SoftwarePtr software, MSData& msd, const CVTranslator& cvTranslator) : impl_(new Impl(software, msd, cvTranslator)) {} PWIZ_API_DECL string LegacyAdapter_Software::name() const { CVParam softwareParam = impl_->software->cvParamChild(MS_software); if (softwareParam.cvid != CVID_Unknown) return softwareParam.name(); string result = getProcessingMethodUserParamValue("name", impl_->software, impl_->msd); return !result.empty() ? result : "unknown software name"; } PWIZ_API_DECL void LegacyAdapter_Software::name(const string& value) { impl_->software->clear(); CVParam softwareParam = impl_->cvTranslator.translate(value); if (softwareParam.cvid != CVID_Unknown) { impl_->software->cvParams.push_back(softwareParam); } else { ProcessingMethod& pm = getProcessingMethod(impl_->software, impl_->msd); removeUserParams(pm.userParams, "name"); pm.userParams.push_back(UserParam("name", value)); } } PWIZ_API_DECL string LegacyAdapter_Software::version() const { return impl_->software->version; } PWIZ_API_DECL void LegacyAdapter_Software::version(const string& value) { impl_->software->version = value; } PWIZ_API_DECL string LegacyAdapter_Software::type() const { string result = getProcessingMethodUserParamValue("type", impl_->software, impl_->msd); return !result.empty() ? result : "unknown software type"; } PWIZ_API_DECL void LegacyAdapter_Software::type(const string& value) { // this type does not get a dataProcessingPtr/processingMethod if (value == "acquisition") return; ProcessingMethod& pm = getProcessingMethod(impl_->software, impl_->msd); removeUserParams(pm.userParams, "type"); pm.userParams.push_back(UserParam("type", value)); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/LegacyAdapter.hpp000066400000000000000000000073541444255175000232550ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #ifndef _LEGACYADAPTER_HPP_ #define _LEGACYADAPTER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "boost/shared_ptr.hpp" namespace pwiz { namespace data { class CVTranslator; } } namespace pwiz { namespace msdata { using pwiz::data::CVTranslator; /// /// interface for legacy access to Instrument /// /// mzXML/RAMP encode instrument information as 5 strings: /// manufacturer, model, ionisation, analyzer, detector /// /// In mzML, the equivalent information is encoded as cvParams in /// various locations in the element. One important /// difference is that the manufacturer information is implicit in /// the CV term used to encode the model. /// /// The "set" methods use CVTranslator to translate the string(s) to an /// appropriate cvParam. If no CV term can be found, the information is /// encoded as a userParam. /// /// The "get" methods look for the cvParam first, then the userParam. /// class PWIZ_API_DECL LegacyAdapter_Instrument { public: LegacyAdapter_Instrument(InstrumentConfiguration& instrumentConfiguration, const CVTranslator& cvTranslator); std::string manufacturer() const; std::string model() const; void manufacturerAndModel(const std::string& valueManufacturer, const std::string& valueModel); std::string ionisation() const; void ionisation(const std::string& value); std::string analyzer() const; void analyzer(const std::string& value); std::string detector() const; void detector(const std::string& value); private: struct Impl; boost::shared_ptr impl_; LegacyAdapter_Instrument(LegacyAdapter_Instrument&); LegacyAdapter_Instrument& operator=(LegacyAdapter_Instrument&); }; /// /// interface for legacy access to Software /// /// mzXML: /// /// /// MSData: /// name: Software::cvParams(0) /// version: Software::version /// type: DataProcessing::processingMethods[?].userParams[?] /// /// Note: setting 'type' may create a DataProcessing object, which needs an id. /// Since the id is generated from 'name', it is an error to set 'type' before /// setting 'name'. /// class PWIZ_API_DECL LegacyAdapter_Software { public: LegacyAdapter_Software(SoftwarePtr software, MSData& msd, const CVTranslator& cvTranslator); std::string name() const; void name(const std::string& value); std::string version() const; void version(const std::string& value); std::string type() const; void type(const std::string& value); private: struct Impl; boost::shared_ptr impl_; LegacyAdapter_Software(LegacyAdapter_Software&); LegacyAdapter_Software& operator=(LegacyAdapter_Software&); }; } // namespace msdata } // namespace pwiz #endif // _LEGACYADAPTER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/MSData.cpp000066400000000000000000001067711444255175000216570ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "MSData.hpp" #include "pwiz/utility/misc/Std.hpp" #include #include "Diff.hpp" namespace pwiz { namespace msdata { using namespace pwiz::cv; using namespace pwiz::data; PWIZ_API_DECL vector defaultCVList() { vector result; result.resize(2); result[0] = cv::cv("MS"); result[1] = cv::cv("UO"); return result; } // // SourceFile // PWIZ_API_DECL SourceFile::SourceFile(const string _id, const string _name, const string _location) : id(_id), name(_name), location(_location) {} PWIZ_API_DECL bool SourceFile::empty() const { return id.empty() && name.empty() && location.empty() && ParamContainer::empty(); } // // FileDescription // PWIZ_API_DECL bool FileDescription::empty() const { return fileContent.empty() && sourceFilePtrs.empty() && contacts.empty(); } // // Sample // PWIZ_API_DECL Sample::Sample(const string _id, const string _name) : id(_id), name(_name) {} PWIZ_API_DECL bool Sample::empty() const { return id.empty() && name.empty() && ParamContainer::empty(); } // // Component // PWIZ_API_DECL void Component::define(CVID cvid, int order) { cvParams.clear(); cvParams.push_back(cvid); this->order = order; if (cvIsA(cvid, MS_ionization_type)) type = ComponentType_Source; else if (cvIsA(cvid, MS_mass_analyzer_type)) type = ComponentType_Analyzer; else if (cvIsA(cvid, MS_detector_type)) type = ComponentType_Detector; else throw runtime_error(("[Component::define] Error determining component type for term \"" + cvTermInfo(cvid).name + "\"")); } PWIZ_API_DECL bool Component::empty() const { return order==0 && ParamContainer::empty(); } // // ComponentList // PWIZ_API_DECL Component& ComponentList::source(size_t index) { size_t count = 0; for (size_t i=0; i < size(); ++i) { Component& c = at(i); if (c.type == ComponentType_Source) { if (count == index) return c; ++count; } } throw out_of_range((boost::format("[ComponentList::source] Source %d is out of range; only found %d sources") % index % count).str()); } PWIZ_API_DECL Component& ComponentList::analyzer(size_t index) { size_t count = 0; for (size_t i=0; i < size(); ++i) { Component& c = at(i); if (c.type == ComponentType_Analyzer) { if (count == index) return c; ++count; } } throw out_of_range((boost::format("[ComponentList::analyzer] Analyzer %d is out of range; only found %d analyzers") % index % count).str()); } PWIZ_API_DECL Component& ComponentList::detector(size_t index) { size_t count = 0; for (size_t i=0; i < size(); ++i) { Component& c = at(i); if (c.type == ComponentType_Detector) { if (count == index) return c; ++count; } } throw out_of_range((boost::format("[ComponentList::detector] Detector %d is out of range; only found %d detectors") % index % count).str()); } PWIZ_API_DECL const Component& ComponentList::source(size_t index) const { return const_cast(this)->source(index); } PWIZ_API_DECL const Component& ComponentList::analyzer(size_t index) const { return const_cast(this)->analyzer(index); } PWIZ_API_DECL const Component& ComponentList::detector(size_t index) const { return const_cast(this)->detector(index); } // // Software // PWIZ_API_DECL bool Software::empty() const { return id.empty() && version.empty() && ParamContainer::empty(); } // // This constructor is a workaround for an MSVC internal compiler error. // For some reason MSVC doesn't like this default argument, but won't say why: // const CVParam& _cvParam = CVParam(), // PWIZ_API_DECL Software::Software(const string& _id) : id(_id) {} PWIZ_API_DECL Software::Software(const string& _id, const CVParam& _param, const string& _version) : id(_id), version(_version) { cvParams.push_back(_param); } // // InstrumentConfiguration // PWIZ_API_DECL InstrumentConfiguration::InstrumentConfiguration(const string& _id) : id(_id) {} PWIZ_API_DECL bool InstrumentConfiguration::empty() const { return id.empty() && componentList.empty() && (!softwarePtr.get() || softwarePtr->empty()) && ParamContainer::empty(); } // // ProcessingMethod // PWIZ_API_DECL bool ProcessingMethod::empty() const { return order==0 && (!softwarePtr.get() || softwarePtr->empty()) && ParamContainer::empty(); } // // DataProcessing // PWIZ_API_DECL DataProcessing::DataProcessing(const string& _id) : id(_id) {} PWIZ_API_DECL bool DataProcessing::empty() const { return id.empty() && processingMethods.empty(); } // // ScanSettings // PWIZ_API_DECL ScanSettings::ScanSettings(const string& _id) : id(_id) {} PWIZ_API_DECL bool ScanSettings::empty() const { return id.empty() && sourceFilePtrs.empty() && targets.empty(); } // // SelectedIon // PWIZ_API_DECL SelectedIon::SelectedIon(double mz) { set(MS_selected_ion_m_z, mz, MS_m_z); } PWIZ_API_DECL SelectedIon::SelectedIon(double mz, double intensity, CVID intensityUnit) { set(MS_selected_ion_m_z, mz, MS_m_z); set(MS_peak_intensity, intensity, intensityUnit); } PWIZ_API_DECL SelectedIon::SelectedIon(double mz, int chargeState) { set(MS_selected_ion_m_z, mz, MS_m_z); set(MS_charge_state, boost::lexical_cast(chargeState)); } PWIZ_API_DECL SelectedIon::SelectedIon(double mz, double intensity, int chargeState, CVID intensityUnit) { set(MS_selected_ion_m_z, mz, MS_m_z); set(MS_peak_intensity, intensity, intensityUnit); set(MS_charge_state, boost::lexical_cast(chargeState)); } // // Precursor // PWIZ_API_DECL Precursor::Precursor(double mz) { selectedIons.push_back(SelectedIon(mz)); } PWIZ_API_DECL Precursor::Precursor(double mz, double intensity, CVID intensityUnit) { selectedIons.push_back(SelectedIon(mz, intensity, intensityUnit)); } PWIZ_API_DECL Precursor::Precursor(double mz, int chargeState) { selectedIons.push_back(SelectedIon(mz, chargeState)); } PWIZ_API_DECL Precursor::Precursor(double mz, double intensity, int chargeState, CVID intensityUnit) { selectedIons.push_back(SelectedIon(mz, intensity, chargeState, intensityUnit)); } PWIZ_API_DECL bool Precursor::empty() const { return (!sourceFilePtr.get() || sourceFilePtr->empty()) && spectrumID.empty() && isolationWindow.empty() && selectedIons.empty() && activation.empty() && ParamContainer::empty(); } // // Product // PWIZ_API_DECL bool Product::empty() const { return (isolationWindow.empty()); } PWIZ_API_DECL bool Product::operator==(const Product& that) const { return isolationWindow == that.isolationWindow; } // // ScanWindow // PWIZ_API_DECL ScanWindow::ScanWindow(double low, double high, CVID unit) { set(MS_scan_window_lower_limit, low, unit); set(MS_scan_window_upper_limit, high, unit); } // // Scan // PWIZ_API_DECL bool Scan::empty() const { return (!instrumentConfigurationPtr.get() || instrumentConfigurationPtr->empty()) && scanWindows.empty() && ParamContainer::empty(); } // // ScanList // PWIZ_API_DECL bool ScanList::empty() const { return scans.empty() && ParamContainer::empty(); } // // BinaryDataArray // PWIZ_API_DECL bool BinaryDataArray::empty() const { return (!dataProcessingPtr.get() || dataProcessingPtr->empty()) && data.empty() && ParamContainer::empty(); } PWIZ_API_DECL bool IntegerDataArray::empty() const { return (!dataProcessingPtr.get() || dataProcessingPtr->empty()) && data.empty() && ParamContainer::empty(); } // // MZIntensityPair // PWIZ_API_DECL ostream& operator<<(ostream& os, const MZIntensityPair& mzi) { os << "(" << mzi.mz << "," << mzi.intensity << ")"; return os; } PWIZ_API_DECL bool MZIntensityPair::operator==(const MZIntensityPair& that) const { return mz == that.mz && intensity == that.intensity; } // // TimeIntensityPair // PWIZ_API_DECL ostream& operator<<(ostream& os, const TimeIntensityPair& ti) { os << "(" << ti.time << "," << ti.intensity << ")"; return os; } PWIZ_API_DECL bool TimeIntensityPair::operator==(const TimeIntensityPair& that) const { return time == that.time && intensity == that.intensity; } // // id // namespace id { pair stringToPair(const string& nameValuePair) { string::size_type indexEquals = nameValuePair.find('='); if (indexEquals==string::npos || indexEquals+1>=nameValuePair.size()) throw runtime_error(("[MSData::stringToPair] Bad format: " + nameValuePair).c_str()); return make_pair(nameValuePair.substr(0,indexEquals), nameValuePair.substr(indexEquals+1)); } PWIZ_API_DECL map parse(const string& id) { if (id.empty()) throw runtime_error("[MSData::parse] Empty id"); vector pairs; boost::split(pairs, id, boost::is_any_of(" \t\n\r")); map result; transform(pairs.begin(), pairs.end(), inserter(result, result.end()), stringToPair); return result; } PWIZ_API_DECL string value(const string& id, const string& name) { map temp = parse(id); return temp[name]; } PWIZ_API_DECL CVID getDefaultNativeIDFormat(const MSData& msd) { CVID result = CVID_Unknown; if (msd.run.defaultSourceFilePtr.get()) result = msd.run.defaultSourceFilePtr->cvParamChild(MS_nativeID_format).cvid; else if (!msd.fileDescription.sourceFilePtrs.empty()) result = msd.fileDescription.sourceFilePtrs[0]->cvParamChild(MS_nativeID_format).cvid; if (( CVID_Unknown == result ) && (msd.version().find("1.0") == 0)) result = MS_scan_number_only_nativeID_format; return result; } PWIZ_API_DECL string translateScanNumberToNativeID(CVID nativeIdFormat, const string& scanNumber) { switch (nativeIdFormat) { case MS_Thermo_nativeID_format: return "controllerType=0 controllerNumber=1 scan=" + scanNumber; case MS_spectrum_identifier_nativeID_format: return "spectrum=" + scanNumber; case MS_multiple_peak_list_nativeID_format: return "index=" + scanNumber; case MS_Agilent_MassHunter_nativeID_format: return "scanId=" + scanNumber; case MS_Bruker_Agilent_YEP_nativeID_format: case MS_Bruker_BAF_nativeID_format: case MS_scan_number_only_nativeID_format: return "scan=" + scanNumber; default: return ""; } } PWIZ_API_DECL string translateNativeIDToScanNumber(CVID nativeIdFormat, const string& id) { switch (nativeIdFormat) { case MS_spectrum_identifier_nativeID_format: // mzData return value(id, "spectrum"); case MS_multiple_peak_list_nativeID_format: // MGF return value(id, "index"); case MS_Agilent_MassHunter_nativeID_format: return value(id, "scanId"); case MS_Thermo_nativeID_format: // conversion from Thermo nativeIDs assumes default controller information if (id.find("controllerType=0 controllerNumber=1") != 0) return ""; // fall through to get scan case MS_Bruker_Agilent_YEP_nativeID_format: case MS_Bruker_BAF_nativeID_format: case MS_scan_number_only_nativeID_format: return value(id, "scan"); default: if (bal::starts_with(id, "scan=")) return value(id, "scan"); else if (bal::starts_with(id, "index=")) return value(id, "index"); return ""; } } string abbreviate(const string& id, char delimiter /*= '.'*/) { string result; size_t indexEquals, indexSpace = 0; do { if (!result.empty()) result += delimiter; indexEquals = id.find('=', indexSpace); if (indexEquals == string::npos) throw runtime_error("[MSData::id::abbreviate] Bad format: " + id); indexSpace = id.find(' ', indexEquals+1); if (indexSpace == string::npos) result += id.substr(indexEquals+1); else result += id.substr(indexEquals+1, indexSpace-indexEquals-1); } while (indexSpace != string::npos); return result; } } // namespace id // // Spectrum // PWIZ_API_DECL bool Spectrum::empty() const { return index==IDENTITY_INDEX_NONE && id.empty() && defaultArrayLength==0 && (!dataProcessingPtr.get() || dataProcessingPtr->empty()) && (!sourceFilePtr.get() || sourceFilePtr->empty()) && scanList.empty() && precursors.empty() && products.empty() && binaryDataArrayPtrs.empty() && ParamContainer::empty(); } PWIZ_API_DECL bool Spectrum::hasBinaryData() const { return (binaryDataArrayPtrs.size() && binaryDataArrayPtrs[0] && !binaryDataArrayPtrs[0]->data.empty()) || (integerDataArrayPtrs.size() && integerDataArrayPtrs[0] && !integerDataArrayPtrs[0]->data.empty()); }; namespace { pair getMZIntensityArrays(const vector& ptrs) { BinaryDataArrayPtr mzArray; BinaryDataArrayPtr intensityArray; for (vector::const_iterator it=ptrs.begin(); it!=ptrs.end(); ++it) { if (((*it)->hasCVParam(MS_m_z_array) || (*it)->hasCVParam(MS_wavelength_array)) && !mzArray.get()) mzArray = *it; if ((*it)->hasCVParam(MS_intensity_array) && !intensityArray.get()) intensityArray = *it; } return make_pair(mzArray, intensityArray); } } // namespace PWIZ_API_DECL void Spectrum::getMZIntensityPairs(vector& output) const { // retrieve and validate m/z and intensity arrays pair arrays = getMZIntensityArrays(binaryDataArrayPtrs); if (!arrays.first.get() || !arrays.second.get()) return; if (arrays.first->data.size() != arrays.second->data.size()) throw runtime_error("[MSData::Spectrum::getMZIntensityPairs()] Sizes do not match."); output.clear(); output.resize(arrays.first->data.size()); if (!output.empty()) { double* mz = &arrays.first->data[0]; double* intensity = &arrays.second->data[0]; MZIntensityPair* start = &output[0]; for (MZIntensityPair* p = start; p != start + output.size(); ++p) { p->mz = *mz++; p->intensity = *intensity++; } } } PWIZ_API_DECL void Spectrum::getMZIntensityPairs(MZIntensityPair* output, size_t expectedSize) const { // retrieve and validate m/z and intensity arrays pair arrays = getMZIntensityArrays(binaryDataArrayPtrs); // if either array is absent, do not modify the output if (!arrays.first.get() || !arrays.second.get()) return; if (arrays.first->data.size() != expectedSize) throw runtime_error("[MSData::Spectrum::getMZIntensityPairs()] m/z array invalid size."); if (arrays.second->data.size() != expectedSize) throw runtime_error("[MSData::Spectrum::getMZIntensityPairs()] Intensity array invalid size."); if (!output) throw runtime_error("[MSData::Spectrum::getMZIntensityPairs()] Null output buffer."); // copy data into return buffer double* mz = &arrays.first->data[0]; double* intensity = &arrays.second->data[0]; for (MZIntensityPair* p=output; p!=output+expectedSize; ++p) { p->mz = *mz++; p->intensity = *intensity++; } } PWIZ_API_DECL BinaryDataArrayPtr Spectrum::getArrayByCVID(CVID arrayType) const { for (const auto& arrayPtr : binaryDataArrayPtrs) if (arrayPtr->hasCVParam(arrayType)) return arrayPtr; return BinaryDataArrayPtr(); } PWIZ_API_DECL BinaryDataArrayPtr Spectrum::getMZArray() const { for (vector::const_iterator it = binaryDataArrayPtrs.begin(); it != binaryDataArrayPtrs.end(); ++it) { if ((*it)->hasCVParam(MS_m_z_array) || (*it)->hasCVParam(MS_wavelength_array)) return *it; } return BinaryDataArrayPtr(); } PWIZ_API_DECL BinaryDataArrayPtr Spectrum::getIntensityArray() const { return getArrayByCVID(MS_intensity_array); } PWIZ_API_DECL void Spectrum::setMZIntensityPairs(const vector& input, CVID intensityUnits) { if (!input.empty()) setMZIntensityPairs(&input[0], input.size(), intensityUnits); else setMZIntensityArrays(vector(), vector(), intensityUnits); } PWIZ_API_DECL void Spectrum::setMZIntensityPairs(const MZIntensityPair* input, size_t size, CVID intensityUnits) { pair arrays = getMZIntensityArrays(binaryDataArrayPtrs); BinaryDataArrayPtr& bd_mz = arrays.first; BinaryDataArrayPtr& bd_intensity = arrays.second; if (!bd_mz.get()) { bd_mz = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_m_z_array); arrayType.units = MS_m_z; bd_mz->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_mz); } if (!bd_intensity.get()) { bd_intensity = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_intensity_array); arrayType.units = intensityUnits; bd_intensity->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_intensity); } bd_mz->data.clear(); bd_intensity->data.clear(); bd_mz->data.resize(size); bd_intensity->data.resize(size); defaultArrayLength = size; if (size == 0) return; double* mz = &bd_mz->data[0]; double* intensity = &bd_intensity->data[0]; for (const MZIntensityPair* p=input; p!=input+size; ++p) { *mz++ = p->mz; *intensity++ = p->intensity; } } /// set m/z and intensity arrays separately (they must be the same size) by swapping the vector contents /// this allows for a more nearly zero copy setup. Contents of mzArray and intensityArray are undefined after calling. PWIZ_API_DECL void Spectrum::swapMZIntensityArrays(pwiz::util::BinaryData& mzArray, pwiz::util::BinaryData& intensityArray, CVID intensityUnits) { if (mzArray.size() != intensityArray.size()) throw runtime_error("[MSData::Spectrum::swapMZIntensityArrays()] Sizes do not match."); pair arrays = getMZIntensityArrays(binaryDataArrayPtrs); BinaryDataArrayPtr& bd_mz = arrays.first; BinaryDataArrayPtr& bd_intensity = arrays.second; if (!bd_mz.get()) { bd_mz = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_m_z_array); arrayType.units = MS_m_z; bd_mz->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_mz); } if (!bd_intensity.get()) { bd_intensity = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_intensity_array); arrayType.units = intensityUnits; bd_intensity->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_intensity); } defaultArrayLength = mzArray.size(); bd_mz->data.swap(mzArray); bd_intensity->data.swap(intensityArray); } PWIZ_API_DECL void Spectrum::setMZIntensityArrays(const vector& mzArray, const vector& intensityArray, CVID intensityUnits) { pwiz::util::BinaryData mz, intensity; mz = mzArray, intensity = intensityArray; setMZIntensityArrays(mz, intensity, intensityUnits); } PWIZ_API_DECL void Spectrum::setMZIntensityArrays(const pwiz::util::BinaryData& mzArray, const pwiz::util::BinaryData& intensityArray, CVID intensityUnits) { if (mzArray.size() != intensityArray.size()) throw runtime_error("[MSData::Spectrum::setMZIntensityArrays()] Sizes do not match."); pair arrays = getMZIntensityArrays(binaryDataArrayPtrs); BinaryDataArrayPtr& bd_mz = arrays.first; BinaryDataArrayPtr& bd_intensity = arrays.second; if (!bd_mz.get()) { bd_mz = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_m_z_array); arrayType.units = MS_m_z; bd_mz->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_mz); } if (!bd_intensity.get()) { bd_intensity = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_intensity_array); arrayType.units = intensityUnits; bd_intensity->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_intensity); } defaultArrayLength = mzArray.size(); bd_mz->data.clear(); bd_intensity->data.clear(); bd_mz->data.insert(bd_mz->data.end(), mzArray.begin(), mzArray.end()); bd_intensity->data.insert(bd_intensity->data.end(), intensityArray.begin(), intensityArray.end()); } // // Chromatogram // PWIZ_API_DECL bool Chromatogram::empty() const { return index==IDENTITY_INDEX_NONE && id.empty() && defaultArrayLength==0 && (!dataProcessingPtr.get() || dataProcessingPtr->empty()) && precursor.empty() && product.empty() && binaryDataArrayPtrs.empty() && ParamContainer::empty(); } namespace { pair getTimeIntensityArrays(const vector& ptrs) { BinaryDataArrayPtr timeArray; BinaryDataArrayPtr intensityArray; for (vector::const_iterator it=ptrs.begin(); it!=ptrs.end(); ++it) { if ((*it)->hasCVParam(MS_time_array) && !timeArray.get()) timeArray = *it; if ((*it)->hasCVParam(MS_intensity_array) && !intensityArray.get()) intensityArray = *it; } return make_pair(timeArray, intensityArray); } } // namespace PWIZ_API_DECL void Chromatogram::getTimeIntensityPairs(vector& output) const { output.clear(); output.resize(defaultArrayLength); if (!output.empty()) getTimeIntensityPairs(&output[0], output.size()); } PWIZ_API_DECL void Chromatogram::getTimeIntensityPairs(TimeIntensityPair* output, size_t expectedSize) const { // retrieve and validate time and intensity arrays if (expectedSize == 0) return; pair arrays = getTimeIntensityArrays(binaryDataArrayPtrs); if (!output) throw runtime_error("[MSData::Chromatogram::getTimeIntensityPairs()] Null output buffer."); // copy data into return buffer double* time = &arrays.first->data[0]; double* intensity = &arrays.second->data[0]; for (TimeIntensityPair* p=output; p!=output+expectedSize; ++p) { p->time = *time++; p->intensity = *intensity++; } } PWIZ_API_DECL BinaryDataArrayPtr Chromatogram::getTimeArray() const { for (vector::const_iterator it = binaryDataArrayPtrs.begin(); it != binaryDataArrayPtrs.end(); ++it) { if ((*it)->hasCVParam(MS_time_array)) return *it; } return BinaryDataArrayPtr(); } PWIZ_API_DECL BinaryDataArrayPtr Chromatogram::getIntensityArray() const { for (vector::const_iterator it = binaryDataArrayPtrs.begin(); it != binaryDataArrayPtrs.end(); ++it) { if ((*it)->hasCVParam(MS_intensity_array)) return *it; } return BinaryDataArrayPtr(); } PWIZ_API_DECL void Chromatogram::setTimeIntensityPairs(const vector& input, CVID timeUnits, CVID intensityUnits) { if (!input.empty()) setTimeIntensityPairs(&input[0], input.size(), timeUnits, intensityUnits); } PWIZ_API_DECL void Chromatogram::setTimeIntensityPairs(const TimeIntensityPair* input, size_t size, CVID timeUnits, CVID intensityUnits) { BinaryDataArrayPtr bd_time(new BinaryDataArray); BinaryDataArrayPtr bd_intensity(new BinaryDataArray); binaryDataArrayPtrs.clear(); binaryDataArrayPtrs.push_back(bd_time); binaryDataArrayPtrs.push_back(bd_intensity); bd_time->cvParams.push_back(CVParam(MS_time_array, "", timeUnits)); bd_intensity->cvParams.push_back(CVParam(MS_intensity_array, "", intensityUnits)); bd_time->data.resize(size); bd_intensity->data.resize(size); defaultArrayLength = size; if (size == 0) return; double* time = &bd_time->data[0]; double* intensity = &bd_intensity->data[0]; for (const TimeIntensityPair* p=input; p!=input+size; ++p) { *time++ = p->time; *intensity++ = p->intensity; } } PWIZ_API_DECL void Chromatogram::setTimeIntensityArrays(const std::vector& timeArray, const std::vector& intensityArray, CVID timeUnits, CVID intensityUnits) { if (timeArray.size() != intensityArray.size()) throw runtime_error("[MSData::Chromatogram::setTimeIntensityArrays()] Sizes do not match."); pair arrays = getTimeIntensityArrays(binaryDataArrayPtrs); BinaryDataArrayPtr& bd_time = arrays.first; BinaryDataArrayPtr& bd_intensity = arrays.second; if (!bd_time.get()) { bd_time = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_time_array); arrayType.units = timeUnits; bd_time->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_time); } if (!bd_intensity.get()) { bd_intensity = BinaryDataArrayPtr(new BinaryDataArray); CVParam arrayType(MS_intensity_array); arrayType.units = intensityUnits; bd_intensity->cvParams.push_back(arrayType); binaryDataArrayPtrs.push_back(bd_intensity); } defaultArrayLength = timeArray.size(); bd_time->data.assign(timeArray.begin(), timeArray.end()); bd_intensity->data.assign(intensityArray.begin(), intensityArray.end()); } // // SpectrumList (default implementations) // PWIZ_API_DECL bool SpectrumList::empty() const { return size()==0 && !dataProcessingPtr().get(); } PWIZ_API_DECL size_t SpectrumList::find(const string& id) const { for (size_t index=0; index abbreviatedTokens, actualTokens; // "1.1.123.2" splits to { 1, 1, 123, 2 } bal::split(abbreviatedTokens, abbreviatedId, bal::is_any_of(string(1, delimiter))); if (empty()) return size(); // "sample=1 period=1 cycle=123 experiment=2" splits to { sample, 1, period, 1, cycle, 123, experiment, 2 } for (size_t s = size(); s-- > 0;) // Some files contain mixed scan types - e.g. Waters where lockmass scans may be non-IMS and others IMS, so we may need to search a bit to find a format match { string firstId = spectrumIdentity(s).id; bal::split(actualTokens, firstId, bal::is_any_of(" =")); if (actualTokens.size() != abbreviatedTokens.size() * 2) { // TODO log this since I assume Skyline devs/uers don't want to see it //warn_once(("[SpectrumList::findAbbreviated] abbreviated id (" + abbreviatedId + ") has different number of terms from spectrum list (" + firstId + ")").c_str()); if (s==0) return size(); } string fullId(actualTokens[0] + "=" + abbreviatedTokens[0]); for (size_t i = 1; i < abbreviatedTokens.size(); ++i) fullId += " " + actualTokens[2*i] + "=" + abbreviatedTokens[i]; size_t result = find(fullId); if ((result >= 0 && result < size()) || s == 0) return result; } } PWIZ_API_DECL IndexList SpectrumList::findNameValue(const string& name, const string& value) const { IndexList result; for (size_t index=0; index SpectrumList::dataProcessingPtr() const { return shared_ptr(); } PWIZ_API_DECL SpectrumPtr SpectrumList::spectrum(const SpectrumPtr& seed, bool getBinaryData) const { return spectrum(seed->index, getBinaryData); }; PWIZ_API_DECL SpectrumPtr SpectrumList::spectrum(size_t index, DetailLevel detailLevel) const { // By default faster metadeta access is not implemented if (detailLevel == DetailLevel_FastMetadata || detailLevel == DetailLevel_InstantMetadata) return SpectrumPtr(new Spectrum); return spectrum(index, detailLevel == DetailLevel_FullData); } PWIZ_API_DECL void SpectrumList::warn_once(const char *msg) const { } PWIZ_API_DECL DetailLevel SpectrumList::min_level_accepted(std::function predicate) const { DetailLevel result = DetailLevel_InstantMetadata; for (size_t i = 0, end = size(); i < end; ++i) { boost::tribool accepted; do { SpectrumPtr s = spectrum(i, result); accepted = predicate(*s); if (accepted) return result; if (!accepted && (int)result < (int)DetailLevel_FullData) result = DetailLevel(int(result) + 1); else if (boost::logic::indeterminate(accepted)) { break; } } while ((int)result < (int)DetailLevel_FullData); } // if we reach this point, no spectrum satisfied the predicate even at the highest detail level throw runtime_error("[SpectrumList::min_level_accepted] no spectrum satisfied the given predicate at any DetailLevel"); } // // SpectrumListSimple // PWIZ_API_DECL const SpectrumIdentity& SpectrumListSimple::spectrumIdentity(size_t index) const { return *spectrum(index, false); } PWIZ_API_DECL SpectrumPtr SpectrumListSimple::spectrum(size_t index, bool getBinaryData) const { // validate index if (index >= size()) throw runtime_error("[MSData::SpectrumListSimple::spectrum()] Invalid index."); // validate Spectrum* if (!spectra[index].get()) throw runtime_error("[MSData::SpectrumListSimple::spectrum()] Null SpectrumPtr."); return spectra[index]; } PWIZ_API_DECL const shared_ptr SpectrumListSimple::dataProcessingPtr() const { return dp; } // // ChromatogramList (default implementations) // PWIZ_API_DECL bool ChromatogramList::empty() const { return size()==0 && !dataProcessingPtr().get(); } PWIZ_API_DECL size_t ChromatogramList::find(const string& id) const { for (size_t index=0; index ChromatogramList::dataProcessingPtr() const { return shared_ptr(); } // // ChromatogramListSimple // PWIZ_API_DECL const ChromatogramIdentity& ChromatogramListSimple::chromatogramIdentity(size_t index) const { return *chromatogram(index, false); } PWIZ_API_DECL ChromatogramPtr ChromatogramListSimple::chromatogram(size_t index, bool getBinaryData) const { // validate index if (index >= size()) throw runtime_error("[MSData::ChromatogramListSimple::chromatogram()] Invalid index."); // validate Chromatogram* if (!chromatograms[index].get()) throw runtime_error("[MSData::ChromatogramListSimple::chromatogram()] Null ChromatogramPtr."); return chromatograms[index]; } PWIZ_API_DECL const shared_ptr ChromatogramListSimple::dataProcessingPtr() const { return dp; } // // Run // PWIZ_API_DECL bool Run::empty() const { return id.empty() && (!defaultInstrumentConfigurationPtr.get() || defaultInstrumentConfigurationPtr->empty()) && (!samplePtr.get() || samplePtr->empty()) && startTimeStamp.empty() && (!defaultSourceFilePtr.get() || defaultSourceFilePtr->empty()) && (!spectrumListPtr.get() || spectrumListPtr->empty()) && (!chromatogramListPtr.get() || chromatogramListPtr->empty()) && ParamContainer::empty(); } // // MSData // PWIZ_API_DECL MSData::MSData() : version_("1.1.0"),nFiltersApplied_(0) {} PWIZ_API_DECL MSData::~MSData() {} PWIZ_API_DECL bool MSData::empty() const { return accession.empty() && id.empty() && cvs.empty() && fileDescription.empty() && paramGroupPtrs.empty() && samplePtrs.empty() && softwarePtrs.empty() && scanSettingsPtrs.empty() && instrumentConfigurationPtrs.empty() && dataProcessingPtrs.empty() && run.empty(); } PWIZ_API_DECL const string& MSData::version() const {return version_;} namespace { template struct HasID { const string& id_; HasID(const string& id) : id_(id) {} bool operator()(const shared_ptr& objectPtr) { return objectPtr.get() && objectPtr->id == id_; } }; } // namespace PWIZ_API_DECL vector MSData::allDataProcessingPtrs() const { vector result(dataProcessingPtrs); if (run.spectrumListPtr.get()) { // if SpectrumList::dataProcessingPtr() is not in MSData::dataProcessingPtrs, add it const shared_ptr sldp = run.spectrumListPtr->dataProcessingPtr(); if (sldp.get() && std::find_if(result.begin(), result.end(), HasID(sldp->id)) == result.end()) result.push_back(boost::const_pointer_cast(sldp)); } if (run.chromatogramListPtr.get()) { // if ChromatogramList::dataProcessingPtr() is not in MSData::dataProcessingPtrs, add it const shared_ptr cldp = run.chromatogramListPtr->dataProcessingPtr(); if (cldp.get() && std::find_if(result.begin(), result.end(), HasID(cldp->id)) == result.end()) result.push_back(boost::const_pointer_cast(cldp)); } return result; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/MSData.hpp000066400000000000000000001134551444255175000216610ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MSDATA_HPP_ #define _MSDATA_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/BinaryData.hpp" #include "pwiz/data/common/ParamTypes.hpp" #include "boost/shared_ptr.hpp" #include "boost/iostreams/positioning.hpp" #include #include #include #include #include namespace pwiz { namespace msdata { using namespace pwiz::data; PWIZ_API_DECL std::vector defaultCVList(); /// This summarizes the different types of spectra that can be expected in the file. This is expected to aid processing software in skipping files that do not contain appropriate spectrum types for it. struct PWIZ_API_DECL FileContent : public ParamContainer {}; /// Description of the source file, including location and type. struct PWIZ_API_DECL SourceFile : public ParamContainer { /// an identifier for this file. std::string id; /// name of the source file, without reference to location (either URI or local path). std::string name; /// URI-formatted location where the file was retrieved. std::string location; SourceFile(const std::string _id = "", const std::string _name = "", const std::string _location = ""); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; /// Description of the source file, including location and type. typedef boost::shared_ptr SourceFilePtr; /// Structure allowing the use of a controlled (cvParam) or uncontrolled vocabulary (userParam), or a reference to a predefined set of these in this mzML file (paramGroupRef). struct PWIZ_API_DECL Contact : public ParamContainer {}; /// Information pertaining to the entire mzML file (i.e. not specific to any part of the data set) is stored here. struct PWIZ_API_DECL FileDescription { /// this summarizes the different types of spectra that can be expected in the file. This is expected to aid processing software in skipping files that do not contain appropriate spectrum types for it. FileContent fileContent; /// list and descriptions of the source files this mzML document was generated or derived from. std::vector sourceFilePtrs; /// structure allowing the use of a controlled (cvParam) or uncontrolled vocabulary (userParam), or a reference to a predefined set of these in this mzML file (paramGroupRef) std::vector contacts; /// returns true iff all members are empty or null bool empty() const; }; /// Expansible description of the sample used to generate the dataset, named in sampleName. struct PWIZ_API_DECL Sample : public ParamContainer { /// a unique identifier across the samples with which to reference this sample description. std::string id; /// an optional name for the sample description, mostly intended as a quick mnemonic. std::string name; Sample(const std::string _id = "", const std::string _name = ""); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr SamplePtr; enum ComponentType { ComponentType_Unknown = -1, ComponentType_Source = 0, ComponentType_Analyzer, ComponentType_Detector }; /// A component of an instrument corresponding to a source (i.e. ion source), an analyzer (i.e. mass analyzer), or a detector (i.e. ion detector) struct PWIZ_API_DECL Component : public ParamContainer { /// the type of component (Source, Analyzer, or Detector) ComponentType type; /// this attribute MUST be used to indicate the order in which the components are encountered from source to detector (e.g., in a Q-TOF, the quadrupole would have the lower order number, and the TOF the higher number of the two). int order; Component() : type(ComponentType_Unknown), order(0) {} Component(ComponentType type, int order) : type(type), order(order) {} Component(CVID cvid, int order) { define(cvid, order); } void define(CVID cvid, int order); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; //struct PWIZ_API_DECL Source : public Component {}; //struct PWIZ_API_DECL Analyzer : public Component {}; //struct PWIZ_API_DECL Detector : public Component {}; /// List with the different components used in the mass spectrometer. At least one source, one mass analyzer and one detector need to be specified. struct PWIZ_API_DECL ComponentList : public std::vector { /// returns the source component with ordinal Component& source(size_t index); /// returns the analyzer component with ordinal Component& analyzer(size_t index); /// returns the detector component with ordinal Component& detector(size_t index); /// returns the source component with ordinal const Component& source(size_t index) const; /// returns the analyzer component with ordinal const Component& analyzer(size_t index) const; /// returns the detector component with ordinal const Component& detector(size_t index) const; }; /// A piece of software. struct PWIZ_API_DECL Software : public ParamContainer { /// an identifier for this software that is unique across all SoftwareTypes. std::string id; /// the software version. std::string version; Software(const std::string& _id = ""); Software(const std::string& _id, const CVParam& _param, const std::string& _version); /// returns true iff all members are empty or null bool empty() const; }; typedef boost::shared_ptr SoftwarePtr; /// TODO struct PWIZ_API_DECL Target : public ParamContainer {}; /// Description of the acquisition settings of the instrument prior to the start of the run. struct PWIZ_API_DECL ScanSettings { /// a unique identifier for this acquisition setting. std::string id; /// container for a list of source file references. std::vector sourceFilePtrs; /// target list (or 'inclusion list') configured prior to the run. std::vector targets; ScanSettings(const std::string& _id = ""); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr ScanSettingsPtr; /// Description of a particular hardware configuration of a mass spectrometer. Each configuration MUST have one (and only one) of the three different components used for an analysis. For hybrid instruments, such as an LTQ-FT, there MUST be one configuration for each permutation of the components that is used in the document. For software configuration, reference the appropriate ScanSettings element. struct PWIZ_API_DECL InstrumentConfiguration : public ParamContainer { /// an identifier for this instrument configuration. std::string id; /// list with the different components used in the mass spectrometer. At least one source, one mass analyzer and one detector need to be specified. ComponentList componentList; /// reference to a previously defined software element. SoftwarePtr softwarePtr; /// reference to a scan settings element defining global scan settings used by this configuration ScanSettingsPtr scanSettingsPtr; InstrumentConfiguration(const std::string& _id = ""); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr InstrumentConfigurationPtr; /// Description of the default peak processing method. This element describes the base method used in the generation of a particular mzML file. Variable methods should be described in the appropriate acquisition section - if no acquisition-specific details are found, then this information serves as the default. struct PWIZ_API_DECL ProcessingMethod : public ParamContainer { /// this attributes allows a series of consecutive steps to be placed in the correct order. int order; /// this attribute MUST reference the 'id' of the appropriate SoftwareType. SoftwarePtr softwarePtr; ProcessingMethod() : order(0) {} /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr ProcessingMethodPtr; /// Description of the way in which a particular software was used. struct PWIZ_API_DECL DataProcessing { /// a unique identifier for this data processing that is unique across all DataProcessingTypes. std::string id; /// description of the default peak processing method(s). This element describes the base method used in the generation of a particular mzML file. Variable methods should be described in the appropriate acquisition section - if no acquisition-specific details are found, then this information serves as the default. std::vector processingMethods; DataProcessing(const std::string& _id = ""); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr DataProcessingPtr; /// This element captures the isolation (or 'selection') window configured to isolate one or more precursors. struct PWIZ_API_DECL IsolationWindow : public ParamContainer {}; /// TODO struct PWIZ_API_DECL SelectedIon : public ParamContainer { SelectedIon() {} explicit SelectedIon(double mz); explicit SelectedIon(double mz, double intensity, CVID intensityUnit); explicit SelectedIon(double mz, int chargeState); explicit SelectedIon(double mz, double intensity, int chargeState, CVID intensityUnit); }; /// The type and energy level used for activation. struct PWIZ_API_DECL Activation : public ParamContainer {}; /// The method of precursor ion selection and activation struct PWIZ_API_DECL Precursor : public ParamContainer { /// for precursor spectra that are external to this document, this attribute MUST reference the 'id' attribute of a sourceFile representing that external document. /// note: this attribute is mutually exclusive with spectrumID; i.e. use one or the other but not both SourceFilePtr sourceFilePtr; /// for precursor spectra that are external to this document, this string MUST correspond to the 'id' attribute of a spectrum in the external document indicated by 'sourceFileRef'. /// note: this attribute is mutually exclusive with spectrumID; i.e. use one or the other but not both std::string externalSpectrumID; /// reference to the id attribute of the spectrum from which the precursor was selected. /// note: this attribute is mutually exclusive with externalSpectrumID; i.e. use one or the other but not both std::string spectrumID; /// this element captures the isolation (or 'selection') window configured to isolate one or more precursors. IsolationWindow isolationWindow; /// this list of precursor ions that were selected. std::vector selectedIons; /// the type and energy level used for activation. Activation activation; Precursor() {} explicit Precursor(double mz); explicit Precursor(double mz, double intensity, CVID intensityUnit); explicit Precursor(double mz, int chargeState); explicit Precursor(double mz, double intensity, int chargeState, CVID intensityUnit); /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; /// product ion information struct PWIZ_API_DECL Product { /// this element captures the isolation (or 'selection') window configured to isolate one or more precursors. IsolationWindow isolationWindow; /// returns true iff the element contains no params and all members are empty or null bool empty() const; /// returns true iff this product's isolation window is equal to that product's bool operator==(const Product& that) const; }; /// TODO struct PWIZ_API_DECL ScanWindow : public ParamContainer { ScanWindow(){} ScanWindow(double low, double high, CVID unit); }; /// Scan or acquisition from original raw file used to create this peak list, as specified in sourceFile. struct PWIZ_API_DECL Scan : public ParamContainer { /// if this attribute is set, it must reference the 'id' attribute of a sourceFile representing the external document containing the spectrum referred to by 'externalSpectrumID'. /// note: this attribute is mutually exclusive with spectrumID; i.e. use one or the other but not both SourceFilePtr sourceFilePtr; /// for scans that are external to this document, this string must correspond to the 'id' attribute of a spectrum in the external document indicated by 'sourceFileRef'. /// note: this attribute is mutually exclusive with spectrumID; i.e. use one or the other but not both std::string externalSpectrumID; /// for scans that are local to this document, this attribute can be used to reference the 'id' attribute of the spectrum corresponding to the scan. /// note: this attribute is mutually exclusive with externalSpectrumID; i.e. use one or the other but not both std::string spectrumID; /// this attribute MUST reference the 'id' attribute of the appropriate instrument configuration. InstrumentConfigurationPtr instrumentConfigurationPtr; /// container for a list of select windows. std::vector scanWindows; /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; /// List and descriptions of scans. struct PWIZ_API_DECL ScanList : public ParamContainer { std::vector scans; bool empty() const; }; /// The structure into which encoded binary data goes. Byte ordering is always little endian (Intel style). Computers using a different endian style MUST convert to/from little endian when writing/reading mzML struct PWIZ_API_DECL BinaryDataArray : public ParamContainer { typedef double value_type; /// this optional attribute may reference the 'id' attribute of the appropriate dataProcessing. DataProcessingPtr dataProcessingPtr; /// the binary data. pwiz::util::BinaryData data; /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr BinaryDataArrayPtr; /// The structure into which encoded integer binary data goes. Byte ordering is always little endian (Intel style). Computers using a different endian style MUST convert to/from little endian when writing/reading mzML struct PWIZ_API_DECL IntegerDataArray : public ParamContainer { typedef std::int64_t value_type; /// this optional attribute may reference the 'id' attribute of the appropriate dataProcessing. DataProcessingPtr dataProcessingPtr; /// the binary data. pwiz::util::BinaryData data; /// returns true iff the element contains no params and all members are empty or null bool empty() const; }; typedef boost::shared_ptr IntegerDataArrayPtr; #pragma pack(1) /// The data point type of a mass spectrum. struct PWIZ_API_DECL MZIntensityPair { double mz; double intensity; MZIntensityPair() : mz(0), intensity(0) {} MZIntensityPair(double mz, double intensity) : mz(mz), intensity(intensity) {} /// returns true iff mz and intensity are pairwise equal bool operator==(const MZIntensityPair& that) const; }; #pragma pack() PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MZIntensityPair& mzi); #pragma pack(1) /// The data point type of a chromatogram. struct PWIZ_API_DECL TimeIntensityPair { double time; double intensity; TimeIntensityPair() : time(0), intensity(0) {} TimeIntensityPair(double time, double intensity) : time(time), intensity(intensity) {} /// returns true iff time and intensity are pairwise equal bool operator==(const TimeIntensityPair& that) const; }; #pragma pack() PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const TimeIntensityPair& ti); const size_t IDENTITY_INDEX_NONE = (size_t)-1; /// Identifying information for a spectrum struct PWIZ_API_DECL SpectrumIdentity { /// the zero-based, consecutive index of the spectrum in the SpectrumList. size_t index; /// a unique identifier for this spectrum. It should be expected that external files may use this identifier together with the mzML filename or accession to reference a particular spectrum. std::string id; /// the identifier for the spot from which this spectrum was derived, if a MALDI or similar run. std::string spotID; /// for file-based MSData implementations, this attribute may refer to the spectrum's position in the file boost::iostreams::stream_offset sourceFilePosition; SpectrumIdentity() : index(IDENTITY_INDEX_NONE), sourceFilePosition((boost::iostreams::stream_offset)-1) {} }; /// Identifying information for a chromatogram struct PWIZ_API_DECL ChromatogramIdentity { /// the zero-based, consecutive index of the chromatogram in the ChromatogramList. size_t index; /// a unique identifier for this chromatogram. It should be expected that external files may use this identifier together with the mzML filename or accession to reference a particular chromatogram. std::string id; /// for file-based MSData implementations, this attribute may refer to the chromatogram's position in the file boost::iostreams::stream_offset sourceFilePosition; ChromatogramIdentity() : index(IDENTITY_INDEX_NONE), sourceFilePosition(-1) {} }; /// The structure that captures the generation of a peak list (including the underlying acquisitions) struct PWIZ_API_DECL Spectrum : public SpectrumIdentity, public ParamContainer { /// default length of binary data arrays contained in this element. size_t defaultArrayLength; /// this attribute can optionally reference the 'id' of the appropriate dataProcessing. DataProcessingPtr dataProcessingPtr; /// this attribute can optionally reference the 'id' of the appropriate sourceFile. SourceFilePtr sourceFilePtr; /// list of scans ScanList scanList; /// list and descriptions of precursors to the spectrum currently being described. std::vector precursors; /// list and descriptions of product ion information std::vector products; /// list of binary data arrays. std::vector binaryDataArrayPtrs; /// list of integer data arrays. std::vector integerDataArrayPtrs; Spectrum() : defaultArrayLength(0) {} /// returns true iff the element contains no params and all members are empty or null bool empty() const; /// returns true iff has nonnull and nonempty binaryDataArrayPtrs and integerDataArrayPtrs bool hasBinaryData() const; /// copy binary data arrays into m/z-intensity pair array void getMZIntensityPairs(std::vector& output) const; /// copy binary data arrays into m/z-intensity pair array /// note: this overload is to allow client to allocate own buffer; the client /// must determine the correct size beforehand, or an exception will be thrown void getMZIntensityPairs(MZIntensityPair* output, size_t expectedSize) const; /// get m/z array (may be null) BinaryDataArrayPtr getMZArray() const; /// get intensity array (may be null) BinaryDataArrayPtr getIntensityArray() const; /// get array with specified CVParam (may be null) BinaryDataArrayPtr getArrayByCVID(CVID arrayType) const; /// set binary data arrays void setMZIntensityPairs(const std::vector& input, CVID intensityUnits); /// set binary data arrays void setMZIntensityPairs(const MZIntensityPair* input, size_t size, CVID intensityUnits); /// set m/z and intensity arrays separately (they must be the same size) void setMZIntensityArrays(const pwiz::util::BinaryData& mzArray, const pwiz::util::BinaryData& intensityArray, CVID intensityUnits); /// set m/z and intensity arrays separately (they must be the same size) void setMZIntensityArrays(const std::vector& mzArray, const std::vector& intensityArray, CVID intensityUnits); /// set m/z and intensity arrays separately (they must be the same size) by swapping the vector contents /// this allows for a more nearly zero copy setup. Contents of mzArray and intensityArray are undefined after calling. void swapMZIntensityArrays(pwiz::util::BinaryData& mzArray, pwiz::util::BinaryData& intensityArray, CVID intensityUnits); }; typedef boost::shared_ptr SpectrumPtr; /// A single chromatogram. struct PWIZ_API_DECL Chromatogram : public ChromatogramIdentity, public ParamContainer { /// default length of binary data arrays contained in this element. size_t defaultArrayLength; /// this attribute can optionally reference the 'id' of the appropriate dataProcessing. DataProcessingPtr dataProcessingPtr; /// description of precursor ion information (i.e. Q1 settings) Precursor precursor; /// description of product ion information (i.e. Q3 settings) Product product; /// list of binary data arrays. std::vector binaryDataArrayPtrs; /// list of integer data arrays. std::vector integerDataArrayPtrs; Chromatogram() : defaultArrayLength(0) {} /// returns true iff the element contains no params and all members are empty or null bool empty() const; /// copy binary data arrays into time-intensity pair array void getTimeIntensityPairs(std::vector& output) const; /// copy binary data arrays into time-intensity pair array /// note: this overload is to allow client to allocate own buffer; the client /// must determine the correct size beforehand, or an exception will be thrown void getTimeIntensityPairs(TimeIntensityPair* output, size_t expectedSize) const; /// get time array (may be null) BinaryDataArrayPtr getTimeArray() const; /// get intensity array (may be null) BinaryDataArrayPtr getIntensityArray() const; /// set binary data arrays void setTimeIntensityPairs(const std::vector& input, CVID timeUnits, CVID intensityUnits); /// set binary data arrays void setTimeIntensityPairs(const TimeIntensityPair* input, size_t size, CVID timeUnits, CVID intensityUnits); /// set time and intensity arrays separately (they must be the same size) void setTimeIntensityArrays(const std::vector& timeArray, const std::vector& intensityArray, CVID timeUnits, CVID intensityUnits); }; typedef boost::shared_ptr ChromatogramPtr; // note: derived container to support dynamic linking on Windows class IndexList : public std::vector {}; enum DetailLevel { DetailLevel_InstantMetadata, DetailLevel_FastMetadata, DetailLevel_FullMetadata, DetailLevel_FullData }; /// /// Interface for accessing spectra, which may be stored in memory /// or backed by a data file (RAW, mzXML, mzML). /// /// Implementation notes: /// /// - Implementations are expected to keep a spectrum index in the form of /// vector or equivalent. The default find*() functions search /// the index linearly. Implementations may provide constant time indexing. /// /// - The semantics of spectrum() may vary slightly with implementation. In particular, /// a SpectrumList implementation that is backed by a file may choose either to cache /// or discard the SpectrumPtrs for future access, with the caveat that the client /// may write to the underlying data. /// /// - It is the implementation's responsibility to return a valid SpectrumPtr from spectrum(). /// If this cannot be done, an exception must be thrown. /// /// - The 'getBinaryData' flag is a hint if false : implementations may provide valid /// BinaryDataArrayPtrs on spectrum(index, false); implementations *must* provide /// valid BinaryDataArrayPtrs on spectrum(index, true). /// class PWIZ_API_DECL SpectrumList { public: /// returns the number of spectra virtual size_t size() const = 0; /// returns true iff (size() == 0) and (dataProcessingPtr.get() == NULL) virtual bool empty() const; /// access to a spectrum index virtual const SpectrumIdentity& spectrumIdentity(size_t index) const = 0; /// find id in the spectrum index (returns size() on failure) virtual size_t find(const std::string& id) const; /// find an abbreviated id (e.g. "1.1.123.2" for "sample=1 period=1 cycle=123 experiment=2") in the spectrum index (returns size() on failure) virtual size_t findAbbreviated(const std::string& abbreviatedId, char delimiter = '.') const; /// find all spectrum indexes with specified name/value pair virtual IndexList findNameValue(const std::string& name, const std::string& value) const; /// find all spectrum indexes with spotID (returns empty vector on failure) virtual IndexList findSpotID(const std::string& spotID) const; /// retrieve a spectrum by index /// - binary data arrays will be provided if (getBinaryData == true); /// - client may assume the underlying Spectrum* is valid virtual SpectrumPtr spectrum(size_t index, bool getBinaryData = false) const = 0; /// get a copy of the seed spectrum, optionally with its binary data populated /// this is useful for formats like mzML that can delay loading of binary data /// - client may assume the underlying Spectrum* is valid virtual SpectrumPtr spectrum(const SpectrumPtr& seed, bool getBinaryData) const; /// retrieve a spectrum by index /// - detailLevel determines what fields are present on the spectrum after the call /// - only DetailLevel_FullMetadata or higher guarantees that defaultArrayLength is set (it may require getting the binary data just to check the number of points) /// - client may assume the underlying Spectrum* is valid virtual SpectrumPtr spectrum(size_t index, DetailLevel detailLevel) const; /// returns the data processing affecting spectra retrieved through this interface /// - may return a null shared pointer virtual const boost::shared_ptr dataProcessingPtr() const; /// issues a warning once per SpectrumList instance (based on string hash) virtual void warn_once(const char* msg) const; /// returns the minimum DetailLevel for which the given predicate returns true /// - if the predicate returns indeterminate, another spectrum will be tried /// - if the predicate returns false, a higher detail level will be tried /// - e.g. spectrumList.min_level_accepted([](const Spectrum& s) { return s.hasCVParam(MS_ms_level); }) virtual DetailLevel min_level_accepted(std::function predicate) const; virtual ~SpectrumList(){} }; typedef boost::shared_ptr SpectrumListPtr; /// Simple writeable in-memory implementation of SpectrumList. /// Note: This spectrum() implementation returns internal SpectrumPtrs. struct PWIZ_API_DECL SpectrumListSimple : public SpectrumList { std::vector spectra; DataProcessingPtr dp; // SpectrumList implementation virtual size_t size() const {return spectra.size();} virtual bool empty() const {return spectra.empty() && !dp.get();} virtual const SpectrumIdentity& spectrumIdentity(size_t index) const; virtual SpectrumPtr spectrum(size_t index, bool getBinaryData) const; virtual const boost::shared_ptr dataProcessingPtr() const; }; typedef boost::shared_ptr SpectrumListSimplePtr; /// /// Interface for accessing chromatograms, which may be stored in memory /// or backed by a data file (RAW, mzXML, mzML). /// /// Implementation notes: /// /// - Implementations are expected to keep a chromatogram index in the form of /// vector or equivalent. The default find*() functions search /// the index linearly. Implementations may provide constant time indexing. /// /// - The semantics of chromatogram() may vary slightly with implementation. In particular, /// a ChromatogramList implementation that is backed by a file may choose either to cache /// or discard the ChromatogramPtrs for future access, with the caveat that the client /// may write to the underlying data. /// /// - It is the implementation's responsibility to return a valid ChromatogramPtr from chromatogram(). /// If this cannot be done, an exception must be thrown. /// /// - The 'getBinaryData' flag is a hint if false : implementations may provide valid /// BinaryDataArrayPtrs on chromatogram(index, false); implementations *must* provide /// valid BinaryDataArrayPtrs on chromatogram(index, true). /// class PWIZ_API_DECL ChromatogramList { public: /// returns the number of chromatograms virtual size_t size() const = 0; /// returns true iff (size() == 0) and (dataProcessingPtr.get() == NULL) bool empty() const; /// access to a chromatogram index virtual const ChromatogramIdentity& chromatogramIdentity(size_t index) const = 0; /// find id in the chromatogram index (returns size() on failure) virtual size_t find(const std::string& id) const; /// retrieve a chromatogram by index /// - binary data arrays will be provided if (getBinaryData == true); /// - client may assume the underlying Chromatogram* is valid virtual ChromatogramPtr chromatogram(size_t index, bool getBinaryData = false) const = 0; /// retrieve a chromatogram by index /// - detailLevel determines what fields are present on the chromatogram after the call /// - only DetailLevel_FullMetadata or higher guarantees that defaultArrayLength is set (it may require getting the binary data just to check the number of points) /// - client may assume the underlying Spectrum* is valid virtual ChromatogramPtr chromatogram(size_t index, DetailLevel detailLevel) const; /// returns the data processing affecting spectra retrieved through this interface /// - may return a null shared pointer virtual const boost::shared_ptr dataProcessingPtr() const; virtual ~ChromatogramList(){} }; typedef boost::shared_ptr ChromatogramListPtr; /// Simple writeable in-memory implementation of ChromatogramList. /// Note: This chromatogram() implementation returns internal ChromatogramPtrs. struct PWIZ_API_DECL ChromatogramListSimple : public ChromatogramList { std::vector chromatograms; DataProcessingPtr dp; // ChromatogramList implementation virtual size_t size() const {return chromatograms.size();} virtual bool empty() const {return chromatograms.empty() && !dp.get();} virtual const ChromatogramIdentity& chromatogramIdentity(size_t index) const; virtual ChromatogramPtr chromatogram(size_t index, bool getBinaryData) const; virtual const boost::shared_ptr dataProcessingPtr() const; }; typedef boost::shared_ptr ChromatogramListSimplePtr; /// A run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument. struct PWIZ_API_DECL Run : public ParamContainer { /// a unique identifier for this run. std::string id; /// this attribute MUST reference the 'id' of the default instrument configuration. If a scan does not reference an instrument configuration, it implicitly refers to this configuration. InstrumentConfigurationPtr defaultInstrumentConfigurationPtr; /// this attribute MUST reference the 'id' of the appropriate sample. SamplePtr samplePtr; /// the optional start timestamp of the run, in UT. std::string startTimeStamp; /// default source file reference SourceFilePtr defaultSourceFilePtr; /// all mass spectra and the acquisitions underlying them are described and attached here. Subsidiary data arrays are also both described and attached here. SpectrumListPtr spectrumListPtr; /// all chromatograms for this run. ChromatogramListPtr chromatogramListPtr; Run(){} bool empty() const; private: // no copying - any implementation must handle: // - SpectrumList cloning // - internal cross-references to heap-allocated objects Run(const Run&); Run& operator=(const Run&); }; namespace IO {struct HandlerMSData;} // forward declaration for friend /// This is the root element of ProteoWizard; it represents the mzML element, defined as: /// intended to capture the use of a mass spectrometer, the data generated, and the initial processing of that data (to the level of the peak list). struct PWIZ_API_DECL MSData { /// an optional accession number for the mzML document. std::string accession; /// an optional id for the mzML document. It is recommended to use LSIDs when possible. std::string id; /// container for one or more controlled vocabulary definitions. /// note: one of the elements in this list MUST be the PSI MS controlled vocabulary. All elements in the document MUST refer to one of the elements in this list. std::vector cvs; /// information pertaining to the entire mzML file (i.e. not specific to any part of the data set) is stored here. FileDescription fileDescription; /// container for a list of referenceableParamGroups std::vector paramGroupPtrs; /// list and descriptions of samples. std::vector samplePtrs; /// list and descriptions of software used to acquire and/or process the data in this mzML file. std::vector softwarePtrs; /// list with the descriptions of the acquisition settings applied prior to the start of data acquisition. std::vector scanSettingsPtrs; /// list and descriptions of instrument configurations. std::vector instrumentConfigurationPtrs; /// list and descriptions of data processing applied to this data. std::vector dataProcessingPtrs; /// return dataProcessingPtrs augmented by the dataProcessingPtr() set in SpectrumList and/or ChromatogramList std::vector allDataProcessingPtrs() const; /// a run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument. Run run; MSData(); virtual ~MSData(); bool empty() const; /// returns the version of this mzML document; /// for a document created programmatically, the version is the current release version of mzML; /// for a document created from a file/stream, the version is the schema version read from the file/stream const std::string& version() const; // for detecting out of order filters void filterApplied() {nFiltersApplied_++;}; int countFiltersApplied() const {return nFiltersApplied_;}; private: // no copying MSData(const MSData&); MSData& operator=(const MSData&); protected: std::string version_; // schema version read from the file/stream friend struct IO::HandlerMSData; int nFiltersApplied_; // useful for flagging filters that need to be first, like vendor centroiding }; typedef boost::shared_ptr MSDataPtr; namespace id { /// parses an id string into a map PWIZ_API_DECL std::map parse(const std::string& id); /// convenience function to extract a named value from an id string PWIZ_API_DECL std::string value(const std::string& id, const std::string& name); /// templated convenience function to extract a named value from an id string template value_type valueAs(const std::string& id, const std::string& name) { std::string result = value(id, name); return !result.empty() ? boost::lexical_cast(result) : boost::lexical_cast(0); } /// returns the nativeID format from the defaultSourceFilePtr if set, /// or from sourceFilePtrs[0] if the list isn't empty, /// or CVID_Unknown PWIZ_API_DECL CVID getDefaultNativeIDFormat(const MSData& msd); /// translates a "scan number" to a string that is correct for the given nativeID format; /// semantic validity requires that scanNumber be parseable as an integer; /// some nativeID formats cannot be translated to and will always return an empty string /// currently supported formats: Thermo, Bruker/Agilent YEP, Bruker BAF, mzXML, MGF, and mzData PWIZ_API_DECL std::string translateScanNumberToNativeID(CVID nativeIDFormat, const std::string& scanNumber); /// translates a nativeID in the given nativeID format to a simple integer "scan number"; /// some nativeID formats cannot be translated from and will always return an empty string /// currently supported formats: Thermo, Bruker/Agilent YEP, Bruker BAF, mzXML, MGF, and mzData PWIZ_API_DECL std::string translateNativeIDToScanNumber(CVID nativeIDFormat, const std::string& id); /// abbreviates a nativeID ("name1=value1 name2=value2" translates to "value1.value2") PWIZ_API_DECL std::string abbreviate(const std::string& id, char delimiter = '.'); } // namespace id } // namespace msdata } // namespace pwiz #endif // _MSDATA_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/MSDataFile.cpp000066400000000000000000000254231444255175000224510ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "MSDataFile.hpp" #include "TextWriter.hpp" #include "Serializer_mzML.hpp" #include "Serializer_mzXML.hpp" #include "Serializer_MGF.hpp" #include "Serializer_MSn.hpp" #ifndef WITHOUT_MZ5 #include "Serializer_mz5.hpp" #endif #include "DefaultReaderList.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/misc/SHA1Calculator.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" // for charcounter defn #include "boost/iostreams/device/file.hpp" #include "boost/iostreams/filtering_stream.hpp" #include "boost/iostreams/filter/gzip.hpp" namespace pwiz { namespace msdata { using namespace pwiz::util; using boost::shared_ptr; namespace { void readFile(const string& filename, MSData& msd, const Reader& reader, const string& head) { if (!reader.accept(filename, head)) throw runtime_error("[MSDataFile::readFile()] Unsupported file format."); reader.read(filename, head, msd); } shared_ptr defaultReaderList_; void calculateSourceFilePtrSHA1(const SourceFilePtr& sourceFilePtr) { calculateSourceFileSHA1(*sourceFilePtr); } } // namespace PWIZ_API_DECL MSDataFile::MSDataFile(const string& filename, const Reader* reader, bool calculateSourceFileChecksum) { check_path_length(filename); // peek at head of file string head = read_file_header(filename, 512); if (reader) { readFile(filename, *this, *reader, head); } else { if (!defaultReaderList_.get()) defaultReaderList_ = shared_ptr(new DefaultReaderList); readFile(filename, *this, *defaultReaderList_, head); } if (calculateSourceFileChecksum && !fileDescription.sourceFilePtrs.empty()) calculateSourceFileSHA1(*fileDescription.sourceFilePtrs.back()); } PWIZ_API_DECL void MSDataFile::write(const string& filename, const WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { write(*this, filename, config, iterationListenerRegistry); } PWIZ_API_DECL void MSDataFile::write(ostream& os, const WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { write(*this, os, config, iterationListenerRegistry); } namespace { shared_ptr openFile(const string& filename, bool gzipped) { if (gzipped) { // use boost's filter stack to count outgoing bytes, and gzip them boost::iostreams::filtering_ostream *filt = new boost::iostreams::filtering_ostream(); shared_ptr result(filt); if (filt) { filt->push(pwiz::minimxml::charcounter()); // for counting bytes before compression filt->push(boost::iostreams::gzip_compressor(9)); // max compression filt->push(boost::iostreams::file_sink(filename.c_str(), ios::binary)); } if (!result.get() || !*result || !filt->good()) throw runtime_error(("[MSDataFile::openFile()] Unable to open file " + filename).c_str()); return result; } else { shared_ptr result(new ofstream(filename.c_str(), ios::binary)); if (!result.get() || !*result) throw runtime_error(("[MSDataFile::openFile()] Unable to open file " + filename).c_str()); return result; } } void writeStream(ostream& os, const MSData& msd, const MSDataFile::WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { switch (config.format) { case MSDataFile::Format_Text: { TextWriter(os, 0, -1)(msd); break; } case MSDataFile::Format_mzML: { Serializer_mzML::Config serializerConfig; serializerConfig.binaryDataEncoderConfig = config.binaryDataEncoderConfig; serializerConfig.indexed = config.indexed; Serializer_mzML serializer(serializerConfig); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_mzXML: { Serializer_mzXML::Config serializerConfig; serializerConfig.binaryDataEncoderConfig = config.binaryDataEncoderConfig; serializerConfig.indexed = config.indexed; Serializer_mzXML serializer(serializerConfig); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_MGF: { Serializer_MGF serializer; serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_MS1: { Serializer_MSn serializer(MSn_Type_MS1); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_CMS1: { Serializer_MSn serializer(MSn_Type_CMS1); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_MS2: { Serializer_MSn serializer(MSn_Type_MS2); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_CMS2: { Serializer_MSn serializer(MSn_Type_CMS2); serializer.write(os, msd, iterationListenerRegistry, config.useWorkerThreads); break; } case MSDataFile::Format_MZ5: throw runtime_error("[MSDataFile::write()] mz5 does not support writing with an output stream."); default: throw runtime_error("[MSDataFile::write()] Format not implemented."); } } } // namespace PWIZ_API_DECL void MSDataFile::write(const MSData& msd, const string& filename, const WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { check_path_length(filename); switch (config.format) { case MSDataFile::Format_MZ5: { #ifdef WITHOUT_MZ5 throw runtime_error("[MSDataFile::write()] library was not built with mz5 support."); #else Serializer_mz5 serializer(config); serializer.write(filename, msd, iterationListenerRegistry, config.useWorkerThreads); #endif break; } default: { shared_ptr os = openFile(filename,config.gzipped); writeStream(*os, msd, config, iterationListenerRegistry); } } } PWIZ_API_DECL void MSDataFile::write(const MSData& msd, ostream& os, const WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { WriteConfig config2(config); config2.gzipped = false; writeStream(os, msd, config2, iterationListenerRegistry); } PWIZ_API_DECL void calculateSourceFileSHA1(SourceFile& sourceFile) { if (sourceFile.hasCVParam(MS_SHA_1)) return; const string uriPrefix = "file://"; if (!bal::istarts_with(sourceFile.location, uriPrefix)) return; string location = sourceFile.location.substr(uriPrefix.size()); bal::trim_if(location, bal::is_any_of("/")); bfs::path p(location); p /= sourceFile.name; static map cachedHashBySourcePath; auto& sha1 = cachedHashBySourcePath[p.string()]; if (sha1.empty()) { try { bfs::file_status status = bfs::status(p); if (!bfs::exists(status) || bfs::is_directory(status)) // TODO: log warning about source file not available return; } catch (exception&) { // TODO: log warning about filesystem error return; } sha1 = SHA1Calculator::hashFile(p.string()); } sourceFile.set(MS_SHA_1, sha1); } PWIZ_API_DECL void calculateSHA1Checksums(const MSData& msd) { for_each(msd.fileDescription.sourceFilePtrs.begin(), msd.fileDescription.sourceFilePtrs.end(), calculateSourceFilePtrSHA1); } PWIZ_API_DECL ostream& operator<<(ostream& os, MSDataFile::Format format) { switch (format) { case MSDataFile::Format_Text: os << "Text"; return os; case MSDataFile::Format_mzML: os << "mzML"; return os; case MSDataFile::Format_mzXML: os << "mzXML"; return os; case MSDataFile::Format_MGF: os << "MGF"; return os; case MSDataFile::Format_MS1: os << "MS1"; return os; case MSDataFile::Format_CMS1: os << "CMS1"; return os; case MSDataFile::Format_MS2: os << "MS2"; return os; case MSDataFile::Format_CMS2: os << "CMS2"; return os; case MSDataFile::Format_MZ5: os << "mz5"; return os; default: os << "Unknown"; return os; } } PWIZ_API_DECL ostream& operator<<(ostream& os, const MSDataFile::WriteConfig& config) { os << config.format; if (config.format == MSDataFile::Format_mzML || config.format == MSDataFile::Format_mzXML) os << " " << config.binaryDataEncoderConfig << " indexed=\"" << boolalpha << config.indexed << "\""; else if (config.format == MSDataFile::Format_MZ5) os << " " << config.binaryDataEncoderConfig; return os; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/MSDataFile.hpp000066400000000000000000000073211444255175000224530ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MSDATAFILE_HPP_ #define _MSDATAFILE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "Reader.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/IterationListener.hpp" namespace pwiz { namespace msdata { /// MSData object plus file I/O struct PWIZ_API_DECL MSDataFile : public MSData { /// constructs MSData object backed by file; /// reader==0 -> use DefaultReaderList MSDataFile(const std::string& filename, const Reader* reader = 0, bool calculateSourceFileChecksum = false); /// data format for write() enum PWIZ_API_DECL Format {Format_Text, Format_mzML, Format_mzXML, Format_MGF, Format_MS1, Format_CMS1, Format_MS2, Format_CMS2, Format_MZ5}; /// configuration for write() struct PWIZ_API_DECL WriteConfig { Format format; BinaryDataEncoder::Config binaryDataEncoderConfig; bool indexed; bool gzipped; // if true, file is written as .gz bool useWorkerThreads; WriteConfig(Format _format = Format_mzML,bool _gzipped = false) : format(_format), indexed(true), gzipped(_gzipped), useWorkerThreads(true) {} }; /// static write function for any MSData object; /// iterationListenerRegistry may be used for progress updates static void write(const MSData& msd, const std::string& filename, const WriteConfig& config = WriteConfig(), const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0); /// member write function void write(const std::string& filename, const WriteConfig& config = WriteConfig(), const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0); /// static write function for any MSData object; /// iterationListenerRegistry may be used for progress updates static void write(const MSData& msd, std::ostream& os, const WriteConfig& config = WriteConfig(), const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0); /// member write function void write(std::ostream& os, const WriteConfig& config = WriteConfig(), const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0); }; /// calculates and adds a CV term for the SHA1 checksum of a source file element PWIZ_API_DECL void calculateSourceFileSHA1(SourceFile& sourceFile); /// Iterate and calculate SHA-1 for all source files PWIZ_API_DECL void calculateSHA1Checksums(const MSData& msd); PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, MSDataFile::Format format); PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MSDataFile::WriteConfig& config); } // namespace msdata } // namespace pwiz #endif // _MSDATAFILE_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/MSDataMerger.hpp000066400000000000000000000021401444255175000230070ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2010 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MSDATAMERGER_HPP_ #define _MSDATAMERGER_HPP_ #include "MSData.hpp" namespace pwiz { namespace msdata { struct PWIZ_API_DECL MSDataMerger : public MSData { MSDataMerger(const std::vector& inputs); private: std::vector inputMSDataPtrs_; }; } // namespace pwiz } // namespace msdata #endif // _MSDATAMERGER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/MSNumpress.cpp000066400000000000000000000400151444255175000226060ustar00rootroot00000000000000// // $Id$ // // // Original author: Johan Teleman // // Copyright 2013 Johan Teleman // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include #include #include #include #include #include #include "MSNumpress.hpp" namespace pwiz { namespace msdata { namespace MSNumpress { using std::cout; using std::cerr; using std::endl; using std::min; using std::max; using std::abs; const int ONE = 1; bool is_big_endian() { return *((char*)&(ONE)) == 1; } bool IS_BIG_ENDIAN = is_big_endian(); ///////////////////////////////////////////////////////////// PWIZ_API_DECL void encodeFixedPoint( double fixedPoint, unsigned char *result ) { int i; unsigned char *fp = (unsigned char*)&fixedPoint; for (i=0; i<8; i++) { result[i] = fp[is_big_endian() ? (7-i) : i]; } } PWIZ_API_DECL double decodeFixedPoint( const unsigned char *data ) { int i; double fixedPoint; unsigned char *fp = (unsigned char*)&fixedPoint; for (i=0; i<8; i++) { fp[i] = data[is_big_endian() ? (7-i) : i]; } return fixedPoint; } ///////////////////////////////////////////////////////////// /** * Encodes the int x as a number of halfbytes in res. * res_length is incremented by the number of halfbytes, * which will be 1 <= n <= 9 */ PWIZ_API_DECL void encodeInt( const int x, unsigned char* res, size_t *res_length ) { int i, l, m; int mask = 0xf0000000; unsigned int init = x & mask; if (init == 0) { l = 8; for (i=0; i<8; i++) { m = mask >> (4*i); if ((x & m) != 0) { l = i; break; } } res[0] = l; for (i=l; i<8; i++) { res[1+i-l] = x >> (4*(i-l)); } *res_length += 1+8-l; } else if (init == mask) { l = 7; for (i=0; i<8; i++) { m = mask >> (4*i); if ((x & m) != m) { l = i; break; } } res[0] = l + 8; for (i=l; i<8; i++) { res[1+i-l] = x >> (4*(i-l)); } *res_length += 1+8-l; } else { res[0] = 0; for (i=0; i<8; i++) { res[1+i] = x >> (4*i); } *res_length += 9; } } /** * Decodes an int from the half bytes in bp. Lossless reverse of encodeInt */ PWIZ_API_DECL void decodeInt( const unsigned char *data, size_t *di, int *half, int *res ) { size_t n; size_t i; int mask, m; unsigned char head; unsigned char hb; if (*half == 0) { head = data[*di] >> 4; } else { head = data[*di] & 0xf; (*di)++; } *half = 1-(*half); *res = 0; if (head <= 8) { n = head; } else { // leading ones, fill n half bytes in res n = head - 8; mask = 0xf0000000; for (i=0; i> (4*i); *res = *res | m; } } if (n == 8) { return; } for (i=n; i<8; i++) { if (*half == 0) { hb = data[*di] >> 4; } else { hb = data[*di] & 0xf; (*di)++; } *res = *res | (hb << ((i-n)*4)); *half = 1 - (*half); } } ///////////////////////////////////////////////////////////// PWIZ_API_DECL double optimalLinearFixedPointMass( const double *data, size_t dataSize, double mass_acc ) { if (dataSize < 3) return 0; // we just encode the first two points as floats // We calculate the maximal fixedPoint we need to achieve a specific mass // accuracy. Note that the maximal error we will make by encoding as int is // 0.5 due to rounding errors. double maxFP = 0.5 / mass_acc; // There is a maximal value for the FP given by the int length (32bit) // which means we cannot choose a value higher than that. In case we cannot // achieve the desired accuracy, return failure (-1). double maxFP_overflow = optimalLinearFixedPoint(data, dataSize); if (maxFP > maxFP_overflow) return -1; return maxFP; } PWIZ_API_DECL double optimalLinearFixedPoint( const double *data, size_t dataSize ) { /* * safer impl - apparently not needed though * if (dataSize == 0) return 0; double maxDouble = 0; double x; for (size_t i=0; i> (i*8)) & 0xff; } if (dataSize == 1) return 12; ints[2] = data[1] * fixedPoint + 0.5; for (i=0; i<4; i++) { result[12+i] = (ints[2] >> (i*8)) & 0xff; } halfByteCount = 0; ri = 16; for (i=2; i> 8; } return ri; } PWIZ_API_DECL size_t decodeSlof( const unsigned char *data, const size_t dataSize, double *result ) { size_t i, ri; unsigned short x; ri = 0; double fixedPoint; if (dataSize < 8) return -1; fixedPoint = decodeFixedPoint(data); for (i=8; i &data, std::vector &result, double fixedPoint ) { size_t dataSize = data.size(); result.resize(dataSize * 2); size_t encodedLength = encodeSlof(&data[0], dataSize, &result[0], fixedPoint); result.resize(encodedLength); } PWIZ_API_DECL void decodeSlof( const std::vector &data, std::vector &result ) { size_t dataSize = data.size(); result.resize(dataSize / 2); size_t decodedLength = decodeSlof(&data[0], dataSize, &result[0]); result.resize(decodedLength); } } // namespace MSNumpress } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/MSNumpress.hpp000066400000000000000000000207741444255175000226250ustar00rootroot00000000000000// // $Id$ // // // Original author: Johan Teleman // // Copyright 2013 Johan Teleman // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // /* ==================== encodeInt ==================== Some of the encodings described below use a integer compression refered to simply as encodeInt() This encoding works on a 4 byte integer, by truncating initial zeros or ones. If the initial (most significant) half byte is 0x0 or 0xf, the number of such halfbytes starting from the most significant is stored in a halfbyte. This initial count is then followed by the rest of the ints halfbytes, in little-endian order. A count halfbyte c of 0 <= c <= 8 is interpreted as an initial c 0x0 halfbytes 9 <= c <= 15 is interpreted as an initial (c-8) 0xf halfbytes Ex: int c rest 0 => 0x8 -1 => 0xf 0xf 23 => 0x6 0x7 0x1 */ #ifndef _MSNUMPRESS_HPP_ #define _MSNUMPRESS_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include namespace pwiz { namespace msdata { namespace MSNumpress { double PWIZ_API_DECL optimalLinearFixedPoint( const double *data, size_t dataSize); double PWIZ_API_DECL optimalLinearFixedPointMass( const double *data, size_t dataSize, double mass_acc ); /** * Encodes the doubles in data by first using a * - lossy conversion to a 4 byte 5 decimal fixed point repressentation * - storing the residuals from a linear prediction after first to values * - encoding by encodeInt (see above) * * The resulting binary is maximally dataSize * 5 bytes, but much less if the * data is reasonably smooth on the first order. * * This encoding is suitable for typical m/z or retention time binary arrays. * For masses above 100 m/z the encoding is accurate to at least 0.1 ppm. * * @data pointer to array of double to be encoded (need memorycont. repr.) * @dataSize number of doubles from *data to encode * @result pointer to were resulting bytes should be stored * @fixedPoint the scaling factor used for getting the fixed point repr. * This is stored in the binary and automatically extracted * on decoding. Automatically (and maybe slowly) determined if 0. * @return the number of encoded bytes */ size_t PWIZ_API_DECL encodeLinear( const double *data, const size_t dataSize, unsigned char *result, double fixedPoint); /** * Calls lower level encodeLinear while handling vector sizes appropriately * * @data vector of doubles to be encoded * @result vector of resulting bytes (will be resized to the number of bytes) */ void PWIZ_API_DECL encodeLinear( const std::vector &data, std::vector &result, double fixedPoint); /** * Decodes data encoded by encodeLinear. Note that the compression * discard any information < 1e-5, so data is only guaranteed * to be within +- 5e-6 of the original value. * * Further, values > ~42000 will also be truncated because of the * fixed point representation, so this scheme is stronly discouraged * if values above might be above this size. * * result vector guaranteedly shorter than twice the data length (in nbr of values) * * @data pointer to array of bytes to be decoded (need memorycont. repr.) * @dataSize number of bytes from *data to decode * @result pointer to were resulting doubles should be stored * @return the number of decoded doubles, or -1 if dataSize < 4 or 4 < dataSize < 8 */ size_t PWIZ_API_DECL decodeLinear( const unsigned char *data, const size_t dataSize, double *result); /** * Calls lower level decodeLinear while handling vector sizes appropriately * * @data vector of bytes to be decoded * @result vector of resulting double (will be resized to the number of doubles) */ void PWIZ_API_DECL decodeLinear( const std::vector &data, std::vector &result); ///////////////////////////////////////////////////////////// /** * Encodes ion counts by simply rounding to the nearest 4 byte integer, * and compressing each integer with encodeInt. * * The handleable range is therefore 0 -> 4294967294. * The resulting binary is maximally dataSize * 5 bytes, but much less if the * data is close to 0 on average. * * @data pointer to array of double to be encoded (need memorycont. repr.) * @dataSize number of doubles from *data to encode * @result pointer to were resulting bytes should be stored * @return the number of encoded bytes */ size_t PWIZ_API_DECL encodePic( const double *data, const size_t dataSize, unsigned char *result); /** * Calls lower level encodePic while handling vector sizes appropriately * * @data vector of doubles to be encoded * @result vector of resulting bytes (will be resized to the number of bytes) */ void PWIZ_API_DECL encodePic( const std::vector &data, std::vector &result); /** * Decodes data encoded by encodePic * * result vector guaranteedly shorter than twice the data length (in nbr of values) * * @data pointer to array of bytes to be decoded (need memorycont. repr.) * @dataSize number of bytes from *data to decode * @result pointer to were resulting doubles should be stored * @return the number of decoded doubles */ void PWIZ_API_DECL decodePic( const std::vector &data, std::vector &result); /** * Calls lower level decodePic while handling vector sizes appropriately * * @data vector of bytes to be decoded * @result vector of resulting double (will be resized to the number of doubles) */ size_t PWIZ_API_DECL decodePic( const unsigned char *data, const size_t dataSize, double *result); ///////////////////////////////////////////////////////////// double PWIZ_API_DECL optimalSlofFixedPoint( const double *data, size_t dataSize); /** * Encodes ion counts by taking the natural logarithm, and storing a * fixed point representation of this. This is calculated as * * unsigned short fp = log(d + 1) * 3000.0 + 0.5 * * Note that this fixed point will mean any d < 0.00016667 will be * stored as a zero and mapped back to a zero. * * result vector is exactly twice the data length (in nbr of values) * * @data pointer to array of double to be encoded (need memorycont. repr.) * @dataSize number of doubles from *data to encode * @result pointer to were resulting bytes should be stored * &fixedPoint automatically (and maybe slowly) determined if 0. * @return the number of encoded bytes */ size_t PWIZ_API_DECL encodeSlof( const double *data, const size_t dataSize, unsigned char *result, double fixedPoint); /** * Calls lower level encodeSlof while handling vector sizes appropriately * * @data vector of doubles to be encoded * @result vector of resulting bytes (will be resized to the number of bytes) */ void PWIZ_API_DECL encodeSlof( const std::vector &data, std::vector &result, double fixedPoint); /** * Decodes data encoded by encodeSlof * * @data pointer to array of bytes to be decoded (need memorycont. repr.) * @dataSize number of bytes from *data to decode * @result pointer to were resulting doubles should be stored * @return the number of decoded doubles */ size_t PWIZ_API_DECL decodeSlof( const unsigned char *data, const size_t dataSize, double *result); /** * Calls lower level decodeSlof while handling vector sizes appropriately * * @data vector of bytes to be decoded * @result vector of resulting double (will be resized to the number of doubles) */ void PWIZ_API_DECL decodeSlof( const std::vector &data, std::vector &result); } // namespace MSNumpress } // namespace msdata } // namespace pwiz #endif // _MSNUMPRESS_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/MemoryMRUCache.hpp000066400000000000000000000037651444255175000233320ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MEMORYMRUCACHE_HPP_ #define _MEMORYMRUCACHE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/mru_list.hpp" namespace pwiz { namespace msdata { enum PWIZ_API_DECL MemoryMRUCacheMode { MemoryMRUCacheMode_Off, MemoryMRUCacheMode_MetaDataOnly, MemoryMRUCacheMode_BinaryDataOnly, MemoryMRUCacheMode_MetaDataAndBinaryData }; /// an MRU cache for SpectrumPtrs or ChromatogramPtrs template > class MemoryMRUCache : public pwiz::util::mru_list { public: MemoryMRUCache(MemoryMRUCacheMode mode, size_t size) : pwiz::util::mru_list(size), mode_(mode) {} /// set the caching mode /// note: if the new mode is different than the current mode, the cache will be cleared void setMode(MemoryMRUCacheMode mode) { if (mode != mode_) pwiz::util::mru_list::clear(); mode_ = mode; } /// get the current caching mode MemoryMRUCacheMode mode() const {return mode_;} private: MemoryMRUCacheMode mode_; }; } // namespace msdata } // namespace pwiz #endif // _MEMORYMRUCACHE_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/RAMPAdapter.hpp000066400000000000000000000047321444255175000226050ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _RAMPADAPTER_HPP_ #define _RAMPADAPTER_HPP_ #include #include "pwiz/utility/misc/Export.hpp" #include "ramp.h" #include "boost/shared_ptr.hpp" #include #include namespace pwiz { namespace msdata { /// adapter to provide RAMP-friendly access to MSData library class PWIZ_API_DECL RAMPAdapter { public: /// constructor RAMPAdapter(const std::string& filename); /// returns the number of scans stored in the data file size_t scanCount() const; /// converts a scan number to a 0-based index; /// returns scanCount() if scanNumber is not found size_t index(int scanNumber) const; /// returns the scan number for a specified scan int getScanNumber(size_t index) const; /// fills in RAMP ScanHeaderStruct for a specified scan /// /// you can optionally preload the peaklists too, but the /// RAMP interface this emulates doesn't normally do that, /// so defaulting reservePeaks to true would be a nasty surprise /// performance-wise to anyone switching over from actual RAMP void getScanHeader(size_t index, ScanHeaderStruct& result, bool reservePeaks = false) const; /// fills in m/z-intensity pair array for a specified scan void getScanPeaks(size_t index, std::vector& result) const; /// fills in RAMP RunHeaderStruct void getRunHeader(RunHeaderStruct& result) const; /// fills in RAMP InstrumentHeaderStruct void getInstrument(InstrumentStruct& result) const; private: class Impl; boost::shared_ptr impl_; RAMPAdapter(RAMPAdapter& that); RAMPAdapter& operator=(RAMPAdapter& that); }; } // namespace msdata } // namespace pwiz #endif // _RAMPADAPTER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Reader.cpp000066400000000000000000000202521444255175000217350ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Reader.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { using namespace pwiz::util; Reader::Config::Config() : simAsSpectra(false) , srmAsSpectra(false) , acceptZeroLengthSpectra(false) , ignoreZeroIntensityPoints(false) , combineIonMobilitySpectra(false) , reportSonarBins(false) , unknownInstrumentIsError(false) , adjustUnknownTimeZonesToHostTimeZone(true) , iterationListenerRegistry(nullptr) , preferOnlyMsLevel(0) , allowMsMsWithoutPrecursor(true) , sortAndJitter(false) , globalChromatogramsAreMs1Only(false) { } /// copy constructor Reader::Config::Config(const Config& rhs) { simAsSpectra = rhs.simAsSpectra; srmAsSpectra = rhs.srmAsSpectra; acceptZeroLengthSpectra = rhs.acceptZeroLengthSpectra; ignoreZeroIntensityPoints = rhs.ignoreZeroIntensityPoints; combineIonMobilitySpectra = rhs.combineIonMobilitySpectra; reportSonarBins = rhs.reportSonarBins; unknownInstrumentIsError = rhs.unknownInstrumentIsError; adjustUnknownTimeZonesToHostTimeZone = rhs.adjustUnknownTimeZonesToHostTimeZone; iterationListenerRegistry = rhs.iterationListenerRegistry; preferOnlyMsLevel = rhs.preferOnlyMsLevel; allowMsMsWithoutPrecursor = rhs.allowMsMsWithoutPrecursor; isolationMzAndMobilityFilter = rhs.isolationMzAndMobilityFilter; sortAndJitter = rhs.sortAndJitter; globalChromatogramsAreMs1Only = rhs.globalChromatogramsAreMs1Only; } // default implementation; most Readers don't need to worry about multi-run input files PWIZ_API_DECL void Reader::readIds(const string& filename, const string& head, vector& results, const Config& config) const { check_path_length(filename); MSData data; read(filename, head, data); results.push_back(data.id); } PWIZ_API_DECL std::string ReaderList::identify(const string& filename) const { return identify(filename, read_file_header(filename, 512)); } PWIZ_API_DECL std::string ReaderList::identify(const string& filename, const string& head) const { check_path_length(filename); std::string result; for (const_iterator it=begin(); it!=end(); ++it) { result = (*it)->identify(filename, head); if (result.length()) { break; } } return result; } PWIZ_API_DECL void ReaderList::read(const string& filename, MSData& result, int sampleIndex /* = 0 */, const Config& config) const { read(filename, read_file_header(filename, 512), result, sampleIndex, config); } PWIZ_API_DECL void ReaderList::read(const string& filename, const string& head, MSData& result, int sampleIndex /* = 0 */, const Config& config) const { check_path_length(filename); for (const_iterator it=begin(); it!=end(); ++it) if ((*it)->accept(filename, head)) { (*it)->read(filename, head, result, sampleIndex, config); return; } throw ReaderFail((" don't know how to read " + filename).c_str()); } PWIZ_API_DECL void ReaderList::read(const string& filename, vector& results, const Config& config) const { read(filename, read_file_header(filename, 512), results, config); } PWIZ_API_DECL void ReaderList::read(const string& filename, const string& head, vector& results, const Config& config) const { check_path_length(filename); for (const_iterator it=begin(); it!=end(); ++it) if ((*it)->accept(filename, head)) { (*it)->read(filename, head, results, config); return; } throw ReaderFail((" don't know how to read " + filename).c_str()); } PWIZ_API_DECL void ReaderList::readIds(const string& filename, vector& results, const Config& config) const { readIds(filename, read_file_header(filename, 512), results, config); } PWIZ_API_DECL void ReaderList::readIds(const string& filename, const string& head, vector& results, const Config& config) const { check_path_length(filename); for (const_iterator it=begin(); it!=end(); ++it) if ((*it)->accept(filename, head)) { (*it)->readIds(filename, head, results, config); return; } throw ReaderFail((" don't know how to read " + filename).c_str()); } PWIZ_API_DECL std::vector ReaderList::getTypes() const { vector result; result.reserve(size()); for (const ReaderPtr& reader : *this) { result.emplace_back(reader->getType()); } return result; } PWIZ_API_DECL std::vector ReaderList::getCvTypes() const { vector result; result.reserve(size()); for (const ReaderPtr& reader : *this) { result.emplace_back(reader->getCvType()); } return result; } PWIZ_API_DECL std::vector ReaderList::getFileExtensions() const { vector result; result.reserve(size()); for (const ReaderPtr& reader : *this) { auto exts = reader->getFileExtensions(); result.insert(result.end(), exts.begin(), exts.end()); } return result; } PWIZ_API_DECL std::map> ReaderList::getFileExtensionsByType() const { map> result; for (const ReaderPtr& reader : *this) result[reader->getType()] = reader->getFileExtensions(); return result; } PWIZ_API_DECL ReaderList& ReaderList::operator +=(const ReaderList& rhs) { insert(end(), rhs.begin(), rhs.end()); return *this; } PWIZ_API_DECL ReaderList& ReaderList::operator +=(const ReaderPtr& rhs) { push_back(rhs); return *this; } PWIZ_API_DECL ReaderList ReaderList::operator +(const ReaderList& rhs) const { ReaderList readerList(*this); readerList += rhs; return readerList; } PWIZ_API_DECL ReaderList ReaderList::operator +(const ReaderPtr& rhs) const { ReaderList readerList(*this); readerList += rhs; return readerList; } PWIZ_API_DECL ReaderList operator +(const ReaderPtr& lhs, const ReaderPtr& rhs) { ReaderList readerList; readerList.push_back(lhs); readerList.push_back(rhs); return readerList; } PWIZ_API_DECL ReaderPtr ReaderList::identifyAsReader(const std::string& filepath) const { check_path_length(filepath); try { string head = read_file_header(filepath, 512); string type = identify(filepath, head); std::string result; for (const auto& readerPtr : *this) { string result = readerPtr->identify(filepath, head); if (result.empty()) continue; if (result == readerPtr->getType()) return readerPtr; // HACK: would be better to have individual format readers identify their files respectively but there would probably be some performance hit for that for (const auto& readerPtr2 : *this) { if (result == readerPtr2->getType()) return readerPtr2; } } } catch (exception&) { // the filepath is missing or inaccessible } return ReaderPtr(); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Reader.hpp000066400000000000000000000266371444255175000217570ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _READER_HPP_ #define _READER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/IterationListener.hpp" #include "pwiz/utility/chemistry/MzMobilityWindow.hpp" #include "MSData.hpp" #include #include namespace pwiz { namespace msdata { /// interface for file readers class PWIZ_API_DECL Reader { public: /// Reader configuration struct PWIZ_API_DECL Config { /// when true, sets certain vendor readers to produce SIM transitions as spectra instead of chromatograms bool simAsSpectra; /// when true, sets certain vendor readers to produce SRM transitions as spectra instead of chromatograms bool srmAsSpectra; /// when true, allows for skipping 0 length checks (and thus skip re-reading data for Sciex) bool acceptZeroLengthSpectra; /// when true, allows certain vendor readers to produce profile data without zero intensity samples flanking each peak profile bool ignoreZeroIntensityPoints; /// when true, all drift bins/scans in a frame/block are written in combined form instead of as individual spectra bool combineIonMobilitySpectra; /// when true, Waters SONAR data will use bin numbers instead of ion mobility values in combineIonMobilitySpectra mode bool reportSonarBins; /// when true, if a reader cannot identify an instrument, an exception will be thrown asking users to report it bool unknownInstrumentIsError; /// when true, if a reader does not know what time zone was used to record a time, it will assume the time refers to the host's local time; /// when false, the reader will treat times with unknown time zone as UTC bool adjustUnknownTimeZonesToHostTimeZone; /// progress listener for when initializing a file takes a long time, /// or the reader has to run a long process before continuing, /// such as centroiding all spectra at once instead of one at a time pwiz::util::IterationListenerRegistry* iterationListenerRegistry; /// when nonzero, if reader can enumerate only spectra of ms level, it will (currently only supported by Bruker TDF) int preferOnlyMsLevel; /// when true, MS2 spectra without precursor/isolation information will be included in the output (currently only affects Bruker PASEF data) bool allowMsMsWithoutPrecursor; /// temporary(?) variable to avoid needing to regenerate Bruker test data bool sortAndJitter; /// when non-empty, only scans from precursors matching one of the included m/z and/or mobility windows will be enumerated; MS1 scans are affected only by the mobility filter std::vector isolationMzAndMobilityFilter; /// when true, global TIC and BPC chromatograms consist of only MS1 spectra (thus the number of time points cannot be assumed to be equal to the number of spectra) bool globalChromatogramsAreMs1Only; Config(); Config(const Config& rhs); }; /// return true iff Reader recognizes the file as one it should handle /// that's not to say one it CAN handle, necessarily, as in Thermo on linux, /// see comment for identify() below bool accept(const std::string& filename, const std::string& head) const { return (identify(filename,head).length() != 0); } /// return file type iff Reader recognizes the file, else empty; /// note: for formats requiring a 3rd party DLL identify() should /// return non-empty if it recognized the format, even though reading /// may fail if the 3rd party DLL isn't actually present /// Reader may filter based on filename and/or head of the file virtual std::string identify(const std::string& filename, const std::string& head) const = 0; /// fill in the MSData structure from the first (or only) sample virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const = 0; /// fill in a vector of MSData structures; provides support for multi-run input files virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const = 0; /// fill in a vector of MSData.Id values; provides support for multi-run input files virtual void readIds(const std::string& filename, const std::string& head, std::vector& dataIds, const Config& config = Config()) const; /// returns a unique string identifying the reader type virtual const char* getType() const = 0; /// returns a unique CVID identifying the raw file format the reader supports virtual CVID getCvType() const = 0; /// returns the file extensions, if any, that this reader supports, including the leading period; /// note that comparing file extensions is not as robust as using the identify() method virtual std::vector getFileExtensions() const = 0; virtual ~Reader(){} }; class PWIZ_API_DECL ReaderFail : public std::runtime_error // reader failure exception { public: ReaderFail(const std::string& error) : std::runtime_error(("[ReaderFail] " + error).c_str()), error_(error) {} virtual const std::string& error() const {return error_;} virtual ~ReaderFail() throw() {} private: std::string error_; }; typedef boost::shared_ptr ReaderPtr; /// /// Reader container (composite pattern). /// /// The template get() gives access to child Readers by type, to facilitate /// Reader-specific configuration at runtime. /// class PWIZ_API_DECL ReaderList : public Reader, public std::vector { public: /// returns child name iff some child identifies, else empty string virtual std::string identify(const std::string& filename) const; /// returns child name iff some child identifies, else empty string virtual std::string identify(const std::string& filename, const std::string& head) const; /// tries to identify the specified filepath using the contained Readers; /// returns the ReaderPtr that identified the filepath, /// or a null ReaderPtr if the file format has no CV term or the filepath doesn't exist virtual ReaderPtr identifyAsReader(const std::string& filename) const; /// delegates to first child that identifies virtual void read(const std::string& filename, MSData& result, int runIndex = 0, const Config& config = Config()) const; /// delegates to first child that identifies virtual void read(const std::string& filename, const std::string& head, MSData& result, int runIndex = 0, const Config& config = Config()) const; /// delegates to first child that identifies; /// provides support for multi-run input files virtual void read(const std::string& filename, std::vector& results, const Config& config = Config()) const; /// delegates to first child that identifies; /// provides support for multi-run input files virtual void read(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; /// delegates to first child that identifies; /// provides support for multi-run input files virtual void readIds(const std::string& filename, std::vector& results, const Config& config = Config()) const; /// delegates to first child that identifies; /// provides support for multi-run input files virtual void readIds(const std::string& filename, const std::string& head, std::vector& results, const Config& config = Config()) const; /// appends all of the rhs operand's Readers to the list ReaderList& operator +=(const ReaderList& rhs); /// appends the rhs Reader to the list ReaderList& operator +=(const ReaderPtr& rhs); /// returns a concatenated list of all the Readers from the lhs and rhs operands ReaderList operator +(const ReaderList& rhs) const; /// returns a concatenated list of all the Readers from the lhs and rhs operands ReaderList operator +(const ReaderPtr& rhs) const; /// returns pointer to Reader of the specified type template reader_type* get() { for (iterator it=begin(); it!=end(); ++it) { reader_type* p = dynamic_cast(it->get()); if (p) return p; } return 0; } /// returns const pointer to Reader of the specified type template const reader_type* get() const { return const_cast(this)->get(); } virtual const char* getType() const {return "ReaderList";} // satisfy inheritance virtual CVID getCvType() const {return CVID_Unknown;} // satisfy inheritance /// returns getType() for all contained Readers std::vector getTypes() const; /// returns getCvType() for all contained readers std::vector getCvTypes() const; /// returns the file extensions, if any, that the contained Readers support, including the leading period; /// note that comparing file extensions is not as robust as using the identify() method virtual std::vector getFileExtensions() const; /// returns a map of Reader types to file extensions, if any, that the contained Readers support, including the leading period; /// note that comparing file extensions is not as robust as using the identify() method std::map> getFileExtensionsByType() const; }; /// returns a list containing the lhs and rhs as readers PWIZ_API_DECL ReaderList operator +(const ReaderPtr& lhs, const ReaderPtr& rhs); } // namespace msdata } // namespace pwiz #endif // _READER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/References.cpp000066400000000000000000000164711444255175000226240ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "References.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { namespace References { template struct HasID { const string& id_; HasID(const string& id) : id_(id) {} bool operator()(const shared_ptr& objectPtr) { return objectPtr.get() && objectPtr->id == id_; } }; template void resolve(shared_ptr& reference, const vector< shared_ptr >& referentList) { if (!reference.get() || reference->id.empty()) return; typename vector< shared_ptr >::const_iterator it = find_if(referentList.begin(), referentList.end(), HasID(reference->id)); if (it == referentList.end()) { ostringstream oss; oss << "[References::resolve()] Failed to resolve reference.\n" << " object type: " << typeid(object_type).name() << endl << " reference id: " << reference->id << endl << " referent list: " << referentList.size() << endl; for (typename vector< shared_ptr >::const_iterator it=referentList.begin(); it!=referentList.end(); ++it) oss << " " << (*it)->id << endl; throw runtime_error(oss.str().c_str()); } reference = *it; } template void resolve(vector < shared_ptr >& references, const vector< shared_ptr >& referentList) { for (typename vector< shared_ptr >::iterator it=references.begin(); it!=references.end(); ++it) resolve(*it, referentList); } PWIZ_API_DECL void resolve(ParamContainer& paramContainer, const MSData& msd) { resolve(paramContainer.paramGroupPtrs, msd.paramGroupPtrs); } template void resolve(vector& objects, const MSData& msd) { for (typename vector::iterator it=objects.begin(); it!=objects.end(); ++it) resolve(*it, msd); } template void resolve(vector< shared_ptr >& objectPtrs, const MSData& msd) { for (typename vector< shared_ptr >::iterator it=objectPtrs.begin(); it!=objectPtrs.end(); ++it) resolve(**it, msd); } PWIZ_API_DECL void resolve(FileDescription& fileDescription, const MSData& msd) { resolve(fileDescription.fileContent, msd); resolve(fileDescription.sourceFilePtrs, msd); resolve(fileDescription.contacts, msd); } PWIZ_API_DECL void resolve(ComponentList& componentList, const MSData& msd) { for (size_t i=0; i < componentList.size(); ++i) resolve(componentList[i], msd); } PWIZ_API_DECL void resolve(InstrumentConfiguration& instrumentConfiguration, const MSData& msd) { resolve(static_cast(instrumentConfiguration), msd); resolve(instrumentConfiguration.componentList, msd); resolve(instrumentConfiguration.softwarePtr, msd.softwarePtrs); } PWIZ_API_DECL void resolve(ProcessingMethod& processingMethod, const MSData& msd) { resolve(static_cast(processingMethod), msd); resolve(processingMethod.softwarePtr, msd.softwarePtrs); } PWIZ_API_DECL void resolve(DataProcessing& dataProcessing, const MSData& msd) { resolve(dataProcessing.processingMethods, msd); } PWIZ_API_DECL void resolve(ScanSettings& scanSettings, const MSData& msd) { resolve(scanSettings.sourceFilePtrs, msd.fileDescription.sourceFilePtrs); resolve(scanSettings.targets, msd); } PWIZ_API_DECL void resolve(Precursor& precursor, const MSData& msd) { resolve(static_cast(precursor), msd); resolve(precursor.sourceFilePtr, msd.fileDescription.sourceFilePtrs); resolve(precursor.isolationWindow, msd); resolve(precursor.selectedIons, msd); resolve(precursor.activation, msd); } PWIZ_API_DECL void resolve(Product& product, const MSData& msd) { resolve(product.isolationWindow, msd); } PWIZ_API_DECL void resolve(Scan& scan, const MSData& msd) { resolve(static_cast(scan), msd); if (!scan.instrumentConfigurationPtr.get()) scan.instrumentConfigurationPtr = msd.run.defaultInstrumentConfigurationPtr; resolve(scan.instrumentConfigurationPtr, msd.instrumentConfigurationPtrs); resolve(scan.scanWindows, msd); } PWIZ_API_DECL void resolve(ScanList& scanList, const MSData& msd) { resolve(static_cast(scanList), msd); resolve(scanList.scans, msd); } PWIZ_API_DECL void resolve(BinaryDataArray& binaryDataArray, const MSData& msd) { resolve(static_cast(binaryDataArray), msd); resolve(binaryDataArray.dataProcessingPtr, msd.dataProcessingPtrs); } PWIZ_API_DECL void resolve(Spectrum& spectrum, const MSData& msd) { resolve(static_cast(spectrum), msd); resolve(spectrum.dataProcessingPtr, msd.dataProcessingPtrs); resolve(spectrum.sourceFilePtr, msd.fileDescription.sourceFilePtrs); resolve(spectrum.scanList, msd); resolve(spectrum.precursors, msd); resolve(spectrum.products, msd); resolve(spectrum.binaryDataArrayPtrs, msd); } PWIZ_API_DECL void resolve(Chromatogram& chromatogram, const MSData& msd) { resolve(static_cast(chromatogram), msd); resolve(chromatogram.dataProcessingPtr, msd.dataProcessingPtrs); resolve(chromatogram.binaryDataArrayPtrs, msd); } PWIZ_API_DECL void resolve(Run& run, const MSData& msd) { resolve(static_cast(run), msd); resolve(run.defaultInstrumentConfigurationPtr, msd.instrumentConfigurationPtrs); resolve(run.samplePtr, msd.samplePtrs); resolve(run.defaultSourceFilePtr, msd.fileDescription.sourceFilePtrs); } PWIZ_API_DECL void resolve(MSData& msd) { resolve(msd.paramGroupPtrs, msd); resolve(msd.samplePtrs, msd); resolve(msd.instrumentConfigurationPtrs, msd); resolve(msd.dataProcessingPtrs, msd); resolve(msd.scanSettingsPtrs, msd); resolve(msd.run, msd); // if we're using SpectrumListSimple, resolve the references in each Spectrum SpectrumListSimple* simple = dynamic_cast(msd.run.spectrumListPtr.get()); if (simple) resolve(simple->spectra, msd); // if we're using ChromatogramListSimple, resolve the references in each Chromatogram ChromatogramListSimple* chromatogramListSimple = dynamic_cast(msd.run.chromatogramListPtr.get()); if (chromatogramListSimple) resolve(chromatogramListSimple->chromatograms, msd); } } // namespace References } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/References.hpp000066400000000000000000000051421444255175000226220ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _REFERENCES_HPP_ #define _REFERENCES_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" namespace pwiz { namespace msdata { /// functions for resolving references from objects into the internal MSData lists namespace References { PWIZ_API_DECL void resolve(ParamContainer& paramContainer, const MSData& msd); PWIZ_API_DECL void resolve(FileDescription& fileDescription, const MSData& msd); PWIZ_API_DECL void resolve(ComponentList& componentList, const MSData& msd); PWIZ_API_DECL void resolve(InstrumentConfiguration& instrumentConfiguration, const MSData& msd); PWIZ_API_DECL void resolve(ProcessingMethod& processingMethod, const MSData& msd); PWIZ_API_DECL void resolve(DataProcessing& dataProcesssing, const MSData& msd); PWIZ_API_DECL void resolve(ScanSettings& dataProcesssing, const MSData& msd); PWIZ_API_DECL void resolve(Precursor& precursor, const MSData& msd); PWIZ_API_DECL void resolve(Product& product, const MSData& msd); PWIZ_API_DECL void resolve(Scan& scan, const MSData& msd); PWIZ_API_DECL void resolve(ScanList& List, const MSData& msd); PWIZ_API_DECL void resolve(BinaryDataArray& binaryDataArray, const MSData& msd); PWIZ_API_DECL void resolve(Spectrum& spectrum, const MSData& msd); PWIZ_API_DECL void resolve(Chromatogram& chromatogram, const MSData& msd); PWIZ_API_DECL void resolve(Run& run, const MSData& msd); /// /// Resolve internal references in an MSData object. /// /// For an MSData object using a SpectrumListSimple to hold Spectrum objects in memory, /// these references will be resolved as well. /// /// File-backed SpectrumList implementations using lazy evaluation of a Spectrum need /// to call resolve(spectrum, msd) before returning it to the client. /// PWIZ_API_DECL void resolve(MSData& msd); } // namespace References } // namespace msdata } // namespace pwiz #endif // _REFERENCES_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SHA1OutputObserver.hpp000066400000000000000000000026701444255175000241710ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SHA1OUTPUTOBSERVER_HPP_ #define _SHA1OUTPUTOBSERVER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/utility/misc/SHA1Calculator.hpp" namespace pwiz { namespace msdata { class PWIZ_API_DECL SHA1OutputObserver : public minimxml::XMLWriter::OutputObserver { public: virtual void update(const std::string& output) {sha1Calculator_.update(output);} std::string hash() {return sha1Calculator_.hashProjected();} private: util::SHA1Calculator sha1Calculator_; }; } // namespace msdata } // namespace pwiz #endif // _SHA1OUTPUTOBSERVER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_MGF.cpp000066400000000000000000000172201444255175000233360ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Serializer_MGF.hpp" #include "SpectrumList_MGF.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" #include #include "SpectrumWorkerThreads.hpp" namespace pwiz { namespace msdata { using boost::iostreams::stream_offset; using namespace pwiz::util; class Serializer_MGF::Impl { public: Impl() {} void write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const; void read(shared_ptr is, MSData& msd) const; }; template struct nosci10_policy : boost::spirit::karma::real_policies { // we want to generate up to 10 fractional digits static unsigned int precision(T) { return 10; } // we want the numbers always to be in fixed format static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::fixed; } }; void Serializer_MGF::Impl::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { bool titleIsThermoDTA = false; if (msd.fileDescription.sourceFilePtrs.size() >= 1) titleIsThermoDTA = msd.fileDescription.sourceFilePtrs[0]->hasCVParam(MS_Thermo_nativeID_format); const string& thermoFilename = titleIsThermoDTA ? msd.fileDescription.sourceFilePtrs[0]->name : ""; string thermoBasename = titleIsThermoDTA ? bfs::basename(thermoFilename) : ""; int scansWritten = 0; os << std::setprecision(10); // 1234.567890 SpectrumList& sl = *msd.run.spectrumListPtr; SpectrumWorkerThreads spectrumWorkers(sl, useWorkerThreads); for (size_t i=0, end=sl.size(); i < end; ++i) { //SpectrumPtr s = sl.spectrum(i, true); SpectrumPtr s = spectrumWorkers.processBatch(i); Scan* scan = !s->scanList.empty() ? &s->scanList.scans[0] : 0; if (s->cvParam(MS_ms_level).valueAs() > 1 && !s->precursors.empty() && !s->precursors[0].selectedIons.empty()) { os << "BEGIN IONS\n"; const SelectedIon& si = s->precursors[0].selectedIons[0]; CVParam scanTimeParam = scan ? scan->cvParam(MS_scan_start_time) : CVParam(); CVParam chargeParam = si.cvParam(MS_charge_state); CVParam spectrumTitle = s->cvParam(MS_spectrum_title); if (!spectrumTitle.empty()) os << "TITLE=" << spectrumTitle.value << '\n'; else if (titleIsThermoDTA) { string scan = id::value(s->id, "scan"); os << "TITLE=" << thermoBasename << '.' << scan << '.' << scan << '.' << chargeParam.value << '\n'; } else os << "TITLE=" << s->id << '\n'; if (!scanTimeParam.empty()) os << "RTINSECONDS=" << scanTimeParam.timeInSeconds() << '\n'; // many MGF parsers can't handle scientific notation (!) so explicitly use fixed os << "PEPMASS=" << si.cvParam(MS_selected_ion_m_z).valueFixedNotation(); bool negativePolarity = s->hasCVParam(MS_negative_scan) ? true : false; CVParam intensityParam = si.cvParam(MS_peak_intensity); if (!intensityParam.empty()) os << " " << intensityParam.valueFixedNotation(); os << '\n'; if (chargeParam.empty()) { vector charges; BOOST_FOREACH(const CVParam& param, si.cvParams) { if (param.cvid == MS_possible_charge_state) charges.push_back(param.value + (negativePolarity ? '-' : '+')); } if (!charges.empty()) os << "CHARGE=" << bal::join(charges, " and ") << '\n'; } else os << "CHARGE=" << chargeParam.value << (negativePolarity ? '-' : '+') << '\n'; const BinaryDataArray& mzArray = *s->getMZArray(); const BinaryDataArray& intensityArray = *s->getIntensityArray(); using namespace boost::spirit::karma; typedef real_generator > nosci10_type; static const nosci10_type nosci10 = nosci10_type(); char buffer[256]; for (size_t p=0; p < s->defaultArrayLength; ++p) { char* b = buffer; generate(b, nosci10, intensityArray.data[p]); *b = 0; os << mzArray.data[p] << ' ' << buffer << '\n'; } os << "END IONS\n"; ++scansWritten; } // update any listeners and handle cancellation IterationListener::Status status = IterationListener::Status_Ok; if (iterationListenerRegistry) status = iterationListenerRegistry->broadcastUpdateMessage( IterationListener::UpdateMessage(i, end)); if (status == IterationListener::Status_Cancel) break; } if (sl.size() == 0) sl.warn_once("Warning: MGF output is empty because the spectrum list is empty (possibly due to filtering)"); else if (scansWritten == 0) sl.warn_once("Warning: MGF output is empty because the spectrum list has no MS2+ spectra (either due to filtering or the acquisition method)"); } void Serializer_MGF::Impl::read(shared_ptr is, MSData& msd) const { if (!is.get() || !*is) throw runtime_error("[Serializer_MGF::read()] Bad istream."); is->seekg(0); // read mzML file-level metadata stored in comment tags by the MGF writer like: // # fileContent CVParam MS:12345678 (term name) // # sourceFile id=foo name=bar location=file:///foo/bar /*string lineStr; while (is->peek() != (int) 'B') { getline(*is_, lineStr); if (lineStr[0] == '#') { vector tokens; bal::split(tokens, lineStr, bal::is_space()); if (tokens[1] == "fileContent") addParamToContainer(msd.fileDescription.fileContent, */ // we treat all MGF data is MSn (PMF MGFs not currently supported) msd.fileDescription.fileContent.set(MS_MSn_spectrum); msd.fileDescription.fileContent.set(MS_centroid_spectrum); msd.run.spectrumListPtr = SpectrumList_MGF::create(is, msd); msd.run.chromatogramListPtr.reset(new ChromatogramListSimple); } // // Serializer_MGF // PWIZ_API_DECL Serializer_MGF::Serializer_MGF() : impl_(new Impl()) {} PWIZ_API_DECL void Serializer_MGF::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { return impl_->write(os, msd, iterationListenerRegistry, useWorkerThreads); } PWIZ_API_DECL void Serializer_MGF::read(shared_ptr is, MSData& msd) const { return impl_->read(is, msd); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_MGF.hpp000066400000000000000000000035561444255175000233520ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SERIALIZER_MGF_HPP_ #define _SERIALIZER_MGF_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/IterationListener.hpp" namespace pwiz { namespace msdata { /// MSData <-> MGF stream serialization class PWIZ_API_DECL Serializer_MGF { public: /// constructor Serializer_MGF(); /// write MSData object to ostream as MGF; /// iterationListenerRegistry may be used to receive progress updates void write(std::ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true) const; /// read in MSData object from an MGF istream /// note: istream may be managed by MSData's SpectrumList, to allow for /// lazy evaluation of Spectrum data void read(boost::shared_ptr is, MSData& msd) const; private: class Impl; boost::shared_ptr impl_; Serializer_MGF(Serializer_MGF&); Serializer_MGF& operator=(Serializer_MGF&); }; } // namespace msdata } // namespace pwiz #endif // _SERIALIZER_MGF_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_MSn.cpp000066400000000000000000000465641444255175000234370ustar00rootroot00000000000000// // $Id$ // // // Original author: Barbara Frewen // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Serializer_MSn.hpp" #include "SpectrumList_MSn.hpp" #include "SpectrumInfo.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/chemistry/Chemistry.hpp" #include "zlib.h" #include #include "SpectrumWorkerThreads.hpp" namespace pwiz { namespace msdata { // these are the fixed sizes used to read/write .bms2 and .cms2 files // use these to write to files rather than sizeof() const int sizeIntMSn = 4; const int sizeFloatMSn = 4; const int sizeDoubleMSn = 8; const int sizeChargeMSn = 12; // struct Charge{ int z; double mass; } const int sizePeakMSn = 12; // struct Peak{ double mz; float intensity; } using namespace std; using boost::shared_ptr; using boost::iostreams::stream_offset; using namespace pwiz::util; using namespace pwiz::chemistry; class Serializer_MSn::Impl { public: Impl(MSn_Type filetype) : _filetype(filetype) {} void write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads = true) const; void read(shared_ptr is, MSData& msd) const; private: MSn_Type _filetype; // .ms1, .cms1, .bms1, .ms2, .cms2, .bms2 }; namespace { void writeBinaryFileHeader(MSn_Type filetype, int version, const MSData& msd, ostream& os) { time_t rawtime; time (&rawtime); os.write(reinterpret_cast(&filetype), sizeIntMSn); os.write(reinterpret_cast(&version), sizeIntMSn); MSnHeader header; sprintf(header.header[0], "CreationDate %s", ctime(&rawtime)); sprintf(header.header[1], "Extractor\tProteoWizard\n"); sprintf(header.header[2], "Extractor version\t%s\n", (msd.softwarePtrs.empty() ? "unknown" : msd.softwarePtrs.at(0)->id.c_str())); sprintf(header.header[3], "Source file\t%s\n", (msd.fileDescription.sourceFilePtrs.empty() ? "unknown" : msd.fileDescription.sourceFilePtrs.at(0)->name.c_str())); os.write(reinterpret_cast(&header), sizeof(MSnHeader)); } void writeTextFileHeader(const MSData& msd, ostream& os) { time_t rawtime; time (&rawtime); os << "H\tCreationDate " << ctime(&rawtime) << flush; os << "H\tExtractor\tProteoWizard" << endl; os << "H\tExtractor version\t" << ( msd.softwarePtrs.empty() ? "unknown" : msd.softwarePtrs.at(0)->id ) << endl; os << "H\tSource file\t" << ( (msd.fileDescription.sourceFilePtrs.empty()) ? "unknown" : msd.fileDescription.sourceFilePtrs.at(0)->name ) << endl; } // Could be one charge state, with or without accurate mass // or could be multiple possible charge states without accurate mass // if no accurate mass, compute it from mz and charge double calculateMass(double mz, int charge) { return (mz * charge) - ((charge - 1) * Proton); } size_t getChargeStates(const SelectedIon& si, vector& charges, vector& masses) { int startingChargesCount = charges.size(); CVParam chargeParam = si.cvParam(MS_charge_state); CVParam massParam = si.cvParam(MS_accurate_mass_OBSOLETE); double mz = si.cvParam(MS_selected_ion_m_z).valueAs(); if (!chargeParam.empty()) { charges.push_back(chargeParam.valueAs()); if (!massParam.empty()) { masses.push_back(massParam.valueAs()); } else { masses.push_back(calculateMass(mz, charges.back())); } } else { BOOST_FOREACH(const CVParam& param, si.cvParams) { if (param.cvid == MS_possible_charge_state) { charges.push_back(param.valueAs()); masses.push_back(calculateMass(mz, charges.back())); } } } return (int)(charges.size() - startingChargesCount); } int getScanNumber(const SpectrumPtr& s, CVID nativeIdFormat) { string scanNumber = id::translateNativeIDToScanNumber(nativeIdFormat, s->id); int scanNum = s->index + 1; if (!scanNumber.empty()) { scanNum = lexical_cast(scanNumber); } return scanNum; } void writeSpectrumText(const SpectrumPtr& s, ostream& os, CVID nativeIdFormat) { os << std::setprecision(7); // 123.4567 bool ms1File = s->cvParam(MS_ms_level).valueAs() == 1; // Write the scan numbers os << "S\t"; int scanNum = getScanNumber(s, nativeIdFormat); os << scanNum << "\t" << scanNum; if (!ms1File) { // Write the precursor mz Precursor& precur = s->precursors[0]; double mz = precur.isolationWindow.cvParam(MS_isolation_window_target_m_z).valueAs(); os << "\t" << mz; } os << "\n"; os << "I\tNativeID\t" << s->id << "\n"; // Write the scan time, if available if( !(s->scanList.empty()) && s->scanList.scans[0].cvParam(MS_scan_start_time).timeInSeconds() ) os << "I\tRTime\t" << s->scanList.scans[0].cvParam(MS_scan_start_time).timeInSeconds()/60 << "\n"; if (s->defaultArrayLength > 0) { // Write the base peak intensity and base peak m/z if (s->hasCVParam(MS_base_peak_intensity)) { double bpi = s->cvParam(MS_base_peak_intensity).valueAs(); os << "I\tBPI\t" << bpi << "\n"; } if (s->hasCVParam(MS_base_peak_m_z)) { double bpm = s->cvParam(MS_base_peak_m_z).valueAs(); os << "I\tBPM\t" << bpm << "\n"; } // Write the total ion current if (s->hasCVParam(MS_total_ion_current)) { double tic = s->cvParam(MS_total_ion_current).valueAs(); os << "I\tTIC\t" << tic << "\n"; } } //TODO // Write ConvA/ConvB information // Write the ion injection time //os << "I\tIIT\t" << s->scanList.scans[0].cvParam(MS_ion_injection_time).timeInSeconds()/60 << "\n"; if (!ms1File) { Precursor& precur = s->precursors[0]; SelectedIon& si = precur.selectedIons[0]; // Collect charge and mass info vector charges; vector masses; int numChargeStates = 0; // for each selected ion BOOST_FOREACH(const SelectedIon& curIon, precur.selectedIons){ numChargeStates += getChargeStates(curIon, charges, masses); } // Write EZ lines if accurate masses are available CVParam massParam = si.cvParam(MS_accurate_mass_OBSOLETE); if( !massParam.empty() ){ for(int i=0; i < numChargeStates; i++){ os << "I\tEZ\t" << charges[i] << "\t" << masses[i] << "\t0\t0" << endl; // pad last two fields with 0 } } // For each charge, write the charge and mass for(int i = 0; i < numChargeStates; i++) { os << "Z\t" << charges[i] << "\t" << masses[i] << "\n"; } } // Write each mz, intensity pair const BinaryDataArray& mzArray = *s->getMZArray(); const BinaryDataArray& intensityArray = *s->getIntensityArray(); for (size_t p=0; p < s->defaultArrayLength; ++p) { os << mzArray.data[p] << " " << intensityArray.data[p] << "\n"; } } void writeCompressedPeaks(const SpectrumPtr& s, ostream& os) { // Build arrays to hold peaks prior to compression int numPeaks = (int) s->defaultArrayLength; double *pD = new double[numPeaks]; float *pF = new float[numPeaks]; const BinaryDataArray& mzArray = *s->getMZArray(); const BinaryDataArray& intensityArray = *s->getIntensityArray(); for(int j = 0; j < numPeaks; j++) { pD[j] = mzArray.data[j]; pF[j] = (float) intensityArray.data[j]; } // compress mz uLong sizeM = (uLong) (numPeaks * sizeDoubleMSn); uLong comprLenM = compressBound(sizeM); Byte *comprM = (Byte*)calloc((uInt)comprLenM, 1); int retM = compress(comprM, &comprLenM, (const Bytef*)pD, sizeM); // compress intensity uLong sizeI = (uLong) (numPeaks * sizeFloatMSn); uLong comprLenI = compressBound(sizeI); Byte *comprI = (Byte*)calloc((uInt)comprLenI, 1); int retI = compress(comprI, &comprLenI, (const Bytef*)pF, sizeI); // Write the compressed peaks if all is well if ((Z_OK == retM) && (Z_OK == retI)) { // write length of compressed array of m/z os.write(reinterpret_cast(&comprLenM), sizeIntMSn); // write length of compressed array of intensities os.write(reinterpret_cast(&comprLenI), sizeIntMSn); // write compressed array of m/z os.write(reinterpret_cast(comprM), comprLenM); // write compressed array of intensities os.write(reinterpret_cast(comprI), comprLenI); } // Clean up memory free(comprM); free(comprI); delete [] pD; delete [] pF; // In case of error, throw exception AFTER cleaning up memory if (Z_OK != retM || Z_OK != retI) { throw runtime_error("[Serializer_MSn::writeCompressedPeaks] Error compressing peaks."); } } void writeSpectrumBinary(const SpectrumPtr& s, int version, bool compress, ostream& os, CVID nativeIdFormat) { bool ms1File = s->cvParam(MS_ms_level).valueAs() == 1; int scanNum = getScanNumber(s, nativeIdFormat); os.write(reinterpret_cast(&scanNum), sizeIntMSn); os.write(reinterpret_cast(&scanNum), sizeIntMSn); // Yes, there are two Precursor precur; SelectedIon si; if (!ms1File) { precur = s->precursors[0]; si = precur.selectedIons[0]; double mz = precur.isolationWindow.cvParam(MS_isolation_window_target_m_z).valueAs(); os.write(reinterpret_cast(&mz), sizeDoubleMSn); } else { double mz = 0; os.write(reinterpret_cast(&mz), sizeDoubleMSn); } float rt = 0.0; if( !(s->scanList.empty()) && s->scanList.scans[0].cvParam(MS_scan_start_time).timeInSeconds() ) { rt = (float) s->scanList.scans[0].cvParam(MS_scan_start_time).timeInSeconds()/60; } os.write(reinterpret_cast(&rt), sizeFloatMSn); if (version >= 2) { float basePeakIntensity = s->cvParam(MS_base_peak_intensity).valueAs(); os.write(reinterpret_cast(&basePeakIntensity), sizeFloatMSn); double basePeakMZ = s->cvParam(MS_base_peak_m_z).valueAs(); os.write(reinterpret_cast(&basePeakMZ), sizeDoubleMSn); // We don't have this information, but we need to write something, // so pad with 0's. (version 2 specific data) double conversionFactorA = (double)0; os.write(reinterpret_cast(&conversionFactorA), sizeDoubleMSn); double conversionFactorB = (double)0; os.write(reinterpret_cast(&conversionFactorB), sizeDoubleMSn); double tic = s->cvParam(MS_total_ion_current).valueAs(); os.write(reinterpret_cast(&tic), sizeDoubleMSn); // TODO float ionInjectionTime = (float)0; os.write(reinterpret_cast(&ionInjectionTime), sizeFloatMSn); } vector charges; vector masses; int numChargeStates = 0; if (!ms1File) { BOOST_FOREACH(const SelectedIon& curIon, precur.selectedIons) { numChargeStates += getChargeStates(curIon, charges, masses); } } os.write(reinterpret_cast(&numChargeStates), sizeIntMSn); bool hasAccurateMass = false; if (version == 3) { int numEzStates = 0; CVParam massParam = si.cvParam(MS_accurate_mass_OBSOLETE); if (!massParam.empty()) { numEzStates = numChargeStates; hasAccurateMass = true; } os.write(reinterpret_cast(&numEzStates), sizeIntMSn); } int numPeaks = (int) s->defaultArrayLength; os.write(reinterpret_cast(&numPeaks), sizeIntMSn); // end spectrum header info // Write out each charge state and corresponding mass for(int i = 0; i < numChargeStates; i++) { os.write(reinterpret_cast(&(charges[i])), sizeIntMSn); os.write(reinterpret_cast(&(masses[i])), sizeDoubleMSn); } // if there are accurate masses, write out EZ entries if( hasAccurateMass ){ float blank = 0; // we don't have rTime or area, pad with zeros for(int i=0; i < numChargeStates; i++){ os.write(reinterpret_cast(&charges[i]), sizeIntMSn); os.write(reinterpret_cast(&masses[i]), sizeDoubleMSn); os.write(reinterpret_cast(&blank), sizeFloatMSn); os.write(reinterpret_cast(&blank), sizeFloatMSn); } } // Do we need to write compressed m/z, intensity arrays? if (compress) { writeCompressedPeaks(s, os); } else { // No need to compress, just write out the arrays const BinaryDataArray& mzArray = *s->getMZArray(); const BinaryDataArray& intensityArray = *s->getIntensityArray(); for(int i = 0; i < numPeaks; i++) { double mzPeak = mzArray.data[i]; os.write(reinterpret_cast(&mzPeak), sizeDoubleMSn); float intensityPeak = (float) intensityArray.data[i]; os.write(reinterpret_cast(&intensityPeak), sizeFloatMSn); } } } } // namespace void Serializer_MSn::Impl::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { CVID nativeIdFormat = id::getDefaultNativeIDFormat(msd); // Write the header if ((MSn_Type_BMS1 == _filetype) || (MSn_Type_CMS1 == _filetype) || (MSn_Type_BMS2 == _filetype) || (MSn_Type_CMS2 == _filetype)) { writeBinaryFileHeader(_filetype, 3 /* version */, msd, os); } else if ((MSn_Type_MS1 == _filetype) || (MSn_Type_MS2 == _filetype)) { writeTextFileHeader(msd, os); } // Go through the spectrum list and write each spectrum bool ms1File = MSn_Type_MS1 == _filetype || MSn_Type_BMS1 == _filetype || MSn_Type_CMS1 == _filetype; SpectrumList& sl = *msd.run.spectrumListPtr; SpectrumWorkerThreads spectrumWorkers(sl, useWorkerThreads); for (size_t i=0, end=sl.size(); i < end; ++i) { //SpectrumPtr s = sl.spectrum(i, true); SpectrumPtr s = spectrumWorkers.processBatch(i); int msLevel = s->cvParam(MS_ms_level).valueAs(); if ((ms1File && msLevel == 1) || (!ms1File && msLevel == 2 && !s->precursors.empty() && !s->precursors[0].selectedIons.empty())) { switch (_filetype) { case MSn_Type_MS1: writeSpectrumText(s, os, nativeIdFormat); break; case MSn_Type_CMS1: writeSpectrumBinary(s, 3 /* version */, true, os, nativeIdFormat); break; case MSn_Type_BMS1: writeSpectrumBinary(s, 3 /* version */, false, os, nativeIdFormat); break; case MSn_Type_MS2: writeSpectrumText(s, os, nativeIdFormat); break; case MSn_Type_CMS2: writeSpectrumBinary(s, 3 /* version */, true, os, nativeIdFormat); break; case MSn_Type_BMS2: writeSpectrumBinary(s, 3 /* version */, false, os, nativeIdFormat); break; case MSn_Type_UNKNOWN: throw runtime_error("[SpectrumList_MSn::Impl::write] Cannot create unknown MSn file type."); } } // update any listeners and handle cancellation IterationListener::Status status = IterationListener::Status_Ok; if (iterationListenerRegistry) { status = iterationListenerRegistry->broadcastUpdateMessage( IterationListener::UpdateMessage(i, end)); } if (status == IterationListener::Status_Cancel) { break; } } } void Serializer_MSn::Impl::read(shared_ptr is, MSData& msd) const { if (!is.get() || !*is) throw runtime_error("[Serializer_MSn::read()] Bad istream."); is->seekg(0); msd.fileDescription.fileContent.set(MS_MSn_spectrum); msd.fileDescription.fileContent.set(MS_centroid_spectrum); msd.fileDescription.fileContent.set(MS_scan_number_only_nativeID_format); msd.run.spectrumListPtr = SpectrumList_MSn::create(is, msd, _filetype); msd.run.chromatogramListPtr.reset(new ChromatogramListSimple); } // // Serializer_MSn // PWIZ_API_DECL Serializer_MSn::Serializer_MSn(MSn_Type filetype) : impl_(new Impl(filetype)) {} PWIZ_API_DECL void Serializer_MSn::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { return impl_->write(os, msd, iterationListenerRegistry); } PWIZ_API_DECL void Serializer_MSn::read(shared_ptr is, MSData& msd) const { return impl_->read(is, msd); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_MSn.hpp000066400000000000000000000037011444255175000234260ustar00rootroot00000000000000// // $Id$ // // // Original author: Barbara Frewen // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SERIALIZER_MSn_HPP_ #define _SERIALIZER_MSn_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/IterationListener.hpp" #include "SpectrumList_MSn.hpp" namespace pwiz { namespace msdata { /// MSData <-> MSn stream serialization class PWIZ_API_DECL Serializer_MSn { public: /// constructor Serializer_MSn(MSn_Type filetype); /// write MSData object to ostream as MSn; /// iterationListenerRegistry may be used to receive progress updates void write(std::ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true) const; /// read in MSData object from an MGF istream /// note: istream may be managed by MSData's SpectrumList, to allow for /// lazy evaluation of Spectrum data void read(boost::shared_ptr is, MSData& msd) const; private: class Impl; boost::shared_ptr impl_; Serializer_MSn(Serializer_MSn&); Serializer_MSn& operator=(Serializer_MSn&); }; } // namespace msdata } // namespace pwiz #endif // _SERIALIZER_MSn_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_mz5.hpp000066400000000000000000000053651444255175000234540ustar00rootroot00000000000000// // $Id$ // // // Original authors: Mathias Wilhelm // Marc Kirchner // // Copyright 2011 Proteomics Center // Children's Hospital Boston, Boston, MA 02135 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SERIALIZER_MZ5_HPP_ #define _SERIALIZER_MZ5_HPP_ #include "MSData.hpp" #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/IterationListener.hpp" #include "mz5/Configuration_mz5.hpp" namespace pwiz { namespace msdata { /// MSData <-> MZ5 file serialization class PWIZ_API_DECL Serializer_mz5 { public: /** * Default constructor. * @param config mz5 configuration containing dataset names and different parameters for write support. */ Serializer_mz5(const mz5::Configuration_mz5& config = mz5::Configuration_mz5()); /** * Uses config to generate a Configuration_mz5 instance. * @param config pwiz configuration */ Serializer_mz5(const pwiz::msdata::MSDataFile::WriteConfig& config); /** * Creates and writes MSData instances to a mz5 file. * @param filename file name * @param msd MSData object * @param iterationListenerRegistry progress listener */ void write(const std::string& filename, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true) const; /// This method is not supported by mz5 since mz5 can not write to ostreams. void write(std::ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0) const; /** * Reads the mz5 file and stores the information in the MSData object. * @þaram filename file anme * @param msd MSData object */ void read(const std::string& filename, MSData& msd) const; /// This method is not supported by mz5 since mz5 can not read from an istream. void read(boost::shared_ptr is, MSData& msd) const; private: class Impl; boost::shared_ptr impl_; Serializer_mz5(Serializer_mz5&); Serializer_mz5& operator=(Serializer_mz5&); }; } // namespace msdata } // namespace pwiz #endif // _SERIALIZER_MZ5_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_mzML.cpp000066400000000000000000000204511444255175000236040ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Serializer_mzML.hpp" #include "IO.hpp" #include "SpectrumList_mzML.hpp" #include "ChromatogramList_mzML.hpp" #include "SHA1OutputObserver.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { using minimxml::XMLWriter; using boost::iostreams::stream_offset; using namespace pwiz::util; using namespace pwiz::minimxml; class Serializer_mzML::Impl { public: Impl(const Config& config) : config_(config) {} void write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const; void read(shared_ptr is, MSData& msd) const; private: Config config_; }; namespace { void writeSpectrumIndex(XMLWriter& xmlWriter, const SpectrumListPtr& spectrumListPtr, const vector& positions) { XMLWriter::Attributes indexAttributes; indexAttributes.push_back(make_pair("name", "spectrum")); xmlWriter.startElement("index", indexAttributes); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); if (spectrumListPtr.get() && spectrumListPtr->size() > 0) { if (spectrumListPtr->size() != positions.size()) throw runtime_error("[Serializer_mzML::writeSpectrumIndex()] Sizes differ."); for (unsigned int i=0; ispectrumIdentity(i); XMLWriter::Attributes attributes; attributes.push_back(make_pair("idRef", spectrum.id)); if (!spectrum.spotID.empty()) attributes.push_back(make_pair("spotID", spectrum.spotID)); xmlWriter.startElement("offset", attributes); xmlWriter.characters(lexical_cast(positions[i])); xmlWriter.endElement(); } } xmlWriter.popStyle(); xmlWriter.endElement(); } void writeChromatogramIndex(XMLWriter& xmlWriter, const ChromatogramListPtr& chromatogramListPtr, const vector& positions) { XMLWriter::Attributes indexAttributes; indexAttributes.push_back(make_pair("name", "chromatogram")); xmlWriter.startElement("index", indexAttributes); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); if (chromatogramListPtr.get() && chromatogramListPtr->size() > 0) { if (chromatogramListPtr->size() != positions.size()) throw runtime_error("[Serializer_mzML::WriteChromatogramIndex()] sizes differ."); for (unsigned int i=0; ichromatogramIdentity(i); XMLWriter::Attributes Attributes; Attributes.push_back(make_pair("idRef", chromatogram.id)); xmlWriter.startElement("offset", Attributes); xmlWriter.characters(lexical_cast(positions[i])); xmlWriter.endElement(); } } xmlWriter.popStyle(); xmlWriter.endElement(); } } // namespace void Serializer_mzML::Impl::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { // instantiate XMLWriter SHA1OutputObserver sha1OutputObserver; XMLWriter::Config xmlConfig; xmlConfig.outputObserver = &sha1OutputObserver; XMLWriter xmlWriter(os, xmlConfig); string xmlData = "version=\"1.0\" encoding=\"utf-8\""; xmlWriter.processingInstruction("xml", xmlData); // start if (config_.indexed) { XMLWriter::Attributes attributes; attributes.push_back(make_pair("xmlns", "http://psi.hupo.org/ms/mzml")); attributes.push_back(make_pair("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")); attributes.push_back(make_pair("xsi:schemaLocation", "http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd")); xmlWriter.startElement("indexedmzML", attributes); attributes.clear(); } // vector spectrumPositions; vector chromatogramPositions; BinaryDataEncoder::Config bdeConfig = config_.binaryDataEncoderConfig; bdeConfig.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian; // mzML always little endian IO::write(xmlWriter, msd, bdeConfig, &spectrumPositions, &chromatogramPositions, iterationListenerRegistry, useWorkerThreads); // don't write indexes if writing was cancelled if (iterationListenerRegistry && IterationListener::Status_Cancel == iterationListenerRegistry->broadcastUpdateMessage(IterationListener::UpdateMessage(0, 0, "writing indexes"))) return; // end if (config_.indexed) { stream_offset indexListOffset = xmlWriter.positionNext(); XMLWriter::Attributes attributes; attributes.push_back(make_pair("count", "2")); xmlWriter.startElement("indexList", attributes); writeSpectrumIndex(xmlWriter, msd.run.spectrumListPtr, spectrumPositions); writeChromatogramIndex(xmlWriter, msd.run.chromatogramListPtr, chromatogramPositions); xmlWriter.endElement(); // indexList xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); xmlWriter.startElement("indexListOffset"); xmlWriter.characters(lexical_cast(indexListOffset)); xmlWriter.endElement(); xmlWriter.startElement("fileChecksum"); xmlWriter.characters(sha1OutputObserver.hash()); xmlWriter.endElement(); xmlWriter.popStyle(); xmlWriter.endElement(); // indexedmzML } } struct HandlerIndexedMZML : public SAXParser::Handler { virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "indexedmzML") return Status::Done; throw runtime_error(("[SpectrumList_mzML::HandlerIndexedMZML] Unexpected element name: " + name).c_str()); } }; void Serializer_mzML::Impl::read(shared_ptr is, MSData& msd) const { if (!is.get() || !*is) throw runtime_error("[Serializer_mzML::read()] Bad istream."); is->seekg(0); if (config_.indexed) { HandlerIndexedMZML handler; SAXParser::parse(*is, handler); } IO::read(*is, msd, IO::IgnoreSpectrumList); Index_mzML_Ptr indexPtr(new Index_mzML(is, msd)); msd.run.spectrumListPtr = SpectrumList_mzML::create(is, msd, indexPtr); msd.run.chromatogramListPtr = ChromatogramList_mzML::create(is, msd, indexPtr); } // // Serializer_mzML // PWIZ_API_DECL Serializer_mzML::Serializer_mzML(const Config& config) : impl_(new Impl(config)) {} PWIZ_API_DECL void Serializer_mzML::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { return impl_->write(os, msd, iterationListenerRegistry, useWorkerThreads); } PWIZ_API_DECL void Serializer_mzML::read(shared_ptr is, MSData& msd) const { return impl_->read(is, msd); } PWIZ_API_DECL ostream& operator<<(ostream& os, const Serializer_mzML::Config& config) { os << config.binaryDataEncoderConfig << " indexed=\"" << boolalpha << config.indexed << "\""; return os; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_mzML.hpp000066400000000000000000000046651444255175000236220ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SERIALIZER_MZML_HPP_ #define _SERIALIZER_MZML_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/IterationListener.hpp" namespace pwiz { namespace msdata { /// MSData <-> mzML stream serialization class PWIZ_API_DECL Serializer_mzML { public: /// Serializer_mzML configuration struct PWIZ_API_DECL Config { /// configuration for binary data encoding in write() /// note: byteOrder is ignored (mzML always little endian) BinaryDataEncoder::Config binaryDataEncoderConfig; /// (indexed==true): read/write with wrapper bool indexed; Config() : indexed(true) {} }; /// constructor Serializer_mzML(const Config& config = Config()); /// write MSData object to ostream as mzML; /// iterationListenerRegistry may be used to receive progress updates void write(std::ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true) const; /// read in MSData object from an mzML istream /// note: istream may be managed by MSData's SpectrumList, to allow for /// lazy evaluation of Spectrum data void read(boost::shared_ptr is, MSData& msd) const; private: class Impl; boost::shared_ptr impl_; Serializer_mzML(Serializer_mzML&); Serializer_mzML& operator=(Serializer_mzML&); }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Serializer_mzML::Config& config); } // namespace msdata } // namespace pwiz #endif // _SERIALIZER_MZML_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_mzXML.cpp000066400000000000000000001444731444255175000237470ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Serializer_mzXML.hpp" #include "SpectrumList_mzXML.hpp" #include "Diff.hpp" #include "SHA1OutputObserver.hpp" #include "LegacyAdapter.hpp" #include "pwiz/data/common/CVTranslator.hpp" #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/utility/misc/Std.hpp" #include "SpectrumWorkerThreads.hpp" namespace pwiz { namespace msdata { using minimxml::XMLWriter; using boost::iostreams::stream_offset; using namespace pwiz::util; using namespace pwiz::minimxml; using namespace pwiz::data; class Serializer_mzXML::Impl { public: Impl(const Config& config) : config_(config) {} void write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const; void read(shared_ptr is, MSData& msd) const; private: Config config_; CVTranslator cvTranslator_; }; // // write() implementation // namespace { void start_mzXML(XMLWriter& xmlWriter) { XMLWriter::Attributes attributes; attributes.add("xmlns", "http://sashimi.sourceforge.net/schema_revision/mzXML_3.2"); attributes.add("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); attributes.add("xsi:schemaLocation", "http://sashimi.sourceforge.net/schema_revision/mzXML_3.2 http://sashimi.sourceforge.net/schema_revision/mzXML_3.2/mzXML_idx_3.2.xsd"); xmlWriter.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines); xmlWriter.startElement("mzXML", attributes); xmlWriter.popStyle(); } string getRetentionTime(const Scan& scan) { ostringstream oss; oss << "PT" << scan.cvParam(MS_scan_start_time).timeInSeconds() << "S"; return oss.str(); } void start_msRun(XMLWriter& xmlWriter, const MSData& msd) { string scanCount, startTime, endTime; if (msd.run.spectrumListPtr.get()) { const SpectrumList& sl = *msd.run.spectrumListPtr; scanCount = lexical_cast(sl.size()); if (sl.size() > 0) { SpectrumPtr spectrum = sl.spectrum(0); if (!spectrum->scanList.scans.empty()) startTime = getRetentionTime(spectrum->scanList.scans[0]); spectrum = sl.spectrum(sl.size()-1); if (!spectrum->scanList.scans.empty()) endTime = getRetentionTime(spectrum->scanList.scans[0]); } } XMLWriter::Attributes attributes; attributes.add("scanCount", scanCount); attributes.add("startTime", startTime); attributes.add("endTime", endTime); xmlWriter.startElement("msRun", attributes); } string translate_SourceFileTypeToRunID(const SourceFile& sf, CVID sourceFileType) { string nameExtension = bal::to_lower_copy(bfs::extension(sf.name)); string locationExtension = bal::to_lower_copy(bfs::extension(sf.location)); switch (sourceFileType) { // location="file://path/to" name="source.RAW" case MS_Thermo_RAW_format: if (nameExtension == ".raw") return bfs::basename(sf.name); return ""; // sane: location="file://path/to/source.raw" name="_FUNC001.DAT" // insane: location="file://path/to" name="source.raw" case MS_Waters_raw_format: if (nameExtension == ".dat" && locationExtension == ".raw") return bfs::basename(bfs::path(sf.location).leaf()); else if (nameExtension == ".raw") return bfs::basename(sf.name); return ""; // location="file://path/to/source.d" name="Analysis.yep" case MS_Bruker_Agilent_YEP_format: if (nameExtension == ".yep" && locationExtension == ".d") return bfs::basename(bfs::path(sf.location).leaf()); return ""; // location="file://path/to/source.d" name="Analysis.baf" case MS_Bruker_BAF_format: if (nameExtension == ".baf" && locationExtension == ".d") return bfs::basename(bfs::path(sf.location).leaf()); return ""; // location="file://path/to/source.d/AcqData" name="msprofile.bin" case MS_Agilent_MassHunter_format: if (bfs::path(sf.location).leaf() == "AcqData" && (bal::iends_with(sf.name, "msprofile.bin") || bal::iends_with(sf.name, "mspeak.bin") || bal::iends_with(sf.name, "msscan.bin"))) return bfs::basename(bfs::path(sf.location).parent_path().leaf()); return ""; // location="file://path/to" name="source.mzXML" // location="file://path/to" name="source.mz.xml" // location="file://path/to" name="source.d" (ambiguous) case MS_ISB_mzXML_format: if (nameExtension == ".mzxml" || nameExtension == ".d") return bfs::basename(sf.name); else if (bal::iends_with(sf.name, ".mz.xml")) return sf.name.substr(0, sf.name.length()-7); return ""; // location="file://path/to" name="source.mzData" // location="file://path/to" name="source.mz.data" ??? case MS_PSI_mzData_format: if (nameExtension == ".mzdata") return bfs::basename(sf.name); return ""; // location="file://path/to" name="source.mgf" case MS_Mascot_MGF_format: if (nameExtension == ".mgf") return bfs::basename(sf.name); return ""; // location="file://path/to" name="source.wiff" case MS_ABI_WIFF_format: if (nameExtension == ".wiff") return bfs::basename(sf.name); return ""; // location="file://path/to/source/maldi-spot/1/1SRef" name="fid" // location="file://path/to/source/1/1SRef" name="fid" case MS_Bruker_FID_format: // need the full list of FIDs to create a run ID (from the common prefix) return bfs::path(sf.location).parent_path().parent_path().string(); // location="file://path/to/source" name="spectrum-id.t2d" // location="file://path/to/source/MS" name="spectrum-id.t2d" // location="file://path/to/source/MSMS" name="spectrum-id.t2d" case MS_SCIEX_TOF_TOF_T2D_format: // need the full list of T2Ds to create a run ID (from the common prefix) return sf.location; default: return ""; } } void write_parentFile(XMLWriter& xmlWriter, const MSData& msd) { BOOST_FOREACH(const SourceFilePtr& sourceFilePtr, msd.fileDescription.sourceFilePtrs) { const SourceFile& sf = *sourceFilePtr; // skip files with unknown source file type CVID sourceFileType = sf.cvParamChild(MS_mass_spectrometer_file_format).cvid; if (sourceFileType == CVID_Unknown) continue; // skip files with no nativeID format (like acquisition settings) CVID nativeIdFormat = sf.cvParamChild(MS_nativeID_format).cvid; if (nativeIdFormat == MS_no_nativeID_format) continue; // if we can't translate the file to a run ID, skip it as a parentFile string runID = translate_SourceFileTypeToRunID(sf, sourceFileType); if (runID.empty()) continue; string fileName, fileType, fileSha1; fileName = sf.location + "/" + sf.name; switch (nativeIdFormat) { // nativeID formats from processed data file types case MS_scan_number_only_nativeID_format: case MS_spectrum_identifier_nativeID_format: case MS_multiple_peak_list_nativeID_format: case MS_single_peak_list_nativeID_format: fileType = "processedData"; break; // consider other formats to be raw default: fileType = "RAWData"; break; } fileSha1 = sf.cvParam(MS_SHA_1).value; XMLWriter::Attributes attributes; attributes.add("fileName", fileName); attributes.add("fileType", fileType); attributes.add("fileSha1", fileSha1); xmlWriter.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines); xmlWriter.startElement("parentFile", attributes, XMLWriter::EmptyElement); xmlWriter.popStyle(); } } void writeCategoryValue(XMLWriter& xmlWriter, const string& category, const string& value) { XMLWriter::Attributes attributes; attributes.add("category", category); attributes.add("value", value); xmlWriter.startElement(category, attributes, XMLWriter::EmptyElement); } void writeSoftware(XMLWriter& xmlWriter, SoftwarePtr software, const MSData& msd, const CVTranslator& cvTranslator, const string& type = "") { LegacyAdapter_Software adapter(software, const_cast(msd), cvTranslator); XMLWriter::Attributes attributes; attributes.add("type", type.empty() ? adapter.type() : type); attributes.add("name", adapter.name()); attributes.add("version", adapter.version()); xmlWriter.startElement("software", attributes, XMLWriter::EmptyElement); } void write_msInstrument(XMLWriter& xmlWriter, const InstrumentConfigurationPtr& instrumentConfiguration, const MSData& msd, const CVTranslator& cvTranslator, map& instrumentIndexByPtr) { const LegacyAdapter_Instrument adapter( const_cast(*instrumentConfiguration), cvTranslator); int index = (int) instrumentIndexByPtr.size() + 1; instrumentIndexByPtr[instrumentConfiguration] = index; XMLWriter::Attributes attributes; attributes.add("msInstrumentID", index); xmlWriter.startElement("msInstrument", attributes); writeCategoryValue(xmlWriter, "msManufacturer", adapter.manufacturer()); writeCategoryValue(xmlWriter, "msModel", adapter.model()); try { writeCategoryValue(xmlWriter, "msIonisation", adapter.ionisation()); } catch (std::out_of_range&) {} try { writeCategoryValue(xmlWriter, "msMassAnalyzer", adapter.analyzer()); } catch (std::out_of_range&) {} try { writeCategoryValue(xmlWriter, "msDetector", adapter.detector()); } catch (std::out_of_range&) {} if (instrumentConfiguration->softwarePtr.get()) writeSoftware(xmlWriter, instrumentConfiguration->softwarePtr, msd, cvTranslator, "acquisition"); xmlWriter.endElement(); // msInstrument } void write_msInstruments(XMLWriter& xmlWriter, const MSData& msd, const CVTranslator& cvTranslator, map& instrumentIndexByPtr) { BOOST_FOREACH(const InstrumentConfigurationPtr& icPtr, msd.instrumentConfigurationPtrs) if (icPtr.get()) write_msInstrument(xmlWriter, icPtr, msd, cvTranslator, instrumentIndexByPtr); } void write_processingOperation(XMLWriter& xmlWriter, const ProcessingMethod& pm, CVID action) { vector actionParams = pm.cvParamChildren(action); for (auto & actionParam : actionParams) { XMLWriter::Attributes attributes; attributes.add("name", actionParam.name()); xmlWriter.startElement("processingOperation", attributes, XMLWriter::EmptyElement); } } void write_dataProcessing(XMLWriter& xmlWriter, const MSData& msd, const CVTranslator& cvTranslator) { BOOST_FOREACH(const DataProcessingPtr& dpPtr, msd.allDataProcessingPtrs()) { if (!dpPtr.get() || dpPtr->processingMethods.empty()) continue; BOOST_FOREACH(const ProcessingMethod& pm, dpPtr->processingMethods) { XMLWriter::Attributes attributes; if (pm.hasCVParamChild(MS_peak_picking)) attributes.add("centroided", "1"); if (pm.hasCVParamChild(MS_deisotoping)) attributes.add("deisotoped", "1"); if (pm.hasCVParamChild(MS_charge_deconvolution)) attributes.add("chargeDeconvoluted", "1"); if (pm.hasCVParamChild(MS_thresholding)) { CVParam threshold = pm.cvParam(MS_low_intensity_threshold); if (!threshold.empty()) attributes.add("intensityCutoff", threshold.value); } xmlWriter.startElement("dataProcessing", attributes); CVParam fileFormatConversion = pm.cvParamChild(MS_file_format_conversion); string softwareType = fileFormatConversion.empty() ? "processing" : "conversion"; if (pm.softwarePtr.get()) writeSoftware(xmlWriter, pm.softwarePtr, msd, cvTranslator, softwareType); write_processingOperation(xmlWriter, pm, MS_data_transformation); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); BOOST_FOREACH(const UserParam& param, pm.userParams) { xmlWriter.startElement("comment"); xmlWriter.characters(param.name + (param.value.empty() ? string() : ": " + param.value)); xmlWriter.endElement(); // comment } xmlWriter.popStyle(); xmlWriter.endElement(); // dataProcessing } } } struct IndexEntry { int scanNumber; stream_offset offset; }; string getPolarity(const Spectrum& spectrum) { string result = ""; CVParam paramPolarity = spectrum.cvParamChild(MS_scan_polarity); if (paramPolarity.empty()) paramPolarity = spectrum.cvParamChild(MS_polarity_OBSOLETE); if (paramPolarity.cvid == MS_positive_scan) result = "+"; if (paramPolarity.cvid == MS_negative_scan) result = "-"; return result; } struct PrecursorInfo { string scanNum; string mz; string intensity; string charge; string collisionEnergy; string activation; double windowWideness; bool empty() const { return scanNum.empty() && mz.empty() && intensity.empty() && charge.empty() && collisionEnergy.empty() && activation.empty() && windowWideness == 0; } }; vector getPrecursorInfo(const Spectrum& spectrum, const SpectrumListPtr spectrumListPtr, CVID nativeIdFormat) { vector result; for (vector::const_iterator it=spectrum.precursors.begin(); it!=spectrum.precursors.end(); ++it) { PrecursorInfo info; if (!it->spectrumID.empty()) { // mzXML scanNumber takes a different form depending on the source's nativeID format info.scanNum = id::translateNativeIDToScanNumber(nativeIdFormat, it->spectrumID); } if (!it->selectedIons.empty()) { info.mz = it->selectedIons[0].cvParam(MS_selected_ion_m_z).value; info.intensity = it->selectedIons[0].cvParam(MS_peak_intensity).value; info.charge = it->selectedIons[0].cvParam(MS_charge_state).value; } if (!it->activation.empty()) { if (it->activation.hasCVParam(MS_ETD)) { info.activation = "ETD"; if (it->activation.hasCVParam(MS_CID)) info.activation += "+SA"; } else if (it->activation.hasCVParam(MS_ECD)) { info.activation = "ECD"; } else if (it->activation.hasCVParam(MS_CID)) { info.activation = "CID"; } else if (it->activation.hasCVParam(MS_HCD)) { info.activation = "HCD"; } if (it->activation.hasCVParam(MS_CID) || it->activation.hasCVParam(MS_HCD)) info.collisionEnergy = it->activation.cvParam(MS_collision_energy).value; } info.windowWideness = 0; if (!it->isolationWindow.empty()) { CVParam isolationWindowLowerOffset = it->isolationWindow.cvParam(MS_isolation_window_lower_offset); CVParam isolationWindowUpperOffset = it->isolationWindow.cvParam(MS_isolation_window_upper_offset); if (!isolationWindowLowerOffset.empty() && !isolationWindowUpperOffset.empty()) info.windowWideness = fabs(isolationWindowLowerOffset.valueAs()) + isolationWindowUpperOffset.valueAs(); } if (!info.empty()) result.push_back(info); } return result; } void write_precursors(XMLWriter& xmlWriter, const vector& precursorInfo) { xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); for (vector::const_iterator it=precursorInfo.begin(); it!=precursorInfo.end(); ++it) { XMLWriter::Attributes attributes; if (!it->scanNum.empty()) attributes.add("precursorScanNum", it->scanNum); if (it->intensity.empty()) attributes.add("precursorIntensity", "0"); // required attribute else attributes.add("precursorIntensity", it->intensity); if (!it->charge.empty()) attributes.add("precursorCharge", it->charge); if (!it->activation.empty()) attributes.add("activationMethod", it->activation); if (it->windowWideness != 0) attributes.add("windowWideness", it->windowWideness); xmlWriter.startElement("precursorMz", attributes); xmlWriter.characters(it->mz, false); xmlWriter.endElement(); } xmlWriter.popStyle(); } void write_peaks(XMLWriter& xmlWriter, const vector& mzIntensityPairs, const Serializer_mzXML::Config& config) { BinaryDataEncoder::Config bdeConfig = config.binaryDataEncoderConfig; bdeConfig.byteOrder = BinaryDataEncoder::ByteOrder_BigEndian; // mzXML always big endian BinaryDataEncoder encoder(bdeConfig); string encoded; size_t binaryByteCount; // size before base64 encoding XMLWriter::Attributes attributes; if (!mzIntensityPairs.empty()) encoder.encode(reinterpret_cast(&mzIntensityPairs[0]), mzIntensityPairs.size()*2, encoded, &binaryByteCount); else { binaryByteCount = 0; attributes.add("xsi:nil", "true"); } string precision = bdeConfig.precision == BinaryDataEncoder::Precision_32 ? "32" : "64"; if (bdeConfig.compression == BinaryDataEncoder::Compression_Zlib) { attributes.add("compressionType", "zlib"); attributes.add("compressedLen", binaryByteCount); } else { attributes.add("compressionType", "none"); attributes.add("compressedLen", "0"); } attributes.add("precision", precision); attributes.add("byteOrder", "network"); attributes.add("contentType", "m/z-int"); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner | XMLWriter::StyleFlag_AttributesOnMultipleLines); xmlWriter.startElement("peaks", attributes); xmlWriter.characters(encoded, false); xmlWriter.endElement(); xmlWriter.popStyle(); } IndexEntry write_scan(XMLWriter& xmlWriter, CVID nativeIdFormat, const Spectrum& spectrum, const SpectrumListPtr spectrumListPtr, const Serializer_mzXML::Config& config, map& instrumentIndexByPtr) { IndexEntry result; result.offset = xmlWriter.positionNext(); // mzXML scanNumber takes a different form depending on the source's nativeID format if (MS_multiple_peak_list_nativeID_format == nativeIdFormat) // 0-based { result.scanNumber = spectrum.index+1; // mzXML is 1-based } else { string scanNumberStr = id::translateNativeIDToScanNumber(nativeIdFormat, spectrum.id); if (scanNumberStr.empty()) result.scanNumber = spectrum.index+1; // scanNumber is a 1-based index for some nativeID formats else result.scanNumber = lexical_cast(scanNumberStr); } // get info Scan dummy; const Scan& scan = spectrum.scanList.scans.empty() ? dummy : spectrum.scanList.scans[0]; CVParam spectrumTypeParam = spectrum.cvParamChild(MS_spectrum_type); string scanType; switch (spectrumTypeParam.cvid) { case MS_MSn_spectrum: case MS_MS1_spectrum: scanType = "Full"; break; case MS_CRM_spectrum: scanType = "CRM"; break; case MS_SIM_spectrum: scanType = "SIM"; break; case MS_SRM_spectrum: scanType = "SRM"; break; case MS_precursor_ion_spectrum: scanType = "Q1"; break; case MS_constant_neutral_gain_spectrum: case MS_constant_neutral_loss_spectrum: scanType = "Q3"; break; default: break; } //string scanEvent = scan.cvParam(MS_preset_scan_configuration).value; string msLevel = spectrum.cvParam(MS_ms_level).value; string polarity = getPolarity(spectrum); string retentionTime = getRetentionTime(scan); string lowMz = spectrum.cvParam(MS_lowest_observed_m_z).value; string highMz = spectrum.cvParam(MS_highest_observed_m_z).value; string basePeakMz = spectrum.cvParam(MS_base_peak_m_z).value; string basePeakIntensity = spectrum.cvParam(MS_base_peak_intensity).value; string totIonCurrent = spectrum.cvParam(MS_total_ion_current).value; string filterLine = spectrum.cvParam(MS_filter_string).value; string compensationVoltage; if (spectrum.hasCVParam(MS_FAIMS_compensation_voltage)) compensationVoltage = spectrum.cvParam(MS_FAIMS_compensation_voltage).value; bool isCentroided = spectrum.hasCVParam(MS_centroid_spectrum); vector precursorInfo = getPrecursorInfo(spectrum, spectrumListPtr, nativeIdFormat); vector mzIntensityPairs; spectrum.getMZIntensityPairs(mzIntensityPairs); // write out xml XMLWriter::Attributes attributes; attributes.add("num", result.scanNumber); //if (!scanEvent.empty()) // attributes.add("scanEvent", scanEvent); if (!scanType.empty()) attributes.add("scanType", scanType); if (!filterLine.empty()) attributes.add("filterLine", filterLine); // TODO: write this attribute only when SpectrumList_PeakPicker has processed the spectrum attributes.add("centroided", isCentroided ? "1" : "0"); attributes.add("msLevel", msLevel); attributes.add("peaksCount", mzIntensityPairs.size()); if (!polarity.empty()) attributes.add("polarity", polarity); attributes.add("retentionTime", retentionTime); if (!precursorInfo.empty()) { if(!precursorInfo[0].collisionEnergy.empty()) attributes.add("collisionEnergy", precursorInfo[0].collisionEnergy); } if (!lowMz.empty()) attributes.add("lowMz", lowMz); if (!highMz.empty()) attributes.add("highMz", highMz); if (!basePeakMz.empty()) attributes.add("basePeakMz", basePeakMz); if (!basePeakIntensity.empty()) attributes.add("basePeakIntensity", basePeakIntensity); if (!totIonCurrent.empty()) attributes.add("totIonCurrent", totIonCurrent); if (!compensationVoltage.empty()) attributes.add("compensationVoltage", compensationVoltage); if (scan.instrumentConfigurationPtr.get()) attributes.add("msInstrumentID", instrumentIndexByPtr[scan.instrumentConfigurationPtr]); xmlWriter.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines); xmlWriter.startElement("scan", attributes); xmlWriter.popStyle(); write_precursors(xmlWriter, precursorInfo); write_peaks(xmlWriter, mzIntensityPairs, config); // write userParams as arbitrary nameValue elements BOOST_FOREACH(const UserParam& userParam, spectrum.userParams) { attributes.clear(); attributes.add("name", userParam.name); attributes.add("value", userParam.value); xmlWriter.startElement("nameValue", attributes, XMLWriter::EmptyElement); } xmlWriter.endElement(); // scan return result; } void write_scans(XMLWriter& xmlWriter, const MSData& msd, const Serializer_mzXML::Config& config, vector& index, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, map& instrumentIndexByPtr, bool useWorkerThreads) { SpectrumListPtr sl = msd.run.spectrumListPtr; if (!sl.get()) return; CVID defaultNativeIdFormat = id::getDefaultNativeIDFormat(msd); SpectrumWorkerThreads spectrumWorkers(*sl, useWorkerThreads); for (size_t i=0; isize(); i++) { // send progress updates, handling cancel IterationListener::Status status = IterationListener::Status_Ok; if (iterationListenerRegistry) status = iterationListenerRegistry->broadcastUpdateMessage( IterationListener::UpdateMessage(i, sl->size())); if (status == IterationListener::Status_Cancel) break; //SpectrumPtr spectrum = sl->spectrum(i, true); SpectrumPtr spectrum = spectrumWorkers.processBatch(i); // Thermo spectra not from "controllerType=0 controllerNumber=1" are ignored if (defaultNativeIdFormat == MS_Thermo_nativeID_format && spectrum->id.find("controllerType=0 controllerNumber=1") != 0) continue; // scans from a source file other than the default are ignored; // note: multiple parentFile elements in mzXML are intended to represent // the data processing history of a single source file if (spectrum->sourceFilePtr.get() && spectrum->sourceFilePtr != msd.run.defaultSourceFilePtr) continue; // write the spectrum index.push_back(write_scan(xmlWriter, defaultNativeIdFormat, *spectrum, msd.run.spectrumListPtr, config, instrumentIndexByPtr)); } } void write_index(XMLWriter& xmlWriter, const vector& index) { XMLWriter::Attributes attributes; attributes.add("name", "scan"); xmlWriter.startElement("index", attributes); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); for (vector::const_iterator it=index.begin(); it!=index.end(); ++it) { attributes.clear(); attributes.add("id", it->scanNumber); xmlWriter.startElement("offset", attributes); xmlWriter.characters(lexical_cast(it->offset), false); xmlWriter.endElement(); // offset } xmlWriter.popStyle(); xmlWriter.endElement(); // index } } // namespace void Serializer_mzXML::Impl::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { SHA1OutputObserver sha1OutputObserver; XMLWriter::Config config; config.outputObserver = &sha1OutputObserver; XMLWriter xmlWriter(os, config); string xmlData = "version=\"1.0\" encoding=\"ISO-8859-1\""; // TODO: UTF-8 ? xmlWriter.processingInstruction("xml", xmlData); start_mzXML(xmlWriter); map instrumentIndexByPtr; start_msRun(xmlWriter, msd); write_parentFile(xmlWriter, msd); write_msInstruments(xmlWriter, msd, cvTranslator_, instrumentIndexByPtr); write_dataProcessing(xmlWriter, msd, cvTranslator_); vector index; write_scans(xmlWriter, msd, config_, index, iterationListenerRegistry, instrumentIndexByPtr, useWorkerThreads); xmlWriter.endElement(); // msRun stream_offset indexOffset = xmlWriter.positionNext(); if (config_.indexed && msd.run.spectrumListPtr && msd.run.spectrumListPtr->size() > 0) { write_index(xmlWriter, index); xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); xmlWriter.startElement("indexOffset"); xmlWriter.characters(lexical_cast(indexOffset), false); xmlWriter.endElement(); xmlWriter.popStyle(); } xmlWriter.pushStyle(XMLWriter::StyleFlag_InlineInner); xmlWriter.startElement("sha1"); xmlWriter.characters(sha1OutputObserver.hash(), false); xmlWriter.endElement(); xmlWriter.popStyle(); xmlWriter.endElement(); // mzXML } // // read() implementation // namespace { void splitFilename(const string& fullpath, string& path, string& basename) { string::size_type lastSlash = fullpath.find_last_of("/\\"); if (lastSlash==string::npos || lastSlash==fullpath.size()-1) { path.clear(); basename = fullpath; return; } path = fullpath.substr(0, lastSlash); basename = fullpath.substr(lastSlash+1); } CVID translate_parentFilenameToSourceFileType(const string& name) { string fileExtension = bal::to_lower_copy(bfs::extension(name)); // check for known vendor formats if (fileExtension == ".raw") { // (Mass)Wolf-MRM or other non-compliant Waters converters might // conflict with this case, i.e. the extension could be from a Waters .raw directory // instead of a Thermo RAW file; these aberrant cases will be fixed globally by fillInMetadata() return MS_Thermo_RAW_format; } else if (fileExtension == ".dat") return MS_Waters_raw_format; else if (fileExtension == ".wiff") return MS_ABI_WIFF_format; else if (fileExtension == ".yep") return MS_Bruker_Agilent_YEP_format; else if (fileExtension == ".baf") return MS_Bruker_BAF_format; else if (name == "fid") return MS_Bruker_FID_format; else if (bal::iequals(name, "msprofile.bin")) return MS_Agilent_MassHunter_format; else if (bal::iequals(name, "mspeak.bin")) return MS_Agilent_MassHunter_format; else if (bal::iequals(name, "msscan.bin")) return MS_Agilent_MassHunter_format; else if (fileExtension == ".t2d") return MS_SCIEX_TOF_TOF_T2D_format; // check for known open formats else if (fileExtension == ".mzdata") return MS_PSI_mzData_format; else if (fileExtension == ".mgf") return MS_Mascot_MGF_format; else if (fileExtension == ".dta") return MS_DTA_format; else if (fileExtension == ".pkl") return MS_Micromass_PKL_format; else if (fileExtension == ".mzxml") return MS_ISB_mzXML_format; else if (bal::iends_with(name, ".mz.xml")) return MS_ISB_mzXML_format; else if (fileExtension == ".mzml") return MS_mzML_format; // This case is nasty for several reasons: // 1) a .d suffix almost certainly indicates a directory, not a file (so no SHA-1) // 2) the same suffix is used by multiple different formats (Agilent/Bruker YEP, Bruker BAF, Agilent ms*.bin) // 3) all the formats use the same nativeID style ("scan=123") so just treat it like an mzXML source // Therefore this "file" extension is quite useless. else if (fileExtension == ".d") return MS_ISB_mzXML_format; else return CVID_Unknown; } CVID translateSourceFileTypeToNativeIdFormat(CVID sourceFileType) { switch (sourceFileType) { // for these sources we treat the scan number as the nativeID case MS_Thermo_RAW_format: return MS_Thermo_nativeID_format; case MS_Bruker_Agilent_YEP_format: return MS_Bruker_Agilent_YEP_nativeID_format; case MS_Bruker_BAF_format: return MS_Bruker_BAF_nativeID_format; case MS_ISB_mzXML_format: return MS_scan_number_only_nativeID_format; case MS_PSI_mzData_format: return MS_spectrum_identifier_nativeID_format; case MS_Mascot_MGF_format: return MS_multiple_peak_list_nativeID_format; case MS_DTA_format: return MS_scan_number_only_nativeID_format; case MS_Agilent_MassHunter_format: return MS_Agilent_MassHunter_nativeID_format; // for these sources we must assume the scan number came from the index case MS_ABI_WIFF_format: case MS_Bruker_FID_format: case MS_SCIEX_TOF_TOF_T2D_format: case MS_Waters_raw_format: case MS_Micromass_PKL_format: case MS_mzML_format: return MS_scan_number_only_nativeID_format; // in other cases, assume the source file doesn't contain instrument data case CVID_Unknown: return MS_no_nativeID_format; default: throw runtime_error("[Serializer_mzXML::translateSourceFileTypeToNativeIdFormat] unknown file type"); } } void process_parentFile(const string& fileName, const string& fileType, const string& fileSha1, MSData& msd) { string name, location; splitFilename(fileName, location, name); msd.fileDescription.sourceFilePtrs.push_back(SourceFilePtr(new SourceFile)); SourceFile& sf = *msd.fileDescription.sourceFilePtrs.back(); sf.id = name; sf.name = name; sf.location = location; if (fileType != "RAWData" && fileType != "processedData") throw runtime_error("[Serializer_mzXML::process_parentFile] invalid value for fileType attribute"); // TODO: if fileSha1 is empty or invalid, log a warning sf.set(MS_SHA_1, fileSha1); } SoftwarePtr registerSoftware(MSData& msd, const string& type, const string& name, const string& version, const CVTranslator& cvTranslator) { SoftwarePtr result; // see if we already registered this Software for (vector::const_iterator it=msd.softwarePtrs.begin(); it!=msd.softwarePtrs.end(); ++it) { CVParam softwareParam = (*it)->cvParamChild(MS_software); if (softwareParam.cvid == cvTranslator.translate(name) && (*it)->version == version) result = *it; } // create a new entry if (!result.get()) { result = SoftwarePtr(new Software); msd.softwarePtrs.push_back(result); } result->id = name + " software"; LegacyAdapter_Software adapter(result, msd, cvTranslator); adapter.name(name); adapter.version(version); adapter.type(type); return result; } class HandlerScanFileContent : public SAXParser::Handler { MSData& msd_; bool hasCentroidDataProcessing; bool hasCentroidScan; bool hasProfileScan; public: HandlerScanFileContent(MSData& msd, bool hasCentroidDataProcessing) : msd_(msd), hasCentroidDataProcessing(hasCentroidDataProcessing), hasCentroidScan(false), hasProfileScan(false) { } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "scan") throw runtime_error("[Serializer_mzXML::HandlerScanFileContent] Index offset does not point at element."); string msLevel, centroided, scanType; getAttribute(attributes, "msLevel", msLevel); getAttribute(attributes, "scanType", scanType); getAttribute(attributes, "centroided", centroided); //TODO: use this: getAttribute(attributes, "deisotoped", deisotoped); //TODO: use this: getAttribute(attributes, "chargeDeconvoluted", chargeDeconvoluted); // set spectrum type by scanType attribute (assume MSn/Full if absent) boost::to_lower(scanType); boost::trim(msLevel); if (scanType.empty() || scanType == "full" || scanType == "zoom") msd_.fileDescription.fileContent.set(msLevel == "1" ? MS_MS1_spectrum : MS_MSn_spectrum); else if (scanType == "q1") msd_.fileDescription.fileContent.set(MS_precursor_ion_spectrum); else if (scanType == "q3") msd_.fileDescription.fileContent.set(MS_product_ion_spectrum); else if (scanType == "sim" || scanType == "srm" || scanType == "mrm" || // HACK: mzWiff (ABI) and wolf-mrm (Waters) use this value scanType == "multiplereaction" || // HACK: Trapper (Agilent) uses this value scanType == "crm") { // SIM/SRM spectra are accessed as chromatograms } if (!hasCentroidScan || !hasProfileScan) { // if the global data processing says spectra were centroided, the default // spectrum representation is centroid, otherwise profile if (centroided.empty()) { if (!hasCentroidScan && hasCentroidDataProcessing) { hasCentroidScan = true; msd_.fileDescription.fileContent.set(MS_centroid_spectrum); } else if (!hasProfileScan && !hasCentroidDataProcessing) { hasProfileScan = true; msd_.fileDescription.fileContent.set(MS_profile_spectrum); } } // non-empty centroided attribute overrides the default spectrum representation else if (!hasCentroidScan && centroided == "1") { hasCentroidScan = true; msd_.fileDescription.fileContent.set(MS_centroid_spectrum); } else if (!hasProfileScan && centroided == "0") { hasProfileScan = true; msd_.fileDescription.fileContent.set(MS_profile_spectrum); } } return Status::Done; } }; void fillInMetadata(MSData& msd) { // check for (Mass)Wolf-MRM metadata: multiple parentFiles with the same .raw URI set uniqueURIs; BOOST_FOREACH(SourceFilePtr& sf, msd.fileDescription.sourceFilePtrs) { pair::iterator, bool> ir = uniqueURIs.insert((sf->location.empty() ? "" : sf->location + '/') + sf->name); if (!ir.second) { // found duplicate URI: remove all the .raw sourceFiles (leave only the mzXML) SourceFilePtr firstSourceFile = msd.fileDescription.sourceFilePtrs[0]; msd.fileDescription.sourceFilePtrs.assign(1, firstSourceFile); break; } } // add nativeID type and source file type to the remaining source files set uniqueIDs; BOOST_FOREACH(SourceFilePtr& sf, msd.fileDescription.sourceFilePtrs) { CVID sourceFileType = translate_parentFilenameToSourceFileType(sf->name); // TODO: if sourceFileType is CVID_Unknown, log a warning sf->set(sourceFileType); sf->set(translateSourceFileTypeToNativeIdFormat(sourceFileType)); if (sourceFileType == MS_Bruker_FID_format || sourceFileType == MS_SCIEX_TOF_TOF_T2D_format) { // each source file is translated to a run ID and added to a set of potential ids; // if they all have a common prefix, that is used as the id, otherwise it stays empty string runId = translate_SourceFileTypeToRunID(*sf, sourceFileType); if (!runId.empty()) uniqueIDs.insert(runId); } else { if (msd.id.empty()) msd.id = msd.run.id = translate_SourceFileTypeToRunID(*sf, sourceFileType); } } string lcp = longestCommonPrefix(uniqueIDs); if (!lcp.empty()) { // part of the prefix after the source name might need to be trimmed off, e.g.: // path/to/source/1A/1/1SRef/fid, path/to/source/1B/1/1SRef/fid, lcp: path/to/source/1, run id: source (not "1") // path/to/source/1A/1/1SRef/fid, path/to/source/2A/1/1SRef/fid, lcp: path/to/source/, run id: source if (*lcp.rbegin() == '/') msd.id = msd.run.id = BFS_STRING(bfs::path(lcp).leaf()); else msd.id = msd.run.id = BFS_STRING(bfs::path(lcp).parent_path().leaf()); } } struct Handler_msInstrument : public SAXParser::Handler { InstrumentConfiguration* instrumentConfiguration; Handler_msInstrument(MSData& msd, const CVTranslator& cvTranslator) : instrumentConfiguration(0), msd_(msd), cvTranslator_(cvTranslator) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!instrumentConfiguration) throw runtime_error("[Serializer_mzXML::Handler_msInstrument] Null instrumentConfiguration."); string value; getAttribute(attributes, "value", value); if (name=="msInstrument") { manufacturer_ = model_ = ionisation_ = analyzer_ = detector_ = ""; return Status::Ok; } else if (name == "instrument") // older mzXML { manufacturer_ = model_ = ionisation_ = analyzer_ = detector_ = ""; getAttribute(attributes, "manufacturer", manufacturer_); getAttribute(attributes, "model", model_); getAttribute(attributes, "ionisation", ionisation_); getAttribute(attributes, "msType", analyzer_); return Status::Ok; } else if (name == "msManufacturer") { manufacturer_ = value; return Status::Ok; } else if (name == "msModel") { model_ = value; return Status::Ok; } else if (name == "msIonisation") { ionisation_ = value; return Status::Ok; } else if (name == "msMassAnalyzer") { analyzer_ = value; return Status::Ok; } else if (name == "msDetector") { detector_ = value; return Status::Ok; } else if (name == "msResolution") { // TODO: use this to set instrument resolution? return Status::Ok; } else if (name == "software") { string type, name, version; getAttribute(attributes, "type", type); getAttribute(attributes, "name", name); getAttribute(attributes, "version", version); instrumentConfiguration->softwarePtr = registerSoftware(msd_, type, name, version, cvTranslator_); return Status::Ok; } else if (name == "operator") { // TODO: use this to make a Contact return Status::Ok; } else if (name == "nameValue") { // TODO: use this? return Status::Ok; } else if (name == "comment") { // TODO: use this? return Status::Ok; } throw runtime_error(("[SpectrumList_mzXML::Handler_msInstrument] Unexpected element name: " + name).c_str()); } virtual Status endElement(const string& name, stream_offset position) { if (name=="msInstrument" || name=="instrument") { if (!instrumentConfiguration) throw runtime_error("[Serializer_mzXML::Handler_msInstrument] Null instrumentConfiguration."); instrumentConfiguration->componentList.push_back(Component(ComponentType_Source, 1)); instrumentConfiguration->componentList.push_back(Component(ComponentType_Analyzer, 1)); instrumentConfiguration->componentList.push_back(Component(ComponentType_Detector, 1)); LegacyAdapter_Instrument adapter(*instrumentConfiguration, cvTranslator_); adapter.manufacturerAndModel(manufacturer_, model_); if(adapter.model() == "LTQ Orbitrap XL" && analyzer_ == "FTMS") analyzer_ = "orbitrap"; // hack to set analyzer_ correctly for LTQ ORBI adapter.ionisation(ionisation_); adapter.analyzer(analyzer_); adapter.detector(detector_); } return Status::Ok; } private: MSData& msd_; const CVTranslator& cvTranslator_; string manufacturer_; string model_; string ionisation_; string analyzer_; string detector_; }; struct Handler_dataProcessing : public SAXParser::Handler { bool hasCentroidDataProcessing; Handler_dataProcessing(MSData& msd, const CVTranslator& cvTranslator) : hasCentroidDataProcessing(false), msd_(msd), cvTranslator_(cvTranslator) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "dataProcessing") { string centroided, deisotoped; getAttribute(attributes, "centroided", centroided); getAttribute(attributes, "deisotoped", deisotoped); hasCentroidDataProcessing = centroided == "1"; // TODO: term for charge-deconvolution? if (hasCentroidDataProcessing || deisotoped == "1") { DataProcessingPtr dpPtr(new DataProcessing("dataProcessing")); msd_.dataProcessingPtrs.push_back(dpPtr); ProcessingMethod method; method.order = 0; if (hasCentroidDataProcessing) method.set(MS_peak_picking); if (deisotoped == "1") method.set(MS_deisotoping); dpPtr->processingMethods.push_back(method); } return Status::Ok; } else if (name == "software") { string type, name, version; getAttribute(attributes, "type", type); getAttribute(attributes, "name", name); getAttribute(attributes, "version", version); registerSoftware(msd_, type, name, version, cvTranslator_); return Status::Ok; } else if (name == "processingOperation") { // ignore its only attribute, which is "comment" return Status::Ok; } else if (name == "comment") { // just ignore return Status::Ok; } throw runtime_error(("[Serializer_mzXML::Handler_dataProcessing] Unexpected element name: " + name).c_str()); } private: MSData& msd_; const CVTranslator& cvTranslator_; }; class Handler_mzXML : public SAXParser::Handler { public: bool hasCentroidDataProcessing; Handler_mzXML(MSData& msd, const CVTranslator& cvTranslator) : msd_(msd), handler_msInstrument_(msd, cvTranslator), handler_dataProcessing_(msd, cvTranslator) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "mzXML" || name == "msRun") { return Status::Ok; } else if (name == "parentFile") { string fileName, fileType, fileSha1; getAttribute(attributes, "fileName", fileName); getAttribute(attributes, "fileType", fileType); getAttribute(attributes, "fileSha1", fileSha1); process_parentFile(fileName, fileType, fileSha1, msd_); return Status::Ok; } else if (name=="msInstrument" || name=="instrument") { string id; getAttribute(attributes, "msInstrumentID", id); if (id.empty()) getAttribute(attributes, "id", id); if (id.empty()) getAttribute(attributes, "ID", id); // hack: id or ID if (id.empty()) id = "IC1"; // xml:ID cannot be empty msd_.instrumentConfigurationPtrs.push_back(InstrumentConfigurationPtr(new InstrumentConfiguration(id))); handler_msInstrument_.instrumentConfiguration = msd_.instrumentConfigurationPtrs.back().get(); return Status(Status::Delegate, &handler_msInstrument_); } else if (name == "dataProcessing") { return Status(Status::Delegate, &handler_dataProcessing_); } else if (name == "scan" || name == "index" || name == "sha1") { // all file-level metadata has been parsed, but there are some gaps to fill fillInMetadata(msd_); hasCentroidDataProcessing = handler_dataProcessing_.hasCentroidDataProcessing; return Status::Done; } throw runtime_error(("[Serializer_mzXML::Handler_mzXML] Unexpected element name: " + name).c_str()); } private: MSData& msd_; Handler_msInstrument handler_msInstrument_; Handler_dataProcessing handler_dataProcessing_; }; } // namespace void Serializer_mzXML::Impl::read(shared_ptr is, MSData& msd) const { if (!is.get() || !*is) throw runtime_error("[Serializer_mzXML::read()] Bad istream."); is->seekg(0); Handler_mzXML handler(msd, cvTranslator_); SAXParser::parse(*is, handler); msd.run.spectrumListPtr = SpectrumList_mzXML::create(is, msd, config_.indexed); HandlerScanFileContent handlerScanFileContent(msd, handler.hasCentroidDataProcessing); for (size_t i=0; i < msd.run.spectrumListPtr->size(); ++i) { bio::stream_offset offset = msd.run.spectrumListPtr->spectrumIdentity(i).sourceFilePosition; is->seekg(bio::offset_to_position(offset)); SAXParser::parse(*is, handlerScanFileContent); } } // // Serializer_mzXML // PWIZ_API_DECL Serializer_mzXML::Serializer_mzXML(const Config& config) : impl_(new Impl(config)) {} PWIZ_API_DECL void Serializer_mzXML::write(ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry, bool useWorkerThreads) const { return impl_->write(os, msd, iterationListenerRegistry, useWorkerThreads); } PWIZ_API_DECL void Serializer_mzXML::read(shared_ptr is, MSData& msd) const { return impl_->read(is, msd); } PWIZ_API_DECL ostream& operator<<(ostream& os, const Serializer_mzXML::Config& config) { os << config.binaryDataEncoderConfig << " indexed=\"" << boolalpha << config.indexed << "\""; return os; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/Serializer_mzXML.hpp000066400000000000000000000046631444255175000237500ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SERIALIZER_MZXML_HPP_ #define _SERIALIZER_MZXML_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "BinaryDataEncoder.hpp" #include "pwiz/utility/misc/IterationListener.hpp" namespace pwiz { namespace msdata { /// MSData <-> mzXML stream serialization class PWIZ_API_DECL Serializer_mzXML { public: /// Serializer_mzXML configuration struct PWIZ_API_DECL Config { /// configuration for binary data encoding in write() /// note: byteOrder is ignored (mzXML always big endian) BinaryDataEncoder::Config binaryDataEncoderConfig; /// (indexed==true): read/write with bool indexed; Config() : indexed(true) {} }; /// constructor Serializer_mzXML(const Config& config = Config()); /// write MSData object to ostream as mzXML; /// iterationListenerRegistry may be used to receive progress updates void write(std::ostream& os, const MSData& msd, const pwiz::util::IterationListenerRegistry* iterationListenerRegistry = 0, bool useWorkerThreads = true) const; /// read in MSData object from an mzXML istream /// note: istream may be managed by MSData's SpectrumList, to allow for /// lazy evaluation of Spectrum data void read(boost::shared_ptr is, MSData& msd) const; private: class Impl; boost::shared_ptr impl_; Serializer_mzXML(Serializer_mzXML&); Serializer_mzXML& operator=(Serializer_mzXML&); }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Serializer_mzXML::Config& config); } // namespace msdata } // namespace pwiz #endif // _SERIALIZER_MZXML_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumInfo.cpp000066400000000000000000000120431444255175000231500ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "SpectrumInfo.hpp" #include "pwiz/utility/misc/Exception.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace msdata { PWIZ_API_DECL SpectrumInfo::SpectrumInfo() : index((size_t)-1), scanNumber(0), massAnalyzerType(CVID_Unknown), scanEvent(0), msLevel(0), isZoomScan(false), retentionTime(0), mzLow(0), mzHigh(0), basePeakMZ(0), basePeakIntensity(0), totalIonCurrent(0), thermoMonoisotopicMZ(0), ionInjectionTime(0) {} PWIZ_API_DECL SpectrumInfo::SpectrumInfo(const Spectrum& spectrum) : index((size_t)-1), scanNumber(0), massAnalyzerType(CVID_Unknown), scanEvent(0), msLevel(0), isZoomScan(false), retentionTime(0), mzLow(0), mzHigh(0), basePeakMZ(0), basePeakIntensity(0), totalIonCurrent(0), thermoMonoisotopicMZ(0), ionInjectionTime(0) { update(spectrum); } PWIZ_API_DECL void SpectrumInfo::update(const Spectrum& spectrum, bool getBinaryData) { *this = SpectrumInfo(); clearBinaryData(); id = spectrum.id; index = spectrum.index; scanNumber = id::valueAs(spectrum.id, "scan"); Scan dummy; const Scan& scan = spectrum.scanList.scans.empty() ? dummy : spectrum.scanList.scans[0]; massAnalyzerType = CVID_Unknown; if (scan.instrumentConfigurationPtr.get()) try { massAnalyzerType = scan.instrumentConfigurationPtr->componentList.analyzer(0) .cvParamChild(MS_mass_analyzer_type).cvid; } catch (out_of_range&) { // ignore out-of-range exception } scanEvent = scan.cvParam(MS_preset_scan_configuration).valueAs(); msLevel = spectrum.cvParam(MS_ms_level).valueAs(); isZoomScan = spectrum.hasCVParam(MS_zoom_scan); retentionTime = scan.cvParam(MS_scan_start_time).timeInSeconds(); filterString = scan.cvParam(MS_filter_string).value; mzLow = spectrum.cvParam(MS_lowest_observed_m_z).valueAs(); mzHigh = spectrum.cvParam(MS_highest_observed_m_z).valueAs(); basePeakMZ = spectrum.cvParam(MS_base_peak_m_z).valueAs(); basePeakIntensity = spectrum.cvParam(MS_base_peak_intensity).valueAs(); totalIonCurrent = spectrum.cvParam(MS_total_ion_current).valueAs(); ionInjectionTime = scan.cvParam(MS_ion_injection_time).valueAs(); UserParam userParamMonoisotopicMZ = scan.userParam("[Thermo Trailer Extra]Monoisotopic M/Z:"); if (!userParamMonoisotopicMZ.name.empty()) thermoMonoisotopicMZ = userParamMonoisotopicMZ.valueAs(); for (vector::const_iterator it=spectrum.precursors.begin(); it!=spectrum.precursors.end(); ++it) { PrecursorInfo precursorInfo; precursorInfo.index = 0; // TODO if (!it->selectedIons.empty()) { precursorInfo.mz = it->selectedIons[0].cvParam(MS_selected_ion_m_z).valueAs(); precursorInfo.charge = it->selectedIons[0].cvParam(MS_charge_state).valueAs(); precursorInfo.intensity = it->selectedIons[0].cvParam(MS_peak_intensity).valueAs(); } precursors.push_back(precursorInfo); } dataSize = spectrum.defaultArrayLength; if (getBinaryData && !spectrum.binaryDataArrayPtrs.empty()) spectrum.getMZIntensityPairs(data); } PWIZ_API_DECL void SpectrumInfo::clearBinaryData() { vector nothing; data.swap(nothing); } PWIZ_API_DECL string SpectrumInfo::massAnalyzerTypeAbbreviation() const { string result = "Unknown"; if (cvIsA(massAnalyzerType, MS_ion_trap)) result = "IonTrap"; else if (massAnalyzerType == MS_FT_ICR) result = "FT"; else if (massAnalyzerType == MS_orbitrap) result = "Orbitrap"; return result; } PWIZ_API_DECL double SpectrumInfo::mzFromFilterString() const { istringstream iss(filterString); vector tokens; copy(istream_iterator(iss), istream_iterator(), back_inserter(tokens)); for (vector::const_iterator it=tokens.begin(), end=tokens.end(); it!=end; ++it) { string::size_type at = it->find("@"); if (at != string::npos) return lexical_cast(it->substr(0,at)); } return 0; } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumInfo.hpp000066400000000000000000000041371444255175000231620ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMINFO_HPP_ #define _SPECTRUMINFO_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" namespace pwiz { namespace msdata { /// simple structure for holding Spectrum info struct PWIZ_API_DECL SpectrumInfo { /// structure for Precursor info struct PWIZ_API_DECL PrecursorInfo { size_t index; double mz; double intensity; double charge; PrecursorInfo() : index((size_t)-1), mz(0), intensity(0), charge(0) {} }; size_t index; std::string id; int scanNumber; CVID massAnalyzerType; int scanEvent; int msLevel; bool isZoomScan; double retentionTime; // seconds std::string filterString; double mzLow; double mzHigh; double basePeakMZ; double basePeakIntensity; double totalIonCurrent; double thermoMonoisotopicMZ; double ionInjectionTime; std::vector precursors; size_t dataSize; std::vector data; SpectrumInfo(); SpectrumInfo(const Spectrum& spectrum); void update(const Spectrum& spectrum, bool getBinaryData = false); void clearBinaryData(); // some helper functions std::string massAnalyzerTypeAbbreviation() const; double mzFromFilterString() const; }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMINFO_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumIterator.hpp000066400000000000000000000100171444255175000240520ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMITERATOR_HPP_ #define _SPECTRUMITERATOR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "pwiz/utility/misc/IntegerSet.hpp" namespace pwiz { namespace msdata { using pwiz::util::IntegerSet; /// /// SpectrumIterator provides convenient iteration through a set of scans in a SpectrumList. /// /// Its behavior is similar to istream_iterator. In particular: /// - the default constructed SpectrumIterator() is a past-the-end marker /// - references to the current Spectrum are invalidated by preincrement /// /// Because SpectrumIterator holds a copy of the current Spectrum internally, /// copy assignment and postincrement have been disabled. /// /// Iteration may be customized in a number of ways: /// - clients may specify an IntegerSet of scan numbers through which to iterate. /// - clients may specify a Sieve to filter based on Spectrum fields. /// - clients may specify whether binary data is retrieved in the Spectrum object (default==true) /// /// For usage examples, see SpectrumIteratorTest.cpp /// class PWIZ_API_DECL SpectrumIterator { public: /// interface for filtering based on ScanInfo class PWIZ_API_DECL Sieve { public: virtual bool accept(const Spectrum& spectrum) const {return true;} virtual ~Sieve(){} }; /// SpectrumIterator configuration -- note that constructors allow automatic /// conversion from IntegerSet or Sieve to Config struct PWIZ_API_DECL Config { const IntegerSet* scanNumbers; const Sieve* sieve; bool getBinaryData; Config() : scanNumbers(0), sieve(0), getBinaryData(true) {} Config(const IntegerSet& _scanNumbers, bool _getBinaryData = true) : scanNumbers(&_scanNumbers), sieve(0), getBinaryData(_getBinaryData) {} Config(const Sieve& _sieve, bool _getBinaryData = true) : scanNumbers(0), sieve(&_sieve), getBinaryData(_getBinaryData) {} }; /// special default object for marking past-the-end SpectrumIterator(); /// constructor for normal initialization of the iterator SpectrumIterator(const SpectrumList& spectrumList, const Config& config = Config()); /// constructor using MSData object SpectrumIterator(const MSData& msd, const Config& config = Config()); /// copy constructor SpectrumIterator(const SpectrumIterator&); /// \name input iterator interface //@{ SpectrumIterator& operator++(); const Spectrum& operator*() const; const Spectrum* operator->() const; bool operator==(const SpectrumIterator& that) const; bool operator!=(const SpectrumIterator& that) const; //@} /// \name standard iterator typedefs //@{ typedef std::input_iterator_tag iterator_category; typedef Spectrum value_type; typedef int difference_type; typedef value_type* pointer; typedef value_type& reference; //@} private: class Impl; boost::shared_ptr impl_; /// no copying SpectrumIterator& operator=(const SpectrumIterator&); /// don't do this -- avoid temporary copy SpectrumIterator operator++(int); }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMITERATOR_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumListBase.cpp000066400000000000000000000071051444255175000237660ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers vanderbilt.edu> // // Copyright 2020 Matt Chambers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "SpectrumListBase.hpp" #include "pwiz/utility/misc/String.hpp" #include #include namespace { boost::mutex m; } PWIZ_API_DECL void pwiz::msdata::SpectrumListBase::warn_once(const char * msg) const { boost::lock_guard g(m); if (warn_msg_hashes_.insert(hash(msg)).second) // .second is true iff value is new std::cerr << msg << std::endl; } PWIZ_API_DECL size_t pwiz::msdata::SpectrumListBase::checkNativeIdFindResult(size_t result, const std::string& id) const { if (result < size() || size() == 0) return result; if (id.empty()) return size(); try { const auto& firstId = spectrumIdentity(0).id; bool triedToFindScanByIndex = bal::starts_with(firstId, "scan=") && bal::starts_with(id, "index="); bool triedToFindIndexByScan = bal::starts_with(firstId, "index=") && bal::starts_with(id, "scan="); // HACK: special behavior if actual ids are scan/index and searched ids are index/scan (respectively) if (triedToFindScanByIndex) return find("scan=" + pwiz::util::toString(lexical_cast(pwiz::msdata::id::value(id, "index")) + 1)); else if (triedToFindIndexByScan) return find("index=" + pwiz::util::toString(lexical_cast(pwiz::msdata::id::value(id, "scan")) - 1)); else { boost::lock_guard g(m); // early exit if warning already issued, to avoid potentially doing these calculations for thousands of ids if (!warn_msg_hashes_.insert(spectrum_id_mismatch_hash_).second) return size(); } auto actualId = pwiz::msdata::id::parse(firstId); auto actualIdKeys = actualId | boost::adaptors::map_keys; auto actualIdKeySet = std::set(actualIdKeys.begin(), actualIdKeys.end()); auto expectedId = pwiz::msdata::id::parse(id); auto expectedIdKeys = expectedId | boost::adaptors::map_keys; auto expectedIdKeySet = std::set(expectedIdKeys.begin(), expectedIdKeys.end()); std::vector missingIdKeys; std::set_symmetric_difference(expectedIdKeySet.begin(), expectedIdKeySet.end(), actualIdKeySet.begin(), actualIdKeySet.end(), std::back_inserter(missingIdKeys)); if (!missingIdKeys.empty()) warn_once(("[SpectrumList::find] mismatch between spectrum id format of the file (" + firstId + ") and the looked-up id (" + id + ")").c_str()); return size(); } catch (std::exception& e) { warn_once((std::string("[SpectrumList::find] error checking for spectrum id conformance: ") + e.what()).c_str()); // TODO: log exception return size(); } } size_t pwiz::msdata::SpectrumListBase::hash(const char* msg) const { return boost::hash_range(msg, msg + strlen(msg)); }libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumListBase.hpp000066400000000000000000000057051444255175000237770ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2009 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLISTBASE_HPP_ #define _SPECTRUMLISTBASE_HPP_ #include "pwiz/data/msdata/MSData.hpp" #include "pwiz/utility/misc/IntegerSet.hpp" #include #include #include #include namespace pwiz { namespace msdata { /// common functionality for base SpectrumList implementations class PWIZ_API_DECL SpectrumListBase : public SpectrumList { public: SpectrumListBase() : MSLevelsNone(), /*hash_(),*/ spectrum_id_mismatch_hash_(hash("spectrum id mismatch")) {}; /// implementation of SpectrumList virtual const boost::shared_ptr dataProcessingPtr() const {return dp_;} /// set DataProcessing virtual void setDataProcessingPtr(DataProcessingPtr dp) { dp_ = dp; } /// issues a warning once per SpectrumList instance (based on string hash) virtual void warn_once(const char* msg) const; protected: // when find() fails to find a spectrum id, check whether the id fields of the input id and the spectrum list are matching size_t checkNativeIdFindResult(size_t result, const std::string& id) const; DataProcessingPtr dp_; // Useful for avoiding repeated ctor when you just want an empty set const pwiz::util::IntegerSet MSLevelsNone; private: size_t hash(const char*) const; mutable std::set warn_msg_hashes_; // for warn_once use //boost::hash hash_; size_t spectrum_id_mismatch_hash_; }; class PWIZ_API_DECL SpectrumListIonMobilityBase : public SpectrumListBase { public: virtual bool hasIonMobility() const = 0; virtual bool hasCombinedIonMobility() const = 0; // Returns true if IM data is returned in 3-array format // CONSIDER: should this be in the interface? virtual bool hasPASEF() const = 0; virtual bool canConvertIonMobilityAndCCS() const = 0; virtual double ionMobilityToCCS(double ionMobility, double mz, int charge) const = 0; virtual double ccsToIonMobility(double ccs, double mz, int charge) const = 0; }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMLISTBASE_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumListCache.hpp000066400000000000000000000043311444255175000241220ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLISTCACHE_HPP_ #define _SPECTRUMLISTCACHE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "MemoryMRUCache.hpp" #include "SpectrumListWrapper.hpp" namespace pwiz { namespace msdata { /// adds a level of flexible MRU caching to a SpectrumList processor chain class PWIZ_API_DECL SpectrumListCache : public SpectrumListWrapper { public: /// a cache mapping spectrum indices to SpectrumPtrs struct CacheEntry { CacheEntry(size_t i, SpectrumPtr s) : index(i), spectrum(s) {}; size_t index; SpectrumPtr spectrum; }; typedef MemoryMRUCache CacheType; SpectrumListCache(const SpectrumListPtr& inner, MemoryMRUCacheMode cacheMode, size_t cacheSize); /// returns the requested spectrum which may or may not be cached depending on /// the current cache mode virtual SpectrumPtr spectrum(size_t index, bool getBinaryData = false) const; /// returns a reference to the cache, to enable clearing it or changing the mode CacheType& spectrumCache(); /// returns a const-reference to the cache const CacheType& spectrumCache() const; protected: mutable CacheType spectrumCache_; private: SpectrumListCache(SpectrumListCache&); SpectrumListCache& operator=(SpectrumListCache&); }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMLISTCACHE_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumListWrapper.hpp000066400000000000000000000062331444255175000245420ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLISTWRAPPER_HPP_ #define _SPECTRUMLISTWRAPPER_HPP_ #include "pwiz/data/msdata/SpectrumListBase.hpp" #include #include namespace pwiz { namespace msdata { /// Inheritable pass-through implementation for wrapping a SpectrumList class PWIZ_API_DECL SpectrumListWrapper : public SpectrumListBase { public: SpectrumListWrapper(const SpectrumListPtr& inner) : inner_(inner) { if (!inner.get()) throw std::runtime_error("[SpectrumListWrapper] Null SpectrumListPtr."); dp_.reset(inner->dataProcessingPtr().get() ? new DataProcessing(*inner->dataProcessingPtr()) : new DataProcessing("pwiz_Spectrum_Processing")); } virtual size_t size() const {return inner_->size();} virtual bool empty() const {return size() == 0;} virtual const SpectrumIdentity& spectrumIdentity(size_t index) const {return inner_->spectrumIdentity(index);} // no default implementation, because otherwise subclasses could override the DetailLevel overload and the getBinaryData overload would be inconsistent virtual SpectrumPtr spectrum(size_t index, bool getBinaryData = false) const = 0; virtual SpectrumPtr spectrum(size_t index, DetailLevel detailLevel) const {return spectrum(index, detailLevel == DetailLevel_FullData);} virtual const boost::shared_ptr dataProcessingPtr() const {return dp_;} SpectrumListPtr inner() const {return inner_;} SpectrumListPtr innermost() const { if(dynamic_cast(&*inner_)) return dynamic_cast(&*inner_)->innermost(); else return inner(); } /// return true if either the wrapper implementation would benefit from using multiple threads, or if the inner wrapped list would virtual bool benefitsFromWorkerThreads() const { return innerBenefitsFromWorkerThreads(); } protected: SpectrumListPtr inner_; bool innerBenefitsFromWorkerThreads() const { auto innerAsWrapper = boost::dynamic_pointer_cast(inner_); return innerAsWrapper != nullptr ? innerAsWrapper->benefitsFromWorkerThreads() : false; } }; typedef boost::shared_ptr SpectrumListWrapperPtr; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMLISTWRAPPER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumList_BTDX.cpp000066400000000000000000000267241444255175000240240ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "SpectrumList_BTDX.hpp" #include "References.hpp" #include "pwiz/utility/minimxml/SAXParser.hpp" #include "pwiz/utility/misc/Std.hpp" #include namespace pwiz { namespace msdata { using namespace pwiz::minimxml; using namespace pwiz::util; using boost::iostreams::stream_offset; using boost::iostreams::offset_to_position; namespace { class SpectrumList_BTDXImpl : public SpectrumList_BTDX { public: SpectrumList_BTDXImpl(shared_ptr is, const MSData& msd); // SpectrumList implementation virtual size_t size() const {return index_.size();} virtual const SpectrumIdentity& spectrumIdentity(size_t index) const; virtual size_t find(const string& id) const; virtual size_t findNative(const string& nativeID) const; virtual SpectrumPtr spectrum(size_t index, bool getBinaryData) const; private: shared_ptr is_; const MSData& msd_; vector index_; map idToIndex_; mutable vector spectrumCache_; mutable boost::mutex readMutex; void createIndex(); void createMaps(); }; SpectrumList_BTDXImpl::SpectrumList_BTDXImpl(shared_ptr is, const MSData& msd) : is_(is), msd_(msd) { createIndex(); createMaps(); spectrumCache_.resize(index_.size()); } const SpectrumIdentity& SpectrumList_BTDXImpl::spectrumIdentity(size_t index) const { if (index > index_.size()) throw runtime_error("[SpectrumList_BTDX::spectrumIdentity()] Index out of bounds."); return index_[index]; } size_t SpectrumList_BTDXImpl::find(const string& id) const { map::const_iterator it=idToIndex_.find(id); return it!=idToIndex_.end() ? it->second : checkNativeIdFindResult(size(), id); } size_t SpectrumList_BTDXImpl::findNative(const string& nativeID) const { return find(nativeID); } class HandlerPeaks : public SAXParser::Handler { public: HandlerPeaks(Spectrum& spectrum, bool getBinaryData, BinaryData& mzArray, BinaryData& iArray) : spectrum_(spectrum), mzArray_(mzArray), iArray_(iArray), totalIntensity_(0), basePeakIntensity_(0), getBinaryData_(getBinaryData) { spectrum_.defaultArrayLength = 0; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "pk") { string mz, i, sn, z; getAttribute(attributes, "mz", mz); getAttribute(attributes, "i", i); //getAttribute(attributes, "sn", sn); //getAttribute(attributes, "z", z); double mzValue = lexical_cast(mz); double iValue = lexical_cast(i); //double snValue = lexical_cast(sn); //int zValue = lexical_cast(z); if (getBinaryData_) { mzArray_.push_back(mzValue); iArray_.push_back(iValue); } ++spectrum_.defaultArrayLength; totalIntensity_ += iValue; if (iValue > basePeakIntensity_) { basePeakMz_ = mzValue; basePeakIntensity_ = iValue; } return Status::Ok; } else if (name == "ms_peaks") { return Status::Ok; } throw runtime_error(("[SpectrumList_BTDX::HandlerPeaks] Unexpected element name: " + name).c_str()); } virtual Status endElement(const string& name, stream_offset position) { if (name == "ms_peaks") { spectrum_.set(MS_TIC, totalIntensity_); spectrum_.set(MS_base_peak_m_z, basePeakMz_); spectrum_.set(MS_base_peak_intensity, basePeakIntensity_); return Status::Done; } return Status::Ok; } private: Spectrum& spectrum_; BinaryData& mzArray_; BinaryData& iArray_; double totalIntensity_; double basePeakMz_; double basePeakIntensity_; bool getBinaryData_; }; class HandlerCompound : public SAXParser::Handler { public: HandlerCompound(const MSData& msd, Spectrum& spectrum, bool getBinaryData) : msd_(msd), spectrum_(spectrum), getBinaryData_(getBinaryData) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "cmpd") { string cmpdnr, rt, rt_unit; getAttribute(attributes, "cmpdnr", cmpdnr); getAttribute(attributes, "rt", rt); getAttribute(attributes, "rt_unit", rt_unit); spectrum_.id = cmpdnr; spectrum_.sourceFilePosition = position; if (!rt.empty()) { CVID rtUnits = CVID_Unknown; if (rt_unit == "s") rtUnits = UO_second; else if (rt_unit == "m") rtUnits = UO_minute; else if (rt_unit == "h") rtUnits = UO_hour; spectrum_.scanList.scans.push_back(Scan()); spectrum_.scanList.scans.back().set(MS_scan_start_time, rt, rtUnits); } return Status::Ok; } else if (name == "title") { // WTF is this? return Status::Ok; } else if (name == "precursor") { string mz, i, sn, z, targetPosition, chipPosition; getAttribute(attributes, "mz", mz); getAttribute(attributes, "i", i); //getAttribute(attributes, "sn", sn); getAttribute(attributes, "z", z); getAttribute(attributes, "TargetPosition", targetPosition); getAttribute(attributes, "ChipPosition", chipPosition); if (!targetPosition.empty() && !chipPosition.empty()) spectrum_.spotID = targetPosition + "," + chipPosition; double mzValue = lexical_cast(mz); double iValue = lexical_cast(i); //double snValue = lexical_cast(sn); int zValue = lexical_cast(z); spectrum_.precursors.push_back( Precursor(mzValue, iValue, zValue, MS_number_of_detector_counts)); // TODO: support sn: spectrum_.precursors.back().set(MS_signal_to_noise, sn); return Status::Ok; } else if (name == "ms_spectrum") { string msms_stage; getAttribute(attributes, "msms_stage", msms_stage); if (msms_stage.empty()) spectrum_.set(MS_ms_level, "1"); else spectrum_.set(MS_ms_level, msms_stage); return Status::Ok; } else if (name == "ms_peaks") { spectrum_.setMZIntensityArrays(vector(), vector(), MS_number_of_detector_counts); handlerPeaks_ = shared_ptr( new HandlerPeaks(spectrum_, getBinaryData_, spectrum_.getMZArray()->data, spectrum_.getIntensityArray()->data)); return Status(Status::Delegate, &*handlerPeaks_); } throw runtime_error(("[SpectrumList_BTDX::HandlerCompound] Unexpected element name: " + name).c_str()); } private: const MSData& msd_; Spectrum& spectrum_; bool getBinaryData_; shared_ptr handlerPeaks_; }; SpectrumPtr SpectrumList_BTDXImpl::spectrum(size_t index, bool getBinaryData) const { boost::lock_guard lock(readMutex); // lock_guard will unlock mutex when out of scope or when exception thrown (during destruction) if (index > index_.size()) throw runtime_error("[SpectrumList_BTDX::spectrum()] Index out of bounds."); // returned cached Spectrum if possible if (!getBinaryData && spectrumCache_[index].get()) return spectrumCache_[index]; // allocate Spectrum object and read it in SpectrumPtr result(new Spectrum); if (!result.get()) throw runtime_error("[SpectrumList_BTDX::spectrum()] Out of memory."); result->index = index; result->set(MS_MSn_spectrum); result->set(MS_centroid_spectrum); result->scanList.set(MS_no_combination); result->scanList.scans.push_back(Scan()); //Scan& scan = result->scanList.scans[0]; is_->seekg(offset_to_position(index_[index].sourceFilePosition)); if (!*is_) throw runtime_error("[SpectrumList_BTDX::spectrum()] Error seeking to ."); HandlerCompound handler(msd_, *result, getBinaryData); SAXParser::parse(*is_, handler); // save to cache if no binary data if (!getBinaryData && !spectrumCache_[index].get()) spectrumCache_[index] = result; // resolve any references into the MSData object References::resolve(*result, msd_); return result; } class HandlerIndexCreator : public SAXParser::Handler { public: HandlerIndexCreator(vector& index) : index_(index) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "cmpd") { string cmpdNumber; getAttribute(attributes, "cmpdnr", cmpdNumber); SpectrumIdentity si; si.index = index_.size(); si.id = cmpdNumber; si.sourceFilePosition = position; index_.push_back(si); } return Status::Ok; } virtual Status endElement(const string& name, stream_offset position) { if (name == "compounds") return Status::Done; return Status::Ok; } private: vector& index_; }; void SpectrumList_BTDXImpl::createIndex() { is_->seekg(0); HandlerIndexCreator handler(index_); SAXParser::parse(*is_, handler); } void SpectrumList_BTDXImpl::createMaps() { vector::const_iterator it=index_.begin(); for (unsigned int i=0; i!=index_.size(); ++i, ++it) idToIndex_[it->id] = i; } } // namespace SpectrumListPtr SpectrumList_BTDX::create(boost::shared_ptr is, const MSData& msd) { return SpectrumListPtr(new SpectrumList_BTDXImpl(is, msd)); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumList_BTDX.hpp000066400000000000000000000026421444255175000240220ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLIST_BTDX_HPP_ #define _SPECTRUMLIST_BTDX_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "SpectrumListBase.hpp" #include #include namespace pwiz { namespace msdata { /// SpectrumList backed by a Bruker BioTools DataExchange XML file class PWIZ_API_DECL SpectrumList_BTDX : public SpectrumListBase { public: static SpectrumListPtr create(boost::shared_ptr is, const MSData& msd); }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMLIST_BTDX_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumList_MGF.cpp000066400000000000000000000412241444255175000236640ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "SpectrumList_MGF.hpp" #include "References.hpp" #include "pwiz/utility/misc/Std.hpp" #include namespace pwiz { namespace msdata { using boost::iostreams::stream_offset; using boost::iostreams::offset_to_position; using namespace pwiz::util; namespace { class SpectrumList_MGFImpl : public SpectrumList_MGF { public: SpectrumList_MGFImpl(shared_ptr is, const MSData& msd) : is_(is), msd_(msd) { createIndex(); } size_t size() const {return index_.size();} const SpectrumIdentity& spectrumIdentity(size_t index) const { return index_[index]; } size_t find(const string& id) const { map::const_iterator it = idToIndex_.find(id); return it != idToIndex_.end() ? it->second : checkNativeIdFindResult(size(), id); } size_t findNative(const string& nativeID) const { size_t index; try { index = lexical_cast(nativeID); } catch (boost::bad_lexical_cast&) { throw runtime_error("[SpectrumList_MGF::findNative] invalid nativeID format (expected a positive integer)"); } if (index < size()) return index; else return size(); } // returns the IndexList for a given TITLE=string IndexList findSpotID(const string& titleID) const { map::const_iterator it=titleIDToIndexList_.find(titleID); return it!=titleIDToIndexList_.end() ? it->second : IndexList(); } SpectrumPtr spectrum(size_t index, bool getBinaryData) const { boost::lock_guard lock(readMutex); // lock_guard will unlock mutex when out of scope or when exception thrown (during destruction) if (index > index_.size()) throw runtime_error("[SpectrumList_MGF::spectrum] Index out of bounds"); // allocate Spectrum object and read it in SpectrumPtr result(new Spectrum); if (!result.get()) throw runtime_error("[SpectrumList_MGF::spectrum] Out of memory"); result->index = index; result->sourceFilePosition = index_[index].sourceFilePosition; is_->seekg(bio::offset_to_position(result->sourceFilePosition)); if (!*is_) throw runtime_error("[SpectrumList_MGF::spectrum] Error seeking to BEGIN IONS tag"); parseSpectrum(*result, getBinaryData); // resolve any references into the MSData object References::resolve(*result, msd_); return result; } private: shared_ptr is_; const MSData& msd_; vector index_; map idToIndex_; map titleIDToIndexList_; mutable boost::mutex readMutex; void parseSpectrum(Spectrum& spectrum, bool getBinaryData) const { // Every MGF spectrum is assumed to be: // * MSn spectrum // * MS level 2 // * from a single precursor // * a peak list (centroided) // * not deisotoped (even though it may actually be, there's no way to tell) spectrum.id = "index=" + lexical_cast(spectrum.index); spectrum.set(MS_MSn_spectrum); spectrum.set(MS_ms_level, 2); spectrum.set(MS_centroid_spectrum); spectrum.scanList.set(MS_no_combination); spectrum.scanList.scans.push_back(Scan()); Scan& scan = spectrum.scanList.scans[0]; spectrum.precursors.push_back(Precursor()); Precursor& precursor = spectrum.precursors.back(); precursor.selectedIons.push_back(SelectedIon()); SelectedIon& selectedIon = precursor.selectedIons.back(); string lineStr; bool inBeginIons = false; bool inPeakList = false; bool negativePolarity = false; double lowMZ = std::numeric_limits::max(); double highMZ = 0; double tic = 0; double basePeakMZ = 0; double basePeakIntensity = 0; spectrum.defaultArrayLength = 0; spectrum.setMZIntensityArrays(vector(), vector(), MS_number_of_detector_counts); BinaryData& mzArray = spectrum.getMZArray()->data; BinaryData& intensityArray = spectrum.getIntensityArray()->data; while (getlinePortable(*is_, lineStr)) { size_t lineBegin = lineStr.find_first_not_of(" \t"); if (lineBegin == string::npos) { // Skip blank lines continue; } else if (lineBegin > 0) { // Trim leading whitespace lineStr.erase(0, lineBegin); } if (!inBeginIons && (lineStr[0] == '#' || lineStr[0] == ';' || lineStr[0] == '!' || lineStr[0] == '/')) { // Skip comment lines (lines beginning with #;!/ outside of BEGIN IONS) continue; } if (lineStr.find("BEGIN IONS") == 0) { if (inBeginIons) { throw runtime_error(("[SpectrumList_MGF::parseSpectrum] BEGIN IONS tag found without previous BEGIN IONS being closed at offset " + lexical_cast(size_t(is_->tellg())-lineStr.length()-1) + "\n")); } inBeginIons = true; } else if (lineStr.find("END IONS") == 0) { if (!inBeginIons) throw runtime_error(("[SpectrumList_MGF::parseSpectrum] END IONS tag found without opening BEGIN IONS tag at offset " + lexical_cast(size_t(is_->tellg())-lineStr.length()-1) + "\n")); inBeginIons = false; inPeakList = false; break; } else { try { if (!inPeakList) { size_t delim = lineStr.find('='); if (delim == string::npos) { inPeakList = true; } else { string name = lineStr.substr(0, delim); string value = lineStr.substr(delim+1); if (name == "TITLE") { bal::trim(value); // Some formats omit RTINSECONDS and store the retention time // in the title field instead. double scanTimeMin = getRetentionTimeFromTitle(value); if (scanTimeMin > 0) scan.set(MS_scan_start_time, scanTimeMin * 60, UO_second); spectrum.set(MS_spectrum_title, value); } else if (name == "PEPMASS") { bal::trim(value); size_t delim2 = value.find(' '); if (delim2 != string::npos) { selectedIon.set(MS_selected_ion_m_z, value.substr(0, delim2), MS_m_z); selectedIon.set(MS_peak_intensity, value.substr(delim2+1), MS_number_of_detector_counts); } else selectedIon.set(MS_selected_ion_m_z, value, MS_m_z); } else if (name == "CHARGE") { bal::trim_if(value, bal::is_any_of(" \t\r")); negativePolarity = bal::ends_with(value, "-"); vector charges; bal::split(charges, value, bal::is_any_of(" ")); if (charges.size() > 1) { BOOST_FOREACH(string& charge, charges) if (charge != "and") { bal::trim_if(charge, bal::is_any_of("+-")); selectedIon.cvParams.push_back(CVParam(MS_possible_charge_state, lexical_cast(charge))); } } else { bal::trim_if(value, bal::is_any_of("+-")); selectedIon.set(MS_charge_state, lexical_cast(value)); } } else if (name == "RTINSECONDS") { bal::trim(value); // TODO: handle (multiple) time ranges? double scanTime = lexical_cast(value); scan.set(MS_scan_start_time, scanTime, UO_second); } else if (name == "SCANS") { spectrum.set(MS_peak_list_scans, value); } else if (name == "RAWSCANS") { spectrum.set(MS_peak_list_raw_scans, value); } else { continue; // ignored attribute } } } } catch(bad_lexical_cast&) { throw runtime_error(("[SpectrumList_MGF::parseSpectrum] Error parsing line at offset " + lexical_cast(size_t(is_->tellg())-lineStr.length()-1) + ": " + lineStr + "\n")); } if (inPeakList) { // always parse the peaks (intensity must be summed to build TIC) size_t delim = lineStr.find_first_of(" \t"); if(delim == string::npos) continue; size_t delim2 = lineStr.find_first_not_of(" \t", delim+1); if(delim2 == string::npos) continue; size_t delim3 = lineStr.find_first_of(" \t\r\n", delim2); if(delim3 == string::npos) delim3 = lineStr.length(); double mz = lexical_cast(lineStr.substr(0, delim)); double inten = lexical_cast(lineStr.substr(delim2, delim3-delim2)); tic += inten; if (inten > basePeakIntensity) { basePeakMZ = mz; basePeakIntensity = inten; } lowMZ = std::min(lowMZ, mz); highMZ = std::max(highMZ, mz); ++spectrum.defaultArrayLength; if (getBinaryData) { mzArray.push_back(mz); intensityArray.push_back(inten); } } } } if (!getBinaryData) spectrum.binaryDataArrayPtrs.clear(); spectrum.set(negativePolarity ? MS_negative_scan : MS_positive_scan); spectrum.set(MS_lowest_observed_m_z, lowMZ); spectrum.set(MS_highest_observed_m_z, highMZ); spectrum.set(MS_total_ion_current, tic); spectrum.set(MS_base_peak_m_z, basePeakMZ); spectrum.set(MS_base_peak_intensity, basePeakIntensity); } /** * Parse the spectrum title to look for retention times. If there are * two times, return the center of the range. Possible formats to look * for are "Elution: end tags // TODO(dkessner): add unit test to make sure this never breaks // hack: avoid reading nested elements // TODO: use nested scans to indicate precursor relationships return Status::Done; } return Status::Ok; } unsigned int getPeaksCount() const { return peaksCount; } private: Spectrum& spectrum_; BinaryDataEncoder::Config config_; }; class HandlerScan : public SAXParser::Handler { public: HandlerScan(const MSData& msd, const SpectrumList_mzXMLImpl& sl, Spectrum& spectrum, const SpectrumIdentityFromMzXML &spectrum_id, bool getBinaryData,size_t peakscount) : msd_(msd), sl_(sl), spectrum_(spectrum), spectrum_id_(spectrum_id), getBinaryData_(getBinaryData), handlerPeaks_(spectrum,peakscount), handlerPrecursor_(), nativeIdFormat_(id::getDefaultNativeIDFormat(msd)) { handlerPrecursor_.nativeIdFormat = nativeIdFormat_; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "scan") { if (scanNumber_.length()) { // we're in a nested scan declaration, we can quit return Status::Done; } string /*scanEvent,*/ msLevel, polarity, retentionTime, lowMz, highMz, basePeakMz, basePeakIntensity, totIonCurrent, msInstrumentID, centroided, deisotoped, chargeDeconvoluted, scanType, ionisationEnergy, cidGasPressure; unsigned int peaksCount; double startMz, endMz; getAttribute(attributes, "num", scanNumber_); //getAttribute(attributes, "scanEvent", scanEvent); getAttribute(attributes, "msLevel", msLevel); getAttribute(attributes, "peaksCount", peaksCount); getAttribute(attributes, "polarity", polarity); getAttribute(attributes, "collisionEnergy", collisionEnergy_); getAttribute(attributes, "retentionTime", retentionTime); getAttribute(attributes, "lowMz", lowMz); getAttribute(attributes, "highMz", highMz); getAttribute(attributes, "basePeakMz", basePeakMz); getAttribute(attributes, "basePeakIntensity", basePeakIntensity); getAttribute(attributes, "totIonCurrent", totIonCurrent); getAttribute(attributes, "msInstrumentID", msInstrumentID); getAttribute(attributes, "centroided", centroided); getAttribute(attributes, "deisotoped", deisotoped); //TODO: use this: getAttribute(attributes, "chargeDeconvoluted", chargeDeconvoluted); getAttribute(attributes, "scanType", scanType); //TODO: use this: getAttribute(attributes, "ionisationEnergy", ionisationEnergy); //TODO: use this: getAttribute(attributes, "cidGasPressure", cidGasPressure); getAttribute(attributes, "startMz", startMz); getAttribute(attributes, "endMz", endMz); spectrum_.id = id::translateScanNumberToNativeID(nativeIdFormat_, scanNumber_); if (spectrum_.id.empty()) spectrum_.id = "scan=" + lexical_cast(spectrum_.index+1); spectrum_.sourceFilePosition = position; boost::trim(msLevel); if (msLevel.empty()) msLevel = "1"; spectrum_.set(MS_ms_level, msLevel); handlerPeaks_.peaksCount = peaksCount; spectrum_.scanList.set(MS_no_combination); spectrum_.scanList.scans.push_back(Scan()); Scan& scan = spectrum_.scanList.scans.back(); //scan.set(MS_preset_scan_configuration, scanEvent); if (polarity == "+") spectrum_.set(MS_positive_scan); else if (polarity == "-") spectrum_.set(MS_negative_scan); // set spectrum and scan type by scanType attribute (assume MSn/Full if absent) boost::to_lower(scanType); if (scanType.empty() || scanType == "full") { spectrum_.set(msLevel == "1" ? MS_MS1_spectrum : MS_MSn_spectrum); } else if (scanType == "zoom") { spectrum_.set(MS_MSn_spectrum); scan.set(MS_zoom_scan); } else if (scanType == "sim") { spectrum_.set(MS_SIM_spectrum); scan.set(MS_SIM); } else if (scanType == "srm" || scanType == "mrm" || // hack: mzWiff (ABI) and wolf-mrm (Waters) use this value scanType == "multiplereaction" || // hack: Trapper (Agilent) uses this value scanType == "srm_ionprep") // hack: (Bruker) uses this value { spectrum_.set(MS_SRM_spectrum); scan.set(MS_SRM); } else if (scanType == "crm") { spectrum_.set(MS_CRM_spectrum); scan.set(MS_CRM_OBSOLETE); } else if (scanType == "q1") { spectrum_.set(MS_precursor_ion_spectrum); scan.set(MS_precursor_ion_spectrum); } else if (scanType == "q3") { spectrum_.set(MS_product_ion_spectrum); scan.set(MS_product_ion_spectrum); } else { sl_.warn_once(("invalid scanType attribute '" + scanType + "'; assuming full scan").c_str()); spectrum_.set(msLevel == "1" ? MS_MS1_spectrum : MS_MSn_spectrum); } // TODO: make this more robust bool hasCentroidDataProcessing = true; if (!msd_.dataProcessingPtrs.empty() && !msd_.dataProcessingPtrs[0]->processingMethods.empty()) hasCentroidDataProcessing = msd_.dataProcessingPtrs[0]->processingMethods[0].hasCVParam(MS_peak_picking); if (centroided.empty()) spectrum_.set(hasCentroidDataProcessing ? MS_centroid_spectrum : MS_profile_spectrum); else if (centroided == "1") spectrum_.set(MS_centroid_spectrum); else spectrum_.set(MS_profile_spectrum); if (msInstrumentID.empty() && !msd_.instrumentConfigurationPtrs.empty()) msInstrumentID = msd_.instrumentConfigurationPtrs[0]->id; if (!msInstrumentID.empty()) scan.instrumentConfigurationPtr = InstrumentConfigurationPtr(new InstrumentConfiguration(msInstrumentID)); // placeholder if (!retentionTime.empty()) { if (retentionTime.size()>3 && retentionTime.substr(0,2)=="PT" && retentionTime[retentionTime.size()-1]=='S') retentionTime = retentionTime.substr(2,retentionTime.size()-3); else throw runtime_error("[SpectrumList_mzXML::HandlerScan] Invalid retention time in scan " + scanNumber_); scan.set(MS_scan_start_time, retentionTime, UO_second); } if (endMz <= 0) { // If instrument settings are omitted, note observed mz range instead getAttribute(attributes, "lowMz", startMz); getAttribute(attributes, "highMz", endMz); } if (endMz > 0) scan.scanWindows.push_back(ScanWindow(startMz, endMz, MS_m_z)); if (!lowMz.empty()) spectrum_.set(MS_lowest_observed_m_z, lowMz); if (!highMz.empty()) spectrum_.set(MS_highest_observed_m_z, highMz); if (!basePeakMz.empty()) spectrum_.set(MS_base_peak_m_z, basePeakMz); if (!basePeakIntensity.empty()) spectrum_.set(MS_base_peak_intensity, basePeakIntensity); if (!totIonCurrent.empty()) spectrum_.set(MS_total_ion_current, totIonCurrent); return Status::Ok; } else if (name == "precursorMz") { spectrum_.precursors.push_back(Precursor()); Precursor& precursor = spectrum_.precursors.back(); if (!collisionEnergy_.empty()) precursor.activation.set(MS_collision_energy, collisionEnergy_, UO_electronvolt); handlerPrecursor_.precursor = &precursor; handlerPrecursor_.scan = spectrum_.scanList.scans.empty() ? NULL : &spectrum_.scanList.scans[0]; return Status(Status::Delegate, &handlerPrecursor_); } else if (name == "peaks") { // pretty likely to come right back here and read the // binary data once the header info has been inspected, // so note position spectrum_id_.sourceFilePositionForBinarySpectrumData = position; if (!getBinaryData_ || handlerPeaks_.peaksCount == 0) { spectrum_.setMZIntensityArrays(vector(), vector(), MS_number_of_detector_counts); spectrum_.defaultArrayLength = handlerPeaks_.peaksCount; return Status::Ok; } return Status(Status::Delegate, &handlerPeaks_); } else if (name == "nameValue") { // arbitrary name value pairs are converted to UserParams string nameAttr, value; getAttribute(attributes, "name", nameAttr); getAttribute(attributes, "value", value); spectrum_.userParams.push_back(UserParam(nameAttr, value, "xsd:string")); return Status::Ok; } else if (name == "scanOrigin") { // just ignore return Status::Ok; } else if (name == "nativeScanRef" || name == "coordinate") // mzXML 3.0 beta tags { // just ignore return Status::Ok; } else if (name == "comment") { // just ignore return Status::Ok; } throw runtime_error("[SpectrumList_mzXML::HandlerScan] Unexpected element name \"" + name + "\" in scan " + scanNumber_); } unsigned int getPeaksCount() const { return handlerPeaks_.getPeaksCount(); } private: const MSData& msd_; const SpectrumList_mzXMLImpl& sl_; Spectrum& spectrum_; const SpectrumIdentityFromMzXML& spectrum_id_; // for noting binary data position bool getBinaryData_; string scanNumber_; string collisionEnergy_; string activationMethod_; HandlerPeaks handlerPeaks_; HandlerPrecursor handlerPrecursor_; CVID nativeIdFormat_; }; /// retrieve a spectrum by index /// - detailLevel determines what fields are guaranteed present on the spectrum after the call /// - client may assume the underlying Spectrum* is valid SpectrumPtr SpectrumList_mzXMLImpl::spectrum(size_t index, DetailLevel detailLevel) const { return spectrum(index,(detailLevel == DetailLevel_FullData) ? IO::ReadBinaryData : IO::IgnoreBinaryData, detailLevel, NULL, false); } SpectrumPtr SpectrumList_mzXMLImpl::spectrum(size_t index, bool getBinaryData) const { return spectrum(index, getBinaryData ? IO::ReadBinaryData : IO::IgnoreBinaryData, getBinaryData ? DetailLevel_FullData : DetailLevel_FullMetadata, NULL, false); } /// get a copy of the seed spectrum with its binary data populated /// this is useful for formats like mzXML that can delay loading of binary data /// - client may assume the underlying Spectrum* is valid SpectrumPtr SpectrumList_mzXMLImpl::spectrum(const SpectrumPtr &seed, bool getBinaryData) const { return spectrum(seed->index, getBinaryData ? IO::ReadBinaryDataOnly: IO::IgnoreBinaryData, DetailLevel_InstantMetadata, // assume full metadata is already loaded &seed, false); } SpectrumPtr SpectrumList_mzXMLImpl::spectrum(size_t index, IO::BinaryDataFlag binaryDataFlag, const SpectrumPtr *defaults) const { DetailLevel detailLevel; switch (binaryDataFlag) { case IO::IgnoreBinaryData: detailLevel = DetailLevel_FullMetadata; break; case IO::ReadBinaryDataOnly: detailLevel = DetailLevel_InstantMetadata; break; case IO::ReadBinaryData: default: detailLevel = DetailLevel_FullData; break; } return spectrum(index, binaryDataFlag, detailLevel, defaults, false); } SpectrumPtr SpectrumList_mzXMLImpl::spectrum(size_t index, IO::BinaryDataFlag binaryDataFlag, DetailLevel detailLevel, const SpectrumPtr *defaults, bool isRecursiveCall) const { boost::lock_guard lock(readMutex); // lock_guard will unlock mutex when out of scope or when exception thrown (during destruction) if (index > index_.size()) throw runtime_error("[SpectrumList_mzXML::spectrum()] Index out of bounds."); // allocate Spectrum object and read it in SpectrumPtr result(new Spectrum); if (!result.get()) throw runtime_error("[SpectrumList_mzXML::spectrum()] Out of memory."); if (defaults) { // provide some context from previous parser runs result = *defaults; // copy in anything we may have cached before } result->index = index; // we may just be here to get binary data of otherwise previously read spectrum const SpectrumIdentityFromMzXML &id = index_[index]; boost::iostreams::stream_offset seekto; unsigned int peakscount; if (binaryDataFlag==IO::ReadBinaryDataOnly && (id.sourceFilePositionForBinarySpectrumData != (boost::iostreams::stream_offset)-1)) { // we're here to add binary data to an already parsed header seekto = id.sourceFilePositionForBinarySpectrumData; peakscount = id.peaksCount; // expecting this many peaks } else { seekto = id.sourceFilePosition; // read from start of scan peakscount = 0; // don't know how many peaks to expect yet } is_->seekg(offset_to_position(seekto)); if (!*is_) throw runtime_error("[SpectrumList_mzXML::spectrum()] Error seeking to ."); HandlerScan handler(msd_, *this, *result, id, binaryDataFlag!=IO::IgnoreBinaryData, peakscount); SAXParser::parse(*is_, handler); // note the binary data size in case we come back around to read full data if (!id.peaksCount) { id.peaksCount = handler.getPeaksCount(); } int msLevel = result->cvParam(MS_ms_level).valueAs(); scanMsLevelCache_[index] = msLevel; if (detailLevel >= DetailLevel_FullMetadata) { // hack to get parent scanNumber if precursorScanNum wasn't set if (msLevel > 1 && !isRecursiveCall && // in an all-MS2 file we can run out of stack !result->precursors.empty() && result->precursors.front().spectrumID.empty()) { // MCC: I see your hack and I raise you a hack! // * precursorScanNum is optional // * the precursor scan is not necessarily in the mzXML if (result->precursors.front().spectrumID == "0") result->precursors.front().spectrumID.clear(); else result->precursors.front().spectrumID = getPrecursorID(msLevel-1, index); } } // resolve any references into the MSData object References::resolve(*result, msd_); return result; } class HandlerIndexOffset : public SAXParser::Handler { public: HandlerIndexOffset(stream_offset& indexOffset) : indexOffset_(indexOffset) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name != "indexOffset") throw runtime_error(("[SpectrumList_mzXML::HandlerIndexOffset] Unexpected element name: " + name).c_str()); return Status::Ok; } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { indexOffset_ = lexical_cast(text); return Status::Ok; } private: stream_offset& indexOffset_; }; struct HandlerOffset : public SAXParser::Handler { SpectrumIdentityFromMzXML* spectrumIdentity; CVID nativeIdFormat; HandlerOffset(const MSData& msd) : spectrumIdentity(0), nativeIdFormat(id::getDefaultNativeIDFormat(msd)) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (!spectrumIdentity) throw runtime_error("[SpectrumList_mzXML::HandlerOffset] Null spectrumIdentity."); if (name != "offset") throw runtime_error(("[SpectrumList_mzXML::HandlerOffset] Unexpected element name: " + name).c_str()); string scanNumber; getAttribute(attributes, "id", scanNumber); spectrumIdentity->id = id::translateScanNumberToNativeID(nativeIdFormat, scanNumber); if (spectrumIdentity->id.empty()) spectrumIdentity->id = "scan=" + scanNumber; return Status::Ok; } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { if (!spectrumIdentity) throw runtime_error("[SpectrumList_mzXML::HandlerOffset] Null spectrumIdentity."); spectrumIdentity->sourceFilePosition = lexical_cast(text); return Status::Ok; } }; class HandlerIndex : public SAXParser::Handler { public: HandlerIndex(vector& index, const MSData& msd) : index_(index), handlerOffset_(msd) { parseCharacters = true; autoUnescapeCharacters = false; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "index") { return Status::Ok; } else if (name == "offset") { index_.push_back(SpectrumIdentityFromMzXML()); index_.back().index = index_.size()-1; handlerOffset_.spectrumIdentity = &index_.back(); return Status(Status::Delegate, &handlerOffset_); } else throw SpectrumList_mzXML::index_not_found(("[SpectrumList_mzXML::HandlerIndex] Unexpected element name: " + name).c_str()); } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { throw SpectrumList_mzXML::index_not_found("[SpectrumList_mzXML::HandlerIndex] not found."); } private: vector& index_; HandlerOffset handlerOffset_; }; bool SpectrumList_mzXMLImpl::readIndex() { // find const int bufferSize = 512; string buffer(bufferSize, '\0'); is_->seekg(-bufferSize, std::ios::end); if (!*is_) throw index_not_found("[SpectrumList_mzXML::readIndex()] Error seeking to end."); is_->read(&buffer[0], bufferSize); if (!*is_) throw index_not_found("[SpectrumList_mzXML::readIndex()] istream not ios::binary?"); string::size_type indexIndexOffset = buffer.find(""); if (indexIndexOffset == string::npos) return false; // no index present is_->seekg(-bufferSize + static_cast(indexIndexOffset), std::ios::end); if (!*is_) throw index_not_found("[SpectrumList_mzXML::readIndex()] Error seeking to ."); // read stream_offset indexOffset = 0; HandlerIndexOffset handlerIndexOffset(indexOffset); SAXParser::parse(*is_, handlerIndexOffset); if (indexOffset == 0) throw index_not_found("[SpectrumList_mzXML::readIndex()] Error parsing ."); // read is_->seekg(offset_to_position(indexOffset)); if (!*is_) throw index_not_found("[SpectrumList_mzXML::readIndex()] Error seeking to ."); HandlerIndex handlerIndex(index_, msd_); SAXParser::parse(*is_, handlerIndex); if (index_.empty()) throw index_not_found("[SpectrumList_mzXML::readIndex()] is empty."); return true; } class HandlerIndexCreator : public SAXParser::Handler { public: HandlerIndexCreator(vector& index, const MSData& msd) : index_(index), nativeIdFormat_(id::getDefaultNativeIDFormat(msd)) {} virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { if (name == "scan") { string scanNumber; getAttribute(attributes, "num", scanNumber); SpectrumIdentityFromMzXML si; si.index = index_.size(); si.id = id::translateScanNumberToNativeID(nativeIdFormat_, scanNumber); if (si.id.empty()) si.id = "scan=" + lexical_cast(si.index+1); si.sourceFilePosition = position; index_.push_back(si); } return Status::Ok; } virtual Status endElement(const string& name, stream_offset position) { if (name == "msRun") return Status::Done; return Status::Ok; } private: vector& index_; CVID nativeIdFormat_; }; void SpectrumList_mzXMLImpl::createIndex() { is_->seekg(0); HandlerIndexCreator handler(index_, msd_); SAXParser::parse(*is_, handler); } void SpectrumList_mzXMLImpl::createMaps() { if (index_.empty()) return; vector::const_iterator it=index_.begin(); for (size_t i = 0; i != index_.size(); ++i, ++it) idToIndex_[it->id] = i; // for mzXML where nativeID has been interpreted, create secondary mapping just from raw scan numbers // NB: translateNativeIDToScanNumber should always work because only nativeIds that can be represented by scan numbers can be interpreted from mzXML if (!bal::starts_with(index_.begin()->id, "scan=")) { CVID nativeIdFormat = pwiz::msdata::id::getDefaultNativeIDFormat(msd_); it = index_.begin(); for (size_t i = 0; i != index_.size(); ++i, ++it) idToIndex_["scan=" + id::translateNativeIDToScanNumber(nativeIdFormat, it->id)] = i; } } string SpectrumList_mzXMLImpl::getPrecursorID(int precursorMsLevel, size_t index) const { // for MSn spectra (n > 1): return first scan with MSn-1 while (index > 0) { --index; int& cachedMsLevel = scanMsLevelCache_[index]; if (index && (cachedMsLevel == 0)) { // populate the missing MS level SpectrumPtr s = spectrum(index, DetailLevel_FastMetadata); // avoid excessive recursion cachedMsLevel = s->cvParam(MS_ms_level).valueAs(); } if (cachedMsLevel == precursorMsLevel) { SpectrumPtr s = spectrum(index, DetailLevel_FastMetadata); return s ? s->id : lexical_cast(index); } } return ""; } } // namespace PWIZ_API_DECL SpectrumListPtr SpectrumList_mzXML::create(shared_ptr is, const MSData& msd, bool indexed) { if (!is.get() || !*is) throw runtime_error("[SpectrumList_mzXML::create()] Bad istream."); return SpectrumListPtr(new SpectrumList_mzXMLImpl(is, msd, indexed)); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumList_mzXML.hpp000066400000000000000000000031701444255175000242650ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMLIST_MZXML_HPP_ #define _SPECTRUMLIST_MZXML_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "SpectrumListBase.hpp" #include #include namespace pwiz { namespace msdata { /// implementation of SpectrumList, backed by an mzXML file class PWIZ_API_DECL SpectrumList_mzXML : public SpectrumListBase { public: static SpectrumListPtr create(boost::shared_ptr is, const MSData& msd, bool indexed = true); /// exception thrown if create(*,*,true) is called and /// the mzXML index cannot be found struct index_not_found : public std::runtime_error { index_not_found(const std::string& what) : std::runtime_error(what.c_str()) {} }; }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMLIST_MZXML_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumWorkerThreads.cpp000066400000000000000000000256401444255175000250500ustar00rootroot00000000000000// // $Id$ // // // Original author: William French // // Copyright 2014 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/data/msdata/SpectrumWorkerThreads.hpp" #include "pwiz/data/msdata/SpectrumListWrapper.hpp" #include "pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp" #include "pwiz/analysis/demux/DemuxDataProcessingStrings.hpp" #include "pwiz/utility/misc/mru_list.hpp" #include #include using std::deque; using namespace pwiz::util; using namespace pwiz::analysis; namespace pwiz { namespace msdata { class SpectrumWorkerThreads::Impl { public: Impl(const SpectrumList& sl, bool useWorkerThreads) : sl_(sl) , numThreads_(min(8u, boost::thread::hardware_concurrency())) , maxProcessedTaskCount_(numThreads_ * 4) , taskMRU_(maxProcessedTaskCount_) { InstrumentConfigurationPtr icPtr; if (sl.size() > 0) { SpectrumPtr s0 = sl.spectrum(0, false); if (s0->scanList.scans.size() > 0) icPtr = s0->scanList.scans[0].instrumentConfigurationPtr; } bool isBruker = icPtr.get() && icPtr->hasCVParamChild(MS_Bruker_Daltonics_instrument_model); bool isShimadzu = icPtr.get() && icPtr->hasCVParamChild(MS_Shimadzu_instrument_model); bool isThermoOnWine = icPtr.get() && icPtr->hasCVParamChild(MS_Thermo_Fisher_Scientific_instrument_model) && running_on_wine(); bool isDemultiplexed = false; const boost::shared_ptr dp = sl.dataProcessingPtr(); if (dp) { BOOST_FOREACH(const ProcessingMethod& pm, dp->processingMethods) { if (!pm.hasCVParam(MS_data_processing)) continue; BOOST_FOREACH(const UserParam& up, pm.userParams) { if (up.name.find(DemuxDataProcessingStrings::kDEMUX_NAME) != std::string::npos) { isDemultiplexed = true; } } if (isDemultiplexed) break; } } useThreads_ = useWorkerThreads && !(isBruker || isShimadzu || isThermoOnWine || isDemultiplexed); // some libraries/platforms are not thread-friendly if (sl.size() > 0 && useThreads_) { // create one task per spectrum tasks_.resize(sl.size(), Task()); // create and start worker threads for (size_t i = 0; i < numThreads_; ++i) { workers_.push_back(TaskWorker()); workers_.back().start(this); } } } ~Impl() { BOOST_FOREACH(TaskWorker& worker, workers_) if (worker.thread) { worker.thread->interrupt(); worker.thread->join(); } } SpectrumPtr spectrum(size_t index, DetailLevel detailLevel) { if (!useThreads_) return sl_.spectrum(index, detailLevel); boost::unique_lock taskLock(taskMutex_); // if the task is already finished and has binary data if getBinaryData is true, return it as-is Task& task = tasks_[index]; if (task.result && (detailLevel < DetailLevel_FullData || task.detailLevel == DetailLevel_FullData)) return task.result; // otherwise, add this task and the numThreads following tasks to the queue (skipping the tasks that are already processed or being worked on) for (size_t i = index; taskQueue_.size() < numThreads_ && i < tasks_.size(); ++i) { Task& task = tasks_[i]; // if the task result is already ready if (task.result) { // if it has binary data and getBinaryData is true, the task need not be queued if (task.detailLevel == DetailLevel_FullData || detailLevel < DetailLevel_FullData) continue; // otherwise the current result is cleared task.result.reset(); } // if the task is already being worked on and the existing task will get binary data or binary data isn't being requested, the task need not be requeued else if (task.worker != NULL && (task.detailLevel == DetailLevel_FullData || detailLevel < DetailLevel_FullData)) continue; // if the task is already queued, set its getBinaryData variable to the logical OR of the current task and the current spectrum request if (!task.isQueued) { taskQueue_.push_back(i); task.isQueued = true; } if (detailLevel > task.detailLevel) task.detailLevel = detailLevel; } // wait for the result to be set while (!task.result) { // notify workers that tasks are available taskQueuedCondition_.notify_all(); taskFinishedCondition_.wait_for(taskLock, boost::chrono::milliseconds(100)); } return task.result; } private: struct TaskWorker { void start(Impl* instance) { if (!thread) thread.reset(new boost::thread(boost::bind(&SpectrumWorkerThreads::Impl::work, instance, this))); } shared_ptr thread; }; // each spectrum in the list is a task struct Task { Task() : worker(NULL), detailLevel(DetailLevel_InstantMetadata), isQueued(false) {} TaskWorker* worker; // the thread currently working on this task SpectrumPtr result; // the spectrum produced by this task DetailLevel detailLevel; bool isQueued; // true if the task is currently in the taskQueue }; friend struct TaskWorker; // function executed by worker threads static void work(Impl* instance, TaskWorker* worker) { vector& tasks = instance->tasks_; TaskQueue& taskQueue = instance->taskQueue_; mru_list& taskMRU = instance->taskMRU_; // loop until the main thread kills the worker threads; the condition_variable::wait() call is an interruption point try { boost::unique_lock taskLock(instance->taskMutex_, boost::defer_lock); while (true) { taskLock.lock(); // wait for a new spectrum to be queued (while the task queue is either empty or the task at the end of the queue already has a worker assigned) while (instance->taskQueue_.empty()) instance->taskQueuedCondition_.wait(taskLock); // get the next queued Task TaskQueue::value_type queuedTask = taskQueue.front(); taskQueue.pop_front(); // set worker pointer on the Task size_t taskIndex = queuedTask; Task& task = tasks[taskIndex]; DetailLevel detailLevel = task.detailLevel; task.worker = worker; task.isQueued = false; //cout << taskIndex << " " << task.worker << " " << getBinaryData << endl; // unlock taskLock taskLock.unlock(); // get the spectrum SpectrumPtr result = instance->sl_.spectrum(taskIndex, detailLevel); // lock the taskLock taskLock.lock(); // set the result on the Task, and set its worker to empty // if not getting binary data, check if another thread already finished this task which did get binary data if (detailLevel == DetailLevel_FullData || task.detailLevel < DetailLevel_FullData) { task.result = result; task.detailLevel = detailLevel; } task.worker = NULL; // notify the main thread that a task has finished instance->taskFinishedCondition_.notify_one(); // add the task to the MRU; if doing so will push an old task off the MRU, then reset the oldest (LRU) task; // to know whether an old task was pushed off, keep a copy of the LRU item before adding the task boost::optional lruToReset; if (taskMRU.size() == taskMRU.max_size()) { lruToReset = taskMRU.lru(); } taskMRU.insert(taskIndex); // if the MRU list's LRU is different now, it means the LRU was popped and needs to be reset; if the popped LRU is the current task, don't reset it if (lruToReset.is_initialized() && lruToReset.get() != taskMRU.lru() && lruToReset.get() != taskIndex) { tasks[lruToReset.get()].result.reset(); } taskLock.unlock(); } } catch (boost::thread_interrupted&) { // return } catch (exception& e) { // TODO: log this cerr << "[SpectrumWorkerThreads::work] error in thread: " << e.what() << endl; } catch (...) { cerr << "[SpectrumWorkerThreads::work] unknown exception in worker thread" << endl; } } const SpectrumList& sl_; bool useThreads_; size_t numThreads_; const size_t maxProcessedTaskCount_; vector tasks_; typedef deque TaskQueue; TaskQueue taskQueue_; mru_list taskMRU_; boost::mutex taskMutex_; boost::condition_variable taskQueuedCondition_, taskFinishedCondition_; vector workers_; }; SpectrumWorkerThreads::SpectrumWorkerThreads(const SpectrumList& sl, bool useWorkerThreads) : impl_(new Impl(sl, useWorkerThreads)) {} SpectrumWorkerThreads::~SpectrumWorkerThreads() {} SpectrumPtr SpectrumWorkerThreads::processBatch(size_t index, DetailLevel detailLevel) { return impl_->spectrum(index, detailLevel); } } // namespace msdata } // namespace pwiz libpwizlite-3.0.5/src/pwiz/data/msdata/SpectrumWorkerThreads.hpp000066400000000000000000000024451444255175000250530ustar00rootroot00000000000000// // $Id$ // // // Original author: William French // // Copyright 2014 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SPECTRUMWORKERTHREADS_HPP_ #define _SPECTRUMWORKERTHREADS_HPP_ #include "pwiz/data/msdata/MSData.hpp" #include namespace pwiz { namespace msdata { class SpectrumWorkerThreads { public: SpectrumWorkerThreads(const SpectrumList& sl, bool useWorkerThreads); ~SpectrumWorkerThreads(); SpectrumPtr processBatch(size_t index, DetailLevel detailLevel = DetailLevel_FullData); private: class Impl; boost::scoped_ptr impl_; }; } // namespace msdata } // namespace pwiz #endif // _SPECTRUMWORKERTHREADS_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/TextWriter.hpp000066400000000000000000000417211444255175000226650ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _TEXTWRITER_HPP_ #define _TEXTWRITER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" #include "boost/lexical_cast.hpp" #include #include #include namespace pwiz { namespace msdata { class PWIZ_API_DECL TextWriter { public: /// constructs a TextWriter for MSData types /// @param os The ostream to write to. /// @param depth The number of indentations to prefix to each output line. /// @param arrayExampleCount The number of example values to print for arrays (i.e. m/z and intensity); -1 for unlimited TextWriter(std::ostream& os, int depth = 0, int arrayExampleCount = 3) : os_(os), depth_(depth), arrayExampleCount_(arrayExampleCount < 0 ? std::numeric_limits::max() : (size_t) arrayExampleCount), indent_(depth*2, ' ') {} TextWriter child() {return TextWriter(os_, depth_+1, arrayExampleCount_);} TextWriter& operator()(const std::string& text) { os_ << indent_ << text << std::endl; return *this; } TextWriter& operator()(const CVParam& cvParam) { os_ << indent_ << "cvParam: " << cvTermInfo(cvParam.cvid).name; if (!cvParam.value.empty()) os_ << ", " << cvParam.value; if (cvParam.units != CVID_Unknown) os_ << ", " << cvParam.unitsName(); os_ << std::endl; return *this; } TextWriter& operator()(const UserParam& userParam) { os_ << indent_ << "userParam: " << userParam.name; if (!userParam.value.empty()) os_ << ", " << userParam.value; if (!userParam.type.empty()) os_ << ", " << userParam.type; if (userParam.units != CVID_Unknown) os_ << ", " << cvTermInfo(userParam.units).name; os_ << std::endl; return *this; } template TextWriter& operator()(const std::string& label, const std::vector& v) { (*this)(label); for_each(v.begin(), v.end(), child()); return *this; } TextWriter& operator()(const MSData& msd, bool metadata_only=false) { (*this)("msdata:"); child() ("id: " + msd.id); if (!msd.accession.empty()) child()("accession: " + msd.accession); if (!msd.version().empty()) child()("version: " + msd.version()); if (!msd.cvs.empty()) child()("cvList: ", msd.cvs); if (!msd.fileDescription.empty()) child()(msd.fileDescription); if (!msd.paramGroupPtrs.empty()) child()("paramGroupList: ", msd.paramGroupPtrs); if (!msd.samplePtrs.empty()) child()("sampleList: " , msd.samplePtrs); if (!msd.softwarePtrs.empty()) child()("softwareList: ", msd.softwarePtrs); if (!msd.scanSettingsPtrs.empty()) child()("scanSettingsList: ", msd.scanSettingsPtrs); if (!msd.instrumentConfigurationPtrs.empty()) child()("instrumentConfigurationList: ", msd.instrumentConfigurationPtrs); if (!msd.dataProcessingPtrs.empty()) child()("dataProcessingList: ", msd.dataProcessingPtrs); if (!msd.run.empty()) child()(msd.run, metadata_only); return *this; } TextWriter& operator()(const CV& cv) { (*this)("cv:"); child() ("id: " + cv.id) ("fullName: " + cv.fullName) ("version: " + cv.version) ("URI: " + cv.URI); return *this; } TextWriter& operator()(const FileDescription& fd) { (*this)("fileDescription:"); child() (fd.fileContent) ("sourceFileList: ", fd.sourceFilePtrs); for_each(fd.contacts.begin(), fd.contacts.end(), child()); return *this; } TextWriter& operator()(const ParamContainer& paramContainer) { for (std::vector::const_iterator it=paramContainer.paramGroupPtrs.begin(); it!=paramContainer.paramGroupPtrs.end(); ++it) (*this)("referenceableParamGroupRef: " + (*it)->id); for_each(paramContainer.cvParams.begin(), paramContainer.cvParams.end(), *this); for_each(paramContainer.userParams.begin(), paramContainer.userParams.end(), *this); return *this; } TextWriter& operator()(const FileContent& fileContent) { (*this)("fileContent:"); child()(static_cast(fileContent)); return *this; } TextWriter& operator()(const SourceFile& sf) { (*this)("sourceFile:"); child() ("id: " + sf.id) ("name: " + sf.name) ("location: " + sf.location) (static_cast(sf)); return *this; } TextWriter& operator()(const Contact& contact) { (*this)("contact:"); child()(static_cast(contact)); return *this; } TextWriter& operator()(const ParamGroup& paramGroup) { (*this)("paramGroup:"); child() ("id: " + paramGroup.id) (static_cast(paramGroup)); return *this; } TextWriter& operator()(const Sample& sample) { (*this)("sample:"); child() ("id: " + sample.id) ("name: " + sample.name) (static_cast(sample)); return *this; } TextWriter& operator()(const InstrumentConfiguration& instrumentConfiguration) { (*this)("instrumentConfiguration:"); child() ("id: " + instrumentConfiguration.id) (static_cast(instrumentConfiguration)); if (!instrumentConfiguration.componentList.empty()) child()(instrumentConfiguration.componentList); if (instrumentConfiguration.softwarePtr.get() && !instrumentConfiguration.softwarePtr->empty()) child()("softwareRef: " + instrumentConfiguration.softwarePtr->id); return *this; } TextWriter& operator()(const ComponentList& componentList) { (*this)("componentList:"); for (size_t i=0; i < componentList.size(); ++i) child()(componentList[i]); return *this; } TextWriter& operator()(const Component& component) { switch(component.type) { case ComponentType_Source: (*this)("source: "); break; case ComponentType_Analyzer: (*this)("analyzer: "); break; case ComponentType_Detector: (*this)("detector: "); break; default: break; } child() ("order: " + boost::lexical_cast(component.order)) (static_cast(component)); return *this; } TextWriter& operator()(const Software& software) { (*this)("software:"); child() ("id: " + software.id) ("version: " + software.version) (static_cast(software)); return *this; } TextWriter& operator()(const ProcessingMethod& processingMethod) { (*this)("processingMethod:"); child() ("order: " + boost::lexical_cast(processingMethod.order)); if (processingMethod.softwarePtr.get() && !processingMethod.softwarePtr->empty()) child()("softwareRef: " + processingMethod.softwarePtr->id); child() (static_cast(processingMethod)); return *this; } TextWriter& operator()(const DataProcessing& dp) { (*this)("dataProcessing:"); child() ("id: " + dp.id); for_each(dp.processingMethods.begin(), dp.processingMethods.end(), child()); return *this; } TextWriter& operator()(const Target& target) { (*this)("target:"); child()(static_cast(target)); return *this; } TextWriter& operator()(const ScanSettings& as) { (*this)("scanSettings:"); child() ("id: " + as.id); for_each(as.targets.begin(), as.targets.end(), child()); child()("sourceFileList: ", as.sourceFilePtrs); return *this; } TextWriter& operator()(const Run& run, bool metadata_only=false) { (*this)("run:"); child()("id: " + run.id); if (run.defaultInstrumentConfigurationPtr.get()) child()("defaultInstrumentConfigurationRef: " + run.defaultInstrumentConfigurationPtr->id); if (run.samplePtr.get()) child()("sampleRef: " + run.samplePtr->id); if (!run.startTimeStamp.empty()) child()("startTimeStamp: " + run.startTimeStamp); child()(static_cast(run)); if (run.defaultSourceFilePtr.get()) child()("defaultSourceFileRef: " + run.defaultSourceFilePtr->id); if (run.spectrumListPtr.get()) child()(run.spectrumListPtr, metadata_only); if (run.chromatogramListPtr.get()) child()(run.chromatogramListPtr, metadata_only); return *this; } TextWriter& operator()(const SpectrumList& spectrumList, bool metadata_only=false) { std::string text("spectrumList (" + boost::lexical_cast(spectrumList.size()) + " spectra)"); if (!metadata_only) text += ":"; (*this)(text); if (spectrumList.dataProcessingPtr().get()) child()(*spectrumList.dataProcessingPtr()); if (!metadata_only) for (size_t index=0; index(chromatogramList.size()) + " chromatograms)"); if (!metadata_only) text += ":"; (*this)(text); if (chromatogramList.dataProcessingPtr().get()) child()(*chromatogramList.dataProcessingPtr()); if (!metadata_only) for (size_t index=0; index(spectrum.index)) ("id: " + spectrum.id); if (!spectrum.spotID.empty()) child()("spotID: " + spectrum.spotID); if (spectrum.sourceFilePtr.get()) child()(spectrum.sourceFilePtr); child() ("defaultArrayLength: " + boost::lexical_cast(spectrum.defaultArrayLength)) (spectrum.dataProcessingPtr) (static_cast(spectrum)); if (!spectrum.scanList.empty()) child()(spectrum.scanList); if (!spectrum.precursors.empty()) child()("precursorList: ", spectrum.precursors); for_each(spectrum.binaryDataArrayPtrs.begin(), spectrum.binaryDataArrayPtrs.end(), child()); for_each(spectrum.integerDataArrayPtrs.begin(), spectrum.integerDataArrayPtrs.end(), child()); return *this; } TextWriter& operator()(const Chromatogram& chromatogram) { (*this)("chromatogram:"); child() ("index: " + boost::lexical_cast(chromatogram.index)) ("id: " + chromatogram.id) ("defaultArrayLength: " + boost::lexical_cast(chromatogram.defaultArrayLength)) (chromatogram.dataProcessingPtr) (static_cast(chromatogram)); if (!chromatogram.precursor.empty()) child()(chromatogram.precursor); if (!chromatogram.product.empty()) child()(chromatogram.product); for_each(chromatogram.binaryDataArrayPtrs.begin(), chromatogram.binaryDataArrayPtrs.end(), child()); for_each(chromatogram.integerDataArrayPtrs.begin(), chromatogram.integerDataArrayPtrs.end(), child()); return *this; } TextWriter& operator()(const Scan& scan) { (*this)("scan:"); if (!scan.spectrumID.empty()) child()("spectrumID: " + scan.spectrumID); if (!scan.externalSpectrumID.empty()) child()("externalSpectrumID: " + scan.externalSpectrumID); if (scan.sourceFilePtr) child()(*scan.sourceFilePtr); if (scan.instrumentConfigurationPtr.get()) child()(*scan.instrumentConfigurationPtr); child()(static_cast(scan)); if (!scan.scanWindows.empty()) child()("scanWindowList: ", scan.scanWindows); return *this; } TextWriter& operator()(const ScanWindow& window) { (*this)("scanWindow:"); for_each(window.cvParams.begin(), window.cvParams.end(), child()); return *this; } template TextWriter& writeBinaryDataArray(const BinaryDataArrayType& p) { if (!p.get() || p->empty()) return *this; std::stringstream oss; oss << "[" << boost::lexical_cast(p->data.size()) << "] "; oss.precision(12); for (size_t i=0; i < arrayExampleCount_ && i < p->data.size(); i++) oss << p->data[i] << " "; if (p->data.size() > arrayExampleCount_) oss << "..."; (*this)("binaryDataArray:"); child() (static_cast(*p)); if (p->dataProcessingPtr.get() && !p->dataProcessingPtr->empty()) child()(p->dataProcessingPtr); if (!p->data.empty()) child()("binary: " + oss.str()); return *this; } TextWriter& operator()(const BinaryDataArrayPtr& p) { return writeBinaryDataArray(p); } TextWriter& operator()(const IntegerDataArrayPtr& p) { return writeBinaryDataArray(p); } TextWriter& operator()(const SelectedIon& selectedIon) { (*this)("selectedIon:"); child()(static_cast(selectedIon)); return *this; } TextWriter& operator()(const Precursor& precursor) { (*this)("precursor:"); child() ("spectrumRef: " + precursor.spectrumID) (static_cast(precursor)); if (!precursor.isolationWindow.empty()) { child()("isolationWindow:"); child().child()(precursor.isolationWindow); } if (!precursor.selectedIons.empty()) { child()("selectedIons:", precursor.selectedIons); } if (!precursor.activation.empty()) { child()("activation:"); child().child()(precursor.activation); } return *this; } TextWriter& operator()(const Product& product) { (*this)("product:"); if (!product.isolationWindow.empty()) { child()("isolationWindow:"); child().child()(product.isolationWindow); } return *this; } TextWriter& operator()(const ScanList& scanList) { (*this) (static_cast(scanList)) ("scanList:", scanList.scans); return *this; } // if no other overload matches, assume the object is a shared_ptr of a valid overloaded type template TextWriter& operator()(const boost::shared_ptr& p) { return p.get() ? (*this)(*p) : *this; } private: std::ostream& os_; int depth_; size_t arrayExampleCount_; std::string indent_; }; } // namespace msdata } // namespace pwiz #endif // _TEXTWRITER_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/Version.cpp000066400000000000000000000016021444255175000221560ustar00rootroot00000000000000// This file was generated by the \"svnrev\" utility // You should not modify it manually, as it may be re-generated. // // : 1016-03-22 $ // : 3-4- $ // #define PWIZ_SOURCE #include "Version.hpp" #include #ifdef PWIZ_USER_VERSION_INFO_H // in case you need to add any info version of your own #include PWIZ_USER_VERSION_INFO_H // must define PWIZ_USER_VERSION_INFO_H_STR for use below #endif namespace pwiz { namespace msdata { using std::string; int Version::Major() {return 03;} int Version::Minor() {return 00;} int Version::Revision() {return 01016-03-22;} string Version::LastModified() {return "3-4-";} string Version::str() { std::ostringstream v; v << Major() << '.' << Minor() << '.' << Revision(); #ifdef PWIZ_USER_VERSION_INFO_H v << " (" << PWIZ_USER_VERSION_INFO_H_STR << ")"; #endif return v.str(); } } } libpwizlite-3.0.5/src/pwiz/data/msdata/Version.hpp000066400000000000000000000025431444255175000221700ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _PWIZ_MSDATA_VERSION_HPP_ #define _PWIZ_MSDATA_VERSION_HPP_ #include namespace pwiz { namespace msdata { struct Version { static int Major(); static int Minor(); static int Revision(); static std::string Branch(); // Source control branch name (usually "master", indicating trunk code line in Git) static std::string str(); static std::string LastModified(); }; } // namespace msdata } // namespace pwiz #endif // _PWIZ_MSDATA_VERSION_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/examples.hpp000066400000000000000000000021771444255175000223640ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _EXAMPLES_HPP_ #define _EXAMPLES_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "MSData.hpp" namespace pwiz { namespace msdata { namespace examples { PWIZ_API_DECL void initializeTiny(MSData& msd); PWIZ_API_DECL void addMIAPEExampleMetadata(MSData& msd); } // namespace examples } // namespace msdata } // namespace pwiz #endif // _EXAMPLES_HPP_ libpwizlite-3.0.5/src/pwiz/data/msdata/psi-ms.obo.dk1000066400000000000000000004511641444255175000224300ustar00rootroot00000000000000format-version: 1.2 date: 22:05:2008 15:53 saved-by: luisa auto-generated-by: OBO-Edit 1.101 default-namespace: PSI-MS remark: version: x.y.z import: unit.obo [Term] id: MS:0000000 name: Proteomics Standards Initiative Mass Spectrometry Ontology def: "Proteomics Standards Initiative Mass Spectrometry Ontology." [PSI:MS] [Term] id: MS:1000001 name: sample number def: "A reference number relevant to the sample under study." [PSI:MS] is_a: MS:1000548 ! sample attribute [Term] id: MS:1000002 name: sample name def: "A reference string relevant to the sample under study." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000003 name: sample state def: "The chemical phase of a pure sample, or the state of a mixed sample." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000004 name: sample mass def: "Total mass of sample used." [PSI:MS] is_a: MS:1000548 ! sample attribute [Term] id: MS:1000005 name: sample volume def: "Total volume of solution used." [PSI:MS] is_a: MS:1000548 ! sample attribute [Term] id: MS:1000006 name: sample concentration def: "Concentration of sample in picomol/ul, femtomol/ul or attomol/ul solution used." [PSI:MS] is_a: MS:1000548 ! sample attribute [Term] id: MS:1000007 name: inlet type def: "The nature of the sample inlet." [PSI:MS] relationship: part_of MS:1000458 ! source [Term] id: MS:1000008 name: ionization type def: "The method by which gas phase ions are generated from the sample." [PSI:MS] relationship: part_of MS:1000458 ! source [Term] id: MS:1000009 name: ionization mode def: "Whether positive or negative ions are selected for analysis by the spectrometer. Re-map to Polarity Mode." [PSI:MS] is_obsolete: true [Term] id: MS:1000010 name: analyzer type def: "The common name of the particular analyzer stage being described. Synonym of mass analyzer, should be obsoleted." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000011 name: mass resolution def: "The maximum m/z value at which two peaks can be resolved, according to one of the standard measures." [PSI:MS] is_a: MS:1000503 ! scan attribute [Term] id: MS:1000012 name: resolution measurement method def: "Which of the available standard measures is used to define whether two peaks are separate." [PSI:MS] is_a: MS:1000596 ! measurement method [Term] id: MS:1000013 name: resolution type def: "Specify the nature of resolution for the mass analyzer. Resolution is usually either constant with respect to m/z or proportional to m/z." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000014 name: accuracy def: "Accuracy is the degree of conformity of a measured mass to its actual value." [PSI:MS] is_a: MS:1000480 ! mass analyzer attribute [Term] id: MS:1000015 name: scan rate def: "Rate in (m/z)/sec for scanning analyzers." [PSI:MS] is_a: MS:1000503 ! scan attribute [Term] id: MS:1000016 name: scan time xref: value-type:xsd\:float "The allowed value-type for this CV term." def: "The time taken for an acquisition by scanning analyzers." [PSI:MS] is_a: MS:1000503 ! scan attribute relationship: has_units UO:0000003 ! time unit [Term] id: MS:1000017 name: Scan Function def: "Describes the type of mass analysis being performed. Two primary modes are: typical acquisition over a range of masses (Mass Scan), and Selected Ion Detection. The primary difference is that Selected Ion Detection produces a single value for the signal at the selected mass rather than producing a mass spectrum." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000018 name: scan direction def: "Direction in terms of m/z of the scan for scanning analyzers (low to high, or high to low)." [PSI:MS] relationship: part_of MS:1000441 ! scan [Term] id: MS:1000019 name: scan law def: "Describes the function in control of the m/z scan (for scanning instruments). Commonly the scan function is linear, but in principle any function can be used." [PSI:MS] relationship: part_of MS:1000441 ! scan [Term] id: MS:1000020 name: scanning method def: "Describes the acquisition data type produced by a tandem mass spectrometry experiment." [PSI:MS] synonym: "Tandem Scanning Method" RELATED [] relationship: part_of MS:1000441 ! scan [Term] id: MS:1000021 name: reflectron state def: "Status of the reflectron, turned on or off." [PSI:MS] is_a: MS:1000480 ! mass analyzer attribute [Term] id: MS:1000022 name: TOF Total Path Length def: "The length of the field free drift space in a time of flight mass spectrometer." [PSI:MS] is_a: MS:1000480 ! mass analyzer attribute [Term] id: MS:1000023 name: isolation width def: "The total width (i.e. not half for plus-or-minus) of the gate applied around a selected precursor ion." [PSI:MS] is_a: MS:1000503 ! scan attribute [Term] id: MS:1000024 name: final MS exponent def: "Final MS level achieved when performing PFF with the ion trap (e.g. MS E10)." [PSI:MS] is_a: MS:1000480 ! mass analyzer attribute [Term] id: MS:1000025 name: magnetic field strength def: "A property of space that produces a force on a charged particle equal to qv x B where q is the particle charge and v its velocity." [PSI:MS] synonym: "B" EXACT [] synonym: "Magnetic Field" RELATED [] is_a: MS:1000480 ! mass analyzer attribute [Term] id: MS:1000026 name: detector type def: "Type of detector used in the mass spectrometer." [PSI:MS] relationship: part_of MS:1000453 ! detector [Term] id: MS:1000027 name: detector acquisition mode def: "Method by which detector signal is acquired by the data system." [PSI:MS] relationship: part_of MS:1000453 ! detector [Term] id: MS:1000028 name: detector resolution def: "The resolving power of the detector to detect the smallest difference between two ions so that the valley between them is a specified fraction of the peak height." [PSI:MS] is_a: MS:1000481 ! detector attribute [Term] id: MS:1000029 name: sampling frequency def: "The rate of signal sampling (measurement) with respect to time." [PSI:MS] synonym: "ADC Sampling Frequency" NARROW [] is_a: MS:1000481 ! detector attribute [Term] id: MS:1000030 name: vendor def: "Name of instrument vendor, replaced by MS:1000031 Model From Vendor." [PSI:MS] is_obsolete: true [Term] id: MS:1000031 name: instrument model def: "Instrument model name not including the vendor's name." [PSI:MS] relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000032 name: customization def: "Free text description of a single customization made to the instrument; for several modifications, use several entries." [PSI:MS] is_a: MS:1000496 ! instrument attribute [Term] id: MS:1000033 name: deisotoping def: "The removal of isotopes to represent the fragment ion as one data point and is commonly done to reduce complexity. It is done in conjunction with the charge state deconvolution." [PSI:MS] is_a: MS:1000543 ! data processing action [Term] id: MS:1000034 name: charge deconvolution def: "The determination of the mass of an ion based on the mass spectral peaks that represent multiple-charge ions." [PSI:MS] is_a: MS:1000543 ! data processing action [Term] id: MS:1000035 name: peak picking def: "Spectral peak processing conducted on the acquired data to convert profile data to centroided data." [PSI:MS] is_a: MS:1000543 ! data processing action [Term] id: MS:1000036 name: scan mode def: "TODO: Add definition." [PSI:MS] is_obsolete: true [Term] id: MS:1000037 name: polarity def: "Terms to describe the polarity setting of the instrument." [PSI:MS] relationship: part_of MS:1000459 ! spectrum instrument description [Term] id: MS:1000038 name: minute def: "Acquisition time in minutes. Replace by MS:1000016 - Scan Time." [PSI:MS] is_a: MS:1000550 ! time unit [Term] id: MS:1000039 name: second def: "Acquisition time in seconds. Replace by MS:1000016 - Scan Time." [PSI:MS] is_a: MS:1000550 ! time unit [Term] id: MS:1000040 name: m/z def: "Three-character symbol m/z is used to denote the quantity formed by dividing the mass of an ion in unified atomic mass units by its charge number (regardless of sign). The symbol is written in italicized lower case letters with no spaces. Note 1: The term mass-to-charge-ratio is deprecated. Mass-to-charge ratio has been used for the abscissa of a mass spectrum, although the quantity measured is not the quotient of the ion's mass to its electric charge. The three-character symbol m/z is recommended for the quantity that is the independent variable in a mass spectrum Note 2: The proposed unit Thomson (Th) is deprecated." [PSI:MS] synonym: "Mass-to-charge ratio" EXACT [] synonym: "Th" EXACT [] synonym: "Thomson" EXACT [] is_a: MS:1000455 ! ion selection attribute is_a: MS:1000460 ! unit [Term] id: MS:1000041 name: charge state def: "The charge state of the ion, single or multiple and positive or negatively charged." [PSI:MS] is_a: MS:1000455 ! ion selection attribute [Term] id: MS:1000042 name: intensity def: "Intensity of ions as measured by the height or area of a peak in a mass spectrum." [PSI:MS] is_a: MS:1000455 ! ion selection attribute [Term] id: MS:1000043 name: intensity unit def: "Intensity units are commonly arbitrary. Detected in counts per second (cps) when using counting detectors, but measured in volts when using analog detectors." [PSI:MS] is_a: MS:1000460 ! unit [Term] id: MS:1000044 name: dissociation method def: "Fragmentation method used for dissociation or fragmentation." [PSI:MS] synonym: "Activation Method" RELATED [] relationship: part_of MS:1000456 ! precursor activation [Term] id: MS:1000045 name: collision energy def: "Energy for an ion experiencing collision with a stationary gas particle resulting in dissociation of the ion." [PSI:MS] is_a: MS:1000510 ! precursor activation attribute [Term] id: MS:1000046 name: energy unit def: "Energy units are represented in either eV or Joules." [PSI:MS] is_a: MS:1000460 ! unit [Term] id: MS:1000047 name: emulsion def: "State if the sample is in emulsion form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000048 name: gas def: "State if the sample is in gaseous form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000049 name: liquid def: "State if the sample is in liquid form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000050 name: solid def: "State if the sample is in solid form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000051 name: solution def: "State if the sample is in solution form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000052 name: suspension def: "State if the sample is in suspension form." [PSI:MS] is_a: MS:1000003 ! sample state [Term] id: MS:1000053 name: sample batch def: "Sample batch lot identifier." [PSI:MS] is_a: MS:1000548 ! sample attribute [Term] id: MS:1000054 name: chromatography def: "Chromatographic conditions used to obtain the sample." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000055 name: continuous flow fast atom bombardment def: "Fast atom bombardment ionization in which the analyte in solution is entrained in a flowing liquid matrix." [PSI:MS] synonym: "CF-FAB" EXACT [] is_a: MS:1000007 ! inlet type [Term] id: MS:1000056 name: direct inlet def: "The sample is directly inserted into the ion source, usually on the end of a heatable probe." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000057 name: electrospray inlet def: "Inlet used for introducing the liquid sample into an electrospray ionization source." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000058 name: flow injection analysis def: "Sample is directly injected or infused into the ionization source." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000059 name: inductively coupled plasma def: "A gas discharge ion source in which the energy to the plasma is supplied by electromagnetic induction." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000060 name: infusion def: "The continuous flow of solution of a sample into the ionization source." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000061 name: jet separator def: "A device that separates carrier gas from gaseous analyte molecules on the basis of diffusivity." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000062 name: membrane separator def: "A device to separate carrier molecules from analyte molecules on the basis of ease of diffusion across a semipermeable membrane." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000063 name: moving belt def: "Continuous moving surface in the form of a belt which passes through an ionsource carrying analyte molecules." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000064 name: moving wire def: "Continuous moving surface in the form of a wire which passes through an ionsource carrying analyte molecules." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000065 name: open split def: "A division of flowing stream of liquid into two streams." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000066 name: particle beam def: "Method for generating ions from a solution of an analyte." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000067 name: reservoir def: "A sample inlet method involving a reservoir." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000068 name: septum def: "A disc composed of a flexible material that seals the entrance to the reservoir. Can also be enterance to the vaccum chamber." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000069 name: thermospray inlet def: "A method for generating gas phase ions from a solution of an analyte by rapid heating of the sample." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000070 name: atmospheric pressure chemical ionization def: "Chemical ionization that takes place at atmospheric pressure as opposed to the reduced pressure is normally used for chemical ionization." [PSI:MS] synonym: "APCI" EXACT [] is_a: MS:1000240 ! atmospheric pressure ionization [Term] id: MS:1000071 name: chemical ionization def: "The formation of a new ion by the reaction of a neutral species with an ion. The process may involve transfer of an electron, a proton or other charged species between the reactants. When a positive ion results from chemical ionization the term may be used without qualification. When a negative ion results the term negative ion chemical ionization should be used. Note that this term is not synonymous with chemi-ionization." [PSI:MS] synonym: "CI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000072 name: Electronic Ionization def: "The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended.\nOBSOLETE because redundant \nreplaced by MS:1000389 electron ionization" [PSI:MS] synonym: "EI" EXACT [] is_obsolete: true [Term] id: MS:1000073 name: electrospray ionization def: "A process in which ionized species in the gas phase are produced from an analyte-containing solution via highly charged fine droplets, by means of spraying the solution from a narrow-bore needle tip at atmospheric pressure in the presence of a high electric field. When a pressurized gas is used to aid in the formation of a stable spray, the term pneumatically assisted electrospray ionization is used. The term ion spray is not recommended." [PSI:MS] synonym: "ESI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000074 name: fast atom bombardment ionization def: "The ionization of any species by the interaction of a focused beam of neutral atoms having a translational energy of several thousand eV with a sample that is typically dissolved in a solvent matrix. See also secondary ionization." [PSI:MS] synonym: "FAB" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000075 name: matrix-assisted laser desorption ionization def: "The formation of gas-phase ions from molecules that are present in a solid or solvent matrix that is irradiated with a pulsed laser. See also laser desorption/ionization." [PSI:MS] synonym: "MALDI" EXACT [] is_a: MS:1000247 ! desorption ionization [Term] id: MS:1000076 name: negative ion mode def: "TODO: Add defintion." [PSI:MS] is_obsolete: true [Term] id: MS:1000077 name: positive ion mode def: "TODO: Add definition." [PSI:MS] is_obsolete: true [Term] id: MS:1000078 name: axial ejection linear ion trap def: "A linear ion trap mass spectrometer where ions are ejected along the axis of the analyzer." [PSI:MS] is_a: MS:1000264 ! ion trap [Term] id: MS:1000079 name: fourier transform ion cyclotron resonance mass spectrometer def: "A mass spectrometer based on the principle of ion cyclotron resonance in which an ion in a magnetic field moves in a circular orbit at a frequency characteristic of its m/z value. Ions are coherently excited to a larger radius orbit using a pulse of radio frequency energy and their image charge is detected on receiver plates as a time domain signal. Fourier transformation of the time domain signal results in a frequency domain signal which is converted to a mass spectrum based in the inverse relationship between frequency and m/z." [PSI:MS] synonym: "FT_ICR" EXACT [] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000080 name: magnetic sector def: "A device that produces a magnetic field perpendicular to a charged particle beam that deflects the beam to an extent that is proportional to the particle momentum per unit charge. For a monoenergetic beam, the deflection is proportional to m/z." [PSI:MS] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000081 name: quadrupole def: "A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis." [PSI:MS] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000082 name: quadrupole ion trap def: "Quadrupole Ion Trap mass analyzer captures the ions in a three dimensional ion trap and then selectively ejects them by varying the RF and DC potentials." [PSI:MS] synonym: "Paul Ion trap" EXACT [] synonym: "QIT" EXACT [] synonym: "Quistor" EXACT [] is_a: MS:1000264 ! ion trap [Term] id: MS:1000083 name: radial ejection linear ion trap def: "A linear ion trap mass spectrometer where ions are ejected along the radius of the analyzer." [PSI:MS] is_a: MS:1000264 ! ion trap [Term] id: MS:1000084 name: time-of-flight def: "Instrument that separates ions by m/z in a field-free region after acceleration to a fixed acceleration energy." [PSI:MS] synonym: "TOF" EXACT [] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000085 name: baseline def: "An attribute of resolution when recording the detector response in absence of the analyte." [PSI:MS] is_a: MS:1000012 ! resolution measurement method [Term] id: MS:1000086 name: full width at half-maximum def: "A measure of resolution represented as width of the peak at half peak height." [PSI:MS] synonym: "FWHM" EXACT [] is_a: MS:1000012 ! resolution measurement method [Term] id: MS:1000087 name: ten percent valley def: "An attribute of resolution when the ratio between adjacent signals is 10% of the signal height." [PSI:MS] is_a: MS:1000012 ! resolution measurement method [Term] id: MS:1000088 name: constant def: "When resolution is constant with respect to m/z." [PSI:MS] is_a: MS:1000013 ! resolution type [Term] id: MS:1000089 name: proportional def: "When resolution is proportional with respect to m/z." [PSI:MS] is_a: MS:1000013 ! resolution type [Term] id: MS:1000090 name: mass scan def: "A variation of instrument where a selected mass is scanned." [PSI:MS] is_a: MS:1000017 ! Scan Function [Term] id: MS:1000091 name: selected ion detection def: "Please see Single Ion Monitoring." [PSI:MS] is_a: MS:1000017 ! Scan Function [Term] id: MS:1000092 name: decreasing m/z scan def: "High to low direction in terms of m/z of the scan for scanning analyzers." [PSI:MS] is_a: MS:1000018 ! scan direction [Term] id: MS:1000093 name: increasing m/z scan def: "Low to high direction in terms of m/z of the scan for scanning analyzers." [PSI:MS] is_a: MS:1000018 ! scan direction [Term] id: MS:1000094 name: exponential def: "The mass scan is done in exponential mode." [PSI:MS] is_a: MS:1000019 ! scan law [Term] id: MS:1000095 name: linear def: "The mass scan is done in linear mode." [PSI:MS] is_a: MS:1000019 ! scan law [Term] id: MS:1000096 name: quadratic def: "The mass scan is done in quadratic mode." [PSI:MS] is_a: MS:1000019 ! scan law [Term] id: MS:1000097 name: constant neutral mass loss def: "A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000098 name: multiple ion monitoring def: "Data acquired when monitoring the ion current of a few specific m/z values. Remap to MS:1000205 -Selected Ion Monitoring." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000099 name: multiple reaction monitoring def: "This term is not recommended. See Selected Reaction Monitoring. Replace by MS:1000206 - Selected Reaction Monitoring." [PSI:MS] synonym: "MRM" EXACT [] is_obsolete: true [Term] id: MS:1000100 name: precursor ion scan def: "The specific scan function or process that will record a precursor ion spectrum." [PSI:MS] is_a: MS:1000020 ! scanning method [Term] id: MS:1000101 name: product ion scan def: "The specific scan function or process that records product ion spectrum." [PSI:MS] is_a: MS:1000020 ! scanning method [Term] id: MS:1000102 name: single ion monitoring def: "The operation of a mass spectrometer to monitor a single ion rather than scanning entire mass spectrum. Remap to MS:1000205." [PSI:MS] is_obsolete: true [Term] id: MS:1000103 name: single reaction monitoring def: "See Selected Reaction Monitoring.\nremap to MS:1000102." [PSI:MS] is_obsolete: true [Term] id: MS:1000104 name: None ?? def: "None." [PSI:MS] is_obsolete: true [Term] id: MS:1000105 name: reflectron off def: "Reflectron is off." [PSI:MS] is_a: MS:1000021 ! reflectron state [Term] id: MS:1000106 name: reflectron on def: "Reflectron is on." [PSI:MS] is_a: MS:1000021 ! reflectron state [Term] id: MS:1000107 name: channeltron def: "A horn-shaped continuous dynode particle multiplier. The ion strikes the inner surface of the device and induces the production of secondary electrons that in turn impinge on the inner surfaces to produce more secondary electrons. This avalanche effect produces an increase in signal in the final measured current pulse." [PSI:MS] synonym: "Channeltron Detector" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000108 name: conversion dynode electron multiplier def: "A surface that is held at high potential so that ions striking the surface produce electrons that are subsequently detected." [PSI:MS] is_a: MS:1000346 ! conversion dynode [Term] id: MS:1000109 name: conversion dynode photomultiplier def: "A detector in which ions strike a conversion dynode to produce electrons that in turn generate photons through a phosphorescent screen that are detected by a photomultiplier." [PSI:MS] synonym: "ion-to-photon detector" RELATED [] is_a: MS:1000346 ! conversion dynode [Term] id: MS:1000110 name: daly detector def: "Detector consisting of a conversion dynode, scintillator and photomultiplier. The metal knob at high potential emits secondary electrons when ions impinge on the surface. The secondary electrons are accelerated onto the scintillator that produces light that is then detected by the photomultiplier detector." [PSI:MS] synonym: "Daly" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000111 name: electron multiplier tube def: "A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons." [PSI:MS] synonym: "EMT" EXACT [] is_a: MS:1000253 ! electron multiplier [Term] id: MS:1000112 name: faraday cup def: "A conducting cup or chamber that intercepts a charged particle beam and is electrically connected to a current measuring device." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000113 name: focal plane array def: "An array of detectors for spatially disperse ion beams in which all ions simultaneously impinge on the detector plane." [PSI:MS] is_a: MS:1000348 ! focal plane collector [Term] id: MS:1000114 name: microchannel plate detector def: "A thin plate that contains a closely spaced array of channels that each act as a continuous dynode particle multiplier. A charged particle, fast neutral particle, or photon striking the plate causes a cascade of secondary electrons that ultimately exits the opposite side of the plate." [PSI:MS] synonym: "multichannel plate" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000115 name: multi-collector def: "A detector system commonly used in inductively coupled plasma mass spectrometers." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000116 name: photomultiplier def: "A detector for conversion of the ion/electron signal into photon(s) which are then amplified and detected." [PSI:MS] synonym: "PMT" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000117 name: analog-digital converter def: "Analog-to-digital converter (abbreviated ADC, A/D or A to D) is an electronic integrated circuit (i/c) that converts continuous signals to discrete digital numbers." [PSI:MS] synonym: "ADC" EXACT [] is_a: MS:1000027 ! detector acquisition mode [Term] id: MS:1000118 name: pulse counting def: "Definition to do." [PSI:MS] is_a: MS:1000027 ! detector acquisition mode [Term] id: MS:1000119 name: time-digital converter def: "A device for converting a signal of sporadic pluses into a digital representation of their time indices." [PSI:MS] synonym: "TDC" EXACT [] is_a: MS:1000027 ! detector acquisition mode [Term] id: MS:1000120 name: transient recorder def: "A detector acquisition mode used for detecting transient signals." [PSI:MS] is_a: MS:1000027 ! detector acquisition mode [Term] id: MS:1000121 name: AB SCIEX instrument model def: "The brand of instruments from the joint venture between Applied Biosystems and MDS Analytical Technologies (formerly MDS SCIEX). Previously branded as \"Applied Biosystems|MDS SCIEX\"" [PSI:MS] synonym: "Applied Biosystems|MDS SCIEX" RELATED [] is_a: MS:1000031 ! instrument model [Term] id: MS:1000122 name: Bruker Daltonics instrument model def: "Bruker Daltonics instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000123 name: IonSpec instrument model def: "IonSpec corporation instrument model." [PSI:MS] is_a: MS:1000489 ! Varian instrument model [Term] id: MS:1000124 name: Shimadzu instrument model def: "Shimadzu corporation instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000125 name: Thermo Finnigan instrument model def: "ThermoFinnigan from Thermo Electron Corporation instrument model." [PSI:MS] is_a: MS:1000483 ! Thermo Fisher Scientific instrument model [Term] id: MS:1000126 name: Waters instrument model def: "Waters Corporation instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000127 name: centroid mass spectrum def: "Processing of profile data to produce spectra that contains discrete peaks of zero width. Often used to reduce the size of dataset." [PSI:MS] synonym: "Discrete Mass Spectrum" EXACT [] is_a: MS:1000525 ! spectrum representation [Term] id: MS:1000128 name: profile mass spectrum def: "A profile mass spectrum is created when data is recorded with ion current (counts per second) on one axis and mass/charge ratio on another axis." [PSI:MS] synonym: "continuous mass spectrum" EXACT [] synonym: "Continuum Mass Spectrum" EXACT [] is_a: MS:1000525 ! spectrum representation [Term] id: MS:1000129 name: negative scan def: "Polarity of the scan is negative." [PSI:MS] is_a: MS:1000037 ! polarity is_a: MS:1000465 ! scan polarity [Term] id: MS:1000130 name: positive scan def: "Polarity of the scan is positive." [PSI:MS] is_a: MS:1000037 ! polarity is_a: MS:1000465 ! scan polarity [Term] id: MS:1000131 name: number of counts def: "TODO: Add definition." [PSI:MS] is_a: MS:1000043 ! intensity unit [Term] id: MS:1000132 name: percent of base peak def: "TODO: Add definition." [PSI:MS] is_a: MS:1000043 ! intensity unit [Term] id: MS:1000133 name: collision-induced dissociation def: "The dissociation of an ion after collisional excitation. The term collisional-activated dissociation is not recommended." [PSI:MS] synonym: "CID" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000134 name: plasma desorption def: "The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization." [PSI:MS] synonym: "PD" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000135 name: post-source decay def: "A technique specific to reflectron time-of-flight mass spectrometers where product ions of metastable transitions or collision-induced dissociations generated in the drift tube prior to entering the reflectron are m/z separated to yield product ion spectra." [PSI:MS] synonym: "PSD" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000136 name: surface-induced dissociation def: "Fragmentation that results from the collision of an ion with a surface." [PSI:MS] synonym: "SID" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000137 name: electron volt def: "A non-SI unit of energy (eV) defined as the energy acquired by a particle containing one unit of charge through a potential difference of one volt. An electron-volt is equal to 1.602 176 53(14) x 10^-19 J." [PSI:MS] synonym: "eV" EXACT [] is_a: MS:1000046 ! energy unit [Term] id: MS:1000138 name: percent collision energy def: "Collision energy required to fragment an ion represented as a percent value." [PSI:MS] is_a: MS:1000046 ! energy unit [Term] id: MS:1000139 name: 4000 Q TRAP def: "Applied Biosystems/MDS SCIEX Q 4000 TRAP MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000140 name: 4700 Proteomics Analyzer def: "Applied Biosystems/MDS SCIEX 4700 Proteomics Analyzer MS." [PSI:MS] is_a: MS:1000495 ! Applied Biosystems instrument model [Term] id: MS:1000141 name: APEX IV def: "Bruker Daltonics APEX IV MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000142 name: APEX-Q def: "Bruker Daltonics APEX-Q MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000143 name: API 150EX def: "Applied Biosystems/MDS SCIEX API 150EX MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000144 name: API 150EX Prep def: "Applied Biosystems/MDS SCIEX API 150EX Prep MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000145 name: API 2000 def: "Applied Biosystems/MDS SCIEX API 2000 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000146 name: API 3000 def: "Applied Biosystems/MDS SCIEX API 3000 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000147 name: API 4000 def: "Applied Biosystems/MDS SCIEX API 4000 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000148 name: autoFlex II def: "Bruker Daltonics autoFlex II MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000149 name: autoFlex TOF/TOF def: "Bruker Daltonics autoFlex TOF/TOF MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000150 name: Auto Spec Ultima NT def: "Waters AutoSpec Ultima NT MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000151 name: Bio TOF II def: "Bruker Daltonics BioTOF II MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000152 name: Bio TOF Q def: "Bruker Daltonics BioTOF Q MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000153 name: DELTA plusAdvantage def: "ThermoFinnigan DELTA plusAdvantage MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000154 name: DELTAplusXP def: "ThermoFinnigan DELTAplusXP MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000155 name: ELEMENT2 def: "ThermoFinnigan ELEMENT2 MS." [PSI:MS] is_a: MS:1000492 ! Thermo Electron instrument model [Term] id: MS:1000156 name: esquire4000 def: "Bruker Daltonics esquire4000 MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000157 name: esquire6000 def: "Bruker Daltonics esquire6000 MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000158 name: explorer def: "IonSpec Explorer MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000159 name: GCT def: "Waters GCT MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000160 name: HCT def: "Bruker Daltonics HCT MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000161 name: HCT Plus def: "Bruker Daltonics HCTPlus MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000162 name: HiRes ESI def: "IonSpec HiResESI MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000163 name: HiRes MALDI def: "IonSpec HiResMALDI MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000164 name: IsoPrime def: "Waters IsoPrime MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000165 name: IsoProbe def: "Waters IsoProbe MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000166 name: IsoProbe T def: "Waters IsoProbe T MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000167 name: LCQ Advantage def: "ThermoFinnigan LCQ Advantage MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000168 name: LCQ Classic def: "ThermoFinnigan LCQ Classic MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000169 name: LCQ Deca XP Plus def: "ThermoFinnigan LCQ Deca XP Plus MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000170 name: M@LDI L def: "Waters MALDI L MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000171 name: M@LDI LR def: "Waters MALDI LR MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000172 name: MAT253 def: "ThermoFinnigan MAT253 MS." [PSI:MS] is_a: MS:1000493 ! Finnigan MAT instrument model [Term] id: MS:1000173 name: MAT900XP def: "ThermoFinnigan MAT900XP MS." [PSI:MS] is_a: MS:1000493 ! Finnigan MAT instrument model [Term] id: MS:1000174 name: MAT900XP Trap def: "ThermoFinnigan MAT900XP Trap MS." [PSI:MS] is_a: MS:1000493 ! Finnigan MAT instrument model [Term] id: MS:1000175 name: MAT95XP def: "ThermoFinnigan MAT95XP MS." [PSI:MS] is_a: MS:1000493 ! Finnigan MAT instrument model [Term] id: MS:1000176 name: MAT95XP Trap def: "ThermoFinnigan MAT95XP Trap MS." [PSI:MS] is_a: MS:1000493 ! Finnigan MAT instrument model [Term] id: MS:1000177 name: microFlex def: "Bruker Daltonics microFlex MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000178 name: microTOFLC def: "Bruker Daltonics microTOFLC MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000179 name: neptune def: "ThermoFinnigan NEPTUNE MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000180 name: NG-5400 def: "Waters NG-5400 MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000181 name: OMEGA def: "IonSpec OMEGA MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000182 name: OMEGA-2001 def: "IonSpec OMEGA-2001 MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000183 name: OmniFlex def: "Bruker Daltonics OminFlex MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000184 name: Platform ICP def: "Waters Platform ICP MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000185 name: PolarisQ def: "ThermoFinnigan PolarisQ MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000186 name: proteomics solution 1 def: "Applied Biosystems/MDS SCIEX Proteomics Solution 1 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000187 name: Q TRAP def: "Applied Biosystems/MDS SCIEX Q TRAP MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000188 name: Q-Tof micro def: "Waters Q-Tof micro MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000189 name: Q-Tof ultima def: "Waters Q-Tof Ultima MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000190 name: QSTAR def: "Applied Biosystems/MDS SCIEX QSTAR MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000191 name: quattro micro def: "Waters Quattro micro MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000192 name: Quattro UItima def: "Waters Quattro Uitima MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000193 name: Surveyor MSQ def: "ThermoFinnigan Surveyor MSQ MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000194 name: SymBiot I def: "Applied Biosystems/MDS SCIEX SymBiot I MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000195 name: SymBiot XVI def: "Applied Biosystems/MDS SCIEX SymBiot XVI MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000196 name: TEMPUS TOF def: "ThermoFinnigan TEMPUS TOF MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000197 name: TRACE DSQ def: "ThermoFinnigan TRACE DSQ MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000198 name: TRITON def: "ThermoFinnigan TRITON MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000199 name: TSQ Quantum def: "ThermoFinnigan TSQ Quantum MS." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000200 name: ultima def: "IonSpec Ultima MS." [PSI:MS] is_a: MS:1000123 ! IonSpec instrument model [Term] id: MS:1000201 name: ultraFlex def: "Bruker Daltonics ultraFlex MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000202 name: ultraFlex TOF/TOF def: "Bruker Daltonics ultraFlex TOF/TOF MS." [PSI:MS] is_a: MS:1000122 ! Bruker Daltonics instrument model [Term] id: MS:1000203 name: Voyager-DE PRO def: "Applied Biosystems/MDS SCIEX Voyager-DE PRO MS." [PSI:MS] is_a: MS:1000495 ! Applied Biosystems instrument model [Term] id: MS:1000204 name: Voyager-DE STR def: "Applied Biosystems/MDS SCIEX Voyager-DE STR MS." [PSI:MS] is_a: MS:1000495 ! Applied Biosystems instrument model [Term] id: MS:1000205 name: selected ion monitoring def: "The operation of a mass spectrometer in which the intensities of several specific m/z values are recorded rather than the entire mass spectrum." [PSI:MS] synonym: "MIM" RELATED [] synonym: "Multiple Ion Monitoring" EXACT [] synonym: "SIM" EXACT [] is_a: MS:1000020 ! scanning method [Term] id: MS:1000206 name: selected reaction monitoring def: "Data acquired from specific product ions corresponding to m/z selected precursor ions recorded via multiple stages of mass spectrometry. Selected reaction monitoring can be performed in time or in space." [PSI:MS] synonym: "MRM" RELATED [] synonym: "Multiple Reaction Monitoring" RELATED [] synonym: "SRM" EXACT [] is_a: MS:1000020 ! scanning method [Term] id: MS:1000207 name: accurate mass def: "An experimentally determined mass that is can be to determine a unique elemental formula. For ions less than 200 u, a measurement with 5 ppm accuracy is sufficient to determine the elemental composition." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000208 name: average mass def: "The mass of an ion or molecule calculated using the average mass of each element weighted for its natural isotopic abundance." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000209 name: appearance energy def: "The minimum energy that must be imparted to an atom or molecule to produce a specified ion. The term appearance potential is not recommended." [PSI:MS] synonym: "AE" EXACT [] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000210 name: base peak def: "The peak in a mass spectrum that has the greatest intensity. This term may be applied to the spectra of pure substances or mixtures." [PSI:MS] synonym: "BP" EXACT [] is_a: MS:1000231 ! peak [Term] id: MS:1000211 name: charge number def: "The total charge on an ion divided by the electron charge e." [PSI:MS] synonym: "z" EXACT [] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000212 name: Dalton def: "A non-SI unit of mass (symbol Da) that is equal to the unified atomic mass unit: 1.660 538 86(28) x 10^-27 kg." [PSI:MS] synonym: "Da" EXACT [] is_a: MS:1000464 ! mass unit [Term] id: MS:1000213 name: electron affinity def: "The electron affinity of M is the minimum energy required for the process M- ? M + e where M- and M are in their ground rotational, vibrational and electronic states and the electron has zero kinetic energy." [PSI:MS] synonym: "EA" EXACT [] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000214 name: electron energy obsolete def: "The potential difference through which electrons are accelerated before they are used to bring about electron ionization." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000215 name: exact mass def: "The calculated mass of an ion or molecule containing a single isotope of each atom." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000216 name: field-free region def: "A section of a mass spectrometer in which there are no electric or magnetic fields." [PSI:MS] synonym: "FFR" EXACT [] is_a: MS:1000487 ! ion optics attribute [Term] id: MS:1000217 name: ionization cross section def: "A measure of the probability that a given ionization process will occur when an atom or\nmolecule interacts with a photon, electron, atom or molecule." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000218 name: ioniazation efficiency def: "The ratio of the number of ions formed to the number of electrons, molecules or photons used. See Ionization Efficiency." [PSI:MS] is_obsolete: true [Term] id: MS:1000219 name: ionization energy def: "The minimum energy required to remove an electron from an atom or molecule to produce a positive ion." [PSI:MS] synonym: "IE" EXACT [] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000220 name: isotope dilution mass spectrometry def: "A quantitative mass spectrometry technique in which an isotopically enriched compound is used as an internal standard." [PSI:MS] synonym: "IDMS" EXACT [] is_a: MS:1000268 ! mass spectrometry [Term] id: MS:1000221 name: magnetic deflection def: "The deflection of charged particles in a magnetic field due to a force equal to qv B where q is the particle charge, v its velocity and B the magnetic field. Magnetic deflection of an ion beam is used for m/z separation in a magnetic sector mass spectrometer." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000222 name: mass defect def: "The difference between the monoisotipic and nominal mass of a molecule or atom." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000223 name: mass number def: "The sum of the protons and neutrons in an atom, molecule or ion." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000224 name: molecular mass def: "The mass of one mole of a molecular substance (6.022 1415(10) x 10^23 molecules)." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000225 name: monoisotopic mass def: "The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000226 name: molecular beam mass spectrometry def: "A mass spectrometry technique in which the sample is introduced into the mass spectrometer as a molecular beam." [PSI:MS] synonym: "MBMS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000227 name: multiphoton ionization def: "Photoionization of an atom or molecule in which in two or more photons are absorbed." [PSI:MS] synonym: "MPI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000228 name: nitrogen rule def: "An organic molecule containing the elements C, H, O, S, P, or halogen has an odd nominal mass if it contains an odd number of nitrogen atoms." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000229 name: nominal mass def: "The mass of an ion or molecule calculated using the mass of the most abundant isotope of each element rounded to the nearest integer value." [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000230 name: odd-electron rule def: "Odd-electron ions may dissociate to form either odd or even-electron ions, whereas even-electron ions generally form even-electron fragment ions." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000231 name: peak def: "A localized region of relatively large ion signal in a mass spectrum. Although peaks are often associated with particular ions, the terms peak and ion should not be used interchangeably." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000232 name: peak intensity def: "The height or area of a peak in a mass spectrum. Replaced by MS:1000505 Base Peak Intensity." [PSI:MS] is_obsolete: true [Term] id: MS:1000233 name: proton affinity def: "The proton affinity of a species M is defined as the negative of the enthalpy change for the\nreaction M + H+ ->[M+H]+, where all species are in their ground rotational, vibrational and electronic states." [PSI:MS] synonym: "PA" EXACT [PSI:MS] is_a: MS:1000507 ! ion attribute [Term] id: MS:1000234 name: mass resolving power def: "In a mass spectrum, the observed mass divided by the difference between two masses that can be separated. The method by which delta m was obtained and the mass at which the measurement was made should be reported." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000235 name: total ion current chromatogram def: "Chromatogram obtained by plotting the total ion current detected in each of a series of mass spectra recorded as a function of retention time." [PSI:MS] synonym: "TIC chromatogram" EXACT [] is_a: MS:1000524 ! data file content is_a: MS:1000626 ! chromatogram type [Term] id: MS:1000236 name: transmission def: "The ratio of the number of ions leaving a region of a mass spectrometer to the number entering that region." [PSI:MS] is_a: MS:1000496 ! instrument attribute [Term] id: MS:1000237 name: unified atomic mass unit def: "A non-SI unit of mass (u) defined as one twelfth of ^12 C in its ground state and equal to 1.660 538 86(28) x 10^-27 kg." [PSI:MS] synonym: "u" EXACT [] is_a: MS:1000464 ! mass unit [Term] id: MS:1000238 name: accelerator mass spectrometry def: "A mass spectrometry technique in which atoms extracted from a sample are ionized, accelerated to MeV energies and separated according to their momentum, charge and energy." [PSI:MS] synonym: "AMS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000239 name: atmospheric pressure matrix-assisted laser desorption ionization def: "Matrix-assisted laser desorption ionization in which the sample target is at atmospheric pressure and the ions formed by the pulsed laser are sampled through a small aperture into the mass spectrometer." [PSI:MS] synonym: "AP MALDI" EXACT [] is_a: MS:1000240 ! atmospheric pressure ionization [Term] id: MS:1000240 name: atmospheric pressure ionization def: "Any ionization process in which ions are formed in the gas phase at atmospheric pressure." [PSI:MS] synonym: "API" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000241 name: Atmostpheric Pressure Photoionization def: "Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization.\nOBSOLETE because redundant\nreplace by MS:1000382 atmospheric pressure photoionization" [PSI:MS] synonym: "APPI" EXACT [] is_obsolete: true [Term] id: MS:1000242 name: blackbody infrared radiative dissociation def: "A special case of infrared multiphoton dissociation wherein excitation of the reactant ion is caused by absorption of infrared photons radiating from heated blackbody surroundings, which are usually the walls of a vacuum chamber. See also infrared multiphoton dissociation." [PSI:MS] synonym: "BIRD" EXACT [] is_a: MS:1000044 ! dissociation method is_a: MS:1000437 ! ion reaction [Term] id: MS:1000243 name: charge-remote fragmentation def: "A fragmentation of an even-electron ion in which the cleaved bond is not adjacent to the apparent charge site." [PSI:MS] synonym: "CRF" EXACT [] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000244 name: consecutive reaction monitoring def: "MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored." [PSI:MS] synonym: "CRM" EXACT [] is_a: MS:1000020 ! scanning method [Term] id: MS:1000245 name: charge stripping def: "The reaction of a positive ion with an atom or molecule that results in the removal of one or more electrons from the ion." [PSI:MS] synonym: "CS" EXACT [] relationship: part_of MS:1000456 ! precursor activation [Term] id: MS:1000246 name: delayed extraction def: "The application of the accelerating voltage pulse after a time delay in desorption ionization from a surface. The extraction delay can produce energy focusing in a time-of-flight mass spectrometer." [PSI:MS] synonym: "DE" EXACT [] is_a: MS:1000597 ! ion optics type relationship: part_of MS:1000456 ! precursor activation [Term] id: MS:1000247 name: desorption ionization def: "The formation of ions from a solid or liquid material after the rapid vaporization of that sample." [PSI:MS] synonym: "DI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000248 name: direct insertion probe def: "A device for introducing a solid or liquid sample into a mass spectrometer ion source for desorption ionization." [PSI:MS] synonym: "DIP" EXACT [] is_a: MS:1000007 ! inlet type [Term] id: MS:1000249 name: direct liquid introduction def: "The delivery of a liquid sample into a mass spectrometer for spray or desorption ionization." [PSI:MS] synonym: "DLI" EXACT [] is_a: MS:1000007 ! inlet type [Term] id: MS:1000250 name: electron capture dissociation def: "A process in which a multiply protonated molecules interacts with a low energy electrons. Capture of the electron leads the liberation of energy and a reduction in charge state of the ion with the production of the (M + nH) (n-1)+ odd electron ion, which readily fragments." [PSI:MS] synonym: "ECD" EXACT [] is_a: MS:1000044 ! dissociation method is_a: MS:1000437 ! ion reaction [Term] id: MS:1000251 name: even-electron ion def: "An ion containing no unpaired electrons in its ground electronic state, e.g. CH3+ in its ground state." [PSI:MS] synonym: "EE" EXACT [] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000252 name: electron-induced excitation in organics def: "The reaction of an ion with an electron in which the translational energy of the collision is converted into internal energy of the ion." [PSI:MS] synonym: "EIEIO" EXACT [] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000253 name: electron multiplier def: "A device to amplify the current of a beam or packet of charged particles or photons by incidence upon the surface of an electrode to produce secondary electrons. The secondary electrons are then accelerated to other electrodes or parts of a continuous electrode to produce further secondary electrons." [PSI:MS] synonym: "EM" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000254 name: electrostatic energy analyzer def: "A device consisting of conducting parallel plates, concentric cylinders or concentric spheres that separates charged particles according to their kinetic energy by means of an electric field that is constant in time." [PSI:MS] synonym: "ESA" EXACT [] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000255 name: flowing afterglow def: "An ion source immersed in a flow of helium or other inert buffer gas that carries the ions through a meter-long reactor at pressures around 100 Pa." [PSI:MS] synonym: "FA" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000256 name: high-field asymmetric waveform ion mobility spectrometry def: "The separation of ions between two concentric cylindrical electrodes due to application of a high voltage asymmetric waveform whereby ions migrate towards one of the two electrodes depending on the ratio of the high- to low-field mobility of the ion." [PSI:MS] synonym: "FAIMS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000257 name: field desorption def: "The formation of gas-phase ions from a material deposited on a solid surface in the presence of a high electric field. Because this process may encompass ionization by field ionization or other mechanisms, it is not recommended as a synonym for field desorption ionization." [PSI:MS] synonym: "FD" EXACT [] is_a: MS:1000247 ! desorption ionization [Term] id: MS:1000258 name: field ionization def: "The removal of electrons from any species by interaction with a high electric field." [PSI:MS] synonym: "FI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000259 name: glow discharge ionization def: "The formation of ions in the gas phase and from solid samples at the cathode by application of a voltage to a low pressure gas." [PSI:MS] synonym: "GD-MS" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000260 name: ion kinetic energy spectrometry def: "A method of analysis in which a beam of ions is separated according to the ratio of its translational energy to charge." [PSI:MS] synonym: "IKES" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000261 name: ion mobility spectrometry def: "The separation of ions according to their velocity through a buffer gas under the influence of an electric field." [PSI:MS] synonym: "IMS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000262 name: infrared multiphoton dissociation def: "Multiphoton ionization where the reactant ion dissociates as a result of the absorption of multiple infrared photons." [PSI:MS] synonym: "IRMPD" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000263 name: isotope ratio mass spectrometry def: "The measurement of the relative quantity of the different isotopes of an element in a material with a mass spectrometer." [PSI:MS] synonym: "IRMS" EXACT [] is_a: MS:1000268 ! mass spectrometry [Term] id: MS:1000264 name: ion trap def: "A device for spatially confining ions using electric and magnetic fields alone or in combination." [PSI:MS] synonym: "IT" EXACT [] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000265 name: kinetic energy release distribution def: "Distribution of values of translational kinetic energy release for an ensemble of metastable ions undergoing a specific dissociation reaction." [PSI:MS] synonym: "KERD" EXACT [] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000266 name: Laser Desorption alt_id: MS:1000394 def: "The formation of ions through the interaction of a laser with a material or with gas-phase ions or molecules.\nOBSOLETE as redudant, replace by laser desorption ionization MS:1000393" [PSI:MS] synonym: "Laser Ionization MERGE" EXACT [] synonym: "LD" EXACT [] is_obsolete: true [Term] id: MS:1000267 name: mass analyzed ion kinetic energy spectrometry def: "Spectra that are obtained from a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector in reverse geometry. The accelerating voltage, V, and the magnetic sector field, B, are set at fixed values to select the precursor ions, which are then allowed to dissociate or to react in a field free region between the two sectors. The kinetic energy product ions of m/z selected precursor ions is analyzed by scanning the electric sector field, E. The width of the product ion spectrum peaks is related to the kinetic energy release distribution (KERD) for the dissociation process." [PSI:MS] synonym: "MIKES" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000268 name: mass spectrometry def: "The branch of science that deals with all aspects of mass spectrometers and the results obtained with these instruments." [PSI:MS] synonym: "MS" EXACT [] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000269 name: mass spectrometry/mass spectrometry def: "The acquisition, study and spectra of the electrically charged products or precursors of a m/z selected ion or ions." [PSI:MS] synonym: "MS/MS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000270 name: multiple stage mass spectrometry def: "Multiple stages of precursor ion m/z selection followed by product ion detection for successive progeny ions." [PSI:MS] synonym: "MSn" EXACT [] is_a: MS:1000445 ! sequential m/z separation method ? [Term] id: MS:1000271 name: Negative Ion chemical ionization def: "Chemical ionization that results in the formation of negative ions." [PSI:MS] synonym: "NICI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000272 name: neutralization reionization mass spectrometry def: "With this technique, m/z selected ions form neutrals by charge transfer to a collision gas or by dissociation. The neutrals are separated from the remaining ions and ionized in collisions with a second gas. This method is used to investigate reaction intermediates and other unstable species." [PSI:MS] synonym: "NRMS" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000273 name: photoionization def: "The ionization of an atom or molecule by a photon, written M + h? ? M^+ + e. The term photon impact is not recommended." [PSI:MS] synonym: "PI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000274 name: pyrolysis mass spectrometry def: "A mass spectrometry technique in which the sample is heated to the point of decomposition and the gaseous decomposition products are introduced into the ion source." [PSI:MS] synonym: "PyMS" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000275 name: collision quadrupole def: "A transmission quadrupole to which an oscillating potential is applied so as to focus a beam of ions through a collision gas with no m/z separation." [PSI:MS] synonym: "q" EXACT [] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000276 name: resonance enhanced multiphoton ionization def: "Multiphoton ionization in which the ionization cross section is significantly enhanced because the energy of the incident photons is resonant with an intermediate excited state of the neutral species." [PSI:MS] synonym: "REMPI" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000277 name: residual gas analyzer def: "A mass spectrometer used to measure the composition and pressure of gasses in an evacuated chamber." [PSI:MS] synonym: "RGA" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000278 name: surface enhanced laser desorption ionization def: "The formation of ionized species in the gas phase from analytes deposited on a particular surface substrate which is irradiated with a laser beam of which wavelength is absorbed by the surface. See also desorption/ionization on silicon and laser desorption/ionization." [PSI:MS] synonym: "SELDI" EXACT [] is_a: MS:1000406 ! surface ionization [Term] id: MS:1000279 name: surface enhanced neat desorption def: "Matrix-assisted laser desorption ionization in which the matrix is covalently linked to the target surface." [PSI:MS] synonym: "SEND" EXACT [] is_a: MS:1000406 ! surface ionization [Term] id: MS:1000280 name: suface ionization def: "The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature.\nOBSOLETE as redudant replace by MS:1000406 surface ionization" [PSI:MS] synonym: "SI" EXACT [] is_obsolete: true [Term] id: MS:1000281 name: selected ion flow tube def: "A device in which m/z selected ions are entrained in an inert carrier gas and undergo ion-molecule reactions." [PSI:MS] synonym: "SIFT" EXACT [] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000282 name: sustained off-resonance irradiation def: "A technique associated with Fourier transform ion cyclotron resonance (FT-ICR) mass spectrometry to carry out ion/neutral reactions such as low-energy collision-induced dissociation. A radio-frequency electric field of slightly off-resonance to the cyclotron frequency of the reactant ion cyclically accelerates and decelerates the reactant ion that is confined in the Penning ion trap. The ion's orbit does not exceed the dimensions of ion trap while the ion undergoes an ion/neutral species process that produces a high average translational energy for an extended time." [PSI:MS] synonym: "SORI" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000283 name: Spark Source Mass Spectrometry def: "Mass spectrometry using spark ionization.\nOBSOLETE because redundant, replace by spark ionization MS:1000404." [PSI:MS] synonym: "SSMS" EXACT [] is_obsolete: true [Term] id: MS:1000284 name: stored waveform inverse fourier transform def: "A technique to create excitation waveforms for ions in FT-ICR mass spectrometer or Paul ion trap. An excitation waveform in the time-domain is generated by taking the inverse Fourier transform of an appropriate frequency-domain programmed excitation spectrum, in which the resonance frequencies of ions to be excited are included. This technique may be used for selection of precursor ions in MS/MS experiments." [PSI:MS] synonym: "SWIFT" EXACT [] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000285 name: total ion current def: "The sum of all the separate ion currents carried by the ions of different m/z contributing to a complete mass spectrum or in a specified m/z range of a mass spectrum." [PSI:MS] synonym: "TIC" EXACT [] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000286 name: time lag focusing def: "Energy focusing in a time-of-flight mass spectrometer that is accomplished by introducing a time delay between the formation of the ions and the application of the accelerating voltage pulse." [PSI:MS] synonym: "TLF" EXACT [] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000287 name: time-of-flight mass spectrometer def: "An instrument that separates ions by m/z in a field-free region after acceleration to a fixed kinetic energy." [PSI:MS] synonym: "TOF-MS" EXACT [] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000288 name: cyclotron def: "A device that uses an oscillating electric field and magnetic field to accelerate charged particles." [PSI:MS] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000289 name: double-focusing mass spectrometer def: "A mass spectrometer that uses a magnetic sector for m/z focusing and an electric sector for energy focusing of an ion beam." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000290 name: hybrid mass spectrometer def: "A mass spectrometer that combines m/z analyzers of different types to perform tandem mass spectrometry." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000291 name: linear ion trap def: "A two dimensional Paul ion trap in which ions are confined in the axial dimension by means of an electric field at the ends of the trap." [PSI:MS] is_a: MS:1000264 ! ion trap [Term] id: MS:1000292 name: mass spectrograph obsolete def: "An instrument that separates a beam of ions according to their mass-to-charge ratio in which the ions are directed onto a focal plane detector such as a photographic plate." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000293 name: mass spectrometer def: "An instrument that measures the mass-to-charge ratio and relative abundances of ions." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000294 name: mass spectrum def: "A plot of the relative abundance of a beam or other collection of ions as a function of the mass-to-charge ratio (m/z)." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000295 name: mattauch-herzog geometry def: "An arrangement for a double-focusing mass spectrometer in which a deflection of ?/(4 ?(2)) radians in a radial electric field is followed by a magnetic deflection of ?/2 radians." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000296 name: nier-johnson geometry def: "An arrangement for a double-focusing mass spectrometer in which a deflection of ?/2 radians in a radial electric field analyzer is followed by a magnetic deflection of ?/3 radians." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000297 name: paul ion trap def: "A device that permits the trapping of ions by means of an alternating current voltage. The ejection of ions with a m/z less than a prescribed value and retention of those with higher mass depends on the application of radio frequency voltages between a ring electrode and two end-cap electrodes to confine the ions in a circular path. The choice of these voltages determines the m/z below which ions are ejected." [PSI:MS] synonym: "quadrupole ion trap" RELATED [] is_a: MS:1000479 ! purgatory [Term] id: MS:1000298 name: prolate traochoidal mass spectrometer def: "A mass spectrometer in which the ions of different m/z are separated by means of crossed electric and magnetic fields in such a way that the selected ions follow a prolate trochoidal path." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000299 name: quistor def: "An abbreviation of quadrupole ion storage trap. This term is synonymous with Paul Ion Trap. If so then add a synonym to paul and obsolete this term." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000300 name: reflectron def: "A time-of-flight mass spectrometer that uses a static electric field to reverse the direction of travel of the ions entering it. A reflectron improves mass resolution by assuring that ions of the same m/z but different kinetic energy arrive at the detector at the same time." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000301 name: sector mass spectrometer def: "A mass spectrometer consisting of one or more magnetic sectors for m/z selection in a beam of ions. Such instruments may also have one or more electric sectors for energy selection." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000302 name: tandem mass spectrometer def: "A mass spectrometer designed for mass spectrometry/mass spectrometry." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000303 name: transmission quadrupole mass spectrometer def: "A mass spectrometer that consists of four parallel rods whose centers form the corners of a square and whose opposing poles are connected. The voltage applied to the rods is a superposition of a static potential and a sinusoidal radio frequency potential. The motion of an ion in the x and y dimensions is described by the Matthieu equation whose solutions show that ions in a particular m/z range can be transmitted along the z axis." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000304 name: accelerating voltage def: "The electrical potential used to impart kinetic energy to ions in a mass spectrometer." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000305 name: cyclotron motion def: "The circular motion of a charged particle moving at velocity v in a magnetic field B that results from the force qvB." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000306 name: dynamic mass spectrometry def: "A mass spectrometer in which m/z separation using one or more electric fields that vary with time." [PSI:MS] is_a: MS:1000293 ! mass spectrometer [Term] id: MS:1000307 name: einzel lens def: "Three element charged particle lens in which the first and third elements are held at the same voltage. Such a lens produces focusing without changing the translational energy of the particle." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000308 name: electric field strength def: "The magnitude of the force per unit charge at a given point in space." [PSI:MS] is_a: MS:1000487 ! ion optics attribute [Term] id: MS:1000309 name: first stability region def: "The region of a Mathieu stability diagram closest to the origin. Ions within this region can traverse the full length of a transmission quadrupole." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000310 name: fringing field def: "The electric or magnetic field that extends from the edge of a sector, lens or other ion optics element." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000311 name: kinetic energy analyzer def: "A device for measuring the kinetic energy of charged particles using a retarding field, time-of-flight, or the extent of deflection in an electric or magnetic field." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000312 name: mass limit def: "The m/z value above which ions cannot be detected in a mass spectrometer." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000313 name: scan m/z range? def: "The limit of m/z over which a mass spectrometer can detect ions." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000314 name: mass selective axial ejection def: "The use of mass selective instability to eject ions of selected m/z values from an ion trap." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000315 name: mass selective instability def: "A method for selective ejection of ions according to their m/z value in an ion trap." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000316 name: mathieu stability diagram def: "A graphical representation expressed in terms of reduced coordinates that describes charged particle motion in a quadrupole mass filter or quadrupole ion trap mass spectrometer." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000317 name: orthogonal extraction def: "The pulsed acceleration of ions perpendicular to their direction of travel into a time-of-flight mass spectrometer. Ions may be extracted from a directional ion source, drift tube or m/z separation stage." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000318 name: resonance ion ejection def: "A mode of ion ejection in a quadrupole ion trap that relies on a auxiliary radio frequency voltage that is applied to the end-cap electrodes. The voltage is tuned to the secular frequency of a particular ion to eject it." [PSI:MS] is_a: MS:1000444 ! m/z Separation Method [Term] id: MS:1000319 name: space charge effect def: "The mutual repulsion of particles of like charge that limits the current in a charged-particle beam and causes beams or packets of charged particles to expand radially over time." [PSI:MS] is_a: MS:1000487 ! ion optics attribute [Term] id: MS:1000320 name: static field def: "An electric or magnetic field that does not change in time." [PSI:MS] is_a: MS:1000597 ! ion optics type [Term] id: MS:1000321 name: 2E Mass Spectrum def: "A mass spectrum obtained by setting the electric sector field E to twice the value required to transmit the main ion-beam thereby allowing ions with a kinetic energy-to-charge ratio twice that of the main ion-beam to be transmitted. Product ions resulting from partial charge transfer reactions such as m^2+ + N ? m^+ + N^+ that occur in a collision cell (containing a gas, N) located in a field-free region preceding a magnetic and electric sector combination are detected. When the magnetic sector field B is scanned, a mass spectrum of singly charged product ions of doubly charged precursor ions is obtained." [PSI:MS] is_a: MS:1000445 ! sequential m/z separation method ? [Term] id: MS:1000322 name: charge inversion mass spectrum def: "The measurement of the relative abundance of ions that result from a charge inversion reaction as a function of m/z." [PSI:MS] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000323 name: constant neutral loss scan def: "A scan procedure for a tandem mass spectrometer designed to produce a constant neutral loss spectrum of different\nprecursor ions by detection of the corresponding product ions produced by metastable ion fragmentation or\ncollision-induced dissociation. Synonymous terms are constant neutral mass loss scan and fixed neutral fragment scan." [PSI:MS] synonym: "" RELATED [] synonym: "constant neutral mass loss scan" RELATED [] synonym: "fixed neutral fragment scan" RELATED [] is_a: MS:1000020 ! scanning method [Term] id: MS:1000324 name: constant neutral gain scan def: "Scan procedure for a tandem mass spectrometer designed to produce a constant neutral mass gain spectrum of\ndifferent precursor ions by detection of the corresponding product ions of ion/molecule reactions with a gas in acollision cell." [PSI:MS] synonym: "Constant Neutral Mass Gain Scan" EXACT [] is_a: MS:1000020 ! scanning method [Term] id: MS:1000325 name: constant neutral mass gain spectrum def: "A spectrum formed of all product ions that have been produced by gain of a pre-selected neutral mass following the reaction with and addition of the gas in a collision cell." [PSI:MS] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000326 name: constant neutral mass loss spectrum def: "A spectrum formed of all product ions that have been produced with a selected m/z decrement from any precursor ions. The spectrum shown correlates to the precursor ion spectrum. See also neutral loss spectrum." [PSI:MS] synonym: "Constant Neutral Mass Loss" EXACT [] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000327 name: consecutive reaction monitoring def: "A type of MS/MS experiments with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored.\nOBSOLETE as redundant replace by consecutive reaction monitoring MS:1000244." [PSI:MS] is_obsolete: true [Term] id: MS:1000328 name: e/2 mass spectrum def: "A mass spectrum obtained using a sector mass spectrometer in which the electric sector field E is set to half the value required to transmit the main ion-beam. This spectrum records the signal from doubly charged product ions of charge-stripping reactions." [PSI:MS] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000329 name: linked scan def: "A scan in an instrument with two or more m/z analysers or in a sector mass spectrometer that incorporates at least one magnetic sector and one electric sector. Two or more of the analyzers are scanned simultaneously so as to preserve a predetermined relationship between scan parameters to produce a product ion, precursor ion or constant neutral loss spectrum." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000330 name: linked scan at constant b/e def: "A linked scan at constant B/E may be performed on a sector mass spectrometer that incorporates at least one magnetic sector plus one electric sector. The magnetic field B and the electric field E are scanned simultaneously while the accelerating voltage V is held constant, so as to maintain the ratio of the two fields constant. This linked scan may record a product ion spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors." [PSI:MS] is_a: MS:1000329 ! linked scan [Term] id: MS:1000331 name: Linked Scan at Constant E2/V def: "A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector. The electric sector field, E, and the accelerating voltage, V, are scanned simultaneously, so as to maintain the ratio E2/V at a constant value. This linked scan recordss a product ion spectrum of dissociation or other reactions occurring in a field free region (FFR) preceding the two sectors." [PSI:MS] is_a: MS:1000329 ! linked scan [Term] id: MS:1000332 name: Linked Scan at Constant B2/E def: "A linked scan performed on a sector mass spectrometer that incorporates at least one electric sector plus one magnetic sector in either order. The accelerating voltage is fixed and the magnetic field, B, and the electric field, E, are scanned simultaneously so as to maintain the ratio B2/E at a constant value. This linked scan records a precursor ion spectrum of dissociation or other reactions occurring in the field free region preceding the two sectors. The term B2/E linked scan is not recommended." [PSI:MS] is_a: MS:1000329 ! linked scan [Term] id: MS:1000333 name: Linked Scan at Constant B[1-(E/E0)]^1/2 / E def: "A linked scan performed on a sector instrument that incorporates at least one electric sector plus one magnetic sector placed in either order. The accelerating voltage is fixed while scanning the magnetic field, B, and electric field, E, simultaneously, so as to maintain the quantity B[1-(E/E0)]1/2/E at a constant value. This linked scan records a constant neutral mass loss (or gain) spectrum of dissociation or other reactions occurring in a field free region preceding the two sectors. E0 is the electric field required to transmit the singly charged analog of the desired neutral fragment. The term B[1-(E/E0)]1/2/E linked scan." [PSI:MS] is_a: MS:1000329 ! linked scan [Term] id: MS:1000334 name: MS/MS in Time def: "A tandem mass spectrometry method in which product ion spectra are recorded in a single m/z analyzer (such as a Paul Ion Trap or FTMS) in discreet steps over time. Ions in a specific m/z range are selected, dissociated, and the product ions analyzed sequentially in time." [PSI:MS] is_a: MS:1000445 ! sequential m/z separation method ? [Term] id: MS:1000335 name: MS/MS in Space def: "A tandem mass spectrometry method in which product ion spectra are recorded in m/z analyzers separated in space. Specific m/z separation functions are designed such that in one section of the instrument ions are selected, dissociated in an intermediate region, and the product ions are then transmitted to another analyser for m/z separation and data acquisition." [PSI:MS] is_a: MS:1000445 ! sequential m/z separation method ? [Term] id: MS:1000336 name: neutral loss def: "The loss of an uncharged species during a rearrangement process." [PSI:MS] is_a: MS:1000445 ! sequential m/z separation method ? [Term] id: MS:1000337 name: nth generation product ion def: "Serial product ions from dissociation of selected precursor ions where n refers to the number of stages of dissociation. The term granddaughter ion is deprecated." [PSI:MS] synonym: "" RELATED [] synonym: "granddaughter ion" RELATED [] is_a: MS:1000342 ! product ion [Term] id: MS:1000338 name: nth generation product ion scan def: "The specific scan functions or processes that record the appropriate generation of product ion or ions of any m/z selected precursor ions." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000339 name: nth generation product ion spectrum def: "The mass spectrum recorded from any mass spectrometer in which the appropriate scan function can be set to record the appropriate generation product ion or ions of m/z selected precursor ions." [PSI:MS] is_a: MS:1000343 ! product ion spectrum [Term] id: MS:1000340 name: precursor ion def: "An ion that reacts to form particular product ions. The reaction can be unimolecular dissociation, ion/molecule reaction, isomerization, or change in charge state. The term parent ion is not recommended." [PSI:MS] synonym: "" RELATED [] synonym: "parent ion" RELATED [] is_a: MS:1000506 ! ion role [Term] id: MS:1000341 name: precursor ion spectrum def: "The mass spectrum recorded from any spectrometer in which the appropriate m/z separation function can be set to record the precursor ion or ions of selected product ions." [PSI:MS] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000342 name: product ion def: "An ion formed as the product of a reaction involving a particular precursor ion. The reaction can be unimolecular\ndissociation to form fragment ions, an ion/molecule reaction, or simply involve a change in the number of charges.\nThe term fragment ion is deprecated. The term daughter ion is deprecated." [PSI:MS] synonym: "" RELATED [] synonym: "daughter ion" RELATED [] is_a: MS:1000506 ! ion role [Term] id: MS:1000343 name: product ion spectrum def: "A mass spectrum recorded from any spectrometer in which the appropriate m/z separation scan function is set to record the product ion or ions of selected precursor ions." [PSI:MS] is_a: MS:1000294 ! mass spectrum [Term] id: MS:1000344 name: progeny ion def: "A charged product of a series of consecutive reactions that includes product ions, 1st\ngeneration product ions, 2nd generation product ions, etc. Given the sequential fragmentation scheme: M1+ -> M2+ -> M3+ -> M4+ -> M5+. M4+ is the precursor ion of M5+, a 1st generation product ion of M3+, a 2nd generation product ion of M2+ and a 3rd generation product ion of M1+." [PSI:MS] synonym: "Progeny Fragment Ion" EXACT [] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000345 name: array detector def: "Detector comprising several ion collection elements, arranged in a line or grid where each element is an individual detector." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000346 name: conversion dynode def: "A surface that is held at high potential such that ions striking the surface produce electrons that are subsequently detected." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000347 name: dynode def: "One of a series of electrodes in a photomultiplier tube. Such an arrangement is able to amplify the current emitted by the photocathode." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000348 name: focal plane collector def: "A detector for spatially disperse ion beams in which all ions simultaneously impinge on the\ndetector plane." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000349 name: ion-to-photon detector def: "A detector in which ions strike a conversion dynode to produce electrons that in turn strike a phosphor and the resulting photons are detected by a photomultiplier." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000350 name: point collector def: "A detector in which the ion beam is focused onto a point and the individual ions arrive sequentially." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000351 name: postacceleration detector def: "A detector in which the charged particles are accelerated to a high velocity and impinge on a conversion dynode, emitting secondary electrons. The electrons are accelerated onto a phosphor screen, which emits photons that are in turn detected using a photomultiplier or other photon detector." [PSI:MS] is_a: MS:1000026 ! detector type [Term] id: MS:1000352 name: secondary electron def: "Electrons that are ejected from a sample surface as a result of bombardment by a primary beam of atoms, ions or photons. WAS IN DETECTOR TYPE. Where should it go?" [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000353 name: adduct ion def: "Ion formed by the interaction of an ion with one or more atoms or molecules to form an ion containing all the constituent atoms of the precursor ion as well as the additional atoms from the associated atoms or molecules." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000354 name: aromatic ion def: "A planar cyclic ion that obeys the Hckel (4n + 2) rule where n is a positive integer representing the number of conjugated Pi electrons. Charge delocalization leads to greater stability compared to a hypothetical localized structure." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000355 name: analog ion def: "Ions that have similar chemical valence, for example the acetyl cation CH3-CO+ and the thioacetyl cation CH3-CS+." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000356 name: anti-aromatic ion def: "A planar cyclic ion with 4n ? electrons and is therefore not aromatic." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000357 name: cationized molecule def: "An ion formed by the association of a cation with a neutral molecule, M, for example [M+ Na]+ and [M + K]+. The terms quasi-molecular ion and pseudo-molecular ion should not be used." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000358 name: cluster ion def: "An ion formed by a multi-component atomic or molecular assembly of one or more ions with atoms or molecules, such as [(H20)nH]+, [(NaCl)nNa]+ and [(H3PO3)nHPO3]-." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000359 name: Conventional ion def: "A radical cation or anion in which the charge site and the unpaired electron spin are both formally located in the same atom or group of atoms, as opposed to the spatially separate electronic configuration of distonic ions. The radical cation of methanol, CH3OH+, in which the charge and spin sites are formally located at the O atom is an example of a conventional ion, whereas .CH2-OH2+ is a distonic ion." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000360 name: diagnostic ion def: "A product ion whose formation reveals structural or compositional information of its precursor. For instance, the phenyl cation in an electron ionization mass spectrum is a diagnostic ion for benzene and derivatives." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000361 name: dimeric ion def: "An ion formed by ionization of a dimer or by the association of an ion with its neutral counterpart such as [M2]+ or [M-H-M]+." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000362 name: distonic ion def: "A radical cation or anion in which the charge site and the unpaired electron spin cannot be both formally located in the same atom or group of atoms as it can be with a conventional ion. For example, CH2-OH2+ is a distonic ion whereas the radical cation of methanol, CH3OH+ is a conventional ion." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000363 name: enium ion def: "A positively charged lower-valency ion of the nonmetallic elements. The methenium ion is CH3+. Other examples are the oxenium, sulfenium, nitrenium, phosphenium, and halenium ions." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000364 name: fragment ion def: "A product ion that results from the dissociation of a precursor ion. Replaced by MS:1000342- product ion." [PSI:MS] is_obsolete: true [Term] id: MS:1000365 name: ion def: "An atomic or molecular species having a net positive or negative electric charge." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000366 name: Isotopologue ion def: "An ion that differs only in the isotopic composition of one or more of its constituent atoms. For example CH4+ and CH3D+ or 10BF3 and 11BF3. The term isotopologue is a contraction of isotopic homologue." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000367 name: Isotopomeric ion def: "Isomeric ion having the same numbers of each isotopic atom but differing in their positions. Isotopomeric ions can be either configurational isomers in which two atomic isotopes exchange positions or isotopic stereoisomers. The term isotopomer is a shortening of isotopic isomer." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000368 name: metastable ion def: "An ion that is formed with internal energy higher than the threshold for dissociation but with a lifetime great enough to allow it to exit the ion source and enter the mass spectrometer where it dissociates before detection." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000369 name: molecular ion def: "An ion formed by the removal of one or more electrons to form a positive ion or the addition off one or more electrons to form a negative ion." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000370 name: negative ion def: "An atomic or molecular species having a net negative electric charge." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000371 name: non-classical ion def: "Hyper-coordinated carbonium ion such as the penta-coordinated norbornyl cation. Note: Tri-coordinated carbenium ions are termed classical ions." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000372 name: onium ion def: "A positively charged hypervalent ion of the nonmetallic elements. Examples are the methonium ion CH5+, the hydrogenonium ion H3+ and the hydronium ion H3O+. Other examples are the carbonium, oxonium, sulfonium, nitronium, diazonium, phosphonium, and halonium ions. Onium ions are not limited to monopositive ions; multiply-charged onium ions exist such as the gitonic (proximal) oxonium dication H4O2+ and the distonic oxonium dication H2O+-CH2-CH2-OH2+." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000373 name: principal ion def: "Most abundant ion of an isotope cluster, such as the 11B79Br2 81Br+ ion of m/z 250 of the cluster of isotopologue molecular ions of BBr3. The term principal ion has also been used to describe ions that have been artificially isotopically enriched in one or more positions such as CH3 13CH3+ or CH2D2 +, but those are best defined as isotopologue ions." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000374 name: positive ion def: "An atomic or molecular species having a net positive electric charge." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000375 name: protonated molecule def: "An ion formed by interaction of a neutral molecule with a proton and represented by the symbol [M + H]+, where M is the neutral molecule. The term 'protonated molecular ion,' 'quasi-molecular ion' and 'pseudo-molecular ion' are not recommended." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000376 name: radical ion def: "An ion, either a cation or anion, containing unpaired electrons in its ground state. The unpaired electron is denoted by a superscript dot alongside the superscript symbol for charge, such as for the molecular ion of a molecule M, that is, M+. Radical ions with more than one charge and/or more than one unpaired electron are denoted such as M(2+)(2). Unless the positions of the unpaired electron and charge can be associated with specific atoms, superscript charge designation should be placed before the superscript dot designation." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000377 name: reference ion def: "A stable ion whose structure is known with certainty. These ions are usually formed by direct ionization of a neutral molecule of known structure and are used to verify by comparison the structure of an unknown ion." [PSI:MS] is_a: MS:1000508 ! ion chemical type [Term] id: MS:1000378 name: stable ion def: "An ion with internal energy sufficiently low that it does not rearrange or dissociate prior to detection in a mass spectrometer." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000379 name: unstable ion def: "An ion with sufficient enerrgy to dissociate within the ion source." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000380 name: adiabatic ionization def: "A process whereby an electron is removed from an atom, ion, or molecule to produce an ion in its lowest energy state." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000381 name: associative ionization def: "An ionization process in which two excited atoms or molecules react to form a single positive ion and an electron." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000382 name: atmospheric pressure photoionization def: "Atmospheric pressure chemical ionization in which the reactant ions are generated by photo-ionization." [PSI:MS] is_a: MS:1000240 ! atmospheric pressure ionization [Term] id: MS:1000383 name: autodetachment def: "The formation of a neutral when a negative ion in a disrtete state with an energy greater than the detachment threshold loses an electron spontaneously without further interaction with an energy source." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000384 name: autoionization def: "The formation of an ion when an atom or molecule in a discrete state with an energy greater than the ionization threshold loses an electron spontaneously without further interaction with an energy source." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000385 name: charge exchange ionization def: "The interaction of an ion with an atom or molecule in which the charge on the ion is transferred to the neutral without the dissociation of either. Synonymous with charge transfer ionization." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000386 name: chemi-ionization def: "The reaction of a neutral molecule with an internally excited molecule to form an ion. Note that this term is not synonymous with chemical ionization." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000387 name: desorption/ionization on silicon def: "The formation of ions by laser desorption ionization of a sample deposited on a porous silicon surface." [PSI:MS] is_a: MS:1000247 ! desorption ionization [Term] id: MS:1000388 name: dissociative ionization def: "The reaction of a gas-phase molecule that results in its decomposition to form products, one of which is an ion." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000389 name: electron ionization def: "The ionization of an atom or molecule by electrons that are typically accelerated to energies between 50 and 150 eV. Usually 70 eV electrons are used to produce positive ions. The term 'electron impact' is not recommended." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000390 name: ion desolvation def: "The removal of solvent molecules clustered around a gas-phase ion by means of heating and/or collisions with gas molecules." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000391 name: ion-pair formation def: "The reaction of a molecule to form both a positive ion and negative ion fragment among the products." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000392 name: ionization efficiency def: "The ratio of the number of ions formed to the number of electrons, molecules or photons used." [PSI:MS] is_a: MS:1000482 ! source attribute [Term] id: MS:1000393 name: laser desorption ionization def: "The formation of gas-phase ions by the interaction of a pulsed laser with a solid or liquid material." [PSI:MS] is_a: MS:1000247 ! desorption ionization [Term] id: MS:1000395 name: liquid secondary ionization def: "The ionization of any species by the interaction of a focused beam of ions with a sample that is dissolved in a solvent matrix. See also fast atom bombardment and secondary ionization." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000396 name: membrane inlet def: "A semi-permeable membrane separator that permits the passage of gas sample directly to the mass spectrometer ion source." [PSI:MS] is_a: MS:1000007 ! inlet type [Term] id: MS:1000397 name: microelectrospray def: "Electrospray ionization at a solvent flow rate less than 1 ?L/min." [PSI:MS] is_a: MS:1000073 ! electrospray ionization [Term] id: MS:1000398 name: nanoelectrospray def: "Electrospray ionization at a flow rate less than 100 nL/min. Nanoelectrospray is synonymous with nanospray. See also electrospray ionization and microelectrospray." [PSI:MS] is_a: MS:1000073 ! electrospray ionization [Term] id: MS:1000399 name: penning ionization def: "Ionization that occurs through the interaction of two or more neutral gaseous species, at least one of which is internally excited." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000400 name: plasma desorption ionization def: "The ionization of material in a solid sample by bombarding it with ionic or neutral atoms formed as a result of the fission of a suitable nuclide, typically 252Cf. Synonymous with fission fragment ionization." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000401 name: pre-ionization state def: "An electronic state capable of undergoing auto-Ionization." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000402 name: secondary ionization def: "The process in which ions are ejected from a sample surface as a result of bombardment by a primary beam of atoms or ions." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000403 name: soft ionization def: "The formation of gas-phase ions without extensive fragmentation." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000404 name: spark ionization def: "The formation of ions from a solid material by an intermittent electrical discharge." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000405 name: surface-assisted laser desorption ionization def: "The formation of gas-phase ions from molecules that are deposited on a particular surface substrate that is irradiated with a pulsed laser. See also matrix-assisted laser desorption ionization." [PSI:MS] is_a: MS:1000247 ! desorption ionization [Term] id: MS:1000406 name: surface ionization def: "The ionization of a neutral species when it interacts with a solid surface with an appropriate work function and temperature." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000407 name: thermal ionization def: "The ionization of a neutral species through contact with a high temperature surface." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000408 name: vertical ionization def: "A process in which an electron is removed from or added to a molecule without a change in the positions of the atoms. The resulting ion is typically in an excited vibrational state." [PSI:MS] is_a: MS:1000008 ! ionization type [Term] id: MS:1000409 name: association reaction def: "The reaction of an ion with a neutral species in which the reactants combine to form a single ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000410 name: alpha-cleavage def: "A homolytic cleavage where the bond fission occurs between at the atom adjacent to the atom at the apparent charge site and an atom removed from the aparent charge site by two bonds." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000411 name: beta-cleavage def: "A homolytic cleavage where the bond fission occurs between at an atom removed from the apparent charge site atom by two bonds and an atom adjacent to that atom and removed from the aparent charge site by three bonds." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000412 name: buffer gas def: "An inert gas used for collisional deactivation of internally excited ions." [PSI:MS] is_a: MS:1000510 ! precursor activation attribute [Term] id: MS:1000413 name: charge-induced fragmentation def: "Fragmentation of an odd electron ion in which the cleaved bond is adjacent to the apparent charge site. Synonymous with charge mediated fragmentation." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000414 name: charge inversion reaction def: "Reaction of an ion with a neutral species in which the charge on the product ion is reversed in sign with respect to the reactant ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000415 name: charge permutation reaction def: "The reaction of an ion with a neutral species with a resulting change in the magnitude or sign of the charge on the reactant ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000416 name: charge stripping reaction def: "Reaction of a positive ion with a neutral species in which the positive charge on the product ion is greater than that on the reactant ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000417 name: charge transfer reaction def: "The reaction of an ion with a neutral species in which some or all of the charge of the reactant ion is transferred to the neutral species." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000418 name: collisional excitation def: "The reaction of an ion with a neutral species in which the translational energy of the collision is converted into internal energy of the ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000419 name: collision gas def: "An inert gas used for collisional excitation. The term target gas is not recommended." [PSI:MS] is_a: MS:1000510 ! precursor activation attribute [Term] id: MS:1000420 name: heterolytic cleavage def: "Fragmentation of a molecule or ion in which both electrons forming the single bond that is broken remain on one of the atoms that were originally bonded. This term is synonymous with heterolysis." [PSI:MS] synonym: "" RELATED [] synonym: "heterolysis" RELATED [] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000421 name: high energy collision def: "Collision-induced dissociation process wherein the projectile ion has laboratory-frame translational energy higher than 1 keV." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000422 name: high-energy collision-induced dissociation def: "A collision-induced dissociation process wherein the projectile ion has the translational energy higher than approximately 1000 eV." [PSI:MS] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000423 name: homolytic cleavage def: "Fragmentation of an odd electron ion that results from one of a pair of electrons that form a bond between two atoms moving to form a pair with the odd electron on the atom at the apparent charge site. Fragmentation results in the formation of an even electron ion and a radical. This reaction involves the movement of a single electron and is symbolized by a single-barbed arrow. Synonymous with Homolysis." [PSI:MS] synonym: "homolysis" RELATED [] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000424 name: hydrogen/deuterium exchange def: "Exchange of hydrogen atoms with deuterium atoms in a molecule or pre-formed ion in solution prior to introduction into a mass spectrometer, or by reaction of an ion with a deuterated collision gas inside a mass spectrometer." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000425 name: ion energy loss spectrum def: "A plot of the relative abundance of a beam or other collection of ions as a function their loss of translational energy in reactions with neutral species." [PSI:MS] is_a: MS:1000479 ! purgatory [Term] id: MS:1000426 name: ionizing collision def: "The reaction of an ion with a neutral species in which one or more electrons are removed from either the ion or neutral." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000427 name: ion/molecule reaction def: "The reaction of an ion with a neutral molecule. The term ion-molecule reaction is not recommended because the hyphen suggests a single species that is that is both an ion and a molecule." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000428 name: ion/neutral complex def: "A particular type of transition state that lies between precursor and product ions on the reaction coordinate of some ion reactions." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000429 name: ion/neutral species reaction def: "A process wherein a charged species interacts with a neutral reactant to produce either\nchemically different species or changes in the internal energy of one or both of the\nreactants." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000430 name: ion/neutral species exchange reaction def: "In this reaction an association reaction is accompanied by the subsequent or simultaneous liberation of a different neutral species as a product." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000431 name: kinetic method def: "An approach to determination of ion thermodynamic quantities by a bracketing procedure in which the relative probabilities of competing ion fragmentations are measured via the relative abundances of the reaction products. The extended kinetic method takes the associated entropy changes into account." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000432 name: low energy collisions def: "A collision between an ion and neutral species with translational energy approximately 1000 eV or lower." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000433 name: low-energy collision-induced dissociation def: "A collision-induced dissociation process wherein the precursor ion has the translational energy lower than approximately 1000 eV. This process typically requires multiple collisions and the collisional excitation is cumulative." [PSI:MS] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000434 name: McLafferty Rearrangement def: "A dissociation reaction triggered by transfer of a hydrogen atom via a 6-member transition state to the formal radical/charge site from a carbon atom four atoms removed from the charge/radical site (the gamma-carbon); subsequent rearrangement of electron density leads to expulsion of an olefin molecule. This term was originally applied to ketone ions where the charge/radical site is the carbonyl oxygen, but it is now more widely applied." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000435 name: photodissociation def: "A process wherein the reactant ion is dissociated as a result of absorption of one or more photons." [PSI:MS] synonym: "Multiphoton Dissociation" EXACT [] is_a: MS:1000044 ! dissociation method [Term] id: MS:1000436 name: partial charge transfer reaction def: "Reaction of an ion with a neutral species in which some but not all of the ion charge is transferred to the neutral." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000437 name: ion reaction def: "Chemical transformation involving an ion." [PSI:MS] relationship: part_of MS:1000365 ! ion [Term] id: MS:1000438 name: superelastic collision def: "Collision in which the translational energy of the fast-moving collision partner is increased at the expense of internal energy of one or both collision partners." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000439 name: surface-induced reaction def: "A process wherein a reactant ion interacts with a surface to produce either chemically different species or a change in the internal energy of the reactant ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000440 name: unimolecular dissociation def: "Fragmentation reaction in which the molecularity is treated as one, irrespective of whether the dissociative state is that of a metastable ion produced in the ion source or results from collisional excitation of a stable ion." [PSI:MS] is_a: MS:1000437 ! ion reaction [Term] id: MS:1000441 name: scan def: "Function or process of the mass spectrometer where it records a spectrum." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000442 name: spectrum def: "A mass spectrum is an intensity vs m/z (mass-to-charge ratio) plot representing a chemical analysis." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000443 name: mass analyzer type def: "Mass analyzer separates the ions according to their mass-to-charge ratio." [PSI:MS] relationship: part_of MS:1000451 ! mass analyzer [Term] id: MS:1000444 name: m/z Separation Method def: "TODO: Add definition." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000445 name: sequential m/z separation method ? def: "TODO: Add definition." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000446 name: fast ion bombardment def: "The ionization of any species by the interaction of a focused beam of ions having a translational energy of several thousand eV with a solid sample." [PSI:MS] synonym: "FIB" EXACT [] is_a: MS:1000008 ! ionization type [Term] id: MS:1000447 name: LTQ def: "Finnigan LTQ MS." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000448 name: LTQ FT def: "Finnigan LTQ FT MS." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000449 name: LTQ Orbitrap def: "Finnigan LTQ Orbitrap MS." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000450 name: LXQ def: "Finnigan LXQ MS." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000451 name: mass analyzer def: "Terms used to describe the Analyzer." [PSI:MS] relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000452 name: data transformation def: "Terms used to describe types of data processing." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000453 name: detector def: "Terms describing the detector." [PSI:MS] relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000454 name: instrument additional description def: "Additional terms to describe the instrument as outlined in the mass spec doc, Appendix 1, section 1.5." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000455 name: ion selection attribute def: "Ion selection properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000456 name: precursor activation def: "Terms to describe the precursor activation." [PSI:MS] relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000457 name: sample def: "Terms to describe the sample." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000458 name: source def: "Terms to describe the source." [PSI:MS] relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000459 name: spectrum instrument description def: "Terms used to describe the spectrum." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000460 name: unit def: "Terms to describe units." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000461 name: additional description def: "Terms to describe Additional." [PSI:MS] relationship: part_of MS:1000479 ! purgatory [Term] id: MS:1000462 name: ion optics def: "Device used in the construction of a spectrometer to focus, contain or otherwise manipulate ions." [PSI:MS] relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000463 name: instrument def: "Description of the instrument or the mass spectrometer." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000464 name: mass unit def: "A unit of measurement for mass." [PSI:MS] is_a: MS:1000460 ! unit [Term] id: MS:1000465 name: scan polarity def: "An acquisition mode to which specifies weather polarity is negative, positive or alternating." [PSI:MS] relationship: part_of MS:1000441 ! scan [Term] id: MS:1000466 name: alternating def: "Alternating." [PSI:MS] is_obsolete: true [Term] id: MS:1000467 name: 1200 series LC/MSD SL def: "The 1200 Series LC/MSD SL ion trap belongs to the Agilent LC/MSD ion trap family. It provides fast polarity switching and multisignal data\nacquisition capabilities in a single run while also providing 5 stages of automated data dependent MS/MS and 11 stages of manual MS/MS." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000468 name: 6110 Quadrupole LC/MS def: "The 6110 Quadrupole LC/MS system is a Agilent liquid chromatography\ninstrument combined with an entry level single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6110 Quadrupole mass spectrometer has m/z range of 10-1500 and 2500 u/s scan speed. It proves useful for wide range of SIM quantitative applications." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000469 name: 6120 Quadrupole LC/MS def: "The 6120 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent mass spectrometers. 6120 quadrupole mass spectrometer has m/z range of 10-1500, 2500 u/s scan speed and utilizes multiple signal acquisition." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000470 name: 6130 Quadrupole LC/MS def: "The 6130 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 series of Agilent mass spectrometers. The 6130 quadrupole mass spectrometer has m/z range of 2-3000, 2500 u/s scan speed in standard mode and 5250 u/s speed in fast-scan mode. It also uses multiple signal acquisition." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000471 name: 6140 Quadrupole LC/MS def: "The 6140 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a single quadrupole mass spectrometer from the 6100 Series of Agilent quadrupole mass spectrometers. 6140 Quadrupole mass spectrometer has m/z range of 10-1350, 2500 u/s scan speed in standard mode and 10000 u/s speed in fast-scan mode. It also uses multiple signal acquisition." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000472 name: 6210 Time-of-Flight LC/MS def: "The 6210 Time-of-Flight LC/MS is a Agilent liquid chromatography instrument combined with a Agilent time of flight mass spectrometer. This time of flight mass spectrometer has a m/z range of 50-12000, mass accuracy of less than 2 ppm and resolution greater than 13,000 at m/z 2722. It has multiple ion sources and can be used with multimode ion sources." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000473 name: 6310 Ion Trap LC/MS def: "The 6310 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.35 resolution and mass range of 200-4000 with resolution of 3-4. The scan speed varies from 1650-27000 for the respective mass ranges." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000474 name: 6320 Ion Trap LC/MS def: "The 6320 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000475 name: 6330 Ion Trap LC/MS def: "The 6330 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000476 name: 6340 Ion Trap LC/MS def: "The 6340 Ion Trap LC/MS is a Agilent liquid chromatography instrument combined with a 6300 series Agilent ion trap. It has a mass range of 50-2200 between 0.6 to 0.25 resolution and mass range of 200-4000 with resolution of less than 3. The scan speed varies from 1650-27000 for the respective mass ranges." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000477 name: 6410 Triple Quadrupole LC/MS def: "The 6410 Quadrupole LC/MS system is a Agilent liquid chromatography instrument combined with a Agilent triple quadrupole mass spectrometer. Mass range of the mass spectrometer is 15-1650 m/z, resolution is at three settings of 0.7 u (unit), 1.2 u (wide) and 2.5 u (widest). The mass accuracy for 6410 mass spectrometer is 0.1 across the mass range. The collision cell is a hexapole with linear acceleration." [PSI:MS] synonym: "6410 Triple Quad LC/MS" EXACT [] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000478 name: 1200 series LC/MSD VL def: "The LC/MSD VL ion trap is part of the family of Agilent ion trap mass\nspectrometers. It has ESI, APCI and APPI ion sources and is a useful ion\ntrap when the amount of sample is not the limiting factor." [PSI:MS] is_a: MS:1000490 ! Agilent instrument model [Term] id: MS:1000479 name: purgatory def: "Terms that will likely become obsolete unless there are wails of dissent." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000480 name: mass analyzer attribute def: "Analyzer properties that are associated with a value." [PSI:MS] relationship: part_of MS:1000451 ! mass analyzer [Term] id: MS:1000481 name: detector attribute def: "Detector attribute recognized as a value." [PSI:MS] relationship: part_of MS:1000453 ! detector [Term] id: MS:1000482 name: source attribute def: "Property of a source device that need a value." [PSI:MS] relationship: part_of MS:1000458 ! source [Term] id: MS:1000483 name: Thermo Fisher Scientific instrument model def: "Thermo Fisher Scientific instrument model. The company has gone through several names including Thermo Finnigan, Thermo Scientific." [PSI:MS] synonym: "Thermo Scientific" RELATED [] is_a: MS:1000031 ! instrument model [Term] id: MS:1000484 name: orbitrap def: "An ion trapping device that consists of an outer barrel-like electrode and a coaxial inner spindle-like electrode that form an electrostatic field with quadro-logarithmic potential distribution. The frequency of harmonic oscillations of the orbitally trapped ions along the axis of the electrostatic field is independent of the ion velocity and is inversely proportional to the square root of m/z so that the trap can be used as a mass analyzer." [PSI:MS] is_a: MS:1000443 ! mass analyzer type [Term] id: MS:1000485 name: nanospray inlet def: "Nanospray Inlet." [PSI:MS] is_a: MS:1000057 ! electrospray inlet [Term] id: MS:1000486 name: source potential def: "Potential difference at the MS source in volts." [PSI:MS] is_a: MS:1000482 ! source attribute [Term] id: MS:1000487 name: ion optics attribute def: "Ion optics involves components that help focus ion streams in mass spectrometry." [PSI:MS] is_a: MS:1000462 ! ion optics [Term] id: MS:1000488 name: Hitachi instrument model def: "Hitachi instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000489 name: Varian instrument model def: "Varian instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000490 name: Agilent instrument model def: "Agilent instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000491 name: Dionex instrument model def: "Dionex instrument model." [PSI:MS] is_a: MS:1000031 ! instrument model [Term] id: MS:1000492 name: Thermo Electron instrument model def: "Thermo Electron Corporation instrument model." [PSI:MS] is_a: MS:1000483 ! Thermo Fisher Scientific instrument model [Term] id: MS:1000493 name: Finnigan MAT instrument model def: "Finnigan MAT instrument model." [PSI:MS] is_a: MS:1000483 ! Thermo Fisher Scientific instrument model [Term] id: MS:1000494 name: Thermo Scientific instrument model def: "Thermo Scientific instrument model." [PSI:MS] is_a: MS:1000483 ! Thermo Fisher Scientific instrument model [Term] id: MS:1000495 name: Applied Biosystems instrument model def: "Applied Biosystems instrument model." [PSI:MS] synonym: "ABI" EXACT [] is_a: MS:1000031 ! instrument model [Term] id: MS:1000496 name: instrument attribute def: "Instrument properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000463 ! instrument [Term] id: MS:1000497 name: zoom scan def: "Feature of the ion trap mass spectrometer where MSMS data is acquired over a certain mass range." [PSI:MS] is_a: MS:1000020 ! scanning method [Term] id: MS:1000498 name: full scan def: "Feature of the ion trap mass spectrometer where MS data is acquired over a mass range." [PSI:MS] is_a: MS:1000020 ! scanning method [Term] id: MS:1000499 name: spectrum attribute def: "Spectrum properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000500 name: scan m/z upper limit def: "The limit of m/z over which a mass spectrometer can detect ions." [PSI:MS] synonym: "mzRangeStop" RELATED [] is_a: MS:1000549 ! selection window attribute [Term] id: MS:1000501 name: scan m/z lower limit def: "The limit of m/z over which a mass spectrometer can detect ions." [PSI:MS] synonym: "mzRangeStart" RELATED [] is_a: MS:1000549 ! selection window attribute [Term] id: MS:1000502 name: dwell time def: "The time spent gathering data across a peak." [PSI:MS] synonym: "Scan Duration" RELATED [] is_a: MS:1000549 ! selection window attribute [Term] id: MS:1000503 name: scan attribute def: "Scan properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000441 ! scan [Term] id: MS:1000504 name: base peak m/z def: "M/z value of the greatest peak in the mass spectrum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000505 name: base peak intensity def: "The intensity of the greatest peak in the mass spectrum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000506 name: ion role def: "Ion Role." [PSI:MS] relationship: part_of MS:1000365 ! ion [Term] id: MS:1000507 name: ion attribute def: "Ion properties that are associated with a value." [PSI:MS] relationship: part_of MS:1000365 ! ion [Term] id: MS:1000508 name: ion chemical type def: "Ion Type." [PSI:MS] relationship: part_of MS:1000365 ! ion [Term] id: MS:1000509 name: activation energy def: "Activation Energy." [PSI:MS] is_a: MS:1000510 ! precursor activation attribute [Term] id: MS:1000510 name: precursor activation attribute def: "Precursor Activation Attribute." [PSI:MS] relationship: part_of MS:1000456 ! precursor activation [Term] id: MS:1000511 name: ms level def: "Stages of ms achieved in a multi stage mass spectrometry experiment." [PSI:MS] comment: The attribute 'ms level' should be encoded in the homonymous XML attribute of the element 'dx:Spectrum', and not using the CvParam element. is_a: MS:1000503 ! scan attribute [Term] id: MS:1000512 name: filter string def: "A string unique to Thermo instrument describing instrument settings for the scan." [PSI:MS] is_a: MS:1000503 ! scan attribute [Term] id: MS:1000513 name: binary data array def: "A data array of values." [PSI:MS] relationship: part_of MS:1000442 ! spectrum relationship: part_of MS:1000625 ! chromatogram [Term] id: MS:1000514 name: m/z array def: "A data array of mass divided by charge values." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000515 name: intensity array def: "A data array of intensity values." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000516 name: charge array def: "A data array of charge values." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000517 name: signal to noise array def: "A data array of signal-to-noise values." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000518 name: binary data type def: "Binary Data type. 16-bit integer, 32-bit integer, 32-bit float\n64-bit integer 64-bit float." [PSI:MS] relationship: part_of MS:1000442 ! spectrum relationship: part_of MS:1000625 ! chromatogram [Term] id: MS:1000519 name: 32-bit integer def: "Signed 32-bit integer." [PSI:MS] is_a: MS:1000518 ! binary data type [Term] id: MS:1000520 name: 16-bit float def: "Signed 16-bit float." [PSI:MS] is_a: MS:1000518 ! binary data type [Term] id: MS:1000521 name: 32-bit float def: "Signed 32-bit float. IEEE-754." [PSI:MS] is_a: MS:1000518 ! binary data type [Term] id: MS:1000522 name: 64-bit integer def: "Signed 64-bit integer." [PSI:MS] is_a: MS:1000518 ! binary data type [Term] id: MS:1000523 name: 64-bit float def: "Signed 64-bit float. IEEE-754." [PSI:MS] is_a: MS:1000518 ! binary data type [Term] id: MS:1000524 name: data file content def: "Describes the data content on the file." [PSI:MS] relationship: part_of MS:1000577 ! data file [Term] id: MS:1000525 name: spectrum representation def: "Way in which the spectrum is represented, either with regularly spaced data points or with a list of centroided peaks." [PSI:MS] relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000526 name: MassLynx raw format def: "MassLynx raw file format, which is actually a directory/folder containing several files for each ms run." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000527 name: highest m/z value def: "Highest m/z value observed in the mass spectum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000528 name: lowest m/z value def: "Lowest m/z value observed in the mass spectrum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000529 name: instrument serial number def: "Serial Number of the instrument." [PSI:MS] is_a: MS:1000496 ! instrument attribute [Term] id: MS:1000530 name: file format conversion def: "Conversion of one file format to another." [PSI:MS] is_a: MS:1000452 ! data transformation [Term] id: MS:1000531 name: software def: "Software related to the recording or transformation of spectra." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000532 name: Xcalibur def: "Thermo Finnigan software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000533 name: Bioworks def: "Thermo Finnigan software for data analysis of peptides and proteins." [PSI:MS] synonym: "Bioworks Browser" RELATED [] is_a: MS:1000531 ! software [Term] id: MS:1000534 name: Masslynx def: "Miromass software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000535 name: FlexAnalysis def: "Bruker software for data analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000536 name: data explorer def: "Applied Biosystems software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000537 name: 4700 Explorer def: "Applied Biosystems software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000538 name: Wolf def: "A software for converting Waters raw directory format to mzXML or mzML. Wolf was originally developed at the Institute for Systems Biology." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000539 name: Voyager Biospectrometry Workstation System def: "Applied Biosystems MALDI-TOF data acquisition and analysis system." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000540 name: FlexControl def: "Bruker software for data acquisition." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000541 name: ReAdW def: "A software program for converting Thermo Finnigan RAW file format to mzXML or mzML. ReAdW was originally developed at the Institute for Systems Biology. Its whimsical interleaved spelling and capitalization is pronounced \"readraw\"." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000542 name: MzStar def: "A software program for converting Applied Biosystems wiff file format to mzXML format. MzStar was originally developed at the Institute for Systems Biology. It is now obsoleted by the MzWiff program." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000543 name: data processing action def: "Type of data processing performed on the data file." [PSI:MS] is_a: MS:1000452 ! data transformation [Term] id: MS:1000544 name: Conversion to mzML def: "Conversion of a file format to Proteomics Standards Initiative mzData file format." [PSI:MS] is_a: MS:1000530 ! file format conversion [Term] id: MS:1000545 name: Conversion to mzXML def: "Conversion of a file format to Institute of Systems Biology mzXML file format." [PSI:MS] is_a: MS:1000530 ! file format conversion [Term] id: MS:1000546 name: Conversion to mzData def: "Conversion of a file format to Proteomics Standards Initiative mzData file format." [PSI:MS] is_a: MS:1000530 ! file format conversion [Term] id: MS:1000547 name: object attribute def: "Object Attribute." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000548 name: sample attribute def: "Sample properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000457 ! sample [Term] id: MS:1000549 name: selection window attribute def: "Selection window properties that are associated with a value." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000441 ! scan [Term] id: MS:1000550 name: time unit def: "Time Unit." [PSI:MS] is_a: MS:1000460 ! unit [Term] id: MS:1000551 name: Analyst def: "AB SCIEX or Applied Biosystems|MDS SCIEX software for data acquisition." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000552 name: maldi spot identifier def: "Maldi Spot Identifier." [PSI:MS] is_a: MS:1000482 ! source attribute [Term] id: MS:1000553 name: Trapper def: "A software program for converting Agilent MassHunter format to mzXML or mzML. Trapper was originally developed at the Institute for Systems Biology." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000554 name: LCQ Deca def: "ThermoFinnigan LCQ Deca." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000555 name: LTQ Orbitrap Discovery def: "LTQ Orbitrap Discovery." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000556 name: LTQ Orbitrap XL def: "LTQ Orbitrap XL." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000557 name: LTQ FT Ultra def: "LTQ FT Ultra." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000558 name: GC Quantum def: "GC Quantum." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000559 name: spectrum type def: "Spectrum type." [PSI:MS] relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000560 name: source file type def: "The format of the file being used. This could be a instrument or vendor specific proprietary file format or a converted open file format." [PSI:MS] relationship: part_of MS:1000577 ! data file [Term] id: MS:1000561 name: data file checksum type def: "Checksum is a form of redundancy check, a simple way to protect the integrity of data by detecting errors in data." [PSI:MS] relationship: part_of MS:1000577 ! data file [Term] id: MS:1000562 name: wiff file def: "Applied Biosystems wiff file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000563 name: Xcalibur RAW file def: "Thermo Finnigan RAW file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000564 name: mzData file def: "Proteomics Standards Inititative mzData file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000565 name: pkl file def: "Micromass pkl file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000566 name: mzXML file def: "Institute of Systems Biology mzXML file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000567 name: yep file def: "Bruker yep file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000568 name: MD5 def: "MD5 (Message-Digest algorithm 5) is a cryptographic hash function with a 128-bit hash value used to check the integrity of files." [PSI:MS] is_a: MS:1000561 ! data file checksum type [Term] id: MS:1000569 name: SHA-1 def: "SHA-1 (Secure Hash Algorithm-1) is a cryptographic hash function designed by the National Security Agency (NSA) and published by the NIST as a U. S. government standard. It is also used to verify file integrity." [PSI:MS] is_a: MS:1000561 ! data file checksum type [Term] id: MS:1000570 name: spectra combination def: "Method used to combine the mass spectra." [PSI:MS] relationship: part_of MS:1000442 ! spectrum [Term] id: MS:1000571 name: sum of spectra def: "Spectra Sum." [PSI:MS] is_a: MS:1000570 ! spectra combination [Term] id: MS:1000572 name: binary data compression type def: "Compression Type." [PSI:MS] relationship: part_of MS:1000442 ! spectrum relationship: part_of MS:1000625 ! chromatogram [Term] id: MS:1000573 name: median of spectra def: "Spectra is combined by calculating the median of the spectra." [PSI:MS] is_a: MS:1000570 ! spectra combination [Term] id: MS:1000574 name: zlib compression def: "Zlib." [PSI:MS] is_a: MS:1000572 ! binary data compression type [Term] id: MS:1000575 name: mean of spectra def: "Spectra is combined by calculating the mean of the spectra." [PSI:MS] is_a: MS:1000570 ! spectra combination [Term] id: MS:1000576 name: no compression def: "No Compression." [PSI:MS] is_a: MS:1000572 ! binary data compression type [Term] id: MS:1000577 name: data file def: "Describes the type of file and its content." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000578 name: LCQ Fleet def: "LCQ Fleet." [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000579 name: MS1 spectrum def: "MS1 refers to single-stage MS/MS experiments designed to record the first stage of the product ion spectra." [PSI:MS] synonym: "Single-Stage Mass Spectrometry" EXACT [] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000580 name: MSn spectrum def: "MSn refers to multi-stage MS/MS experiments designed to record product ion spectra where n is the number of product ion stages (progeny ions). For ion traps, sequential MS/MS experiments can be undertaken where n > 2 whereas for a simple triple quadrupole system n= 2." [PSI:MS] synonym: "multiple-stage mass spectrometry spectrum" EXACT [] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000581 name: CRM spectrum def: "Spectrum generated from MSn experiment with three or more stages of m/z separation and in which a particular multi-step reaction path is monitored." [PSI:MS] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000582 name: SIM spectrum def: "Spectrum obtained with the operation of a mass spectrometer in which the abundances of several ions of specific m/z values are recorded rather than the entire mass spectrum." [PSI:MS] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000583 name: SRM spectrum def: "Spectrum obtained when data is acquired from specific product ions corresponding to m/z selected precursor ions recorded via two or more stages of mass spectrometry. Selected reaction monitoring can be preformed as tandem mass spectrometry in time or\ntandem mass spectrometry in space." [PSI:MS] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000584 name: mzML file def: "Proteomics Standards Inititative mzML file format." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000585 name: contact person attribute def: "Details about a person to contact in case of concern or dicussion about the file." [PSI:MS] is_a: MS:1000547 ! object attribute relationship: part_of MS:1000577 ! data file [Term] id: MS:1000586 name: contact name def: "Name of a contact person." [PSI:MS] is_a: MS:1000585 ! contact person attribute [Term] id: MS:1000587 name: contact address def: "Postal address of a contact person." [PSI:MS] is_a: MS:1000585 ! contact person attribute [Term] id: MS:1000588 name: contact URL def: "Uniform Resource Locator related to the contact person." [PSI:MS] is_a: MS:1000585 ! contact person attribute [Term] id: MS:1000589 name: contact email def: "Email adress of the contact person." [PSI:MS] is_a: MS:1000585 ! contact person attribute [Term] id: MS:1000590 name: contact organization def: "Home institution of the contact person." [PSI:MS] is_a: MS:1000585 ! contact person attribute [Term] id: MS:1000591 name: MzWiff def: "A software program for converting Applied Biosystems wiff file format to the mzXML or mzML format. MzWiff is currently maintained at the Institute for Systems Biology. It replaces the slower mzStar program." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000592 name: smoothing def: "Application of Lowess smoothing or filters to preserve high frequency components of a peak while reducing the noise." [PSI:MS] is_a: MS:1000543 ! data processing action [Term] id: MS:1000593 name: baseline reduction def: "A process of removal of varying intensities generated due to variable energy absorption before further processing can take place. Baseline reduction facilitates meaningful comparision between intensities of m/z values." [PSI:MS] is_a: MS:1000543 ! data processing action [Term] id: MS:1000594 name: low intensity data point removal def: "The removal of very low intensity data points that are likely to be spurious noise rather than real signal." [PSI:MS] synonym: "thresholding" EXACT [] is_a: MS:1000543 ! data processing action [Term] id: MS:1000595 name: time array def: "A data array of relative time offset values from a reference time." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000596 name: measurement method def: "An attribute of resolution when recording the detector response in absence of the analyte." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000597 name: ion optics type def: "The electrical potential used to impart kinetic energy to ions in a mass spectrometer." [PSI:MS] is_a: MS:1000462 ! ion optics [Term] id: MS:1000598 name: electron transfer dissociation def: "A process to fragment ions in a mass spectrometer by inducing fragmentation of cations (e.g. peptides or proteins) by transferring electrons to them." [PSI:MS] synonym: "ETD" EXACT [] is_a: MS:1000044 ! dissociation method is_a: MS:1000437 ! ion reaction [Term] id: MS:1000599 name: pulsed q dissociation def: "A process that involves precursor ion activation at high Q, a time delay to allow the precursor to fragment, then a rapid pulse to low Q where all fragment ions are trapped. The product ions can then be scanned out of the ion trap and detected." [PSI:MS] synonym: "PQD" EXACT [] is_a: MS:1000044 ! dissociation method is_a: MS:1000437 ! ion reaction [Term] id: MS:1000600 name: Proteios def: "Database application and analysis platform for proteomics." [PSI:MS, source:www.proteios.org] is_a: MS:1000531 ! software [Term] id: MS:1000601 name: ProteinLynx Global Server def: "Waters software for data analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000602 name: Shimadzu Biotech instrument model def: "Shimadzu Biotech instrument model." [PSI:MS] is_a: MS:1000124 ! Shimadzu instrument model [Term] id: MS:1000603 name: Shimadzu Scientific Instruments instrument model def: "Shimadzu Scientific Instruments instrument model." [PSI:MS] is_a: MS:1000124 ! Shimadzu instrument model [Term] id: MS:1000604 name: LCMS-IT-TOF def: "Shimadzu Scientific Instruments LCMS-IT-TOF MS." [PSI:MS] is_a: MS:1000603 ! Shimadzu Scientific Instruments instrument model [Term] id: MS:1000605 name: LCMS-2010EV def: "Shimadzu Scientific Instruments LCMS-2010EV MS." [PSI:MS] is_a: MS:1000603 ! Shimadzu Scientific Instruments instrument model [Term] id: MS:1000606 name: LCMS-2010A def: "Shimadzu Scientific Instruments LCMS-2010A MS." [PSI:MS] is_a: MS:1000603 ! Shimadzu Scientific Instruments instrument model [Term] id: MS:1000607 name: AXIMA CFR MALDI-TOF def: "Shimadzu Biotech AXIMA CFR MALDI-TOF MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000608 name: AXIMA-QIT def: "Shimadzu Biotech AXIMA-QIT MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000609 name: AXIMA-CFR plus def: "Shimadzu Biotech AXIMA-CFR plus MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000610 name: AXIMA Performance MALDI-TOF/TOF def: "Shimadzu Biotech AXIMA Performance MALDI-TOF/TOF MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000611 name: AXIMA Confidence MALDI-TOF def: "Shimadzu Biotech AXIMA Confidence MALDI-TOF (curved field reflectron) MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000612 name: AXIMA Assurance Linear MALDI-TOF def: "Shimadzu Biotech AXIMA Assurance Linear MALDI-TOF MS." [PSI:MS] is_a: MS:1000602 ! Shimadzu Biotech instrument model [Term] id: MS:1000613 name: dta file def: "Peak list file format that should be better defined FIXME." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000614 name: ProteinLynx Global Server mass spectrum XML file def: "Peak list file format used by ProteinLynx Global Server." [PSI:MS] is_a: MS:1000560 ! source file type [Term] id: MS:1000615 name: ProteoWizard def: "ProteoWizard software for data analysis. Currently developed and maintained by Darren Kessner at Parag Mallick's lab SFCAP at Cedars-Sinai." [PSI:MS] synonym: "pwiz" EXACT [] is_a: MS:1000531 ! software [Term] id: MS:1000616 name: preset scan configuration def: "A user-defined scan configuration that specifies the instrumental settings in which a spectrum is acquired. An instrument may cycle through a list of preset scan configurations to acquire data. This is a more generic term for the Thermo \"scan event\", which is defined in the Thermo Xcalibur glossary as: a mass spectrometer scan that is defined by choosing the necessary scan parameter settings. Multiple scan events can be defined for each segment of time." [PSI:MS] comment: The attribute 'ms level' should be encoded in the homonymous XML attribute of the element 'dx:Spectrum', and not using the CvParam element. is_a: MS:1000503 ! scan attribute [Term] id: MS:1000617 name: wavelength array def: "A data array of electromagnetic radiation wavelength values." [PSI:MS] is_a: MS:1000513 ! binary data array [Term] id: MS:1000618 name: highest wavelength value def: "Highest wavelength value observed in the uv/vis spectum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000619 name: lowest wavelength value def: "Lowest wavelength value observed in the uv/vis spectrum." [PSI:MS] is_a: MS:1000499 ! spectrum attribute [Term] id: MS:1000620 name: PDA spectrum def: "Spectrum generated from a photodiode array detector (ultraviolet/visible spectrum)." [PSI:MS] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type [Term] id: MS:1000621 name: photodiode array detector def: "An array detector used to record spectra in the ultraviolet and visable region of light." [PSI:MS] synonym: "PDA" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000622 name: Surveyor PDA def: "Surveyor PDA." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000623 name: Accela PDA def: "Accela PDA." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000624 name: inductive detector def: "Inductive detector." [PSI:MS] synonym: "image current detector" EXACT [] is_a: MS:1000026 ! detector type [Term] id: MS:1000625 name: chromatogram def: "The representation of detector response versus time." [PSI:MS] relationship: part_of MS:0000000 ! Proteomics Standards Initiative Mass Spectrometry Ontology [Term] id: MS:1000626 name: chromatogram type def: "Broad category or type of a chromatogram." [PSI:MS] relationship: part_of MS:1000625 ! chromatogram [Term] id: MS:1000627 name: selected ion current chromatogram def: "Chromatogram created by creating an array of the measurements of a specific single ion current at each time point." [PSI:MS] synonym: "SIC chromatogram" EXACT [] is_a: MS:1000524 ! data file content is_a: MS:1000559 ! spectrum type is_a: MS:1000626 ! chromatogram type [Term] id: MS:1000628 name: basepeak chromatogram def: "Chromatogram created by creating an array of the most intense peaks at each time point." [PSI:MS] is_a: MS:1000524 ! data file content is_a: MS:1000626 ! chromatogram type [Term] id: MS:1000629 name: low intensity threshold def: "Threshold below which some action is taken." [PSI:MS] is_a: MS:1000630 ! data processing parameter [Term] id: MS:1000630 name: data processing parameter def: "Data processing parameter used in the data processing performed on the data file." [PSI:MS] is_a: MS:1000452 ! data transformation [Term] id: MS:1000631 name: high intensity threshold def: "Threshold above which some action is taken." [PSI:MS] is_a: MS:1000630 ! data processing parameter [Term] id: MS:1000632 name: Q-Tof Premier def: "Waters Q-Tof Premier MS." [PSI:MS] is_a: MS:1000126 ! Waters instrument model [Term] id: MS:1000633 name: possible charge state def: "A possible charge state of the ion in a situation where the charge of an ion is known to be one of several possible values rather than a completely unknown value or determined to be a specific charge with reasonable certainty." [PSI:MS] is_a: MS:1000455 ! ion selection attribute [Term] id: MS:1000634 name: DSQ def: "ThermoFinnigan DSQ GC-MS" [PSI:MS] is_a: MS:1000125 ! Thermo Finnigan instrument model [Term] id: MS:1000635 name: ITQ 700 def: "Thermo Scientific ITQ 700 GC-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000636 name: ITQ 900 def: "Thermo Scientific ITQ 900 GC-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000637 name: ITQ 1100 def: "Thermo Scientific ITQ 1100 GC-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000638 name: LTQ XL ETD def: "Thermo Scientific LTQ XL MS with ETD" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000639 name: LTQ Orbitrap XL ETD def: "Thermo Scientific LTQ Orbitrap XL MS with ETD" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000640 name: DFS def: "Thermo Scientific DFS HR GC-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000641 name: DSQ II def: "Thermo Scientific DSQ II GC-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000642 name: MALDI LTQ XL def: "Thermo Scientific MALDI LTQ XL MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000643 name: MALDI LTQ Orbitrap def: "Thermo Scientific MALDI LTQ Orbitrap MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000644 name: TSQ Quantum Access def: "Thermo Scientific TSQ Quantum Access MS." [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000645 name: Element XR def: "Thermo Scientific Element XR HR-ICP-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000646 name: Element 2 def: "Thermo Scientific Element 2 HR-ICP-MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000647 name: Element GD def: "Thermo Scientific Element GD Glow Discharge MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000648 name: GC IsoLink def: "Thermo Scientific GC IsoLink Isotope Ratio MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000649 name: Exactive def: "Thermo Scientific Exactive MS" [PSI:MS] is_a: MS:1000494 ! Thermo Scientific instrument model [Term] id: MS:1000650 name: Proteomics Discoverer def: "Thermo Scientific software for data analysis of peptides and proteins." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000651 name: 3200 QTRAP def: "AB SCIEX or Applied Biosystems|MDS SCIEX QTRAP 3200" [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000652 name: 4800 Plus MALDI TOF-TOF Analyzer def: "AB SCIEX or Applied Biosystems|MDS SCIEX 4800 Plus MALDI TOF-TOF Analyzer" [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000653 name: API 3200 def: "AB SCIEX or Applied Biosystems|MDS SCIEX API 3200 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000654 name: API 5000 def: "AB SCIEX or Applied Biosystems|MDS SCIEX API 5000 MS." [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000655 name: QSTAR Elite def: "AB SCIEX or Applied Biosystems|MDS SCIEX QSTAR Elite" [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000656 name: QSTAR Pulsar def: "Applied Biosystems|MDS SCIEX QSTAR Pulsar" [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000657 name: QSTAR XL def: "Applied Biosystems|MDS SCIEX QSTAR XL" [PSI:MS] is_a: MS:1000121 ! AB SCIEX instrument model [Term] id: MS:1000658 name: 4800 Proteomics Analyzer def: "Applied Biosystems|MDS SCIEX 4800 Proteomics Analyzer" [PSI:MS] is_a: MS:1000495 ! Applied Biosystems instrument model [Term] id: MS:1000659 name: 4000 Series Explorer Software def: "AB SCIEX or Applied Biosystems software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000661 name: GPS Explorer def: "AB SCIEX or Applied Biosystems software for data acquisition and analysis." [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000662 name: LightSight Software def: "AB SCIEX or Applied Biosystems|MDS SCIEX software metabolite identification" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000663 name: ProteinPilot Software def: "AB SCIEX or Applied Biosystems|MDS SCIEX software for protein ID and quant" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000664 name: TissueView Software def: "Applied Biosystems|MDS SCIEX software for tissue imaging" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000665 name: MarkerView Software def: "Applied Biosystems|MDS SCIEX software for metabolomics and biomarker profiling" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000666 name: MRMPilot Software def: "Applied Biosystems|MDS SCIEX software for MRM assay development" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000667 name: BioAnalyst def: "Applied Biosystems|MDS SCIEX software for bio-related data exploration" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000668 name: Pro ID def: "Applied Biosystems|MDS SCIEX software for protein identification" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000669 name: Pro ICAT def: "Applied Biosystems|MDS SCIEX software for protein ID and quant by ICAT" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000670 name: Pro Quant def: "Applied Biosystems|MDS SCIEX software for protein ID and quant by iTRAQ" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000671 name: Pro BLAST def: "Applied Biosystems|MDS SCIEX software for MS-BLAST identification" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000672 name: Cliquid def: "AB SCIEX or Applied Biosystems software" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000673 name: MIDAS Workflow Designer def: "Applied Biosystems|MDS SCIEX software for MRM assay development" [PSI:MS] is_a: MS:1000531 ! software [Term] id: MS:1000674 name: MultiQuant def: "Applied Biosystems|MDS SCIEX software for MRM-based quantitation" [PSI:MS] is_a: MS:1000531 ! software [Typedef] id: part_of name: part_of is_transitive: true [Typedef] id: has_units name: has_units is_transitive: false libpwizlite-3.0.5/src/pwiz/utility/000077500000000000000000000000001444255175000173475ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/chemistry/000077500000000000000000000000001444255175000213565ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/chemistry/Chemistry.hpp000066400000000000000000000117361444255175000240460ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHEMISTRY_HPP_ #define _CHEMISTRY_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include "pwiz/utility/misc/virtual_map.hpp" #include namespace pwiz { namespace chemistry { /// the mass of a proton in unified atomic mass units const double Proton = 1.00727646688; /// the mass of a neutron in unified atomic mass units const double Neutron = 1.00866491560; /// the mass of an electron in unified atomic mass units const double Electron = 0.00054857991; /// struct for holding isotope information struct PWIZ_API_DECL MassAbundance { double mass; double abundance; MassAbundance(double m = 0, double a = 0) : mass(m), abundance(a) {} bool operator==(const MassAbundance& that) const; bool operator!=(const MassAbundance& that) const; }; /// struct for holding isotope distribution typedef std::vector MassDistribution; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MassAbundance& ma); PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MassDistribution& md); /// scope for declarations related to elements namespace Element { /// enumeration of the elements enum PWIZ_API_DECL Type { C, H, O, N, S, P, _13C, _2H, _18O, _15N, // Order matters: _15N is the end of the CHONSP entries He, Li, Be, B, F, Ne, Na, Mg, Al, Si, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Uun, Uuu, Uub, Uuq, Uuh, _3H }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, Type type); /// class for obtaining information about elements namespace Info { struct PWIZ_API_DECL Record { Type type; std::string symbol; int atomicNumber; double atomicWeight; MassAbundance monoisotope; /// the most abundant isotope MassDistribution isotopes; }; /// retrieve the record for an element PWIZ_API_DECL const Record& record(Type type); /// retrieve the record for an element PWIZ_API_DECL const Record& record(const std::string& symbol); } // namespace Info PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Info::Record& record); } // namespace Element class CompositionMap; /// class to represent a chemical formula class PWIZ_API_DECL Formula { public: /// formula string given by symbol/count pairs, e.g. water: "H2 O1" (whitespace optional) Formula(const std::string& formula = ""); Formula(const char* formula); Formula(const Formula& formula); const Formula& operator=(const Formula& formula); ~Formula(); double monoisotopicMass() const; double molecularWeight() const; std::string formula() const; /// access to the Element's count in the formula int operator[](Element::Type e) const; int& operator[](Element::Type e); // direct access to the map, for iteration typedef std::map Map; Map data() const; // operations Formula& operator+=(const Formula& that); Formula& operator-=(const Formula& that); Formula& operator*=(int scalar); /// formulas are equal iff their elemental compositions are equal bool operator==(const Formula& that) const; bool operator!=(const Formula& that) const; private: class Impl; boost::shared_ptr impl_; }; PWIZ_API_DECL Formula operator+(const Formula& a, const Formula& b); PWIZ_API_DECL Formula operator-(const Formula& a, const Formula& b); PWIZ_API_DECL Formula operator*(const Formula& a, int scalar); PWIZ_API_DECL Formula operator*(int scalar, const Formula& a); /// output a Formula PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Formula& formula); } // namespace chemistry } // namespace pwiz #endif // _CHEMISTRY_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/ChemistryData.hpp000066400000000000000000000030001444255175000246210ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHEMISTRYDATA_HPP_ #define _CHEMISTRYDATA_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "Chemistry.hpp" namespace pwiz { namespace chemistry { namespace detail { typedef pwiz::chemistry::Element::Type Type; struct PWIZ_API_DECL Isotope { double mass; double abundance; }; struct PWIZ_API_DECL Element { Type type; const char* symbol; int atomicNumber; double atomicWeight; Isotope* isotopes; int isotopesSize; const char* synonym; // As with "D" for "_2H" }; PWIZ_API_DECL Element* elements(); PWIZ_API_DECL int elementsSize(); } // namespace detail } // namespace chemistry } // namespace pwiz #endif // _CHEMISTRYDATA_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/Ion.hpp000066400000000000000000000066211444255175000226210ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2005 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ION_HPP_ #define _ION_HPP_ #include "Chemistry.hpp" #include namespace pwiz { namespace chemistry { namespace Ion { /*! * Converts the m/z of an ion to a neutral mass. * @param[in] mz The m/z to convert. * @param[in] protonDelta The number of extra protons attached to the ion. * @param[in] electronDelta The number of extra electrons attached to the ion. * @param[in] neutronDelta The number of extra neutrons attached to the ion. * \pre protonDelta != electronDelta */ inline double neutralMass(double mz, int protonDelta, int electronDelta = 0, int neutronDelta = 0) { int charge = protonDelta - electronDelta; return charge == 0 ? throw std::invalid_argument("[Ion::neutralMass()] m/z with protonDelta=electronDelta is impossible") : mz * charge - ((Proton * protonDelta) + (Electron * electronDelta) + (Neutron * neutronDelta)); } /*! * Converts a neutral mass to an ionized mass. * @param[in] neutralMass The neutral mass to ionize. * @param[in] protonDelta The number of extra protons to attach to the ion. * @param[in] electronDelta The number of extra electrons to attach to the ion. * @param[in] neutronDelta The number of extra neutrons to attach to the ion. * \pre protonDelta != electronDelta */ inline double ionMass(double neutralMass, int protonDelta, int electronDelta = 0, int neutronDelta = 0) { return neutralMass + (Proton * protonDelta) + (Electron * electronDelta) + (Neutron * neutronDelta); } /*! * Converts a neutral mass to an m/z. * @param[in] neutralMass The neutral mass to ionize. * @param[in] protonDelta The number of extra protons to attach to the ion. * @param[in] electronDelta The number of extra electrons to attach to the ion. * @param[in] neutronDelta The number of extra neutrons to attach to the ion. * \pre protonDelta != electronDelta */ inline double mz(double neutralMass, int protonDelta, int electronDelta = 0, int neutronDelta = 0) { int z = protonDelta - electronDelta; double m = ionMass(neutralMass, protonDelta, electronDelta, neutronDelta); return z == 0 ? throw std::invalid_argument("[Ion::mz()] m/z with protonDelta=electronDelta is impossible") : m / z; } } } // namespace chemistry } // namespace pwiz #endif // _ION_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/IsotopeCalculator.hpp000066400000000000000000000035241444255175000255270ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ISOTOPECALCULATOR_HPP_ #define _ISOTOPECALCULATOR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "Chemistry.hpp" #include namespace pwiz { namespace chemistry { class PWIZ_API_DECL IsotopeCalculator { public: IsotopeCalculator(double abundanceCutoff, double massPrecision); ~IsotopeCalculator(); enum PWIZ_API_DECL NormalizationFlags { NormalizeMass = 0x01, // shift masses -> monoisotopic_mass == 0 NormalizeAbundance = 0x02 // scale abundances -> sum(abundance[i]^2) == 1 }; MassDistribution distribution(const Formula& formula, int chargeState = 0, int normalization = 0) const; private: class Impl; std::auto_ptr impl_; // no copying IsotopeCalculator(const IsotopeCalculator&); IsotopeCalculator& operator=(const IsotopeCalculator); }; } // namespace chemistry } // namespace pwiz #endif // _ISOTOPECALCULATOR_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/IsotopeEnvelopeEstimator.hpp000066400000000000000000000050221444255175000270760ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ISOTOPEENVELOPEESTIMATOR_HPP_ #define _ISOTOPEENVELOPEESTIMATOR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "Chemistry.hpp" #include "IsotopeCalculator.hpp" namespace pwiz { namespace chemistry { /// Class used for calculating a theoretical isotope envelope for a given mass, /// based on an estimate of the elemental composition for that mass. For peptides, /// the elemental composition estimate is based on the average elemental composition /// of amino acid residues. Mass distributions are calculated on construction of the /// object and cached for quick access. class PWIZ_API_DECL IsotopeEnvelopeEstimator { public: struct PWIZ_API_DECL Config { enum Type {Peptide}; Type type; unsigned int cacheSize; double cacheMaxMass; int normalization; const IsotopeCalculator* isotopeCalculator; // must be valid during construction only Config() : type(Peptide), cacheSize(10000), cacheMaxMass(100000), normalization(IsotopeCalculator::NormalizeMass | // monoisotopic == 0 IsotopeCalculator::NormalizeAbundance), // norm_2 == 1 isotopeCalculator(0) {} }; IsotopeEnvelopeEstimator(const Config& config); ~IsotopeEnvelopeEstimator(); MassDistribution isotopeEnvelope(double mass) const; private: class Impl; std::auto_ptr impl_; // no copying IsotopeEnvelopeEstimator(const IsotopeEnvelopeEstimator&); IsotopeEnvelopeEstimator& operator=(const IsotopeEnvelopeEstimator&); }; } // namespace chemistry } // namespace pwiz #endif // _ISOTOPEENVELOPEESTIMATOR_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/IsotopeTable.hpp000066400000000000000000000034451444255175000244670ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ISOTOPETABLE_HPP_ #define _ISOTOPETABLE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "Chemistry.hpp" namespace pwiz { namespace chemistry { /// Class representing a table of isotope distributions for collections of multiple /// atoms of a single element; the table is computed on instantiation, based on the /// element's mass distribution, a maximum atom count, and abundance cutoff value. class PWIZ_API_DECL IsotopeTable { public: IsotopeTable(const MassDistribution& md, int maxAtomCount, double cutoff); ~IsotopeTable(); MassDistribution distribution(int atomCount) const; private: class Impl; std::auto_ptr impl_; // no copying IsotopeTable(const IsotopeTable&); IsotopeTable& operator=(const IsotopeTable&); /// debugging friend PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const IsotopeTable& isotopeTable); }; } // namespace chemistry } // namespace pwiz #endif // _ISOTOPETABLE_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/MZTolerance.hpp000066400000000000000000000043731444255175000242610ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2009 Center for Applied Molecular Medicine // University of Southern California, Los Angeles, CA // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MZTOLERANCE_HPP_ #define _MZTOLERANCE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include namespace pwiz { namespace chemistry { /// /// struct for expressing m/z tolerance in either amu or ppm /// struct PWIZ_API_DECL MZTolerance { enum Units {MZ, PPM}; double value; Units units; MZTolerance(double _value = 0, Units _units = MZ) : value(_value), units(_units) {} }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const MZTolerance& mzt); PWIZ_API_DECL std::istream& operator>>(std::istream& is, MZTolerance& mzt); PWIZ_API_DECL bool operator==(const MZTolerance& a, const MZTolerance& b); PWIZ_API_DECL bool operator!=(const MZTolerance& a, const MZTolerance& b); PWIZ_API_DECL double& operator+=(double& d, const MZTolerance& tolerance); PWIZ_API_DECL double& operator-=(double& d, const MZTolerance& tolerance); PWIZ_API_DECL double operator+(double d, const MZTolerance& tolerance); PWIZ_API_DECL double operator-(double d, const MZTolerance& tolerance); /// returns true iff a is in (b-tolerance, b+tolerance) PWIZ_API_DECL bool isWithinTolerance(double a, double b, const MZTolerance& tolerance); /// returns true iff b - a is greater than the value in tolerance (useful for matching sorted mass lists) PWIZ_API_DECL bool lessThanTolerance(double a, double b, const MZTolerance& tolerance); } // namespace chemistry } // namespace pwiz #endif // _MZTOLERANCE_HPP_ libpwizlite-3.0.5/src/pwiz/utility/chemistry/MzMobilityWindow.hpp000066400000000000000000000042071444255175000253610ustar00rootroot00000000000000// // Original author: Matt Chambers // // Copyright 2019 Matt Chambers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MZMOBILITYWINDOW_HPP_ #define _MZMOBILITYWINDOW_HPP_ #include #include #include namespace pwiz { namespace chemistry { struct MzMobilityWindow { MzMobilityWindow(double mz) : mz(mz) {} MzMobilityWindow(const std::pair& mobilityBounds) : mobilityBounds(mobilityBounds) {} MzMobilityWindow(double mz, const std::pair& mobilityBounds) : mz(mz), mobilityBounds(mobilityBounds) {} MzMobilityWindow(double mobility, double mobilityTolerance) : MzMobilityWindow(std::make_pair(mobility - mobilityTolerance, mobility + mobilityTolerance)) {} MzMobilityWindow(double mz, double mobility, double mobilityTolerance) : MzMobilityWindow(mz, std::make_pair(mobility - mobilityTolerance, mobility + mobilityTolerance)) {} bool mobilityValueInBounds(double mobilityValue) const { return !mobilityBounds || mobilityBounds.get().first < mobilityValue && mobilityValue < mobilityBounds.get().second; } static bool mobilityValueInBounds(const std::vector& windows, double mobilityValue) { if (windows.empty()) return true; for (const auto& window : windows) if (window.mobilityValueInBounds(mobilityValue)) return true; return false; } boost::optional mz; boost::optional> mobilityBounds; }; } // chemistry } // pwiz #endif // _MZMOBILITYWINDOW_HPP_libpwizlite-3.0.5/src/pwiz/utility/findmf/000077500000000000000000000000001444255175000206125ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/000077500000000000000000000000001444255175000215245ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/000077500000000000000000000000001444255175000224365ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/base.hpp000066400000000000000000000230411444255175000240610ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef BASE_H #define BASE_H #include #include #include #include #include #include #include #include #include #include #include #include #include "pwiz/utility/findmf/base/base/utilities/base.hpp" namespace ralab { namespace base { namespace base { /// generates the sequence from, from+/-1, ..., to (identical to from:to). template void seq ( TReal from, //!<[in] the starting value of the sequence TReal to, //!<[in] the end value of the sequence std::vector &result //!<[out] result sequence ) { result.clear(); typedef typename std::vector::size_type size_type; if( from <= to ) { size_type length = static_cast(to - from) + 1; result.resize(length); std::generate(result.begin() , result.end() , utilities::SeqPlus(from)); } else { size_type length = static_cast(from - to) + 1 ; result.resize(length); std::generate(result.begin() , result.end() , utilities::SeqMinus(from)); } } /// generates sequence: from, from+by, from + 2*by, ..., up to a sequence value less than, or equal than to. /// Specifying to < from and by of positive sign is an error. template void seq( TReal from,//!<[in] the starting value of the sequence TReal to,//!<[in] the end value of the sequence TReal by, //!<[in] number: increment of the sequence std::vector &result //!<[out] result sequence ) { result.clear(); typedef typename std::vector::size_type size_type; size_type size = static_cast( (to - from) / by ) + 1u ; result.reserve( size ); if(from <= to) { if(!(by > 0)){ throw std::logic_error(std::string( "by > 0" )); } for(; from <= to; from += by) { result.push_back(from); } } else { if(! (by < 0) ){ throw std::logic_error(std::string( "by < 0" )); } for(; from >= to; from += by) { result.push_back(from); } } } /// generates sequence: from, to of length /// calls seq with \$[ by = ( ( to - from ) / ( length - 1. ) ) \$] template void seq_length( TReal from,//!<[in] the starting value of the sequence TReal to,//!<[in] the end value of the sequence unsigned int length, //!<[in] length of sequence std::vector &result //!<[out] result sequence ) { TReal by = ( ( to - from ) / ( static_cast( length ) - 1. ) ); seq(from, to, by, result); //this is required because of machine precision... // sometimes by does not add's up to precisely _to_ nad if(result.size() < length) { result.push_back(result[result.size()-1] + by ); } else { result.resize(length); } } /// generates the sequence [1, 2, ..., length(ref)] /// (as if argument along.with had been specified), /// unless the argument is numeric of length 1 when it is interpreted as /// 1:from (even for seq(0) for compatibility with S). template< typename T1 , typename T2 > void seq ( std::vector & ref, //!<[in] take the length from the length of this argument. std::vector & res //!<[out] result sequence ) { T2 t(1); res.assign(ref.size() , t ); std::partial_sum( res.begin() , res.end() , res.begin() ); } /// Generates Sequence 1,2,3,....length . /// Generates 1, 2, ..., length unless length.out = 0, when it generates /// integer(0). template typename boost::enable_if, void>::type seq( TSize length, //!< [in] length of sequence std::vector &res //!< [out] result sequence ) { TReal t(1); res.assign(length , t ); std::partial_sum(res.begin(),res.end(),res.begin()); } /// MEAN Trimmed arithmetic mean. /// ## Default S3 method: /// mean(x, trim = 0, na.rm = FALSE, ...) /// Arguments /// x An R object. Currently there are methods for numeric data frames, numeric vectors and dates. A complex vector is allowed for trim = 0, only. /// trim the fraction (0 to 0.5) of observations to be trimmed from each end of x before the mean is computed. Values outside that range are taken as the nearest endpoint. /// na.rm a logical value indicating whether NA values should be stripped before the computation proceeds. /// ... further arguments passed to or from other methods. /// Value /// For a data frame, a named vector with the appropriate method being applied column by column. /// If trim is zero (the default), the arithmetic mean of the values in x is computed, as a numeric or complex vector of length one. If x is not logical (coerced to numeric), integer, numeric or complex, NA is returned, with a warning. /// If trim is non-zero, a symmetrically trimmed mean is computed with a fraction of trim observations deleted from each end before the mean is computed. template < typename InputIterator > inline typename std::iterator_traits::value_type mean( InputIterator begin, //!< [in] InputIterator end //!< [in] ) { typedef typename std::iterator_traits::value_type TReal; TReal size = static_cast(std::distance(begin,end)); TReal sum = std::accumulate(begin , end, 0. ); return(sum/size); } /// mean template inline TReal mean(const std::vector & x ) { TReal size = static_cast(x.size()); TReal sum = std::accumulate(x.begin() , x.end(), 0. ); return ( sum / size ) ; } /// mean template TReal mean( const std::vector & x, //!< [in] TReal trim //!< [in] trim 0 - 0.5 ) { if(trim >= 0.5) { trim = 0.4999999; } TReal size = static_cast(x.size()); std::vector wc(x); //working copy std::sort(wc.begin(),wc.end()); size_t nrelemstrim = static_cast(round( size * trim )) ; size_t nrelems = std::distance(wc.begin() + nrelemstrim, wc.end() - nrelemstrim ); TReal sum = std::accumulate(wc.begin() + nrelemstrim , wc.end() - nrelemstrim, 0. ); return ( sum / static_cast( nrelems ) ); //static_cast will be required with boost::math::round } /// computes the mean template typename std::iterator_traits::value_type geometricMean(Iter_T first, Iter_T last) { typedef typename std::iterator_traits::value_type TReal; size_t cnt = distance(first, last); std::vector copyOfInput(first, last); // ln(x) typename std::vector::iterator inputIt; for(inputIt = copyOfInput.begin(); inputIt != copyOfInput.end() ; ++inputIt) { *inputIt = std::log(*inputIt); } // sum(ln(x)) TReal sum( std::accumulate(copyOfInput.begin(), copyOfInput.end(), TReal() )); // e^(sum(ln(x))/N) TReal geomean( std::exp(sum / cnt) ); return geomean; } /// Range of Values /// range returns a std::pair containing minimum and maximum of all the given values. template void Range( const std::vector & values, //!< [in] data std::pair & range //!< [out] range ) { TReal min = * std::min_element(values.begin(),values.end()); TReal max = * std::max_element(values.begin(),values.end()); range.first = min; range.second = max; } /// maximum of 3 numbers template inline double max3(T a, T b, T c) { T max; if(a>b) max=a; else max=b; if(max inline TReal log2(TReal test) { if(test==0) return(0); else return( log10( test ) / log10( static_cast(2.) )); } }//namespace BASE ends here }//namespace base ends here }//namespace ralab ends here #endif // BASE_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/constants.hpp000066400000000000000000000017461444255175000251730ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef CONSTANTS_H #define CONSTANTS_H #include /*! \file Constants.h \brief Constants */ namespace ralab { namespace constants { /// the ratio of the circumference of a circle to its diameter; const double PI(3.14159265358979323846264338327950288); }//end algo }//end ralab #endif // CONSTANTS_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/copyif.hpp000066400000000000000000000066021444255175000244440ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef COPY_IF_H #define COPY_IF_H #include namespace ralab { namespace base { namespace utils { template OutputIterator copy_if( InputIterator first, InputIterator last, InputIterator2 source, OutputIterator result, Predicate pred) { while(first!=last) { if(pred(*first)) { *result = *source; ++result; } ++first; ++source; } return result; } template OutputIterator copy_if_not( InputIterator first, InputIterator last, InputIterator2 source, OutputIterator result, Predicate pred) { while(first!=last) { if(!pred(*first)) { *result = *source; ++result; } ++first; ++source; } return result; } /*! \brief copy_if Implementation of copy_if as suggested in Efficient STL (Scott Meyers) item 37. */ template < typename InputIterator, typename OutputIterator, typename Predicate > OutputIterator copy_if( InputIterator begin, InputIterator end, OutputIterator destBegin, Predicate p) { while(begin != end) { typename std::iterator_traits::reference r= *begin; if(p(r)) { *destBegin = r; ++destBegin; } ++begin; } return destBegin; } /*! \brief copy_if_not for containers Implementation of copy_if as suggested in Efficient STL (Scott Meyers) item 37. */ template < typename InputIterator, typename OutputIterator, typename Predicate > OutputIterator copy_if_not( InputIterator begin, InputIterator end, OutputIterator destBegin, Predicate p ) { while(begin != end) { typename std::iterator_traits::reference r= *begin; if(!p(r)) { *destBegin = r; ++destBegin; } ++begin; } return destBegin; } }//end utils }//end base }//end ralab #endif // COPY_IF_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/diff.hpp000066400000000000000000000061041444255175000240600ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef DIFF_H #define DIFF_H #include #include #include #include #include #include namespace ralab { namespace base { namespace base { /*! DIFF Lagged and iterated differences. for more detials see R::base::diff
diff(x, ...)
## Default S3 method:
diff(x, lag = 1, differences = 1, ...)
*/ /*! \brief lagged differences \return .end() Iterator in destination container. */ template < typename InputIterator, typename OutputIterator, typename TN // = int32_t > OutputIterator diff ( InputIterator begin, //!< [in] begin InputIterator end, //!< [in] end OutputIterator destBegin, //!< [out] dest begin TN lag//!< [in] an integer indicating which lag to use. ) { typedef typename InputIterator::value_type vtype; return( std::transform(begin + lag , end , begin , destBegin , std::minus< vtype >()) ); } /*! \brief lagged difference The result of the computation is performed in place! \return - .end() in result container. */ template InputIterator diff ( InputIterator begin, //!< begin InputIterator end, //!< end TN lag, //!< An integer indicating which lag to use. TN differences //!< An integer indicating the order of the difference. ) { if(std::distance( begin,end ) <= static_cast(lag * differences) ){ return(begin); } else{ TN i = TN(); InputIterator itmp(end) ; while(differences > i ) { itmp = std::transform( begin + lag , itmp , begin , begin , std::minus() ) ; ++i ; } return(itmp); } } }//end base }//end ralab } #endif // DIFF_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/interpolate.hpp000066400000000000000000000151161444255175000255010ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef EQUISPACEINTERPOLATION_H #define EQUISPACEINTERPOLATION_H #include #include #include #include #include "pwiz/utility/findmf/base/base/utilities/interpolation.hpp" /// EQUISPACEINTERPOL Interpolation on a equidistantly spaced grid. /// Interpolation on a equidistantly spaced grid. The Values y are located at a grid [0,1,..., len(y)]. /// /// For equidistantly spaced y at a grid [0,1,..., len(y)] the \f$ x_{i}\f$ and \f$x_{i+1}\f$ enclosing \f$x_{out}\f$ /// can be found efficiently by i = floor(xout). Furthermore for \f$ x_{i+1} - x_{i} = 1 \f$ the interpolation formulas are simple. /// Therefore, w provided this specialized implementation of interpolation functions. /// Each segment (bounded by two data points) can be interpolated independently. /// The parameter mu defines where to estimate the value on the interpolated line, it is 0 at the first point and 1 and the second point. /// For interpolated values between the two points mu ranges between 0 and 1. Values of mu outside this range result in extrapolation. /// This convention is followed for all the subsequent methods below. namespace ralab { namespace base { namespace base { /// affine interpolation on equidistantly spaced y. The y's are located at 0,1,2....,len(y). /// For x's < 0 or x's > len(y) y[0] or y[len(y) -1 ] is used. template void interpolate_linear( YInputIterator begY, //!< y values equidistantly spaced. spacing is [0,1,2, .... ,len(y)] YInputIterator endY, XInputIterator begX, //!< points to interpolate at XInputIterator endX, OutputIterator out, //!< interpolated values, same length as x. int start_index = 0, //!< if y values are placed on a grid with start_index != 0 typename std::iterator_traits::value_type epsilon = std::numeric_limits::value_type>::epsilon() ) { typedef typename std::iterator_traits::value_type TReal; utilities::LinearInterpolate functor(epsilon); utilities::interpolateLinearCosine(begY , endY , begX , endX , out , functor , start_index); }// end interpolate cubic /// cosine interpolation on equidistantly spaced y. The y's are located at 0,1,2....,len(y). /// For x's < 0 or x's > len(y) y[0] or y[len(y) -1 ] is used. template void interpolate_cosine( YInputIterator begY, //!< y values equidistantly spaced. spacing is [0,1,2, .... ,len(y)] YInputIterator endY, XInputIterator begX, //!< points to interpolate at XInputIterator endX, OutputIterator out, //!< interpolated values, same length as x. int start_index = 0 //!< if y values are placed on a grid with start_index != 0 ) { typedef typename std::iterator_traits::value_type TReal; utilities::CosineInterpolate functor; utilities::interpolateLinearCosine(begY,endY ,begX,endX, out,functor, start_index); }// end interpolate cubic /// cubic interpolation on equidistantly spaced y's. The y's are located at 0,1,2....,len(y). /// For x's < 0 or x's > len(y) y[0] or y[len(y) -1 ] is used. template void interpolate_cubic( YInputIterator begY, //!< y values equidistantly spaced. spacing is [0,1,2, .... ,len(y)] YInputIterator endY, XInputIterator begX, //!< points to interpolate at XInputIterator endX, OutputIterator out, //!< interpolated values, same length as x. int start_index = 0, //!< if y values are placed on a grid with start_index != 0 typename std::iterator_traits::value_type epsilon = std::numeric_limits::value_type>::epsilon() ) { typedef typename std::iterator_traits::value_type TReal; utilities::CubicInterpolate functor(epsilon); utilities::interpolateCubicHermite(begY,endY ,begX,endX, out,functor, start_index); }// end interpolate cubic /// Hermite interpolation on equidistantly spaced y's. The y's are located at 0,1,2....,len(y). /// For x's < 0 or x's > len(y) y[0] or y[len(y) -1 ] is used. template < typename YInputIterator, typename XInputIterator, typename OutputIterator > void interpolate_Hermite( YInputIterator begY, //!< y values equidistantly spaced. spacing is [0,1,2, .... ,len(y)] YInputIterator endY, XInputIterator begX, //!< points to interpolate at XInputIterator endX, OutputIterator out, //!< interpolated values, same length as x. double tension = 0, //!< 1 is high, 0 normal, -1 is low double bias = 0, //!< 0 is even, positive is towards first segment, negative towards the other int start_index = 0, //!< if y values are placed on a grid with start_index != 0 typename std::iterator_traits::value_type epsilon = std::numeric_limits::value_type>::epsilon() ) { typedef typename std::iterator_traits::value_type TReal; utilities::HermiteInterpolate functor(tension, bias, epsilon); utilities::interpolateCubicHermite( begY , endY , begX , endX , out , functor , start_index ); }// end interpolate cubic }//base }//namespace base }//namespace ralab #endif // EQUISPACEINTERPOLATION_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/scale.hpp000066400000000000000000000067361444255175000242520ustar00rootroot00000000000000// // $Id: $ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef SCALE_H #define SCALE_H #include #include #include #include #include #include #include "pwiz/utility/findmf/base/base/base.hpp" namespace ralab { namespace base { namespace stats { template struct NthPower : std::unary_function { TReal operator()(const TReal & x) { TReal ret = x; for (int i=1; i < N; ++i) { ret *= x; } return ret; } }; /*!\brief The root-mean-square for a column is obtained by computing the square-root of the sum-of-squares of the non-missing values in the column divided by the number of non-missing values minus one. */ template typename std::iterator_traits::value_type rootMeanSquare( const InputIterator begin, //!< [in] start iterator const InputIterator end //!< [in] end iterator ) { typedef typename std::iterator_traits::value_type TReal; std::vector x(begin,end); std::transform( x.begin(), x.end(), x.begin(), NthPower<2,TReal>() ); //first sqaure all elements TReal sum = std::accumulate(x.begin(), x.end() , TReal(0.)); sum = sum/static_cast(x.size() - size_t(1)); return(sqrt(sum)); } /** scale centers and/or scales all values from begin in to end. */ template void scale( InputIterator begin, InputIterator end, std::pair::value_type,typename std::iterator_traits::value_type> & scaled, //!<[out] scaled.first = center, scaled.second = scale bool center = true,//!<[in] either a logical value or a numeric vector of length equal to the number of columns of x. bool scale = true //!<[in] either a logical value or a numeric vector of length equal to the number of columns of x. ) { typedef typename std::iterator_traits::value_type TReal; std::vector tmp; if(center) { scaled.first = ralab::base::base::mean( begin , end); std::transform(begin, end, begin, std::bind2nd( std::minus(), scaled.first)); } else { scaled.first = std::numeric_limits::quiet_NaN(); } if(scale) { scaled.second = rootMeanSquare( begin , end ); std::transform(begin, end, begin , std::bind2nd(std::divides(), scaled.second) ); } else { scaled.second = std::numeric_limits::quiet_NaN(); } } } } } #endif libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/utilities/000077500000000000000000000000001444255175000244515ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/utilities/base.hpp000066400000000000000000000030631444255175000260760ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef BASEUTILITIES_H #define BASEUTILITIES_H namespace ralab { namespace base { namespace base { namespace utilities { // class generator: template struct SeqPlus { TReal m_from; TReal m_by; SeqPlus(TReal from) : m_from(from), m_by(1) {} TReal operator()() { TReal current = m_from ; m_from += m_by; return current; } }; template struct SeqMinus { TReal m_from; TReal m_by; SeqMinus(TReal from) : m_from(from), m_by(1) {} TReal operator()() { TReal current = m_from ; m_from -= m_by; return current; } }; } } //base } //base }//ralab #endif // BASE_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/base/utilities/interpolation.hpp000066400000000000000000000264021444255175000300550ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef INTERPOLATIONUTILITIES_H #define INTERPOLATIONUTILITIES_H #include "pwiz/utility/findmf/base/base/constants.hpp" #include namespace ralab { namespace base { namespace base { namespace utilities { /// LinearInterpolate Functor template struct LinearInterpolate { TReal epsilon_; LinearInterpolate(TReal epsilon = std::numeric_limits::epsilon() ) :epsilon_(epsilon){} inline TReal operator() ( TReal y1, //!< y1 TReal y2, //!< y2 TReal mu //!< location parameter 0,1 ) { if(mu < epsilon_) return y1; else if(-(mu - 1.) < epsilon_) return y2; else return ( y1 * (1-mu) + y2 * mu ) ; } };// /// CosineInterpolate Functor /// Linear interpolation results in discontinuities at each point. /// Often a smoother interpolating function is desirable, perhaps the simplest is cosine interpolation. /// A suitable orientated piece of a cosine function serves /// to provide a smooth transition between adjacent segments. template struct CosineInterpolate { /*!\brief operator */ inline TReal operator()( TReal y1,//!< y1 TReal y2,//!< y2 TReal mu//!< location parameter in [0.,1.] ) { TReal mu2; mu2 = (1. - cos(mu* ralab::constants::PI))/2; return(y1*( 1. -mu2 )+y2*mu2); } }; /// CubicInterpolate Functor /// Cubic interpolation is the simplest method that offers true continuity between the segments. /// As such it requires more than just the two endpoints of the segment but also the two points on either side of them. /// So the function requires 4 points in all labeled y0, y1, y2, and y3, in the code below. /// mu still behaves the same way for interpolating between the segment y1 to y2. /// This doe s raise issues for how to interpolate between the first and last segments. /// In the examples here I just haven't bothered. /// A common solution is the dream up two extra points at the start and end of the sequence, /// the new points are created so that they have a slope equal to the slope of the start or end segment. template struct CubicInterpolate { TReal epsilon_; CubicInterpolate(TReal epsilon = std::numeric_limits::epsilon() ):epsilon_(epsilon) {} /*!\brief operator */ inline TReal operator() ( TReal y0,//!< y0 TReal y1,//!< y1 TReal y2,//!< y2 TReal y3,//!< y3 double mu//!< location parameter in [0.,1.] ) { if(mu < epsilon_) { return y1; } else if(-(mu - 1.) < epsilon_) { return y2; } else { TReal a0,a1,a2,a3,mu2; mu2 = mu*mu; a0 = y3 - y2 - y0 + y1; a1 = y0 - y1 - a0; a2 = y2 - y0; a3 = y1; return(a0*mu*mu2 + a1*mu2 + a2*mu + a3); } } }; /// HermiteInterpolation. /// Hermite interpolation like cubic requires 4 points so that it can achieve a higher degree of continuity. /// In addition it has nice tension and biasing controls. /// Tension can be used to tighten up the curvature at the known points. /// The bias is used to twist the curve about the known points. /// The examples shown here have the default tension and bias values of 0, /// it will be left as an exercise for the reader to explore different tension and bias values. template struct HermiteInterpolate { TReal tension_; TReal bias_; TReal epsilon_; HermiteInterpolate( TReal tension,//!< 1 is high, 0 normal, -1 is low TReal bias,//!< 0 is even, positive is towards first segment, negative towards the other TReal epsilon = std::numeric_limits::epsilon() ): tension_(tension), bias_(bias), epsilon_(epsilon) {} /*!\brief operator */ inline TReal operator ()( TReal y0,//!< y0 TReal y1,//!< y1 TReal y2,//!< y2 TReal y3,//!< y3 TReal mu //!< location ) { if(mu < epsilon_) { return y1; } else if(-(mu - 1.) < epsilon_) { return y2; } else { TReal m0,m1,mu2,mu3; TReal a0,a1,a2,a3; mu2 = mu * mu; mu3 = mu2 * mu; m0 = (y1-y0)*(1+bias_)*(1-tension_)/2; m0 += (y2-y1)*(1-bias_)*(1-tension_)/2; m1 = (y2-y1)*(1+bias_)*(1-tension_)/2; m1 += (y3-y2)*(1-bias_)*(1-tension_)/2; a0 = 2*mu3 - 3*mu2 + 1; a1 = mu3 - 2*mu2 + mu; a2 = mu3 - mu2; a3 = -2*mu3 + 3*mu2; return( a0*y1 + a1*m0 + a2*m1 + a3*y2 ); } } }; // HermiteInterpolation /// Cubic or Hermite interpolation worker template< typename YInputIterator, typename XInputIterator, typename OutputIterator, typename TFunctor > static void interpolateCubicHermite ( YInputIterator begY, YInputIterator endY, XInputIterator begX, XInputIterator endX, OutputIterator out, //!< interpolated values, same length as x. TFunctor & functor, //!< either CubicInterpolate or HermiteInterpolate int start_index = 0 ) { typedef typename std::iterator_traits::value_type TReal; //size_t nrX = std::distance( begX , endX ); size_t nrY = std::distance( begY , endY ); OutputIterator outI = out; for( unsigned int i = 0 ; begX != endX ; ++i , ++begX, ++outI ) { double xd = *begX - start_index; int index = static_cast(floor(xd)); //interpolate TReal mu = xd - static_cast(index); if(index < -1) { *outI = *begY; } else if(index == -1) { TReal y1 = *begY; TReal y2 = *begY; TReal y3 = *begY; TReal y4 = *(begY+1); *outI = functor(y1 , y2 , y3 , y4 , mu ); } //extrapolate else if(index == 0 ) { TReal y1 = 0; TReal y2 = *begY; TReal y3 = *(begY+1); TReal y4 = *(begY+2); *outI = functor(y1 , y2 , y3 , y4 , mu ); } else if( index > 0 && index < static_cast(nrY - 2) )//the normal case { YInputIterator begTmp = (begY + index - 1); TReal y1 = *begTmp; TReal y2 = *(begTmp + 1); TReal y3 = *(begTmp + 2); TReal y4 = *(begTmp + 3); *outI = functor(y1 , y2 , y3 , y4 , mu ); } else if(index == static_cast(nrY-2) ) //you are getting out of range { YInputIterator begTmp = (begY + index - 1); TReal y1 = *begTmp; TReal y2 = *(begTmp+1); TReal y3 = *(begTmp+2); TReal y4 = 0 ; *outI = functor(y1 , y2 , y3 , y4 ,mu); } else if(index == static_cast(nrY-1) ) //you are even farther out... { YInputIterator begTmp = (begY + index - 1); TReal y1 = *begTmp; TReal y2 = *(begTmp+1); TReal y3 = *(begTmp+1); TReal y4 = *(begTmp+1); *outI = functor(y1 , y2 , y3 , y4 , mu ); } else { *outI = *(endY-1); } }//end for }//end interpolate_cubic /// Linear cubic interpolator worker template < typename YInputIterator, typename XInputIterator, typename OutputIterator, typename TFunctor > static void interpolateLinearCosine ( YInputIterator y_p, //!< y values equidistantly spaced. spacing is [0,1,2, .... ,len(y)] YInputIterator endY, XInputIterator x_p, //!< points to interpolate at XInputIterator endX, OutputIterator out_p, //!< interpolated values, same length as x. TFunctor & interpolator, //!< interpolation functor, either: CosineInterpolate, LinearInterpolate. int start_index = 0 //!< if y values are placed on a grid with start_index != 0 ) { typedef typename std::iterator_traits::value_type TReal ; size_t nrX = std::distance(x_p,endX); size_t nrY = std::distance(y_p,endY); TReal xd; for(unsigned int i = 0 ; i < nrX; ++i, ++x_p, ++out_p) { xd = * x_p - start_index; double indexd = floor(xd); int index = static_cast( indexd ); assert(fabs (index - indexd) < 0.001); //interpolate if(index < 0 ) { *out_p = *y_p; }else if( index < static_cast(nrY-1) ) { TReal mu = xd - indexd; YInputIterator y1_p = (y_p + index); TReal y1 = *y1_p; TReal y2 = *(++y1_p); *out_p = interpolator(y1,y2,mu); } else { *out_p = *(y_p + (nrY-1)); } }//end for }//end interpolate cubic }//end utilities }//end base }//base }//ralab #endif libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/000077500000000000000000000000001444255175000230115ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/filter.hpp000066400000000000000000000112261444255175000250110ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef FILTERUTILS_H #define FILTERUTILS_H #include #include #include #include #include #include #include #include #include #include #include "pwiz/utility/findmf/base/filter/utilities/preparedata.hpp" namespace ralab { namespace base { namespace filter { typedef boost::uint32_t uint32_t; template void filter_sequence( TIterator dataBeg, //!<[in] a univariate time series. TIterator dataEnd, TFilterIterator filterBeg, //!<[in] a vector of filter coefficients in reverse time order (as for AR or MA coefficients). Lenght of filter must be odd. size_t fsize, TOutputIterator resBeg, //!<[out] result bool circular = false, //!<[in] If TRUE, wrap the filter around the ends of the series, otherwise assume external values are missing (NA). uint32_t sides = 2 //!<[in] currently only sides 2 supported.... ) { typedef typename std::iterator_traits::value_type TReal; if((fsize-1) % 2) { throw std::logic_error("filter size must be odd"); } if(!circular) { //result.assign(data.size(), std::numeric_limits::quiet_NaN() ); size_t offset = static_cast(fsize/2); for(std::size_t i = 0 ; i< offset; ++i, ++resBeg) { *resBeg = std::numeric_limits::quiet_NaN(); } for( ; dataBeg != dataEnd - (fsize -1) ; ++dataBeg, ++resBeg ) { *resBeg = (std::inner_product(dataBeg , dataBeg + fsize, filterBeg ,0. )); } } else { std::vector::value_type> tmp; typename std::vector::value_type>::iterator it; it = utilities::prepareData( dataBeg, dataEnd, fsize , tmp ); TIterator tbegin = tmp.begin(); TIterator tend = it; for( ; tbegin != tend - (fsize-1 ) ; ++tbegin, ++resBeg ) { *resBeg = std::inner_product(tbegin , tbegin + fsize, filterBeg ,0. ); } } }// filter end /*! \brief Applies linear convolution (filtering) to a univariate time series The convolution filter is \f$ y[i] = f[1]*x[i+o] + ... + f[p]*x[i+o-(p-1)] \f$ where o is the offset: see sides for how it is determined. \param sides for convolution filters only. If sides=1 the filter coefficients are for past values only; if sides=2 they are centred around lag 0. In this case the length of the filter should be odd, but if it is even, more of the filter is forward in time than backward */ template void filter( const TContainer & data, //!<[in] a univariate time series. const TContainer & filter, //!<[in] a vector of filter coefficients in reverse time order (as for AR or MA coefficients). Lenght of filter must be odd. TContainer & result, //!<[out] result bool circular = false, //!<[in] If TRUE, wrap the filter around the ends of the series, otherwise assume external values are missing (NA). uint32_t sides = 2 //!<[in] currently only sides 2 supported.... ) { result.resize(data.size()); filter_sequence ( data.begin(), data.end(), filter.begin(), filter.size(), result.begin(), circular, sides ); }// filter end }//filter }//base }//ralab #endif libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/gaussfilter.hpp000066400000000000000000000077501444255175000260630ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef GAUSSFILTERTYPES_H #define GAUSSFILTERTYPES_H #include #include "pwiz/utility/findmf/base/filter/utilities/gauss.hpp" namespace ralab{ namespace base{ namespace filter{ /*! \brief generate the gauss filter function for filtering of peaks with fwhm (full width at half max) \post accumulate(gauss) == 1. \return accumulate(gauss) == 1. */ template TReal getGaussianFilter ( std::vector & gauss, //!<[out] Gaussian for filtering TReal fwhm = 20 //!<[in] full width at half max in points ) { std::vector x; ralab::base::base::seq( -ceil(TReal(2*fwhm)), ceil(TReal(2*fwhm)) , x); TReal sigma = fwhm/2.35; //generate response return utilities::getGaussWorker(sigma, gauss, x); } /*! \brief generate the gauss filter function for filtering of peaks with fwhm (full width at half max) \post accumulate(gauss) == 1. \return accumulate(gauss) == 1. */ template TReal getGaussianFilterQuantile ( std::vector & gauss, //!<[out] Gaussian for filtering TReal fwhm = 20, //!<[in] full width at half max in points TReal quantile = 0.01 //!< would mean that the generated distribution covers at least 99.8 of mass ) { if( quantile >= 0.5) { throw std::logic_error("quantile >= 0.5"); } std::vector x; TReal sigma = fwhm/2.35; boost::math::normal_distribution nd_(0,sigma); TReal quant = floor(boost::math::quantile(nd_,quantile)); ralab::base::base::seq( quant , -quant , x); return utilities::getGaussWorker(sigma, gauss, x); } /*! \brief generate first derivative Gauss \post accumulate(gauss1d) == 0. \post accumulate(fabs(gauss1d)) == 1. */ template TReal getGaussian1DerFilter( std::vector & gauss1d, //!<[out] Gaussian for filtering TReal fwhm = 20 //!<[in] full width at half max in points ) { std::vector x; ralab::base::base::seq( - ceil(TReal(2*fwhm)), ceil(TReal(2*fwhm)) , x); TReal sigma = fwhm/2.35; //generate response return utilities::getGaussian1DerWorker(sigma, gauss1d, x); } template TReal getGaussian1DerFilterQuantile( std::vector & gauss1d, //!<[out] Gaussian for filtering TReal fwhm = 20, //!<[in] full width at half max in points TReal quantile = 0.1 ) { if( quantile >= 0.5) { throw std::logic_error("quantile >= 0.5"); } std::vector x; TReal sigma = fwhm/2.35; boost::math::normal_distribution nd_(0,sigma); TReal quant = floor(boost::math::quantile(nd_,quantile)); ralab::base::base::seq( quant , -quant , x); //generate response return utilities::getGaussian1DerWorker(sigma, gauss1d, x); } }//filter }//base }//ralab #endif libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/utilities/000077500000000000000000000000001444255175000250245ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/utilities/gauss.hpp000066400000000000000000000107141444255175000266620ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef GAUSS_H #define GAUSS_H #include "pwiz/utility/findmf/base/base/constants.hpp" #include "pwiz/utility/findmf/base/base/base.hpp" #include "pwiz/utility/findmf/base/base/scale.hpp" namespace ralab{ namespace base{ namespace filter{ namespace utilities{ /*! \brief Gauss function \f[ f(x) = \frac{1}{\sigma \sqrt{2 \pi}} \cdot e^{-0.5 \cdot \frac{x - \mu }{\sigma}^2 } \f] \ingroup FILTER */ template struct Gauss : std::unary_function { Gauss(TReal mu, TReal sigma) :mu_(mu), sigma_(sigma) {} TReal operator()(TReal x) { return( 1/(sigma_ * sqrt(2. * ralab::constants::PI) ) * exp(-0.5 * ( pow( (x - mu_ )/sigma_, TReal(2.) ) ) )); } public: TReal mu_; TReal sigma_; }; /*! \brief First derivative of Gaussian \f$ T_1 = -\frac{(x-\mu)}{ \sqrt{2 \pi}* \sigma^2 |\sigma| },\\ T_2 = e^{-0.5 \frac{x-\mu}{\sigma}^2 },\\ f'(x) = T_1 \cdot T_2 \f$ \ingroup FILTER */ template struct Gauss_1deriv : std::unary_function< TReal ,TReal > { Gauss_1deriv( TReal mu//!< mean , TReal sigma //!< sigma ) :mu_(mu), sigma_(sigma) {} /*!\brief returns f'(x), with f - Gaussian.*/ TReal operator()( TReal x ) { TReal T1 = - (x - mu_) / ( sqrt(TReal(2.) * ralab::constants::PI) * pow(sigma_ , TReal(2.)) * abs(sigma_) ); TReal T2 = exp( -0.5 * pow( ( ( x-mu_ ) / sigma_ ) , TReal(2.) ) ); return( T1 * T2 ); } protected: TReal mu_; TReal sigma_; }; template TReal getGaussWorker( TReal sigma, std::vector &gauss, std::vector &x ) { //generate response Gauss g(0.,sigma); gauss.resize(x.size()); std::transform(x.begin(),x.end(),gauss.begin(),g); //ensure that are of gaussian is one... TReal sum = std::accumulate(gauss.begin() , gauss.end() , 0.); std::transform(gauss.begin(),gauss.end(),gauss.begin(),std::bind2nd(std::divides(),sum )) ; TReal sumfilter = std::accumulate(gauss.begin(),gauss.end(),0.); return sumfilter; } template void scaleDerivative( std::vector &mh //the wavelet to scale ) { //do this so that the sum of wavelet equals zero TReal sum = std::accumulate(mh.begin() , mh.end() , 0.); sum /= mh.size(); std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::minus(), sum )) ; //compute sum of square... TReal sumAbs = 0; for(typename std::vector::iterator it = mh.begin() ;it != mh.end(); ++it) { sumAbs += fabs(*it); } std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::divides(), sumAbs )) ; } template TReal getGaussian1DerWorker( TReal sigma, std::vector &gauss1d, std::vector &x ) { Gauss_1deriv g(0.,sigma); gauss1d.resize(x.size()); std::transform(x.begin(),x.end(),gauss1d.begin(),g); scaleDerivative(gauss1d); TReal sum = std::accumulate(gauss1d.begin(),gauss1d.end(),0.); return sum; } }//utilities }//base }//filter }//ralab #endif libpwizlite-3.0.5/src/pwiz/utility/findmf/base/filter/utilities/preparedata.hpp000066400000000000000000000045371444255175000300360ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef PREPAREDATA_H #define PREPAREDATA_H namespace ralab{ namespace base{ namespace filter{ namespace utilities{ /*!\brief Example Sequence : 1 2 3 4 5; width 5 and mirror false: 4 5 1 2 3 4 5 1 2, if mirror true than: 2 1 1 2 3 4 5 5 4 */ template typename TContainer::iterator prepareData ( TIterator dataBeg , TIterator dataEnd , size_t fsize, TContainer &res , //!< [out] bool mirror = false //!< should it be circular or mirrored. ) { if(mirror) { typename TContainer::iterator it; size_t fsize2 = (fsize-1)/2; res.resize(std::distance(dataBeg,dataEnd)+fsize); boost::reverse_iterator reverse_begin(dataEnd); boost::reverse_iterator reverse_end(dataBeg); it = std::copy(reverse_end - fsize2,reverse_end, res.begin() ); it = std::copy(dataBeg,dataEnd, it ); it = std::copy( reverse_begin, reverse_begin + fsize2, it); return it; } else { typename TContainer::iterator it; size_t fsize2 = (fsize-1)/2; res.resize(std::distance(dataBeg,dataEnd)+fsize); it = std::copy(dataEnd - fsize2,dataEnd, res.begin() ); it = std::copy(dataBeg,dataEnd, it ); it = std::copy( dataBeg, dataBeg + fsize2, it); return it; } } }//end utilities }//filter }//base }//ralab #endif // PREPAREDATA_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/000077500000000000000000000000001444255175000233345ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/bin1d.hpp000066400000000000000000000073311444255175000250460ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef BIN1D_H #define BIN1D_H #include #include #include #include #include #include #include namespace ralab { namespace base { namespace resample { typedef boost::int32_t int32_t; typedef boost::int64_t int64_t; //Class returns the index a value belongs too.... struct Bin1D { std::vector breaks_; // boundaries double * begbreaks_; double * endbreaks_; public: Bin1D():breaks_(),begbreaks_(0),endbreaks_(0){} Bin1D( std::vector & breaks // breaks ):breaks_(), begbreaks_(0), endbreaks_(0) { this->setBreaks(breaks); } Bin1D( const Bin1D & rhs // breaks ):breaks_(), begbreaks_(0), endbreaks_(0) { this->setBreaks(rhs.breaks_); } void setBreaks(const std::vector & breaks){ breaks_.assign( breaks.begin(), breaks.end() ); std::sort(breaks_.begin(),breaks_.end()); reset(); } void reset(){ begbreaks_ = &breaks_[0]; endbreaks_ = begbreaks_ + breaks_.size(); } void getBreaks(std::vector & breaks) const{ breaks.assign(begbreaks_,endbreaks_); } const std::vector & getBreaks() const{ return breaks_; } bool inRange(double dat) const{ return (dat > breaks_.front() && dat < breaks_.back()); } std::size_t operator()(double dat) const { double * it2 = std::lower_bound(begbreaks_,endbreaks_,dat); size_t ub = std::distance(begbreaks_,it2); return ub; } void operator()(double dat1, double dat2, std::vector & idx, std::vector & dist ) const { double * it1 = std::lower_bound(begbreaks_,endbreaks_,dat1); double * it2 = std::lower_bound(begbreaks_,endbreaks_,dat2); size_t ub1 = std::distance(begbreaks_,it1); size_t ub2 = std::distance(begbreaks_,it2); int64_t n = static_cast(ub2-ub1)+1; idx.resize(n); dist.resize(n); if(ub1 == ub2 ){ idx[0] = ub1-1; dist[0] = dat2 - dat1; return; } else{ for(int64_t i = 0; it1 != (it2+1) ; i++, it1++){ idx[i] = ub1 + i - 1; if(i == 0) { dist[i] = *(it1) - dat1; } else if( i < n - 1 ) { dist[i] = *(it1) - *(it1-1); } else { dist[i] = dat2 - *(it1-1); } } } } }; }//resample }//base }//ralab #endif // BUCKET1D_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/breakspec.hpp000066400000000000000000000055471444255175000260170ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef BREAKSSPEC_H #define BREAKSSPEC_H #include namespace ralab { namespace base { namespace resample{ /*! \brief Segment mass range according to Mass Compare functor could be used to histogram a dataset or to compute minima for each segment in order to perform baseline subtraction. */ template void breaks ( double minMass, double maxMass, TMassComparator tmassComp, std::vector & breaks, bool exact = false ) { double startMass; double endMass = maxMass; if(exact) { startMass = minMass; } else { startMass = minMass - tmassComp(minMass)/2.; } breaks.push_back(startMass); do { startMass = startMass + tmassComp(startMass); breaks.push_back(startMass ); }while( startMass < endMass); if(exact) { breaks.back() = endMass; } } /*\compute mids for breaks */ template< typename TInputIterator, typename TOutputIterator > TOutputIterator getMids(TInputIterator breaksBeg, TInputIterator breaksEnd, TOutputIterator midsBeg ) { typedef typename std::iterator_traits::value_type TReal; TReal oldval = *breaksBeg; TReal divider = TReal(0.5); ++breaksBeg; for( ; breaksBeg != breaksEnd; ++breaksBeg, ++midsBeg ) { TReal newval = *(breaksBeg); *midsBeg = (oldval + newval)*divider; oldval = newval; } return midsBeg; } /*!\brief Dummy version of getMids*/ inline void getMids( const std::vector &breaks, std::vector & mids ) { mids.resize(breaks.size()-1); getMids(breaks.begin(), breaks.end(), mids.begin() ); } }//end resample }//end base }//end ralab #endif // BREAKSSPEC_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/determinebinwidth.hpp000066400000000000000000000043561444255175000275620ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef DETERMINEBINWIDTH_H #define DETERMINEBINWIDTH_H #include #include #include #include #include #include "pwiz/utility/findmf/base/base/diff.hpp" #include "pwiz/utility/findmf/base/resample/utilities/determinebinwidth.hpp" namespace ralab { namespace base { namespace resample { template struct SquareRoot{ TReal operator()(TReal x) const{ return(sqrt(x)); } }; struct SamplingWith{ std::vector diff_; std::vector summ_; std::vector am_; //expects a sorted sequence template double operator()(TRealI begin, TRealI end) { //BOOST_ASSERT(!boost::range::is_sorted(begin,end)); typedef typename std::iterator_traits::value_type TReal; std::size_t N = std::distance(begin,end); double am; if(N > 1){ diff_.resize(N-1); summ_.resize(N-1); am_.resize(N-1); ralab::base::base::diff(begin,end,diff_.begin(),1); utilities::summ( begin , end, summ_.begin(),1); //square the sum //std::transform(summ_.begin(),summ_.end(),summ_.begin(),boost::bind(sqrt,_1)); std::transform(summ_.begin(),summ_.end(),summ_.begin(),SquareRoot()); std::transform(diff_.begin(),diff_.end(),summ_.begin(),am_.begin(),std::divides()); std::sort(am_.begin(),am_.end()); am = utilities::determine(am_.begin(),am_.end()); }else{ am = 0.; } return am; } }; } } } #endif // DETERMINEBINWIDTH_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/masscomparefunctors.hpp000066400000000000000000000064121444255175000301460ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef MASSCOMPAREFUNCTORS_H #define MASSCOMPAREFUNCTORS_H #include #include #include /*! \file MassCompareFunctors.h Defines function objects which are used by SortedMatcher and UnsortedMatcher. */ namespace ralab { namespace base { namespace resample { inline double resolution2ppm(double resolution){ return 1/resolution * 1e6; } ///TODO Do checking on TReal thats a real template struct PPMCompFunctor { typedef TReal value_type; value_type window_; value_type ppm_; PPMCompFunctor(value_type window //!< in ppm ):window_(window),ppm_(1e-6) {} /// returns window at mass inline value_type operator()(value_type val) { return((window_ * val)*ppm_); } /// if dist pval cval smaller then window returns true inline bool operator()(value_type pval, value_type cval) { return( std::abs(pval - cval) < operator()(pval) ); } }; /// Da Comparator - constant mass error template struct DaCompFunctor { typedef TReal value_type; value_type window_; DaCompFunctor(value_type window) : window_(window) { } /// window at mass inline value_type operator()(value_type /*val*/) { return( window_ ); } /** if dist pval cval smaller then window returns true */ inline bool operator()(value_type pval, value_type cval) { return( std::abs(pval - cval) < operator()(pval) ); } }; /// FTMS Comparator template struct FTMSCompFunctor { typedef TReal value_type; value_type window_; value_type mass_; value_type invR_;//FTMS resolution /// brief window at mass, i.e. 0.1 Da at 400Da FTMSCompFunctor( value_type window , value_type mass ) : window_(window) , mass_(mass) { invR_ = sqrt(window_)/mass_; } /// brief returns size of windows for this mass inline value_type operator()(value_type val) { value_type pR = (val*invR_); return( pR*pR ); } /// brief compares two masses, returns true if they match false otherwise inline bool operator()(value_type pval, value_type cval) { return( std::abs( pval - cval ) < operator()(pval) ); } }; }//end resample }//end MSALGO }//end ralab #endif // MASSCOMPAREFUNCTORS_H libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/utilities/000077500000000000000000000000001444255175000253475ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/findmf/base/resample/utilities/determinebinwidth.hpp000066400000000000000000000047101444255175000315670ustar00rootroot00000000000000// // $Id$ // // // Original author: Witold Wolski // // Copyright : ETH Zurich // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef DETERMINEBINWIDTHUTILITIES_H #define DETERMINEBINWIDTHUTILITIES_H #include #include #include namespace ralab { namespace base { namespace resample { typedef boost::int32_t int32_t; namespace utilities{ template struct meanfunctor : std::binary_function{ T operator()(const T & x, const T& y){ return (x+y)/2.; } }; template < typename InputIterator, typename OutputIterator, typename TN //= int32_t > OutputIterator summ ( InputIterator begin, //!< [in] begin InputIterator end, //!< [in] end OutputIterator destBegin, //!< [out] dest begin TN lag = 1//!< [in] an integer indicating which lag to use. ) { return( std::transform(begin + lag , end , begin , destBegin , meanfunctor()) ); } template double determine(TRealI begin, TRealI end,double maxj=5.){ //BOOST_ASSERT(!boost::range::is_sorted(begin,end)); double j = 1.; double average = *begin; double sum = average; int32_t i = 1; for(; begin != end ; ++begin, ++i){ while(*begin > (j+0.5) *average){ ++j; } if(j > maxj){ break; } sum += *begin/j; average = sum/static_cast(i); } return average; } } } } } #endif libpwizlite-3.0.5/src/pwiz/utility/math/000077500000000000000000000000001444255175000203005ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/math/HouseholderQR.hpp000066400000000000000000000066041444255175000235430ustar00rootroot00000000000000// // $Id$ // // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // // Original author: Robert Burke // // This code taken from the following site: // http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS/Matrix_Inversion // #ifndef HOUSEHOLDERQR_HPP #define HOUSEHOLDERQR_HPP #include #include #include #include #include namespace ublas = boost::numeric::ublas; namespace pwiz { namespace math { template void TransposeMultiply (const ublas::vector& vector, ublas::matrix& result, size_t size) { result.resize (size,size); result.clear (); for(unsigned int row=0; row< vector.size(); ++row) { for(unsigned int col=0; col < vector.size(); ++col) result(row,col) = vector(col) * vector(row); } } template void HouseholderCornerSubstraction (ublas::matrix& LeftLarge, const ublas::matrix& RightSmall) { using namespace boost::numeric::ublas; using namespace std; if( !( (LeftLarge.size1() >= RightSmall.size1()) && (LeftLarge.size2() >= RightSmall.size2()) ) ) { cerr << "invalid matrix dimensions" << endl; return; } size_t row_offset = LeftLarge.size2() - RightSmall.size2(); size_t col_offset = LeftLarge.size1() - RightSmall.size1(); for(unsigned int row = 0; row < RightSmall.size2(); ++row ) for(unsigned int col = 0; col < RightSmall.size1(); ++col ) LeftLarge(col_offset+col,row_offset+row) -= RightSmall(col,row); } template void HouseholderQR (const ublas::matrix& M, ublas::matrix& Q, ublas::matrix& R) { using namespace boost::numeric::ublas; using namespace std; if( !( (M.size1() == M.size2()) ) ) { cerr << "invalid matrix dimensions" << endl; return; } size_t size = M.size1(); // init Matrices matrix H, HTemp; HTemp = identity_matrix(size); Q = identity_matrix(size); R = M; // find Householder reflection matrices for(unsigned int col = 0; col < size-1; ++col) { // create X vector ublas::vector RRowView = column(R,col); vector_range< ublas::vector > X2 (RRowView, range (col, size)); ublas::vector X = X2; // X -> U~ if(X(0) >= 0) X(0) += norm_2(X); else X(0) += -1*norm_2(X); HTemp.resize(X.size(),X.size(),true); TransposeMultiply(X, HTemp, X.size()); // HTemp = the 2UUt part of H HTemp *= ( 2 / inner_prod(X,X) ); // H = I - 2UUt H = identity_matrix(size); HouseholderCornerSubstraction(H,HTemp); // add H to Q and R Q = prod(Q,H); R = prod(H,R); } } } } #endif // HOUSEHOLDERQR_HPP libpwizlite-3.0.5/src/pwiz/utility/math/LinearLeastSquares.hpp000066400000000000000000000045771444255175000245750ustar00rootroot00000000000000// // $Id$ // // Original author: Robert Burke // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _LINEARLEASTSQUARES_HPP_ #define _LINEARLEASTSQUARES_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include "LinearSolver.hpp" #include "Types.hpp" namespace pwiz { namespace math { enum PWIZ_API_DECL LinearLeastSquaresType {LinearLeastSquaresType_LU, LinearLeastSquaresType_QR}; template class LinearLeastSquares; template<> class LinearLeastSquares { public: template boost::numeric::ublas::vector solve(const boost::numeric::ublas::matrix& A, const boost::numeric::ublas::vector& y) { boost::numeric::ublas::permutation_matrix m(A.size1()); boost::numeric::ublas::matrix AtA = prod(trans(A), A); boost::numeric::ublas::vector b = y; boost::numeric::ublas::vector r; // This serves as a sanity check. Note that an exception here // probably indicates a data file error. if (boost::numeric::ublas::lu_factorize(AtA, m) == 0.) { r = prod(trans(A), b); boost::numeric::ublas::lu_substitute(AtA, m, r); } return r; } }; template<> class LinearLeastSquares { public: template boost::numeric::ublas::vector solve( const boost::numeric::ublas::matrix& A, const boost::numeric::ublas::vector& x) { LinearSolver solver; boost::numeric::ublas::vector y = solver.solve(A, x); return y; } }; } } #endif // _LINEARLEASTSQUARES_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/LinearSolver.hpp000066400000000000000000000066441444255175000234300ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _LINEARSOLVER_HPP_ #define _LINEARSOLVER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include #include #include #include #include #include #include #include "qr.hpp" namespace pwiz { namespace math { enum PWIZ_API_DECL LinearSolverType {LinearSolverType_LU, LinearSolverType_QR}; template class LinearSolver; template<> class LinearSolver { public: /// solve system of linear equations Ax = y using boost::ublas; /// note: extra copying inefficiencies for ease of client use template vector_type solve(const matrix_type& A, const vector_type& y) { namespace ublas = boost::numeric::ublas; matrix_type A_factorized = A; ublas::permutation_matrix pm(y.size()); int singular = lu_factorize(A_factorized, pm); if (singular) throw std::runtime_error("[LinearSolver::solve()] A is singular."); vector_type result(y); lu_substitute(A_factorized, pm, result); return result; } }; template<> class LinearSolver { public: /// solve system of linear equations Ax = y using boost::ublas; /// note: extra copying inefficiencies for ease of client use template vector_type solve(const matrix_type& A, const vector_type& y) { typedef typename matrix_type::size_type size_type; typedef typename matrix_type::value_type value_type; namespace ublas = boost::numeric::ublas; matrix_type Q(A.size1(), A.size2()), R(A.size1(), A.size2()); qr (A, Q, R); vector_type b = prod(trans(Q), y); vector_type result; if (R.size1() > R.size2()) { size_type min = (R.size1() < R.size2() ? R.size1() : R.size2()); result = ublas::solve(subrange(R, 0, min, 0, min), subrange(b, 0, min), ublas::upper_tag()); } else { result = ublas::solve(R, b, ublas::upper_tag()); } return result; } }; } // namespace math } // namespace pwiz #endif // _LINEARSOLVER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/MatchedFilter.hpp000066400000000000000000000233701444255175000235310ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MATCHEDFILTER_HPP_ #define _MATCHEDFILTER_HPP_ #include "pwiz/utility/math/round.hpp" #include #include #include #include #include #include namespace pwiz { namespace math { namespace MatchedFilter { template struct ProductSpace { typedef X abscissa_type; typedef Y ordinate_type; }; typedef ProductSpace< double, double > DxD; typedef ProductSpace< double, std::complex > DxCD; template struct SampledData { typedef typename space_type::abscissa_type abscissa_type; typedef typename space_type::ordinate_type ordinate_type; typedef std::pair domain_type; typedef std::vector samples_type; domain_type domain; samples_type samples; abscissa_type domainWidth() const { return domain.second - domain.first; } abscissa_type dx() const { return samples.empty() ? 0 : domainWidth()/(samples.size()-1); } abscissa_type x(typename samples_type::size_type index) const { return domain.first + domainWidth() * index / (samples.size()-1); } typename samples_type::size_type sampleIndex(const abscissa_type& x) const { typename samples_type::size_type sampleCount = samples.size(); int result = (int)round((sampleCount-1)*(x-domain.first)/domainWidth()); if (result < 0) result = 0; if (result > (int)(sampleCount-1)) result = sampleCount-1; return (typename samples_type::size_type)(result); } const ordinate_type& sample(abscissa_type x) const { return samples[sampleIndex(x)]; } }; template std::ostream& operator<<(std::ostream& os, const SampledData& data) { os << "[" << data.domain.first << "," << data.domain.second << "] " << "(" << data.samples.size() << " samples)\n"; typename SampledData::samples_type::const_iterator it=data.samples.begin(); for (unsigned int index=0; index!=data.samples.size(); ++index, ++it) os << data.x(index) << "\t" << *it << std::endl; return os; } template struct KernelTraitsBase { // When using a kernel function of type Kernel, // KernelTraitsBase must define space_type, // which in turn must define abscissa_type and ordinate_type, e.g: // typedef ProductSpace space_type; // As a shortcut, the following default typedef allows a client to // define space_type in the definition of Kernel: typedef typename Kernel::space_type space_type; }; // partial specialization of KernelTraitsBase for function pointers template struct KernelTraitsBase { typedef ProductSpace space_type; }; namespace { template struct KernelConcept { void check() { y = k(x); } typename KernelTraitsBase::space_type::abscissa_type x; typename KernelTraitsBase::space_type::ordinate_type y; Kernel k; }; } template void checkKernelConcept() { // force compile of KernelConcept::check() void (KernelConcept::*dummy)() = &KernelConcept::check; (void)dummy; } template struct Correlation { Y dot; double e2; double tan2angle; Correlation(Y _dot = 0, double _e2 = 0, double _tan2angle = 0) : dot(_dot), e2(_e2), tan2angle(_tan2angle) {} double angle() const {return atan(sqrt(tan2angle))*180/M_PI;} }; template std::ostream& operator<<(std::ostream& os, const Correlation& c) { os << "<" << c.dot << ", " << c.e2 << ", " << c.angle() << ">"; return os; } template struct KernelTraits { typedef typename KernelTraitsBase::space_type space_type; typedef typename space_type::abscissa_type abscissa_type; typedef typename space_type::ordinate_type ordinate_type; typedef SampledData sampled_data_type; typedef typename sampled_data_type::samples_type samples_type; typedef samples_type filter_type; typedef Correlation correlation_type; typedef ProductSpace correlation_space_type; typedef SampledData correlation_data_type; // verify Kernel concept at compile time template struct Dummy; typedef Dummy< &checkKernelConcept > dummy; }; namespace details { template typename KernelTraits::filter_type createFilter(const Kernel& kernel, int sampleRadius, typename KernelTraits::abscissa_type dx, typename KernelTraits::abscissa_type shift) { checkKernelConcept(); typename KernelTraits::filter_type filter; for (int i=-sampleRadius; i<=sampleRadius; i++) filter.push_back(kernel(i*dx - shift)); return filter; } // mimic complex<> functions inline double norm(double d) {return d*d;} inline double conj(double d) {return d;} template void normalizeFilter(Filter& filter) { double normalization = 0; for (typename Filter::const_iterator it=filter.begin(); it!=filter.end(); ++it) normalization += norm(*it); normalization = sqrt(normalization); for (typename Filter::iterator it=filter.begin(); it!=filter.end(); ++it) *it /= normalization; } template std::vector::filter_type> createFilters(const Kernel& kernel, int sampleRadius, int subsampleFactor, typename KernelTraits::abscissa_type dx) { checkKernelConcept(); typedef typename KernelTraits::filter_type filter_type; std::vector filters; for (int i=0; i); return filters; } template void computeCorrelation(typename KernelTraits::samples_type::const_iterator samples, typename KernelTraits::samples_type::const_iterator samplesEnd, typename KernelTraits::samples_type::const_iterator filter, typename KernelTraits::correlation_type& result) { checkKernelConcept(); result.dot = 0; double normData = 0; for (; samples!=samplesEnd; ++samples, ++filter) { result.dot += (*samples) * conj(*filter); normData += norm(*samples); } double normDot = norm(result.dot); result.e2 = (std::max)(normData - normDot, 0.); result.tan2angle = normDot>0 ? result.e2/normDot : std::numeric_limits::infinity(); } } // namespace details template typename KernelTraits::correlation_data_type computeCorrelationData(const typename KernelTraits::sampled_data_type& data, const Kernel& kernel, int sampleRadius, int subsampleFactor) { checkKernelConcept(); typedef typename KernelTraits::correlation_data_type result_type; result_type result; result.domain = data.domain; if (data.samples.empty()) return result; result.samples.resize((data.samples.size()-1) * subsampleFactor + 1); typedef typename KernelTraits::filter_type filter_type; std::vector filters = details::createFilters(kernel, sampleRadius, subsampleFactor, data.dx()); typedef typename KernelTraits::samples_type samples_type; unsigned int sampleIndex = sampleRadius; for (typename samples_type::const_iterator itData = data.samples.begin() + sampleRadius; itData + sampleRadius != data.samples.end(); ++itData, ++sampleIndex) for (unsigned int filterIndex=0; filterIndex= result.samples.size()) // only when sampleRadius==0, filterIndex>0 break; details::computeCorrelation(itData-sampleRadius, itData+sampleRadius+1, filters[filterIndex].begin(), result.samples[index]); } return result; } } // namespace MatchedFilter } // namespace math } // namespace pwiz #endif // _MATCHEDFILTER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/MatrixInverse.hpp000066400000000000000000000131471444255175000236170ustar00rootroot00000000000000// // $Id$ // // // NB: Variations of this file appear in many open source projects, // with no copyright claims or license statements made in any of them. // Assumed to be public domain, or at least as open as the boost license, // since the farthest back we can seem to trace it is the Boost Wiki at // http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS/Matrix_Inversion // #ifndef _MATRIXINVERSE_HPP_ #define _MATRIXINVERSE_HPP_ #include #include #include #include #include #include #include #include #include #include #include /* Matrix inversion routine. Uses lu_factorize and lu_substitute in uBLAS to invert a matrix */ template bool InvertMatrix(const M& input, M& inverse) { using namespace boost::numeric::ublas; typedef permutation_matrix pmatrix; // create a working copy of the input M A(input); // create a permutation matrix for the LU-factorization pmatrix pm(A.size1()); // perform LU-factorization int res = lu_factorize(A,pm); if( res != 0 ) return false; // create identity matrix of "inverse" inverse.assign(identity_matrix(A.size1())); // backsubstitute to get the inverse lu_substitute(A, pm, inverse); return true; } /** * Invert a matrix via gauss-jordan algorithm (PARTIAL PIVOT) * * @param m The matrix to invert. Must be square. * @param singular If the matrix was found to be singular, then this * is set to true, else set to false. * @return If singular is false, then the inverted matrix is returned. * Otherwise it contains random values. */ template //#define T double /// for debug boost::numeric::ublas::matrix gjinverse(const boost::numeric::ublas::matrix &m, bool &singular) { using namespace boost::numeric::ublas; const size_t size = m.size1(); // Cannot invert if non-square matrix or 0x0 matrix. // Report it as singular in these cases, and return // a 0x0 matrix. if (size != m.size2() || size == 0) { singular = true; matrix A(0,0); return A; } // Handle 1x1 matrix edge case as general purpose // inverter below requires 2x2 to function properly. if (size == 1) { matrix A(1, 1); if (m(0,0) == 0.0) { singular = true; return A; } singular = false; A(0,0) = 1/m(0,0); return A; } // Create an augmented matrix A to invert. Assign the // matrix to be inverted to the left hand side and an // identity matrix to the right hand side. matrix A(size, 2*size); matrix_range > Aleft(A, range(0, size), range(0, size)); Aleft = m; matrix_range > Aright(A, range(0, size), range(size, 2*size)); Aright = identity_matrix(size); // Doing partial pivot for (size_t k = 0; k < size; k++) { // Swap rows to eliminate zero diagonal elements. for (size_t kk = 0; kk < size; kk++) { if ( A(kk,kk) == 0 ) // XXX: test for "small" instead { // Find a row(l) to swap with row(k) int l = -1; for (size_t i = kk+1; i < size; i++) { if ( A(i,kk) != 0 ) { l = i; break; } } // Swap the rows if found if ( l < 0 ) { std::cerr << "Error:" << __FUNCTION__ << ":" << "Input matrix is singular, because cannot find" << " a row to swap while eliminating zero-diagonal."; singular = true; return Aleft; } else { matrix_row > rowk(A, kk); matrix_row > rowl(A, l); rowk.swap(rowl); /*#if defined(DEBUG) || !defined(NDEBUG) std::cerr << __FUNCTION__ << ":" << "Swapped row " << kk << " with row " << l << ":" << A << "\n"; #endif*/ } } } ///////////////////////////////////////////////////////////////////////////////////////////////////////// // normalize the current row for (size_t j = k+1; j < 2*size; j++) A(k,j) /= A(k,k); A(k,k) = 1; // normalize other rows for (size_t i = 0; i < size; i++) { if ( i != k ) // other rows // FIX: PROBLEM HERE { if ( A(i,k) != 0 ) { for (size_t j = k+1; j < 2*size; j++) A(i,j) -= A(k,j) * A(i,k); A(i,k) = 0; } } } /*#if defined(DEBUG) || !defined(NDEBUG) std::cerr << __FUNCTION__ << ":" << "GJ row " << k << " : " << A << "\n"; #endif*/ } singular = false; return Aright; } #endif // _MATRIXINVERSE_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/OrderedPair.hpp000066400000000000000000000060411444255175000232120ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2009 Center for Applied Molecular Medicine // University of Southern California, Los Angeles, CA // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ORDEREDPAIR_HPP_ #define _ORDEREDPAIR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include namespace pwiz { namespace math { #pragma pack(push, 1) struct OrderedPair { double x; double y; OrderedPair(double _x = 0, double _y = 0) : x(_x), y(_y) {} }; #pragma pack(pop) inline std::ostream& operator<<(std::ostream& os, const OrderedPair& p) { os << "(" << p.x << "," << p.y << ")"; return os; } inline std::istream& operator>>(std::istream& is, OrderedPair& p) { char open='\0', comma='\0', close='\0'; is >> open >> p.x >> comma >> p.y >> close; if (!is) return is; if (open!='(' || comma!=',' || close!=')') throw std::runtime_error("[OrderedPair::operator>>] Unexpected input."); return is; } inline bool operator==(const OrderedPair& a, const OrderedPair& b) { return a.x==b.x && a.y==b.y; } inline bool operator!=(const OrderedPair& a, const OrderedPair& b) { return !(a == b); } /// /// wrapper class for accessing contiguous data as a container of OrderedPairs; /// note that it does not own the underlying data /// class OrderedPairContainerRef { public: /// constructor for wrapping array of contiguous data OrderedPairContainerRef(const void* begin, const void* end) : begin_(reinterpret_cast(begin)), end_(reinterpret_cast(end)) {} /// template constructor for automatic conversion from vector; /// e.g. vector, vector, vector template OrderedPairContainerRef(const std::vector& v) : begin_(reinterpret_cast(&v[0])), end_(reinterpret_cast(&v[0]+v.size())) {} typedef const OrderedPair* const_iterator; const_iterator begin() const {return begin_;} const_iterator end() const {return end_;} size_t size() const {return end_-begin_;} const OrderedPair& operator[](size_t index) const {return *(begin_+index);} private: const OrderedPair* begin_; const OrderedPair* end_; }; } // namespace math } // namespace pwiz #endif // _ORDEREDPAIR_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/Parabola.hpp000066400000000000000000000035571444255175000225440ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _PARABOLA_HPP_ #define _PARABOLA_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include namespace pwiz { namespace math { class PWIZ_API_DECL Parabola { public: // construct by giving 3 coefficients Parabola(double a=0, double b=0, double c=0); Parabola(std::vector a); // construct by giving 3 or more sample points Parabola(const std::vector< std::pair >& samples); // construct by weighted least squares Parabola(const std::vector< std::pair >& samples, const std::vector& weights); std::vector& coefficients() {return a_;} const std::vector& coefficients() const {return a_;} double operator()(double x) const {return a_[0]*x*x + a_[1]*x + a_[2];} double center() const {return -a_[1]/(2*a_[0]);} private: std::vector a_; }; PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Parabola& p); } // namespace math } // namespace pwiz #endif // _PARABOLA_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/Stats.hpp000066400000000000000000000032601444255175000221100ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _STATS_HPP_ #define _STATS_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include #include #include #include namespace pwiz { namespace math { class PWIZ_API_DECL Stats { public: typedef boost::numeric::ublas::vector vector_type; typedef boost::numeric::ublas::matrix matrix_type; typedef std::vector data_type; Stats(const data_type& data); ~Stats(); vector_type mean() const; matrix_type meanOuterProduct() const; matrix_type covariance() const; private: class Impl; std::auto_ptr impl_; // no copying Stats(const Stats& stats); Stats& operator=(const Stats& stats); }; } // namespace math } // namespace pwiz #endif // _STATS_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/Types.hpp000066400000000000000000000021501444255175000221130ustar00rootroot00000000000000// // $Id$ // // // Original author: Robert Burke // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef TYPES_H_ #define TYPES_H_ #include "boost/numeric/ublas/vector.hpp" #include "boost/numeric/ublas/matrix.hpp" namespace pwiz { namespace math { namespace types { typedef boost::numeric::ublas::matrix dmatrix; typedef boost::numeric::ublas::vector dvector; } // namespace types } // namespace math } // namespace pwiz #endif // TYPES_H_ libpwizlite-3.0.5/src/pwiz/utility/math/erf.hpp000066400000000000000000000025141444255175000215670ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ERF_HPP_ #define _ERF_HPP_ #include "pwiz/utility/misc/Export.hpp" #include namespace pwiz { namespace math { /// real error function; calls gcc-provided erf, complex version (below) on msvc PWIZ_API_DECL double erf(double x); /// complex error function PWIZ_API_DECL std::complex erf(const std::complex& z); /// series implementation for testing PWIZ_API_DECL std::complex erf_series2(const std::complex& z); } // namespace math } // namespace pwiz #endif // _ERF_HPP_ libpwizlite-3.0.5/src/pwiz/utility/math/qr.hpp000066400000000000000000000070401444255175000214340ustar00rootroot00000000000000// // $Id$ // // Original author: Robert Burke // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _QR_HPP #define _QR_HPP #include #include #include #include namespace pwiz { namespace math { // Constructs a matrix to reflect a vector x onto ||x|| * e1. // // \param x vector to reflect // \param F matrix object to construct reflector with template void Reflector(const vector_type& x, matrix_type& F) { using namespace boost::numeric::ublas; typedef typename matrix_type::value_type value_type; unit_vector e1(x.size(), 0); //v_k = -sgn( x(1) ) * inner_prod(x) * e1 + x; double x_2 = norm_2(x); boost::numeric::ublas::vector v_k((x(0) >= 0 ? x_2 : -1 * x_2) * e1 + x); //v_k = v_k / norm_2(v_k); double norm_vk = norm_2(v_k); if (norm_vk != 0) v_k /= norm_2(v_k); // F = A(k:m,k:n) - 2 * outer_prod(v_k, v_k) * A(k:m,k:n) identity_matrix eye(v_k.size()); F = matrix_type(v_k.size(), v_k.size()); F = eye - 2. * outer_prod(v_k, v_k); } // Returns a matrix to reflect x onto ||x|| * e1. // // \param x vector to reflect // \return Householder reflector for x template matrix_type Reflector(const vector_type& x) { using namespace boost::numeric::ublas; matrix_type F(x.size(), x.size()); Reflector(x, F); return F; } template void qr(const matrix_type& A, matrix_type& Q, matrix_type& R) { using namespace boost::numeric::ublas; typedef typename matrix_type::size_type size_type; typedef typename matrix_type::value_type value_type; // TODO resize Q and R to match the needed size. int m=A.size1(); int n=A.size2(); identity_matrix ident(m); if (Q.size1() != ident.size1() || Q.size2() != ident.size2()) Q = matrix_type(m, m); Q.assign(ident); R.clear(); R = A; for (size_type k=0; k< R.size1() && k e1(m - k, 0); // x = A(k:m, k); matrix_vector_slice x(R, s1, s2); matrix_type F(x.size(), x.size()); Reflector(x, F); matrix_type temp = subrange(R, k, m, k, n); //F = prod(F, temp); subrange(R, k, m, k, n) = prod(F, temp); // <<---------------------------------------------->> // forming Q identity_matrix iqk(A.size1()); matrix_type Q_k(iqk); subrange(Q_k, Q_k.size1() - F.size1(), Q_k.size1(), Q_k.size2() - F.size2(), Q_k.size2()) = F; Q = prod(Q, Q_k); } } } } #endif // _QR_HPP libpwizlite-3.0.5/src/pwiz/utility/math/round.hpp000066400000000000000000000017561444255175000221510ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ROUND_HPP_ #define _ROUND_HPP_ #include #ifdef _MSC_VER // msvc hack inline double round(double d) {return floor(d + 0.5);} #endif // _MSC_VER #endif // _ROUND_HPP_ libpwizlite-3.0.5/src/pwiz/utility/minimxml/000077500000000000000000000000001444255175000212015ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/minimxml/SAXParser.cpp000066400000000000000000000467711444255175000235340ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Reworked for zero-copy performance by Brian Pratt, Insilicos LLC // those changes Copyright 2011 Insilicos LLC All Rights Reserved // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "SAXParser.hpp" #include "pwiz/utility/misc/Std.hpp" #include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" #include "boost/xpressive/xpressive_dynamic.hpp" namespace bxp = boost::xpressive; const string CDATA_begin("![CDATA["), CDATA_end("]]"); const string comment_begin("!--"), comment_end("--"); const string DOCTYPE_begin("!DOCTYPE"); #ifdef _DEBUG_READCOUNT // in case you want to verify that you aren't doing excessive reads static boost::iostreams::stream_offset bytesin = 0; void note_read_count(size_t n) { // collect some stats bytesin += n; } #endif namespace pwiz { namespace minimxml { namespace SAXParser { const char* ws = " \n\r\t"; size_t count_trail_ws(const char *data,size_t len) { // remove trailing whitespace if any size_t n=len; while (n && strchr(ws,data[n-1])) n--; return len-n; } namespace { inline bool unbalanced_quotes(const saxstring & buffer) { // find next single or double quote for (const char *c=buffer.c_str();(c=strpbrk(c,"\"'"))!=NULL;c++) { c = strchr(c+1,*c); // find matching quote if (!c) return true; // unmatched quote } return false; } // returns number of ws chars it had to eat on front end // returns -1 if nothing read static int eat_whitespace(istream& is) { char c; int lead_ws=0; while (is.good()) { // loop while extraction from file is possible c = is.get(); // get character from file if (is.good()) { if (strchr(ws,c)) lead_ws++; // eat the whitespace else { is.unget(); break; // no more whitespace } } else break; } #ifdef _DEBUG_READCOUNT note_read_count(lead_ws); // collect some stats #endif if (is.good()) return lead_ws; else return -1; } struct ProcessingInstruction { string name; string value; ProcessingInstruction(const string& buffer) { istringstream iss(buffer); char questionMark = '\0'; iss >> questionMark >> name; if (questionMark != '?') throw runtime_error("[SAXParser::ProcessingInstruction] Error."); eat_whitespace(iss); getline(iss, value, '?'); value.resize(value.length()-count_trail_ws(value.c_str(),value.length())); } }; const char * quote_ = "\"\'"; // // zero-copy StartTag - it hacks up the // saxparser string into name-value pairs // instead of making lots of little std::strings // do that a few bazillion times and it makes // a big difference in performance - bpratt // struct StartTag { bool end; Handler::Attributes attributes; StartTag(saxstring &str, bool unescapeAttributes) : end(str.length() && str[str.length()-1]=='/'), // evaluate str before attributes hacks it up attributes(str,unescapeAttributes) { if (!str.length()) throw runtime_error("[SAXParser::StartTag] Empty buffer."); } const char *getName() { return attributes.getTagName(); // reads from hacked-up input str } }; struct HandlerInfo { Handler& handler; stack names; HandlerInfo(Handler& _handler) : handler(_handler) {} }; // HandlerWrangler responsibilities: // - maintain a Handler stack // - validate return Status from Handler calls // - validate element start/end tag matching class HandlerWrangler : public SAXParser::Handler { public: HandlerWrangler(Handler& root) { handlers_.push(root); } void verifyNoDelegate(const Status& status) { if (status.flag==Status::Delegate || status.delegate) throw runtime_error("[SAXParser] Illegal return of Status::Delegate."); } virtual Status processingInstruction(const string& name, const string& data, stream_offset position) { Status status = handlers_.top().handler.processingInstruction(name, data, position); verifyNoDelegate(status); return status; } virtual Status startElement(const string& name, const Attributes& attributes, stream_offset position) { HandlerInfo& top = handlers_.top(); // element start/end validation top.names.push(name); // call handler Handler::Status status = top.handler.startElement(name, attributes, position); if (status.flag != Handler::Status::Delegate) return status; // Status::Delegate: let status.delegate handle this message if (!status.delegate) throw runtime_error("[SAXParser] Null delegate."); top.names.pop(); handlers_.push(*status.delegate); return startElement(name, attributes, position); } virtual Status endElement(const string& name, stream_offset position) { HandlerInfo& top = handlers_.top(); // element start/end validation if (top.names.empty() || top.names.top()!=name) throw runtime_error("[SAXParser::ParserWrangler::elementEnd()] Illegal end tag \"" + name + "\" at offset " + lexical_cast(position) + "."); top.names.pop(); // call handler Status status = top.handler.endElement(name, position); verifyNoDelegate(status); // delete handler if we're done with it if (top.names.empty()) { handlers_.pop(); if (handlers_.empty()) return Status::Done; } return status; } virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { Status status = topHandler().characters(text, position); verifyNoDelegate(status); return status; } const Handler& topHandler() const {return handlers_.top().handler;} Handler& topHandler() {return handlers_.top().handler;} private: stack handlers_; }; } // namespace void Handler::Attributes::parseAttributes(string::size_type& index) const { if (!attrs.size()) { // first access // avoid lots of reallocs int n_equals=0; for (const char *p=textbuff+index;(p=strchr(p,'='))!=NULL;p++) n_equals++; attrs.resize(n_equals); // might be more than we need, but we'll correct int nattrs = 0; while (index < index_end) { string::size_type indexNameBegin = index; string::size_type indexNameEnd = indexNameBegin; string::size_type indexQuoteOpen; string::size_type indexQuoteClose; const char *eq=strchr(textbuff+indexNameBegin,'='); if (eq) { indexNameEnd = eq-textbuff; const char *c=textbuff+indexNameEnd+1; while (*c && !strchr(quote_,*c)) c++; indexQuoteOpen = (c-textbuff); char quoteChar = *c; const char *q = strchr(textbuff+indexQuoteOpen+1,quoteChar); indexQuoteClose = q?(q-textbuff):string::npos; } else indexQuoteClose = string::npos; if (indexQuoteClose == string::npos) { // this index can only be OK if the others are too if ('/'==textbuff[indexNameBegin]) { // end of tag index++; break; } else if ('\0'==textbuff[indexNameBegin]) { break; } throw runtime_error("[SAXParser::parseAttribute()] Error at index " + lexical_cast(index) + ":\n" + textbuff); } while (strchr(ws,textbuff[indexNameEnd-1])) indexNameEnd--; // work back from = to end of name textbuff[indexNameEnd]=0; // null terminate in-place textbuff[indexQuoteClose]=0; // null terminate in-place attrs[nattrs++].set(textbuff+indexNameBegin,textbuff+indexQuoteOpen+1,autoUnescape); index = indexQuoteClose+1; // ready for next round while (textbuff[index] && strchr(ws,textbuff[index])) // eat whitespace index++; } attrs.resize(nattrs); } } void unescapeXML(std::string &str) { if (std::string::npos != str.find('&')) { SAXParser::saxstring s(str); s.unescapeXML(); str = s.c_str(); } } void unescapeXML(char *str) { char *amp; size_t end=strlen(str); for (size_t i=0 ; (amp=strchr(str+i,'&'))!=NULL ; i++) { i = (amp-str); // there must be at least three characters after '&' (< or >) if (i+3 >= end) throw runtime_error("[SAXParser::unescapeXML] Invalid escape sequence \"" + string(str) + "\"."); int adjustlen=0; if (str[i+1] == 'l' && str[i+2] == 't' && str[i+3] == ';') { *amp = '<'; adjustlen=3; } else if (str[i+1] == 'g' && str[i+2] == 't' && str[i+3] == ';') { *amp = '>'; adjustlen = 3; } else if (i+4 < end && str[i+1] == 'a' && str[i+2] == 'm' && str[i+3] == 'p' && str[i+4] == ';') { *amp = '&'; adjustlen = 4; } else if (i+5 < end && str[i+1] == 'q' && str[i+2] == 'u' && str[i+3] == 'o' && str[i+4] == 't' && str[i+5] == ';') { *amp = '"'; adjustlen = 5; } else if (i+5 < end && str[i+1] == 'a' && str[i+2] == 'p' && str[i+3] == 'o' && str[i+4] == 's' && str[i+5] == ';') { *amp = '\''; adjustlen = 5; } else if (i+3 < end && str[i+1] == '#') // numeric character entities � to  (decimal) or � to  (hex) { size_t j = i+3; while (str[j] != ';') { if (++j >= i+6 || j >= end) throw runtime_error("[SAXParser::unescapeXML] Invalid escape sequence."); } size_t entitylen = j-i-2; char *entitybegin = str+i+2; int entitybase = 10; if (str[i+2] == 'x') // hex { --entitylen; ++entitybegin; entitybase = 16; } char *entitystr = (char*)malloc(entitylen); strncpy(entitystr, entitybegin, entitylen); entitystr[entitylen] = '\0'; char *convertend; long int entity = strtol(entitystr, &convertend, entitybase); bool success = entitystr != convertend; free(entitystr); if (success && 0 <= entity && entity <= 127) { *amp = (char)entity; adjustlen = j-i; } else throw runtime_error("[SAXParser::unescapeXML] Invalid escape sequence."); } else throw runtime_error("[SAXParser::unescapeXML] Invalid escape sequence."); memmove(amp+1,amp+adjustlen+1,(end-(i+adjustlen))); end -= adjustlen; } } // (nearly)zero-copy getline static bool getline(istream& is, saxstring &vec, char delim, bool append = false) { const size_t minbuf = 1024; size_t begin = append?vec.length():0; size_t end = begin; while (is.good()) { if (vec.capacity() < minbuf + (begin+3)) { size_t newsize = 2* ( vec.capacity() ? vec.capacity() : minbuf ); vec.resize(newsize); } char *buffer = &vec[0]; // always guarantee room for readahead and nullterm at end of buffer is.get(buffer+begin, vec.capacity()-(begin+3), delim); // keeps delim if read size_t nread = (size_t)is.gcount(); if (!nread && !is.eof()) // empty line? is.clear(); // clear the failbit end += nread; #ifdef _DEBUG_READCOUNT note_read_count(nread+1); // collect some stats #endif // did we stop reading because we hit delimiter? char c=0; is.get(c); if (delim == c) { // full read vec.resize(end); // so we don't copy more than we need return true; } else if (c) { // ran out of room buffer[end++] = c; buffer[end] = 0; begin = end; } } return false; } // // parse() responsibilities: // - stream parsing // - initiation of events // - events are routed through a HandlerWrangler // - HandlerWrangler handles any XML/Handler validation // - return on Handler::Status::Done // PWIZ_API_DECL void parse(istream& is, Handler& handler) { using boost::iostreams::position_to_offset; HandlerWrangler wrangler(handler); Handler::stream_offset position = position_to_offset(is.tellg()); saxstring buffer(16384); // hopefully big enough to avoid realloc while (is) { // read text up to next tag (may be empty) buffer.clear(); if (!getline(is, buffer, '<')) break; size_t lead_ws = buffer.trim_lead_ws(); // remove trailing ws buffer.trim_trail_ws(); // position == beginning of characters position += lead_ws; // TODO: is it possible to detect when Handler::characters() has been overridden? const Handler& topHandler = wrangler.topHandler(); if (buffer.length() && topHandler.parseCharacters) { if (topHandler.autoUnescapeCharacters) buffer.unescapeXML(); Handler::Status status = wrangler.characters(buffer, position); if (status.flag == Handler::Status::Done) return; } // position == beginning of tag position = position_to_offset(is.tellg()); if (position > 0) position--; // read tag bool inCDATA; buffer.clear(); while (true) { bool firstpass = (!buffer.length()); if (!getline(is,buffer, '>',true)) // append break; if (firstpass) buffer.trim_lead_ws(); inCDATA = buffer.starts_with(CDATA_begin.c_str()); // If in CDATA, fetch more until the section is ended; // else deal with the unlikely but still legal case // // You're a monster, Zorg.>I know. // if (inCDATA ? !buffer.ends_with(CDATA_end.c_str()) : unbalanced_quotes(buffer)) buffer += ">"; // put back that char we ate, go for more else break; } // remove trailing ws buffer.trim_trail_ws(); if (!buffer.length()) throw runtime_error("[SAXParser::parse()] Empty tag at offset " + lexical_cast(position) + "."); // switch on tag type switch (buffer[0]) { case '?': { ProcessingInstruction pi(buffer.c_str()); Handler::Status status = wrangler.processingInstruction(pi.name, pi.value, position); if (status.flag == Handler::Status::Done) return; break; } case '/': { Handler::Status status = wrangler.endElement(buffer.c_str()+1, position); if (status.flag == Handler::Status::Done) return; break; } case '!': { if (inCDATA) { std::string buf(buffer.c_str()); Handler::Status status = wrangler.characters(buf.substr(CDATA_begin.length(), buffer.length()-CDATA_begin.length()-CDATA_end.length()), position); if (status.flag == Handler::Status::Done) return; } else if (!buffer.starts_with(DOCTYPE_begin.c_str()) && (!buffer.starts_with("!--") || !buffer.ends_with("--"))) throw runtime_error("[SAXParser::parse()] Illegal comment \"" + string(buffer.c_str()) + "\" at offset " + lexical_cast(position) + "."); break; } default: { StartTag tag(buffer, handler.autoUnescapeAttributes); Handler::Status status = wrangler.startElement(tag.getName(), tag.attributes, position); if (status.flag == Handler::Status::Done) return; if (tag.end) { status = wrangler.endElement(tag.getName(), position); if (status.flag == Handler::Status::Done) return; } } } // position == after tag end position = position_to_offset(is.tellg()); } } } // namespace SAXParser string xml_root_element(const string& fileheader) { const static bxp::sregex e = bxp::sregex::compile("<\\?xml.*?>.*?<([^?!]\\S+?)[\\s>]"); // convert Unicode to ASCII string asciiheader; asciiheader.reserve(fileheader.size()); BOOST_FOREACH(char c, fileheader) { if(c > 0) asciiheader.push_back(c); } bxp::smatch m; if (bxp::regex_search(asciiheader, m, e)) return m[1]; throw runtime_error("[xml_root_element] Root element not found (header is not well-formed XML)"); } string xml_root_element(istream& is) { char buf[513]; is.read(buf, 512); buf[512] = 0; return xml_root_element(buf); } string xml_root_element_from_file(const string& filepath) { pwiz::util::random_access_compressed_ifstream file(filepath.c_str()); if (!file) throw runtime_error("[xml_root_element_from_file] Error opening file"); return xml_root_element(file); } namespace { bool isalnum(char& c) {return std::isalnum(c, std::locale::classic());} } PWIZ_API_DECL string& decode_xml_id(string& str) { std::istringstream parser; for (size_t i=0; i < str.length(); ++i) { size_t found = str.find("_x00"); if (found != string::npos && found+6 < str.length() && isalnum(str[found+4]) && isalnum(str[found+5]) && str[found+6] == '_') { parser.clear(); // reset state parser.str(str.substr(found+4, 2)); int value; parser >> std::hex >> value; char decoded = (char) value; str.replace(found, 7, &decoded, 1); } else break; } return str; } PWIZ_API_DECL string decode_xml_id_copy(const string& str) { string copy(str); return decode_xml_id(copy); } } // namespace minimxml } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/minimxml/SAXParser.hpp000066400000000000000000000547261444255175000235400ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Reworked for zero-copy performance by Brian Pratt, Insilicos LLC // those changes Copyright 2011 Insilicos LLC All Rights Reserved // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SAXPARSER_HPP_ #define _SAXPARSER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/optimized_lexical_cast.hpp" #include "pwiz/utility/misc/shared_map.hpp" #include "boost/iostreams/positioning.hpp" #include #include #include #include #include #include namespace pwiz { namespace minimxml { /// /// An extended SAX interface for custom XML stream parsing. /// /// Use cases: /// - read a single element /// - read a single element, aborting on a specified tag /// - delegate handling of a sub-element to another handler /// namespace SAXParser { PWIZ_API_DECL size_t count_trail_ws(const char *data,size_t len); // count whitespace chars at end of data PWIZ_API_DECL void unescapeXML(char *str); PWIZ_API_DECL void unescapeXML(std::string &str); class saxstring { // simple string management for zero-copy saxparser // // not using std::string due to overhead with: // reference counts // exception unwinding // etc etc // // provides for zero-copy trimming of whitespace // public: saxstring(size_t size = 0) { init(size); } saxstring(const SAXParser::saxstring &rhs) { *this = rhs; } saxstring(const std::string &rhs) { init(rhs.length()); memcpy(data(),rhs.c_str(),rhs.length()); (*this)[rhs.length()] = 0; // nullterm } void unescapeXML() { if (strchr(c_str(),'&')) { SAXParser::unescapeXML(data()); resize(strlen(c_str())); } } ~saxstring() { free(_data); } saxstring & operator = (const SAXParser::saxstring &rhs) { init(rhs.length()); if (length()) { memcpy(data(),rhs.c_str(),length()+1); } return *this; } saxstring & operator = (const char *rhs) { init(rhs ? strlen(rhs) : 0); if (length()) { memcpy(data(),rhs,length()+1); } return *this; } saxstring & operator += (const SAXParser::saxstring &rhs) { if (rhs.length()) { size_t oldsize = length(); resize(rhs.length()+oldsize); memcpy(data()+oldsize,rhs.c_str(),rhs.length()+1); } return *this; } saxstring & operator += (const char *rhs) { size_t rhslen = rhs?strlen(rhs):0; if (rhslen) { size_t oldsize = length(); resize(rhslen+oldsize); strcpy(data()+oldsize,rhs); } return *this; } bool operator == (const char *c) const { return c && !strcmp(c,c_str()); } bool operator == (const std::string &s) const { return !strcmp(c_str(),s.c_str()); } bool operator == (const saxstring &s) const { return !strcmp(c_str(),s.c_str()); } char *resize(size_t size) { if (!size) { _lead = 0; // empty, reclaim the start of buffer } size_t new_used = size + _lead; // translate to "used" space if (new_used >= _capacity) { _data = (char *)realloc(_data, (_used = new_used)+1); if (_used && !_data) { throw std::runtime_error("SAXParser: cannot allocate memory"); } _capacity = _used; } else { _used = new_used; } _data[_used] = 0; return _data; } void clear() { resize(0); } inline const char *c_str() const { return _data?_data+_lead:""; } inline char & operator [](size_t n) { return *(data()+n); } inline size_t length() const { return _used-_lead; } inline size_t capacity() const { return _capacity; } void trim_trail_ws() { // remove trailing whitespace if any size_t n = count_trail_ws(c_str(),length()); resize(length()-n); } // returns number of ws chars it had to eat on front end int trim_lead_ws() { size_t n=0; for (const char *c=c_str(); *c && strchr(" \n\r\t",*c); c++) { n++; } _lead += n; return n; } bool starts_with(const char *txt) const { return !strncmp(c_str(),txt,strlen(txt)); } bool ends_with(const char *txt) const { size_t len = strlen(txt); return (len <= length()) ? (!strcmp(c_str()+length()-len,txt)) : false; } char *data() { // direct access to data buffer if (!_data) { resize(0); } return _data+_lead; } private: void init(size_t size) { _used = 0; _lead = 0; _capacity = 0; _data = NULL; if (size) { resize(size); } } char * _data; // char buf size_t _used; // characters used size_t _lead; // for skipping whitespace size_t _capacity; // max characters (always >_used) }; inline std::ostream& operator<<(std::ostream& os, const saxstring& s) { os << s.c_str(); return os; } // fast string-to-value conversions // not very boost-y, or even very c++, but lexical_cast and istringstreams are // just too slow for our parsing performance needs. template< typename Target > inline Target textToValue(const char *txt); // template prototype template<> inline float textToValue(const char *txt) { return (float) ATOF( txt ) ; } template<> inline double textToValue(const char *txt) { return ATOF( txt ); } template<> inline int textToValue(const char *txt) { return atoi(txt); } template<> inline char textToValue(const char *txt) { return *(txt); } template<> inline long textToValue(const char *txt) { return atol(txt); } template<> inline unsigned int textToValue(const char *txt) { return (unsigned int) strtoul( txt, NULL, 10 ); } template<> inline unsigned long textToValue(const char *txt) { return strtoul( txt, NULL, 10 ); } #if defined(BOOST_HAS_LONG_LONG) template<> inline long long textToValue(const char *txt) { #if defined(BOOST_HAS_MS_INT64) return _atoi64(txt); #else return atoll(txt); #endif } template<> inline unsigned long long textToValue(const char *txt) { #if defined(BOOST_HAS_MS_INT64) return _strtoui64(txt,NULL,10); #else return strtoull( txt, NULL, 10 ); #endif } #endif // has long long inline bool istrue(const char *t) { return strcmp(t, "0") && strcmp(t,"false"); // as in optimized_lexical_cast.h } template<> inline bool textToValue(const char *txt) { return istrue(txt); } template<> inline boost::logic::tribool textToValue(const char *txt) { using namespace boost::logic; if (!*txt) return tribool(indeterminate); else { bool b = istrue(txt); return tribool(b); } } template<> inline std::string textToValue(const char *txt) { return std::string( txt ); } /// SAX event handler interface. class Handler { public: /// When false, no calls to characters() will be made bool parseCharacters; /// Setting these to false will disable the auto-unescaping feature of the parser; /// this is useful for handlers which deal with large amounts of data bool autoUnescapeAttributes, autoUnescapeCharacters; /// contextual version available to control handler logic which support multiple versions of a schema; /// the default value 0 indicates handler should ignore the version; /// the handler determines the meaning of any non-zero value int version; /// Handler returns the Status struct as a means of changing the parser's behavior. struct Status { enum Flag { Ok, // ok, continue parsing the stream Done, // abort immediately Delegate // delegate this element to the specified Handler [startElement() only] }; Flag flag; Handler* delegate; // valid iff (flag == Delegate) Status(Flag _flag = Ok, Handler* _delegate = 0) : flag(_flag), delegate(_delegate) {} }; enum XMLUnescapeBehavior_t {XMLUnescapeDefault,NoXMLUnescape}; class Attributes { // lazy evaluation - doesn't process text until asked // near-zero copy - copies the source text just once, // instead of a bunch of little std::string operations public: Attributes(const char * _source_text, size_t _source_text_len, bool _autoUnescape) : index(0),index_end(0),autoUnescape(_autoUnescape),firstread(true),attrs() { size=_source_text_len; textbuff = (char *)malloc(size+1); managemem = true; memcpy(textbuff,_source_text,size); textbuff[size] = 0; setParserIndex(); // ready for eventual parsing test_invariant(); // everything correct? }; Attributes() : index(0),index_end(0),autoUnescape(false),firstread(true),attrs() { size=0; textbuff = NULL; managemem = true; test_invariant(); // everything correct? }; Attributes(saxstring &str, bool _autoUnescape) : index(0),index_end(0),autoUnescape(_autoUnescape),firstread(true),attrs() { textbuff = str.data(); size=str.length(); managemem = false; // we don't have to free this setParserIndex(); // ready for eventual parsing test_invariant(); // everything correct? }; ~Attributes() { if (managemem) free(textbuff); } Attributes(const Attributes &rhs) { textbuff = NULL; *this = rhs; } Attributes & operator = (const Attributes &rhs) { size = rhs.size; index = rhs.index; index_end = rhs.index_end; // string bounds for attribute parsing autoUnescape = rhs.autoUnescape; // do XML escape of attribute? firstread = rhs.firstread; // may change during const access if (managemem) textbuff = (char *)realloc(textbuff,size+1); else textbuff = (char *)malloc(size+1); managemem = true; // we need to free textbuff at dtor memcpy(textbuff,rhs.textbuff,size+1); attrs.resize(rhs.attrs.size()); // now fix up the char ptrs to point to our copy of attribute list for (size_t n=attrs.size();n--;) { attrs[n].name = ((char *)textbuff)+(rhs.attrs[n].getName()-rhs.getTextBuffer()); attrs[n].value = ((char *)textbuff)+(rhs.attrs[n].getValuePtr()-rhs.getTextBuffer()); } test_invariant(); // everything correct? return *this; } inline void test_invariant() const { #ifdef _DEBUG for (size_t n=attrs.size();n--;) { assert(textbuff != NULL); assert(attrs[n].name>textbuff); assert(attrs[n].value>attrs[n].name); assert(attrs[n].valueattrs[n-1].value); } #endif } const char *getTagName() const { // work area contains tag name test_invariant(); // everything correct? return textbuff+('/'==*textbuff); } const char *getTextBuffer() const { // return pointer to our work area test_invariant(); // everything correct? return textbuff; } size_t getSize() const { return size; } protected: mutable char *textbuff; // we'll operate on this copy of string size_t size; mutable size_t index,index_end; // string bounds for attribute parsing bool autoUnescape; // do XML escape of attribute? bool managemem; // if true we need to free on exit mutable bool firstread; // may change during const access void setParserIndex() { // on entry, buffer has form "foo bar="baz" or maybe "foo/" const char *c = textbuff; while (*c && !strchr(" \n\r\t/",*c)) c++; size_t indexNameEnd = c-textbuff; while (*c && strchr(" \n\r\t",*c)) c++; textbuff[indexNameEnd] = 0; // nullterm the name index = c-textbuff; // should point to bar index_end = size; test_invariant(); // everything correct? } public: class attribute { // a set of pointers into the main text buffer - going for zero copy, for speed public: attribute() {}; bool matchName(const char *test) const { return !strcmp(test,name); // return true on match } const char *getName() const { return name; } // handle XML escapes on demand const char *getValuePtr(XMLUnescapeBehavior_t Unescape = XMLUnescapeDefault) const { if (Unescape == NoXMLUnescape) needsUnescape = false; else if (needsUnescape) { unescapeXML(value); needsUnescape = false; } return value; } std::string getValue(XMLUnescapeBehavior_t Unescape = XMLUnescapeDefault) const { return std::string(getValuePtr(Unescape)); } // cast-to-type template< typename T > inline T valueAs( XMLUnescapeBehavior_t Unescape ) const { return textToValue(getValuePtr(Unescape)); } inline size_t valueAs( XMLUnescapeBehavior_t Unescape ) const { return (size_t)strtoul(getValuePtr(Unescape),NULL,10); } friend class Attributes; protected: const char *name; // attribute name - a pointer into main text buffer char *value; // also a pointer into main text buffer, content may change during read mutable bool needsUnescape; // may change during read void set(const char *_name, char *_value, bool _needsUnescape) { name = _name; value = _value; needsUnescape = _needsUnescape; } }; // class attribute public: typedef std::vector attribute_list; protected: mutable attribute_list attrs; // may change even in a const function due to lazy evaluation public: attribute_list::const_iterator begin() const { access(); // have we actually parsed the attributes text yet? return attrs.begin(); } attribute_list::const_iterator end() const { access(); // have we actually parsed the attributes text yet? return attrs.end(); } attribute_list::const_iterator find(const std::string &name) const { attribute_list::const_iterator it; for (it = begin(); it != end() ; it++ ) { if (it->matchName(name.c_str())) break; // found it } return it; } protected: PWIZ_API_DECL void parseAttributes(std::string::size_type& index) const; void access() const { // don't parse attributes until asked to test_invariant(); // everything correct? if (firstread) { firstread = false; parseAttributes(index); } test_invariant(); // everything correct? } public: const attribute *findAttributeByName(const char *name) const { access(); // parse the buffer if we haven't already for (attribute_list::const_iterator it=attrs.begin();it!=attrs.end();it++) { if (it->matchName(name)) return &(*it); } return NULL; } // return value for name if any, or NULL const char *findValueByName(const char *name,XMLUnescapeBehavior_t Unescape = XMLUnescapeDefault) const { const attribute *attr = findAttributeByName(name); if (attr) return attr->getValuePtr(Unescape); return NULL; } }; typedef boost::iostreams::stream_offset stream_offset; virtual Status processingInstruction(const std::string& name, const std::string& data, stream_offset position) {return Status::Ok;} virtual Status startElement(const std::string& name, const Attributes& attributes, stream_offset position) {return Status::Ok;} virtual Status endElement(const std::string& name, stream_offset position) {return Status::Ok;} virtual Status characters(const SAXParser::saxstring& text, stream_offset position) {return Status::Ok;} Handler() : parseCharacters(false), autoUnescapeAttributes(true), autoUnescapeCharacters(true), version(0) {} virtual ~Handler(){} protected: template inline T& getAttribute(const Attributes& attributes, const char * name, T& result, XMLUnescapeBehavior_t Unescape, T defaultValue = T()) const { const Attributes::attribute *attr = attributes.findAttributeByName(name); if (attr) result = attr->valueAs(Unescape); else result = defaultValue; return result; } const char *getAttribute(const Attributes& attributes, const char * name, XMLUnescapeBehavior_t Unescape, const char * defaultValue = NULL) const { const char *val = attributes.findValueByName(name,Unescape); if (!val) val = defaultValue; return val; } // general case using default unescape behavior template inline T& getAttribute(const Attributes& attributes, const char *name, T& result) const { const Attributes::attribute *attr = attributes.findAttributeByName(name); if (attr) result = attr->valueAs(XMLUnescapeDefault); else result = T(); return result; } inline std::string& getAttribute(const Attributes& attributes, const char *name, std::string& result) const { const Attributes::attribute *attr = attributes.findAttributeByName(name); if (attr) result = attr->getValuePtr(XMLUnescapeDefault); else result = ""; return result; } // general case using default unescape behavior template inline T& getAttribute(const Attributes& attributes, const std::string &name, T& result, T defaultValue = T()) const { const Attributes::attribute *attr = attributes.findAttributeByName(name.c_str()); if (attr) result = attr->valueAs(XMLUnescapeDefault); else result = defaultValue; return result; } }; /// /// Extract a single XML element from the istream, sending SAX events to the handler. /// /// Behavior: /// /// - Parser returns when it completes reading of the first element it encounters. /// /// - Parser returns immediately if the Handler returns Status::Done when handling an event. /// /// - On startElement(), Handler may delegate handling to a sub-Handler, which will receive /// the same startElement() event. The sub-Handler pointer will remain on the parser's /// Handler stack until it handles the corresponding endElement(). Caution: The sub-Handler /// pointer must remain valid while it is on the Handler stack, so it cannot point to /// a local object that goes out of scope when Handler:startElement() returns. /// /// Notes: /// - Start tags with end marker '/' generate two events, e.g.
will generate events /// startElement("br", ...) and endElement("br"). /// PWIZ_API_DECL void parse(std::istream& is, Handler& handler); } // namespace SAXParser /// Returns the root element from an XML buffer; /// throws runtime_error if no element is found. PWIZ_API_DECL std::string xml_root_element(const std::string& fileheader); /// Returns the root element from an XML stream; /// throws runtime_error if no element is found. PWIZ_API_DECL std::string xml_root_element(std::istream& is); /// Returns the root element from an XML file; /// throws runtime_error if no element is found. PWIZ_API_DECL std::string xml_root_element_from_file(const std::string& filepath); /// Decodes any characters encoded with their hexadecimal value, /// e.g. "_x0020_" decodes as " " /// This override modifies the input string in place and returns its reference. PWIZ_API_DECL std::string& decode_xml_id(std::string& str); /// Decodes any characters encoded with their hexadecimal value, /// e.g. "_x0020_" decodes as " " /// This override modifies and returns a copy of the input string. PWIZ_API_DECL std::string decode_xml_id_copy(const std::string& str); } // namespace minimxml } // namespace pwiz #endif // _SAXPARSER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/minimxml/XMLWriter.cpp000066400000000000000000000257761444255175000235630ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "XMLWriter.hpp" #include "pwiz/utility/misc/Std.hpp" #include "boost/iostreams/filtering_stream.hpp" #include "boost/iostreams/filter/counter.hpp" #include namespace pwiz { namespace minimxml { template struct double12_policy : boost::spirit::karma::real_policies { // we want to generate up to 12 fractional digits static unsigned int precision(T) { return 12; } }; PWIZ_API_DECL void XMLWriter::Attributes::add(const string& name, const double& valueRef) { double value = valueRef; // HACK: karma has a stack overflow on subnormal values, so we clamp to normalized values if (value > 0) value = max(numeric_limits::min(), value); else if (value < 0) value = min(-numeric_limits::min(), value); using namespace boost::spirit::karma; typedef real_generator > double12_type; static const double12_type double12 = double12_type(); char buffer[256]; char* p = buffer; generate(p, double12, value); *p = '\0'; push_back(make_pair(name, std::string(&buffer[0], p))); } PWIZ_API_DECL void XMLWriter::Attributes::add(const string& name, const int& value) { using namespace boost::spirit::karma; static const int_generator intgen = int_generator(); char buffer[256]; char* p = buffer; generate(p, intgen, value); *p = '\0'; push_back(make_pair(name, std::string(&buffer[0], p))); } class XMLWriter::Impl { public: Impl(ostream& os, const Config& config); void pushStyle(unsigned int flags); void popStyle(); void processingInstruction(const string& name, const string& data); void startElement(const string& name, const Attributes& attributes, EmptyElementTag emptyElementTag); void endElement(); void characters(const string& text, bool autoEscape); bio::stream_offset position() const; bio::stream_offset positionNext() const; private: ostream& os_; Config config_; stack elementStack_; stack styleStack_; string indentation() const {return string(elementStack_.size()*config_.indentationStep, ' ');} string indentation(size_t depth) const {return string(depth*config_.indentationStep, ' ');} bool style(StyleFlag styleFlag) const {return styleStack_.top() & styleFlag ? true : false;} }; XMLWriter::Impl::Impl(ostream& os, const Config& config) : os_(os), config_(config) { styleStack_.push(config.initialStyle); } void XMLWriter::Impl::pushStyle(unsigned int flags) { styleStack_.push(flags); } void XMLWriter::Impl::popStyle() { styleStack_.pop(); if (styleStack_.empty()) throw runtime_error("[XMLWriter] Style stack underflow."); } void XMLWriter::Impl::processingInstruction(const string& name, const string& data) { ostream* os = &os_; if (config_.outputObserver) os = new ostringstream; *os << indentation() << "\n"; if (config_.outputObserver) { config_.outputObserver->update(static_cast(os)->str()); os_ << static_cast(os)->str(); delete os; } } void writeEscapedAttributeXML(ostream& os, const string& str) { for (size_t i=0, end=str.size(); i < end; ++i) { const char& c = str[i]; switch (c) { case '&': os << "&"; break; case '"': os << """; break; case '\'': os << "'"; break; case '<': os << "<"; break; case '>': os << ">"; break; default: os << c; break; } } } void writeEscapedTextXML(ostream& os, const string& str) { for (size_t i=0, end=str.size(); i < end; ++i) { const char& c = str[i]; switch (c) { case '&': os << "&"; break; case '<': os << "<"; break; case '>': os << ">"; break; default: os << c; break; } } } void XMLWriter::Impl::startElement(const string& name, const Attributes& attributes, EmptyElementTag emptyElementTag) { ostream* os = &os_; if (config_.outputObserver) os = new ostringstream; if (!style(StyleFlag_InlineOuter)) *os << indentation(); *os << "<" << name; string attributeIndentation(name.size()+1, ' '); for (Attributes::const_iterator it=attributes.begin(); it!=attributes.end(); ++it) { *os << " " << it->first << "=\""; writeEscapedAttributeXML(*os, it->second); *os << "\""; if (style(StyleFlag_AttributesOnMultipleLines) && (it+1)!=attributes.end()) *os << "\n" << indentation() << attributeIndentation; } *os << (emptyElementTag==EmptyElement ? "/>" : ">"); if (!style(StyleFlag_InlineInner) || (!style(StyleFlag_InlineOuter) && emptyElementTag==EmptyElement)) *os << "\n"; if (emptyElementTag == NotEmptyElement) elementStack_.push(name); if (config_.outputObserver) { config_.outputObserver->update(static_cast(os)->str()); os_ << static_cast(os)->str(); delete os; } } void XMLWriter::Impl::endElement() { ostream* os = &os_; if (config_.outputObserver) os = new ostringstream; if (elementStack_.empty()) throw runtime_error("[XMLWriter] Element stack underflow."); if (!style(StyleFlag_InlineInner)) *os << indentation(elementStack_.size()-1); *os << ""; elementStack_.pop(); if (!style(StyleFlag_InlineOuter)) *os << "\n"; if (config_.outputObserver) { config_.outputObserver->update(static_cast(os)->str()); os_ << static_cast(os)->str(); delete os; } } void XMLWriter::Impl::characters(const string& text, bool autoEscape) { ostream* os = &os_; if (config_.outputObserver) os = new ostringstream; if (!style(StyleFlag_InlineInner)) *os << indentation(); if (autoEscape) writeEscapedTextXML(*os, text); else *os << text; if (!style(StyleFlag_InlineInner)) *os << "\n"; if (config_.outputObserver) { config_.outputObserver->update(static_cast(os)->str()); os_ << static_cast(os)->str(); delete os; } } XMLWriter::stream_offset XMLWriter::Impl::position() const { os_ << flush; // check to see if we're actually writing to a gzip file boost::iostreams::filtering_ostream *zipper = dynamic_cast(&os_); if (zipper) { // os_ is actually a boost::iostreams::filtering_ostream with gzip and a counter return zipper->component<0, pwiz::minimxml::charcounter>()->characters(); } else { // OK to do a simple ftellp because seek is implemented, unlike with gzip return boost::iostreams::position_to_offset(os_.tellp()); } } XMLWriter::stream_offset XMLWriter::Impl::positionNext() const { stream_offset offset = position(); if (!style(StyleFlag_InlineOuter)) offset += indentation().size(); return offset; } // // XMLWriter forwarding functions // PWIZ_API_DECL XMLWriter::XMLWriter(ostream& os, const Config& config) : impl_(new Impl(os, config)) {} PWIZ_API_DECL void XMLWriter::pushStyle(unsigned int flags) {impl_->pushStyle(flags);} PWIZ_API_DECL void XMLWriter::popStyle() {impl_->popStyle();} PWIZ_API_DECL void XMLWriter::processingInstruction(const string& name, const string& data) { impl_->processingInstruction(name, data); } PWIZ_API_DECL void XMLWriter::startElement(const string& name, const Attributes& attributes, EmptyElementTag emptyElementTag) { impl_->startElement(name, attributes, emptyElementTag); } PWIZ_API_DECL void XMLWriter::endElement() {impl_->endElement();} PWIZ_API_DECL void XMLWriter::characters(const string& text, bool autoEscape) {impl_->characters(text, autoEscape);} PWIZ_API_DECL XMLWriter::stream_offset XMLWriter::position() const {return impl_->position();} PWIZ_API_DECL XMLWriter::stream_offset XMLWriter::positionNext() const {return impl_->positionNext();} namespace { // NCName ::= NCNameStartChar (NCNameChar)* // NCNameStartChar ::= [A-Z] | '_' | [a-z] // NCNameChar ::= NCNameStartChar | [0-9] | '.' | '-' // // Note: If we were working in Unicode, there's a lot of other valid characters, // but here we'll just encode any non-ASCII value. bool isNCNameStartChar(char& c) { return std::isalpha(c, std::locale::classic()) || c == '_'; } bool isNCNameChar(char& c) { return isNCNameStartChar(c) || std::isdigit(c, std::locale::classic()) || c == '.' || c == '-'; } const char hex[] = "0123456789abcdef"; void insertEncodedChar(string& str, string::iterator& itr) { char c = *itr; *itr = '_'; str.insert(size_t(itr-str.begin()), "_x0000"); itr += 4; *itr = hex[(c & 0xF0) >> 4]; *(++itr) = hex[c & 0x0F]; ++itr; } } // namespace PWIZ_API_DECL string& encode_xml_id(string& str) { if (str.empty()) throw std::invalid_argument("[encode_xml_id] xml:IDs and xml:IDREFs cannot be empty strings"); // reserve size for the worst case scenario (all characters need replacing), // this should be a reasonable guarantee that the iterator won't be invalidated str.reserve(str.length()*7); string::iterator itr = str.begin(); if (!isNCNameStartChar(*itr)) insertEncodedChar(str, itr); for (; itr != str.end(); ++itr) if (!isNCNameChar(*itr)) insertEncodedChar(str, itr); return str; } PWIZ_API_DECL string encode_xml_id_copy(const string& str) { string copy(str); return encode_xml_id(copy); } } // namespace minimxml } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/minimxml/XMLWriter.hpp000066400000000000000000000146371444255175000235620ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _XMLWRITER_HPP_ #define _XMLWRITER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/optimized_lexical_cast.hpp" #include "boost/shared_ptr.hpp" #include "boost/iostreams/positioning.hpp" #include "boost/iostreams/filter/counter.hpp" #include #include #include namespace pwiz { namespace minimxml { /// /// The XMLWriter class provides simple, tag-level XML syntax writing. /// Internally, XMLWriter keeps a style stack (for client customization /// of the XML style) and an element stack (for element nesting/indentation). /// class PWIZ_API_DECL XMLWriter { public: /// flags to control the XML writing style enum PWIZ_API_DECL StyleFlag { StyleFlag_InlineInner = 0x01, // no whitespace within an element StyleFlag_InlineOuter = 0x02, // no whitespace around an element StyleFlag_Inline = StyleFlag_InlineInner | StyleFlag_InlineOuter, StyleFlag_AttributesOnMultipleLines = 0x04 }; /// interface to allow outside observation of data sent to output stream class PWIZ_API_DECL OutputObserver { public: virtual void update(const std::string& output) = 0; virtual ~OutputObserver(){} }; /// initial configuration of the XMLWriter struct PWIZ_API_DECL Config { unsigned int initialStyle; unsigned int indentationStep; OutputObserver* outputObserver; Config() : initialStyle(0), indentationStep(2), outputObserver(0) {} }; /// vector of name/value pairs to be written as XML attributes class PWIZ_API_DECL Attributes : public std::vector< std::pair > { public: void add(const std::string& name, const double& value); void add(const std::string& name, const int& value); template inline void add(const std::string& name, const T& value) { push_back(make_pair(name, boost::lexical_cast(value))); } }; /// constructor XMLWriter(std::ostream& os, const Config& config = Config()); virtual ~XMLWriter() {} /// pushes style flags onto the internal style stack void pushStyle(unsigned int flags); /// pops the style stack void popStyle(); /// writes a processing instruction void processingInstruction(const std::string& name, const std::string& data); /// tag for indicating an empty element enum EmptyElementTag {NotEmptyElement, EmptyElement}; /// writes element start tag void startElement(const std::string& name, const Attributes& attributes = Attributes(), EmptyElementTag emptyElementTag = NotEmptyElement); /// writes element end tag void endElement(); /// writes character data; /// autoEscape writes reserved XML characters in the input text in their escaped form /// '&', '<', and '>' are '&', '<', '>' respectively void characters(const std::string& text, bool autoEscape = true); typedef boost::iostreams::stream_offset stream_offset; /// returns current stream position stream_offset position() const; /// returns stream position of next element start tag stream_offset positionNext() const; private: class Impl; boost::shared_ptr impl_; XMLWriter(const XMLWriter&); XMLWriter& operator=(const XMLWriter&); }; /// Encodes any characters not suitable in an xml:ID or xml:IDREF /// with their hexadecimal value, e.g. " " encodes as "_x0020_" /// This override modifies the input string in place and returns its reference. PWIZ_API_DECL std::string& encode_xml_id(std::string& str); /// Encodes any characters not suitable in an xml:ID or xml:IDREF /// with their hexadecimal value, e.g. " " encodes as "_x0020_" /// This override modifies and returns a copy of the input string. PWIZ_API_DECL std::string encode_xml_id_copy(const std::string& str); // // Template name: basic_charcounter. // Template paramters: // Ch - The character type. // Description: Filter which counts characters. // Based on boost's basic_counter, but // without the line counting, and couting using // stream_offset instead of int // template class basic_charcounter { public: typedef Ch char_type; struct category : boost::iostreams::dual_use, boost::iostreams::filter_tag, boost::iostreams::multichar_tag, boost::iostreams::optimally_buffered_tag { }; explicit basic_charcounter(int first_char = 0) : chars_(first_char) { } boost::iostreams::stream_offset characters() const { return chars_; } std::streamsize optimal_buffer_size() const { return 0; } template std::streamsize read(Source& src, char_type* s, std::streamsize n) { std::streamsize result = boost::iostreams::read(src, s, n); if (result == -1) return -1; chars_ += result; return result; } template std::streamsize write(Sink& snk, const char_type* s, std::streamsize n) { std::streamsize result = boost::iostreams::write(snk, s, n); chars_ += result; return result; } private: boost::iostreams::stream_offset chars_; }; BOOST_IOSTREAMS_PIPABLE(basic_charcounter, 1) typedef basic_charcounter charcounter; typedef basic_charcounter wcharcounter; } // namespace minimxml } // namespace pwiz #endif // _XMLWRITER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/000077500000000000000000000000001444255175000203025ustar00rootroot00000000000000libpwizlite-3.0.5/src/pwiz/utility/misc/Base64.cpp000066400000000000000000000071751444255175000220440ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2005 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Base64.hpp" #include "pwiz/utility/misc/Std.hpp" #include namespace pwiz { namespace util { namespace { typedef unsigned char byte; char charTable[64] = { 'A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z','a','b','c','d', 'e','f','g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v','w','x', 'y','z','0','1','2','3','4','5','6','7', '8','9', '+','/' }; char byteTable[256]; bool byteTableInitialized = false; void initializeByteTable() { for (size_t i=0; i<64; i++) byteTable[static_cast(charTable[i])] = static_cast(i); byteTableInitialized = true; } } // namespace PWIZ_API_DECL size_t Base64::binaryToTextSize(size_t byteCount) { return (size_t)ceil(byteCount/3.) * 4; } PWIZ_API_DECL size_t Base64::binaryToText(const void* from, size_t byteCount, char* to) { byte* it = (byte*)from; byte* end = it + byteCount; size_t written = 0; while (it!=end) { int int24bit = 0; int paddingCount = 0; // construct 24-bit integer from 3 bytes for (int i=0; i<3; i++) { if (it!=end) int24bit |= *it++<<((2-i)*8); else paddingCount++; } // write out 4 characters for (int i=3; i>=0; i--) { to[i] = charTable[int24bit & 0x3F]; int24bit >>= 6; } // fixup for padding if (paddingCount > 0) to[3] = '='; if (paddingCount > 1) to[2] = '='; to += 4; written += 4; } return written; } PWIZ_API_DECL size_t Base64::textToBinarySize(size_t charCount) { return (size_t)ceil(charCount/4.) * 3; } PWIZ_API_DECL size_t Base64::textToBinary(const char* from, size_t charCount, void* to) { if (!byteTableInitialized) initializeByteTable(); byte* it = (byte*)from; byte* end = it + charCount; byte* result = (byte*)to; size_t written = 0; while (it!=end) { int int24bit = 0; int paddingCount = 0; // construct 24-bit integer from 4 characters for (int i=0; i<4 && it!=end; i++, it++) { if (*it != '=') { int24bit |= byteTable[*it]<<((3-i)*6); } else paddingCount++; } // write out bytes for (int i=0; i<3-paddingCount; i++) { byte temp = static_cast(int24bit>>((2-i)*8)); *result++ = temp; int24bit ^= temp<<((2-i)*8); written++; } } return written; } } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/Base64.hpp000066400000000000000000000036141444255175000220430ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2005 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _BASE64_HPP_ #define _BASE64_HPP_ #include "pwiz/utility/misc/Export.hpp" #include // for size_t namespace pwiz { namespace util { /// Base-64 binary->text encoding /// (maps 3 bytes <-> 4 chars) namespace Base64 { /// Returns buffer size required by binary->text conversion. PWIZ_API_DECL size_t binaryToTextSize(size_t byteCount); /// binary -> text conversion /// - Caller must allocate buffer /// - Buffer will not be null-terminated /// - Returns the actual number of bytes written PWIZ_API_DECL size_t binaryToText(const void* from, size_t byteCount, char* to); /// Returns sufficient buffer size for text->binary conversion. PWIZ_API_DECL size_t textToBinarySize(size_t charCount); /// text -> binary conversion /// - Caller must allocate buffer /// - Buffer will not be null-terminated /// - Returns the actual number of bytes written PWIZ_API_DECL size_t textToBinary(const char* from, size_t charCount, void* to); } // namespace Base64 } // namespace util } // namespace pwiz #endif // _BASE64_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/BinaryData.cpp000066400000000000000000000353771444255175000230430ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2017 Matt Chambers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include #define PWIZ_SOURCE #include "BinaryData.hpp" #include "optimized_lexical_cast.hpp" #ifdef __cplusplus_cli #define PWIZ_MANAGED_PASSTHROUGH #endif #ifdef PWIZ_MANAGED_PASSTHROUGH #pragma managed #include "pinned_gcroot.h" #endif namespace pwiz { namespace util { #ifdef PWIZ_MANAGED_PASSTHROUGH typedef System::Runtime::InteropServices::GCHandle GCHandle; typedef System::Runtime::InteropServices::GCHandleType GCHandleType; #define __GCHANDLE_TO_VOIDPTR(x) ((GCHandle::operator System::IntPtr(x)).ToPointer()) #define __VOIDPTR_TO_GCHANDLE(x) (GCHandle::operator GCHandle(System::IntPtr(x))) #endif template class BinaryData::Impl { public: Impl() : #ifdef PWIZ_MANAGED_PASSTHROUGH managedStorage_(), #endif nativeStorage_() {} Impl(void* cliNumericArray) { #ifdef PWIZ_MANAGED_PASSTHROUGH GCHandle handle = __VOIDPTR_TO_GCHANDLE(cliNumericArray); // freed by caller managedStorage_ = (cli::array^) handle.Target; #else throw std::runtime_error("[BinaryData::ctor(void*)] only supported with MSVC C++/CLI"); #endif } ~Impl() { } Impl& operator=(void* cliNumericArray) { #ifdef PWIZ_MANAGED_PASSTHROUGH GCHandle handle = __VOIDPTR_TO_GCHANDLE(cliNumericArray); // freed by caller managedStorage_ = (cli::array^) handle.Target; nativeStorage_.clear(); return *this; #else throw std::runtime_error("[BinaryData::operator=(void*)] only supported with MSVC C++/CLI"); #endif } void _alloc(size_type elements, const T &t) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { managedStorage_ = gcnew array((int)elements); if (t != T()) std::fill(begin_, begin_ + elements, t); nativeStorage_.clear(); return; } #endif nativeStorage_.assign(elements, t); } void _resize(size_type elements) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { cli::array^% storageRef = (array^) managedStorage_; System::Array::Resize(storageRef, (int)elements); managedStorage_ = storageRef; nativeStorage_.clear(); return; } #endif nativeStorage_.resize(elements); } void _resize(size_type elements, const T &FillWith) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { cli::array^% storageRef = (array^) managedStorage_; System::Array::Resize(storageRef, (int)elements); managedStorage_ = storageRef; std::fill(begin_, end_, FillWith); nativeStorage_.clear(); return; } #endif nativeStorage_.resize(elements, FillWith); } void _swap(std::vector& that) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { if (managedStorage_->Length == that.size()) { // swap the managed array to the vector and vice versa pin_ptr pinnedArrayPtr = &managedStorage_[0]; T* nativeArrayPtr = &that[0]; std::swap_ranges(nativeArrayPtr, nativeArrayPtr + that.size(), (T*)&pinnedArrayPtr[0]); } else { // create temporary managed array and copy over the native array's contents auto tmp = gcnew cli::array((int)that.size()); { pin_ptr pinnedTmpPtr = &tmp[0]; //memcpy(&pinnedTmpPtr[0], &that[0], that.size()); for (int i = 0; i < that.size(); ++i) pinnedTmpPtr[i] = that[i]; } // copy the managed array's contents to the native array { pin_ptr pinnedArrayPtr = &managedStorage_[0]; that.resize(managedStorage_->Length); memcpy(&that[0], &pinnedArrayPtr[0], that.size() * sizeof(T)); } // replace the managed array with the temporary one managedStorage_ = tmp; } nativeStorage_.clear(); return; } #endif nativeStorage_.swap(that); } void* managedStorage() { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ == nullptr) { managedStorage_ = gcnew cli::array((int)nativeStorage_.size()); if (nativeStorage_.empty()) return managedStorage_.handle(); // copy the source native array's contents to the target managed array pin_ptr pinnedArrayPtr = &managedStorage_[0]; memcpy(&pinnedArrayPtr[0], &nativeStorage_[0], nativeStorage_.size() * sizeof(T)); } return managedStorage_.handle(); #else throw std::runtime_error("[BinaryData::managedStorage()] only supported with MSVC C++/CLI"); #endif } void _assign(const Impl& that) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (that.managedStorage_ != nullptr) { // if the lengths are not the same, the target array must be reallocated if (managedStorage_ == nullptr || managedStorage_->Length != that.managedStorage_->Length) { managedStorage_ = gcnew cli::array(that.managedStorage_->Length); } System::Array::Copy(that.managedStorage_, managedStorage_, managedStorage_->Length); return; } #endif _assign(that.nativeStorage_); } void _assign(const std::vector& that) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { // if the lengths are not the same, the target array must be reallocated if (managedStorage_->Length != that.size()) managedStorage_ = gcnew cli::array((int)that.size()); // copy the source native array's contents to the target managed array pin_ptr pinnedArrayPtr = &managedStorage_[0]; memcpy(&pinnedArrayPtr[0], &that[0], that.size() * sizeof(T)); nativeStorage_.clear(); return; } #endif nativeStorage_ = that; } typename BinaryData::size_type _size() const { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) return managedStorage_->Length; #endif return nativeStorage_.size(); } typename BinaryData::size_type _capacity() const { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr && managedStorage_->Length > nativeStorage_.capacity()) { return managedStorage_->Length; } #endif return nativeStorage_.capacity(); } operator const std::vector&() const { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr) { if (nativeStorage_.empty()) nativeStorage_.insert(nativeStorage_.end(), cbegin_, cend_); else if (managedStorage_->Length != nativeStorage_.size()) throw std::length_error("managed and native storage have different sizes (" + boost::lexical_cast(managedStorage_->Length) + " vs. " + boost::lexical_cast(nativeStorage_.size()) + ")"); } #endif return nativeStorage_; } template void makeIterator(Itr& itr, bool begin) { #ifdef PWIZ_MANAGED_PASSTHROUGH if (managedStorage_ != nullptr && managedStorage_->Length > 0) { //auto arrayPtr = (cli::array^) binaryData._impl->managedStorage_; //pin_ptr pinnedArrayPtr = &arrayPtr[0]; // the array is already pinned in binaryData, so when this goes out of scope it should not unpin T* pinnedArrayPtr = static_cast((&managedStorage_).ToPointer()); itr.current_ = begin ? &pinnedArrayPtr[0] : (&pinnedArrayPtr[managedStorage_->Length - 1]) + 1; return; } #endif if (!nativeStorage_.empty()) itr.current_ = begin ? &nativeStorage_.front() : (&nativeStorage_.back()) + 1; else itr.current_ = 0; } void cacheIterators(BinaryData& binaryData) { begin_ = iterator(binaryData, true); end_ = iterator(binaryData, false); cbegin_ = const_iterator(binaryData, true); cend_ = const_iterator(binaryData, false); } #ifdef PWIZ_MANAGED_PASSTHROUGH pinned_gcroot^ > managedStorage_; mutable std::vector nativeStorage_; #else std::vector nativeStorage_; #endif iterator begin_, end_; const_iterator cbegin_, cend_; }; #pragma managed(push, off) PWIZ_API_DECL template BinaryData::BinaryData(size_type elements, T t) : _impl(new Impl) { if (elements > 0) _alloc(elements, t); } PWIZ_API_DECL template BinaryData::BinaryData(const BinaryData &source) : _impl(new Impl) { _assign(source); } PWIZ_API_DECL template BinaryData::BinaryData(const_iterator first, const_iterator last) : _impl(new Impl) { std::uninitialized_copy(first, last, begin()); _impl->cacheIterators(*this); } PWIZ_API_DECL template BinaryData::~BinaryData() {} PWIZ_API_DECL template BinaryData::BinaryData(void* cliNumericArray) : _impl(new Impl(cliNumericArray)) { _impl->cacheIterators(*this); } PWIZ_API_DECL template BinaryData& BinaryData::operator=(void* cliNumericArray) { _impl->operator=(cliNumericArray); _impl->cacheIterators(*this); return *this; } PWIZ_API_DECL template void BinaryData::_alloc(size_type elements, const T &t) { _impl->_alloc(elements, t); _impl->cacheIterators(*this); } PWIZ_API_DECL template void BinaryData::_reserve(size_type elements) { #ifdef PWIZ_MANAGED_PASSTHROUGH // reserve only affects native storage #endif _impl->nativeStorage_.reserve(elements); } PWIZ_API_DECL template void BinaryData::_resize(size_type elements) { _impl->_resize(elements); _impl->cacheIterators(*this); } PWIZ_API_DECL template void BinaryData::_resize(size_type elements, const T &FillWith) { _impl->_resize(elements, FillWith); _impl->cacheIterators(*this); } PWIZ_API_DECL template void BinaryData::_swap(BinaryData& that) { #ifdef PWIZ_MANAGED_PASSTHROUGH _impl->managedStorage_.swap(that._impl->managedStorage_); // swapping one or both nullptrs should work (?) #endif _impl->nativeStorage_.swap(that._impl->nativeStorage_); _impl->cacheIterators(*this); } PWIZ_API_DECL template void BinaryData::_swap(std::vector& that) { _impl->_swap(that); _impl->cacheIterators(*this); } PWIZ_API_DECL template void* BinaryData::managedStorage() const { return _impl->managedStorage(); } PWIZ_API_DECL template void BinaryData::_assign(const BinaryData& that) { if (that.empty()) return; _impl->_assign(*that._impl); _impl->cacheIterators(*this); } PWIZ_API_DECL template void BinaryData::_assign(const std::vector& that) { if (that.empty()) { clear(); return; } _impl->_assign(that); _impl->cacheIterators(*this); } PWIZ_API_DECL template typename BinaryData::size_type BinaryData::_size() const { return _impl->_size(); } PWIZ_API_DECL template typename BinaryData::size_type BinaryData::_capacity() const { return _impl->_capacity(); } /*PWIZ_API_DECL template BinaryData::operator std::vector&() { #ifdef PWIZ_MANAGED_PASSTHROUGH if (_impl->managedStorage_ != nullptr) { if (_impl->nativeStorage_.empty()) _impl->nativeStorage_.insert(_impl->nativeStorage_.end(), cbegin(), cend()); else if (_impl->managedStorage_->Length != _impl->nativeStorage_.size()) throw std::length_error("managed and native storage have different sizes"); } #endif return _impl->nativeStorage_; }*/ PWIZ_API_DECL template BinaryData::operator const std::vector&() const { return static_cast&>(*_impl); } /*PWIZ_API_DECL template BinaryData::operator std::vector() const { #ifdef PWIZ_MANAGED_PASSTHROUGH if (_impl->managedStorage_ != nullptr) return std::vector(cbegin(), cend()); #endif return _impl->nativeStorage_; }*/ PWIZ_API_DECL template typename BinaryData::const_reference BinaryData::operator[] (size_type index) const { BOOST_ASSERT(index >= 0 && index < size()); BOOST_ASSERT(_impl->cbegin_.current_ != NULL); return _impl->cbegin_[index]; } PWIZ_API_DECL template typename BinaryData::reference BinaryData::operator[](size_type index) { BOOST_ASSERT(index >= 0 && index < size()); BOOST_ASSERT(_impl->cbegin_.current_ != NULL); return _impl->begin_[index]; } PWIZ_API_DECL template BinaryData::const_iterator::const_iterator(const BinaryData& binaryData, bool begin) { binaryData._impl->makeIterator(*this, begin); } PWIZ_API_DECL template BinaryData::iterator::iterator(BinaryData& binaryData, bool begin) { binaryData._impl->makeIterator(*this, begin); } PWIZ_API_DECL template class BinaryData; PWIZ_API_DECL template class BinaryData; PWIZ_API_DECL template class BinaryData; #pragma managed(pop) } // util } // pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/BinaryData.hpp000066400000000000000000000312471444255175000230400ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2017 Matt Chambers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef __BINARYDATA_HPP__ #define __BINARYDATA_HPP__ #ifdef __cplusplus_cli #pragma managed(push, off) #endif #include #include #include #include #include #include #include #include "pwiz/utility/misc/Export.hpp" namespace pwiz { namespace util { /// A custom vector class that can store its contents in either a std::vector or a cli::array (when compiled with .NET). template class PWIZ_API_DECL BinaryData { public: typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef T value_type; typedef T &reference; typedef const T &const_reference; class PWIZ_API_DECL const_iterator : public std::iterator { public: const T& operator*() const { return *current_; } const T* operator->() const { return current_; } const_iterator& operator++() { ++current_; return *this; } const_iterator operator++(int) { const_iterator copy = *this; ++(*this); return copy; } const_iterator& operator--() { --current_; return *this; } const_iterator operator--(int) { const_iterator copy = *this; --(*this); return copy; } const_iterator& operator+=(difference_type n) { current_ += n; return *this; } const_iterator& operator-=(difference_type n) { current_ -= n; return *this; } const_iterator operator+(difference_type n) const { const_iterator copy = *this; copy += n; return copy; } const_iterator operator-(difference_type n) const { const_iterator copy = *this; copy -= n; return copy; } difference_type operator-(const const_iterator& rhs) const { return current_ - rhs.current_; } const T& operator[](difference_type n) const { return *(current_ + n); } bool operator!=(const const_iterator& that) const { return current_ != that.current_; } bool operator==(const const_iterator& that) const { return current_ == that.current_; } bool operator<(const const_iterator& that) const { return current_ < that.current_; } bool operator<=(const const_iterator& that) const { return current_ <= that.current_; } bool operator>(const const_iterator& that) const { return current_ > that.current_; } bool operator>=(const const_iterator& that) const { return current_ >= that.current_; } const_iterator() : current_(NULL) {} const_iterator(const const_iterator& rhs) : current_(rhs.current_) {} protected: const_iterator(const BinaryData& binaryData, bool begin = true); friend class BinaryData; const T* current_; }; class PWIZ_API_DECL iterator : public std::iterator { public: T& operator*() const { return *current_; } T* operator->() const { return current_; } iterator& operator++() { ++current_; return *this; } iterator operator++(int) { iterator copy = *this; ++(*this); return copy; } iterator& operator--() { --current_; return *this; } iterator operator--(int) { iterator copy = *this; --(*this); return copy; } iterator& operator+=(difference_type n) { current_ += n; return *this; } iterator& operator-=(difference_type n) { current_ -= n; return *this; } iterator operator+(difference_type n) const { iterator copy = *this; copy += n; return copy; } iterator operator-(difference_type n) const { iterator copy = *this; copy -= n; return copy; } difference_type operator-(const iterator& rhs) const { return current_ - rhs.current_; } T& operator[](difference_type n) const { return *(current_ + n); } bool operator!=(const iterator& that) const { return current_ != that.current_; } bool operator==(const iterator& that) const { return current_ == that.current_; } bool operator<(const iterator& that) const { return current_ < that.current_; } bool operator<=(const iterator& that) const { return current_ <= that.current_; } bool operator>(const iterator& that) const { return current_ > that.current_; } bool operator>=(const iterator& that) const { return current_ >= that.current_; } iterator() : current_(NULL) {} iterator(const iterator& rhs) : current_(rhs.current_) {} protected: iterator(BinaryData& binaryData, bool begin = true); friend class BinaryData; T* current_; }; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #pragma region Ctors/Dtor BinaryData(size_type elements = 0, T t = T()); BinaryData(const BinaryData &source); BinaryData(const_iterator first, const_iterator last); BinaryData(void* cliNumericArray); BinaryData &operator=(void* cliNumericArray); ~BinaryData(); #pragma endregion #pragma region Iterators/accessors bool empty() const /*throw()*/ { return size() == 0; } size_t size() const /*throw()*/ { return _size(); } size_t capacity() const /*throw()*/ { return _capacity(); } void reserve(size_type n) { if (n > _capacity()) _reserve(n); } size_type max_size() const /*throw()*/ { return std::numeric_limits().max() / sizeof(T); } const_iterator cbegin() const /*throw(std::runtime_error)*/ { return const_iterator(*this); } iterator begin() /*throw(std::runtime_error)*/ { return iterator(*this); } const_iterator begin() const /*throw(std::runtime_error)*/ { return cbegin(); } const_iterator cend() const /*throw(std::runtime_error)*/ { return const_iterator(*this, false); } const_iterator end() const /*throw(std::runtime_error)*/ { return cend(); } iterator end() /*throw(std::runtime_error)*/ { return iterator(*this, false); } reverse_iterator rbegin() /*throw(std::runtime_error)*/ { return reverse_iterator(end()); } const_reverse_iterator crbegin() const /*throw(std::runtime_error)*/ { return const_reverse_iterator(cend()); } const_reverse_iterator rbegin() const /*throw(std::runtime_error)*/ { return crbegin(); } reverse_iterator rend() /*throw(std::runtime_error)*/ { return reverse_iterator(begin()); } const_reverse_iterator crend() const /*throw(std::runtime_error)*/ { return const_reverse_iterator(begin()); } const_reverse_iterator rend() const /*throw(std::runtime_error)*/ { return crend(); } const_reference front() const /*throw(std::runtime_error)*/ { BOOST_ASSERT(!empty()); return *begin(); } reference front() /*throw(std::runtime_error)*/ { BOOST_ASSERT(!empty()); return *begin(); } const_reference back() const /*throw(std::runtime_error)*/ { BOOST_ASSERT(!empty()); return *(--cend()); } reference back() /*throw(std::runtime_error)*/ { BOOST_ASSERT(!empty()); return *(--end()); } const_reference operator[] (size_type index) const; /*throw(std::runtime_error)*/ reference operator[](size_type index); const_reference at(size_type index) const /*throw(std::runtime_error)*/ { if (index < 0 || index >= size()) throw std::out_of_range("out of range"); return (*this)[index]; } reference at(size_type index) /*throw(std::runtime_error)*/ { if (index < 0 || index >= size()) throw std::out_of_range("out of range"); return (*this)[index]; } #pragma endregion #pragma region Mutators BinaryData &operator=(const BinaryData &that) { _assign(that); return *this; } BinaryData &operator=(const std::vector& source) { _assign(source); return *this; } void swap(BinaryData &that) /*throw()*/ { _swap(that); } void swap(std::vector &that) /*throw()*/ { _swap(that); } template void assign(const Iter& first, const Iter& last) { clear(); insert(end(), first, last); } // Insert an element BEFORE i within the vector. // Call insert(end(), x) or push_back(x) to append. iterator insert(iterator i, const T& x = T()) /*throw(std::runtime_error)*/ { BOOST_ASSERT(i >= begin() && i <= end()); size_t Offset = i - begin(); insert(i, 1, x); return begin() + Offset; } // Insert a repetition of x BEFORE i within the vector. void insert(iterator i, size_type n, const T &x) /*throw(std::runtime_error)*/ { BOOST_ASSERT(i >= begin() && i <= end()); size_t OldSize = size(); size_type offset = i - begin(); resize(OldSize + n); std::copy_backward(begin() + offset, begin() + OldSize, end()); std::fill(begin() + offset, begin() + offset + n, x); } // Insert a sequence of elements BEFORE i within the vector. template void insert(iterator i, const Iter& first, const Iter& last) /*throw(std::runtime_error)*/ { BOOST_ASSERT(last >= first); BOOST_ASSERT(i >= begin() && i <= end()); size_t count = last - first; if (count == 0) return; size_t offset = i - begin(), old_size = size(); resize(old_size + count); for (iterator j = begin() + old_size, k = end(); j != begin() + offset; ) std::iter_swap(--j, --k); std::copy(first, last, begin() + offset); } iterator erase(iterator i) { difference_type Offset = i - begin(); std::copy(i + 1, end(), i); pop_back(); return begin() + Offset; } iterator erase(iterator From, iterator To) { difference_type Offset = From - begin(); iterator i = std::copy(To, end(), From); resize(i - begin()); return begin() + Offset; } void resize(size_type elements, const T &FillWith) { _resize(elements, FillWith); } void resize(size_type elements) { _resize(elements); } void push_back(const T &value) /*throw(std::runtime_error)*/ { _resize(size() + 1); back() = value; } void pop_back() /*throw(std::runtime_error)*/ { _resize(size() - 1); } void clear() { _resize(0); } #pragma endregion void* managedStorage() const; //operator std::vector&(); // not compatible with caching iterators operator const std::vector&() const; //operator std::vector() const; private: class Impl; #ifdef WIN32 #pragma warning(push) #pragma warning(disable: 4251) std::unique_ptr _impl; #pragma warning(pop) #else std::unique_ptr _impl; #endif void _alloc(size_type elements, const T & t); void _reserve(size_type elements); void _resize(size_type elements); void _resize(size_type elements, const T & FillWith); void _swap(BinaryData & that); void _swap(std::vector& that); void _assign(const BinaryData & that); void _assign(const std::vector& that); size_type _size() const; size_type _capacity() const; }; } // util } // pwiz namespace std { template void swap(pwiz::util::BinaryData& lhs, std::vector& rhs) { lhs.swap(rhs); } template void swap(std::vector& lhs, pwiz::util::BinaryData& rhs) { rhs.swap(lhs); } } #ifdef __cplusplus_cli #pragma managed(pop) #endif #endif //__BINARYDATA_HPP__ libpwizlite-3.0.5/src/pwiz/utility/misc/COMInitializer.hpp000066400000000000000000000031521444255175000236360ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef COMINITIALIZER_HPP_ #define COMINITIALIZER_HPP_ #include "Export.hpp" namespace pwiz { namespace util { /// Singleton used to initialize and uninitialize COM once per thread class PWIZ_API_DECL COMInitializer { public: /// If COM is not yet initialized on the calling thread, initializes COM and returns true /// If COM is already initialized on the calling thread, increments reference count and returns false static bool initialize(); /// If COM is not initialized on the calling thread, does nothing and returns false /// If COM is initialized on the calling thread, decreases reference count: /// If reference count is 0, uninitializes COM and return true, otherwise returns false static bool uninitialize(); private: class Impl; }; } // namespace util } // namespace pwiz #endif // COMINITIALIZER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/CharIndexedVector.hpp000066400000000000000000000145171444255175000243640ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CHARINDEXEDVECTOR_HPP_ #define _CHARINDEXEDVECTOR_HPP_ #include "boost/array.hpp" namespace pwiz { namespace util { /// an iterator for CharIndexedVector template class CharIndexedVectorIterator { typedef boost::array type; typename type::iterator m_itr; public: typedef typename type::value_type value_type; typedef typename type::iterator iterator; typedef typename type::iterator pointer; typedef typename type::const_iterator const_iterator; typedef typename type::difference_type difference_type; typedef typename type::reference reference; typedef typename type::const_reference const_reference; typedef typename type::size_type size_type; typedef std::random_access_iterator_tag iterator_category; CharIndexedVectorIterator(const iterator& itr) : m_itr(itr) {} reference operator*() const { return *m_itr; } bool operator!=(const CharIndexedVectorIterator& rhs) const { return m_itr != *(iterator*)&rhs; } difference_type operator-(const CharIndexedVectorIterator& rhs) const { return m_itr - rhs.m_itr; } CharIndexedVectorIterator& operator++() { // preincrement ++m_itr; return (*this); } CharIndexedVectorIterator operator++(int) { // postincrement CharIndexedVectorIterator _Tmp = *this; ++m_itr; return (_Tmp); } CharIndexedVectorIterator& operator--() { // predecrement ++m_itr; return (*this); } CharIndexedVectorIterator operator--(int) { // postdecrement CharIndexedVectorIterator _Tmp = *this; ++m_itr; return (_Tmp); } CharIndexedVectorIterator& operator+=(difference_type _Off) { // increment by integer m_itr += _Off; return (*this); } CharIndexedVectorIterator& operator-=(difference_type _Off) { // decrement by integer return (*this += -_Off); } bool operator<(const CharIndexedVectorIterator& rhs) { return m_itr < rhs.m_itr; } }; /// a const_iterator for CharIndexedVector template class CharIndexedVectorConstIterator { typedef boost::array type; typename type::const_iterator m_itr; public: typedef typename type::value_type value_type; typedef typename type::iterator iterator; typedef typename type::iterator pointer; typedef typename type::const_iterator const_iterator; typedef typename type::difference_type difference_type; typedef typename type::reference reference; typedef typename type::const_reference const_reference; typedef typename type::size_type size_type; typedef std::random_access_iterator_tag iterator_category; CharIndexedVectorConstIterator(const const_iterator& itr) : m_itr(itr) {} const_reference operator*() const { return *m_itr; } bool operator!=(const CharIndexedVectorConstIterator& rhs) const { return m_itr != *(const_iterator*)&rhs; } difference_type operator-(const CharIndexedVectorConstIterator& rhs) const { return m_itr - rhs.m_itr; } CharIndexedVectorConstIterator& operator++() { // preincrement ++m_itr; return (*this); } CharIndexedVectorConstIterator operator++(int) { // postincrement CharIndexedVectorConstIterator _Tmp = *this; ++m_itr; return (_Tmp); } CharIndexedVectorConstIterator& operator--() { // predecrement ++m_itr; return (*this); } CharIndexedVectorConstIterator operator--(int) { // postdecrement CharIndexedVectorConstIterator _Tmp = *this; ++m_itr; return (_Tmp); } CharIndexedVectorConstIterator& operator+=(difference_type _Off) { // increment by integer m_itr += _Off; return (*this); } CharIndexedVectorConstIterator& operator-=(difference_type _Off) { // decrement by integer return (*this += -_Off); } bool operator<(const CharIndexedVectorConstIterator& rhs) { return m_itr < rhs.m_itr; } }; /// a wrapper for boost::array that is indexable by character; supports indexes 0-127 template struct CharIndexedVector : public boost::array { typedef boost::array type; typedef CharIndexedVectorIterator iterator; typedef CharIndexedVectorConstIterator const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; CharIndexedVector() { clear(); } size_t size() const { return 128; } void erase(const char c) { this->operator[](c) = T(); } void clear() { std::fill(type::begin(), type::end(), T()); } char getIndexAsChar(iterator itr) const { return 'A' + (itr - type::begin()); } char getIndexAsChar(size_t i) const { return 'A' + (&this->operator[](i) - type::begin()); } const T& operator[](const char c) const { return type::operator[]((size_t) c); } T& operator[](const char c) { return type::operator[]((size_t) c); } const_iterator begin() const {return type::begin();} const_iterator end() const {return type::end();} iterator begin() {return type::begin();} iterator end() {return type::end();} }; } // namespace util } // namespace pwiz #endif // _CHARINDEXEDVECTOR_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/ClickwrapPrompter.hpp000066400000000000000000000027131444255175000244660ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2010 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef CLICKWRAPPROMPTER_HPP_ #define CLICKWRAPPROMPTER_HPP_ #include "Export.hpp" #include namespace pwiz { namespace util { /// a barrier to force end users to agree/disagree to a prompt before continuing class PWIZ_API_DECL ClickwrapPrompter { public: /// shows a modal dialog with the specified caption, text, and Agree/Disagree buttons; /// returns true iff the user clicked the Agree button; /// if oneTimeKey is non-empty, all calls with that key after the user has agreed will be ignored static bool prompt(const std::string& caption, const std::string& text, const std::string& oneTimeKey = ""); }; } // namespace util } // namespace pwiz #endif // CLICKWRAPPROMPTER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Container.hpp000066400000000000000000000104141444255175000227350ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CONTAINER_HPP_ #define _CONTAINER_HPP_ #include #include #include #include #include #include #include #include #include #include #include #include using std::vector; using std::list; using std::map; using std::multimap; using std::set; using std::multiset; using std::deque; using std::stack; using std::queue; using std::pair; using std::make_pair; using std::find; using std::find_end; using std::find_first_of; using std::find_if; using std::remove; using std::remove_copy; using std::remove_copy_if; using std::remove_if; using std::replace; using std::replace_copy; using std::replace_copy_if; using std::replace_if; using std::for_each; using std::transform; using std::accumulate; using std::sort; using std::stable_sort; using std::binary_search; using std::adjacent_find; using std::equal_range; using std::lower_bound; using std::upper_bound; namespace pwiz { namespace util { /// swaps a container with an empty one to release its internal memory template void deallocate(T& container) { container.clear(); T tmp; std::swap(tmp, container); } } // namespace util } // namespace pwiz #ifndef PWIZ_CONFIG_NO_CONTAINER_OUTPUT_OPERATORS // output operators for standard containers namespace std { template ostream& operator<< (ostream& o, const pair& p) { return (o << "( " << p.first << ", " << p.second << " )"); } template ostream& operator<< (ostream& o, const vector& v) { o << "("; for(const auto& i : v) o << " " << i; o << " )"; return o; } template ostream& operator<< (ostream& o, const set< T, P >& s) { o << "("; for (const auto& i : s) o << " " << i; o << " )"; return o; } inline ostream& operator<< (ostream& o, const map< string, string >& m) { o << "("; for (const auto& p : m) o << " \"" << p.first << "\"->\"" << p.second << "\""; o << " )"; return o; } template ostream& operator<< (ostream& o, const map< KeyT, string >& m) { o << "("; for (const auto& p : m) o << " " << p.first << "->\"" << p.second << "\""; o << " )"; return o; } template ostream& operator<< (ostream& o, const map< string, ValueT >& m) { o << "("; for (const auto& p : m) o << " \"" << p.first << "\"->" << p.second << ""; o << " )"; return o; } template ostream& operator<< (ostream& o, const map< KeyT, ValueT >& m) { o << "("; for (const auto& p : m) o << " " << p.first << "->" << p.second << ""; o << " )"; return o; } template set operator- (const set& lhs, const set& rhs) { set result; set_difference(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), insert_iterator>(result, result.begin())); return result; } } #endif // PWIZ_CONFIG_NO_CONTAINER_OUTPUT_OPERATORS #endif // _CONTAINER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/DateTime.hpp000066400000000000000000000124671444255175000225210ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _DATETIME_HPP_ #define _DATETIME_HPP_ #include #include namespace bdt = boost::date_time; namespace bpt = boost::posix_time; namespace blt = boost::local_time; using bpt::from_time_t; #ifdef WIN32 using bpt::from_ftime; #endif using boost::gregorian::date; namespace boost { namespace date_time { //! Create a time object from an OLE automation date value. /*! Create a time object from an OLE automation date value. * An OLE automation date is implemented as a floating-point number * * whose value is the number of days from midnight, 30 December 1899. */ template inline time_type time_from_OADATE(double oa_date) { typedef typename time_type::date_type date_type; typedef typename time_type::date_duration_type date_duration_type; typedef typename time_type::time_duration_type time_duration_type; using boost::math::modf; static const date_type base_date(1899, Dec, 30); static const time_type base_time(base_date, time_duration_type(0,0,0)); int dayOffset, hourOffset, minuteOffset, secondOffset; double fraction = fabs(modf(oa_date, &dayOffset)) * 24; // fraction = hours fraction = modf(fraction, &hourOffset) * 60; // fraction = minutes fraction = modf(fraction, &minuteOffset) * 60; // fraction = seconds secondOffset = round(fraction); time_type t(base_time); t += time_duration_type(hourOffset, minuteOffset, secondOffset); t += date_duration_type(dayOffset); return t; } } } namespace pwiz { namespace util { /// formats a boost ptime according to a custom format string inline std::string format_date_time(const std::string& format, const bpt::ptime& t) { bpt::time_facet* output_facet = new bpt::time_facet; output_facet->format(format.c_str()); std::ostringstream ss; ss.imbue(std::locale(std::locale::classic(), output_facet)); return static_cast(ss << t).str(); } /// formats a boost local_date_time according to a custom format string inline std::string format_date_time(const std::string& format, const blt::local_date_time& t) { blt::local_time_facet* output_facet = new blt::local_time_facet; output_facet->format(format.c_str()); std::ostringstream ss; ss.imbue(std::locale(std::locale::classic(), output_facet)); return static_cast(ss << t).str(); } /// formats a boost time duration according to a custom format string inline std::string format_date_time(const std::string& format, const bpt::time_duration& t) { bpt::time_facet* output_facet = new bpt::time_facet; output_facet->format(format.c_str()); std::ostringstream ss; ss.imbue(std::locale(std::locale::classic(), output_facet)); return static_cast(ss << t).str(); } /// converts a custom formatted datetime string to a boost local_date_time inline blt::local_date_time parse_date_time(const std::string& format, const std::string& t) { blt::local_time_input_facet* input_facet = new blt::local_time_input_facet; input_facet->format(format.c_str()); std::istringstream ss(t); ss.imbue(std::locale(std::locale::classic(), input_facet)); blt::local_date_time result(bdt::not_a_date_time); ss >> result; return result; } /// returns a string representation suitable for an xsd:datetime attribute; /// input is assumed to be UTC time; /// output string is UTC time (as denoted by the 'Z' suffix) inline std::string encode_xml_datetime(const bpt::ptime& t) { // 2007-06-27T15:23:45Z return format_date_time("%Y-%m-%dT%H:%M:%SZ", t); } /// returns a string representation suitable for an xsd:datetime attribute; /// time zone is assumed to be correct; /// output string is UTC time (as denoted by the 'Z' suffix) inline std::string encode_xml_datetime(const blt::local_date_time& t) { // 2007-06-27T15:23:45Z return encode_xml_datetime(t.utc_time()); } /// converts an xsd:datetime attribute to a local_date_time inline blt::local_date_time decode_xml_datetime(const std::string& t) { blt::local_time_input_facet* input_facet = new blt::local_time_input_facet; input_facet->format("%Y-%m-%dT%H:%M:%SZ"); std::stringstream ss(t); ss.imbue(std::locale(std::locale::classic(), input_facet)); blt::local_date_time result(bdt::not_a_date_time); ss >> result; return blt::local_date_time(result.utc_time(), blt::time_zone_ptr()); } } // namespace util } // namespace pwiz #endif // _DATETIME_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Environment.hpp000066400000000000000000000031271444255175000233220ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include #include "optimized_lexical_cast.hpp" #include namespace pwiz { namespace util { namespace env { template T get(const char* name, const T& defaultValue) { if (!name) throw std::runtime_error("[env::get()] null variable name"); T value(defaultValue); char* result = ::getenv(name); if (result) value = boost::lexical_cast(result); return value; } template T get(const std::string& name, const T& defaultValue) { if (name.empty()) throw std::runtime_error("[env::get()] empty variable name"); return get(name.c_str(), defaultValue); } /// explicit single-argument overload inline std::string get(const std::string& name) {return get(name, std::string());} } // namespace env } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/Exception.hpp000066400000000000000000000102711444255175000227520ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _EXCEPTION_HPP_ #define _EXCEPTION_HPP_ #include #include namespace pwiz { namespace util { class usage_exception : public std::runtime_error { public: usage_exception(const std::string& usage) : std::runtime_error(usage) {} }; class user_error : public std::runtime_error { public: user_error(const std::string& what) : std::runtime_error(what) {} }; } // namespace util } // namespace pwiz #ifdef _WIN32 // preprocessed prototype of SetErrorMode so windows.h doesn't have to be included; // this requires linking to the shared runtime but pwiz always does that on Windows extern "C" __declspec(dllimport) unsigned int __stdcall SetErrorMode(unsigned int uMode); // make debug assertions throw exceptions in MSVC #ifdef _DEBUG #include #include #include #include namespace { inline std::string narrow(const std::wstring& str) { std::ostringstream oss; const std::ctype& ctfacet = std::use_facet< std::ctype >(oss.getloc()); for (size_t i=0; i < str.size(); ++i) oss << ctfacet.narrow(str[i], 0); return oss.str(); } inline int CrtReportHook(int reportType, char *message, int *returnValue) { static bool isThrowing = false; // avoid stack overflow when CrtReportHook is called from a destructor if (reportType != _CRT_ERROR && reportType != _CRT_ASSERT) return 0; if (isThrowing) return 1; isThrowing = true; throw std::runtime_error(message); } inline int CrtReportHookW(int reportType, wchar_t *message, int *returnValue) { return CrtReportHook(reportType, const_cast(narrow(message).c_str()), returnValue); } } // namespace struct ReportHooker { ReportHooker() { SetErrorMode(SetErrorMode(0) | 0x0002); // SEM_NOGPFAULTERRORBOX _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, &CrtReportHook); _CrtSetReportHookW2(_CRT_RPTHOOK_INSTALL, &CrtReportHookW); } ~ReportHooker() { _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, &CrtReportHook); _CrtSetReportHookW2(_CRT_RPTHOOK_REMOVE, &CrtReportHookW); } }; #else struct ReportHooker { ReportHooker() { SetErrorMode(SetErrorMode(0) | 0x0002); // SEM_NOGPFAULTERRORBOX } }; #endif // _DEBUG static ReportHooker reportHooker; #endif // make Boost assertions throw exceptions #if !defined(NDEBUG) #define BOOST_ENABLE_ASSERT_HANDLER #include namespace boost { inline void assertion_failed(char const * expr, char const * function, char const * file, long line) // user defined { std::ostringstream oss; oss << "[" << file << ":" << line << "] Assertion failed: " << expr; throw std::runtime_error(oss.str()); } inline void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line) // user defined { std::ostringstream oss; oss << "[" << file << ":" << line << "] Assertion failed: " << expr << " (" << msg << ")"; throw std::runtime_error(oss.str()); } } // namespace boost #endif // !defined(NDEBUG) #endif // _EXCEPTION_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Export.hpp000066400000000000000000000021611444255175000222740ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef PWIZ_API_DECL #ifdef PWIZ_DYN_LINK #ifdef PWIZ_SOURCE #define PWIZ_API_DECL __declspec(dllexport) #else #define PWIZ_API_DECL __declspec(dllimport) #endif // PWIZ_SOURCE #else #define PWIZ_API_DECL #endif // PWIZ_DYN_LINK #endif // PWIZ_API_DECL libpwizlite-3.0.5/src/pwiz/utility/misc/Filesystem-303.cpp000066400000000000000000000605331444255175000234440ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Filesystem.hpp" #ifdef MXE #undef WIN32 #endif #ifdef WIN32 #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define NOGDI #include //#include #include #include #include #include #include #else #include #include #ifndef MXE #include #include #endif #include #include #include #ifndef MAX_PATH #define MAX_PATH 255 #endif #endif #include #include #include #include #include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" //#include #include using std::runtime_error; using std::string; using std::vector; namespace { class UTF8_BoostFilesystemPathImbuer : public boost::singleton { public: UTF8_BoostFilesystemPathImbuer(boost::restricted) { std::locale global_loc = std::locale(); std::locale loc(global_loc, new boost::filesystem::detail::utf8_codecvt_facet); bfs::path::imbue(loc); } void imbue() const {}; }; #ifdef WIN32 #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 #define SystemHandleInformation 16 extern "C" { typedef NTSTATUS(NTAPI* _NtQuerySystemInformation)( ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength); // The same definition but with different member variable names in: // mingw64/x86_64-w64-mingw32/include/winternl.h// // typedef struct _SYSTEM_HANDLE_ENTRY { // ULONG OwnerPid; // BYTE ObjectType; // BYTE HandleFlags; // USHORT HandleValue; // PVOID ObjectPointer; // ULONG AccessMask; //} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY; // So I do comment out this declaration and fix // the variable names in this unit. //struct SYSTEM_HANDLE { //ULONG ProcessID; //BYTE HandleType; //BYTE Flags; //USHORT Handle; //PVOID Object; //ACCESS_MASK GrantedAccess; //}; // The same definition in // /mingw64/x86_64-w64-mingw32/include/winternl.h, like this: //typedef struct _SYSTEM_HANDLE_INFORMATION { //ULONG Count; //SYSTEM_HANDLE_ENTRY Handle[1]; //} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; // but with different member var names which had // to be fixed in this unit. // struct SYSTEM_HANDLE_INFORMATION { // ULONG HandleCount; // SYSTEM_HANDLE Handles[1]; //}; enum SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 }; struct SYSTEM_HANDLE_TABLE_ENTRY_INFO { USHORT UniqueProcessId; USHORT CreatorBackTraceIndex; UCHAR ObjectTypeIndex; UCHAR HandleAttributes; USHORT HandleValue; PVOID Object; ULONG GrantedAccess; }; typedef NTSTATUS(NTAPI* _NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress); typedef NTSTATUS(NTAPI* _NtMapViewOfSection)( HANDLE SectionHandle, HANDLE ProcessHandle, PVOID* BaseAddress, ULONG_PTR ZeroBits, SIZE_T CommitSize, PLARGE_INTEGER SectionOffset, PSIZE_T ViewSize, SECTION_INHERIT InheritDisposition, ULONG AllocationType, ULONG Win32Protect); typedef NTSTATUS(NTAPI* _NtQueryObject)( HANDLE Handle, OBJECT_INFORMATION_CLASS ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength); PVOID GetLibraryProcAddress(PSTR LibraryName, PSTR ProcName) { return (void*)GetProcAddress(GetModuleHandleA(LibraryName), ProcName); } } int GetFileHandleTypeNumber(SYSTEM_HANDLE_INFORMATION* handleInfos) { DWORD currentProcessId = GetCurrentProcessId(); wstring fileType = L"File"; std::vector typeInfoBytes(sizeof(PUBLIC_OBJECT_TYPE_INFORMATION)); _NtQueryObject NtQueryObject = (_NtQueryObject)GetLibraryProcAddress("ntdll.dll", "NtQueryObject"); if (NtQueryObject == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtQueryObject function.\n"); return 0; } map handlesPerType; for (size_t i = 0; i < handleInfos->Count; ++i) { if (handleInfos->Handle[i].OwnerPid != currentProcessId) continue; if (handleInfos->Handle[i].ObjectType < 20) // this is not the File string you're looking for continue; const auto handle = reinterpret_cast(handleInfos->Handle[i].HandleValue); ULONG size; auto queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), typeInfoBytes.size(), &size); if (queryResult == STATUS_INFO_LENGTH_MISMATCH) { typeInfoBytes.resize(size); queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), size, nullptr); } if (NT_SUCCESS(queryResult)) { const auto typeInfo = reinterpret_cast( typeInfoBytes.data()); const auto type = std::wstring(typeInfo->TypeName.Buffer, typeInfo->TypeName.Length / sizeof(WCHAR)); if (type == fileType) // return handleInfos->Handles[i].HandleType; ++handlesPerType[handleInfos->Handle[i].ObjectType]; } } if (handlesPerType.empty()) return 0; auto typeMode = std::max_element( handlesPerType.begin(), handlesPerType.end(), [](const auto& a, const auto& b) { return a.second < b.second; }); return typeMode->first; } bool GetFileNameFromHandle(HANDLE hFile, wchar_t* filepathBuffer, size_t bufferLength) { // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); // Cannot map 0-byte files if (dwFileSizeLo == 0 && dwFileSizeHi == 0) return false; // Create a file mapping object. HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (!hFileMap) return false; void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1); if (!pMem) return false; if (!GetMappedFileNameW(GetCurrentProcess(), pMem, filepathBuffer, bufferLength)) return false; UnmapViewOfFile(pMem); CloseHandle(hFileMap); return true; } #endif } // namespace namespace pwiz { namespace util { PWIZ_API_DECL bool running_on_wine() { #ifdef WIN32 return GetLibraryProcAddress("ntdll.dll", "wine_get_version") != NULL; #else return false; #endif } PWIZ_API_DECL void force_close_handles_to_filepath( const std::string& filepath, bool closeMemoryMappedSections) noexcept(true) { #ifdef WIN32 if (running_on_wine()) return; _NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetLibraryProcAddress( "ntdll.dll", "NtQuerySystemInformation"); if (NtQuerySystemInformation == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtQuerySystemInformation function.\n"); return; } _NtUnmapViewOfSection NtUnmapViewOfSection = nullptr; _NtMapViewOfSection NtMapViewOfSection = nullptr; if (closeMemoryMappedSections) { NtUnmapViewOfSection = (_NtUnmapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtUnmapViewOfSection"); if (NtUnmapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtUnmapViewOfSection function.\n"); return; } NtMapViewOfSection = (_NtMapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtMapViewOfSection"); if (NtMapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtMapViewOfSection function.\n"); return; } } NTSTATUS status = 0; DWORD dwSize = sizeof(SYSTEM_HANDLE_INFORMATION); vector pInfoBytes(dwSize); do { // keep reallocing until buffer is big enough DWORD newSize = 0; status = NtQuerySystemInformation(SystemHandleInformation, pInfoBytes.data(), dwSize, &newSize); if (status == STATUS_INFO_LENGTH_MISMATCH) { if (newSize > 0) dwSize = newSize; else dwSize *= 2; pInfoBytes.resize(dwSize); } } while (status == STATUS_INFO_LENGTH_MISMATCH); if (status != 0) { char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "NtQuerySystemInformation function: %s\n", messageBuffer); return; } auto pInfo = reinterpret_cast(pInfoBytes.data()); int fileHandleType = GetFileHandleTypeNumber(pInfo); if (fileHandleType == 0) { fprintf(stderr, "[force_close_handles_to_filepath()] Unable to determine file " "handle type number.\n"); return; } auto currentProcessId = GetCurrentProcessId(); HANDLE currentProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, currentProcessId); SYSTEM_INFO si; GetSystemInfo(&si); MEMORY_BASIC_INFORMATION mbi; PCHAR lpMem = 0; vector mappedFilename(260); string narrowFilename = bfs::path(filepath).filename().string(); vector wideFilename(narrowFilename.length()); std::use_facet>(std::locale()) .widen(narrowFilename.c_str(), narrowFilename.c_str() + narrowFilename.length(), &wideFilename[0]); wstring wideFilepathWithoutRoot = bfs::path(filepath).relative_path().wstring(); if (closeMemoryMappedSections) { bool closedMappedSection = false; while (lpMem < si.lpMaximumApplicationAddress) { VirtualQueryEx(currentProcessHandle, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION)); lpMem += mbi.RegionSize; if (mbi.Type != MEM_MAPPED || mbi.State != MEM_COMMIT || mbi.Protect == PAGE_NOACCESS || mbi.RegionSize <= 4096) continue; if (GetMappedFileNameW(currentProcessHandle, mbi.BaseAddress, &mappedFilename[0], 260) == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!UnmapViewOfFile(mbi.BaseAddress)) { fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "UnmapViewOfFile.\n"); return; } else { // fprintf(stderr, "[force_close_handles_to_filepath()] Closed // memory mapped section.\n"); closedMappedSection = true; } } if (!closedMappedSection) fprintf(stderr, "[force_close_handles_to_filepath()] Failed to find memory " "mapped section.\n"); } wchar_t szPath[260]; // iterate over every handle and close file handles that match the filepath for (DWORD i = 0; i < pInfo->Count; i++) { auto& handleInfo = pInfo->Handle[i]; if (handleInfo.OwnerPid != currentProcessId) continue; if (handleInfo.ObjectType == fileHandleType) { szPath[0] = '\0'; if (!GetFileNameFromHandle((HANDLE)handleInfo.HandleValue, szPath, 260)) { /*char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling GetFileNameFromHandle: %s\n", messageBuffer);*/ continue; } wchar_t* handlePath = szPath; if (bal::iends_with(handlePath, wideFilepathWithoutRoot.c_str())) { if (!CloseHandle((HANDLE)handleInfo.HandleValue)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing " "file handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] // Closed file handle: " + gcnew String(handlePath)); } } else if (closeMemoryMappedSections) { // close handle to memory mapped section SIZE_T viewSize = 1; PVOID viewBase = NULL; NTSTATUS status = NtMapViewOfSection( (HANDLE)handleInfo.HandleValue, currentProcessHandle, &viewBase, 0, 0, NULL, &viewSize, ViewShare, 0, PAGE_READONLY); if (!NT_SUCCESS(status)) continue; vector mappedFilename(260); auto result = GetMappedFileNameW(currentProcessHandle, viewBase, &mappedFilename[0], 260); NtUnmapViewOfSection(currentProcessHandle, viewBase); if (result == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!CloseHandle((HANDLE)handleInfo.HandleValue)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing " "section handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] Closed // section handle.\n"); } } #endif } PWIZ_API_DECL void enable_utf8_path_operations() { UTF8_BoostFilesystemPathImbuer::instance->imbue(); } #ifndef MXE PWIZ_API_DECL int expand_pathmask(const bfs::path& pathmask, vector& matchingPaths) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); using bfs::path; int matchingPathCount = 0; #ifdef WIN32 path maskParentPath = pathmask.branch_path(); WIN32_FIND_DATAW fdata; HANDLE srcFile = FindFirstFileExW( boost::nowide::widen(pathmask.string()).c_str(), FindExInfoStandard, &fdata, FindExSearchNameMatch, NULL, 0); if (srcFile == INVALID_HANDLE_VALUE) return 0; // no matches do { if (!bal::equals(fdata.cFileName, L".") && !bal::equals(fdata.cFileName, L"..") != 0) { matchingPaths.push_back(maskParentPath / fdata.cFileName); ++matchingPathCount; } } while (FindNextFileW(srcFile, &fdata)); FindClose(srcFile); #else glob_t globbuf; int rv = glob(pathmask.string().c_str(), 0, NULL, &globbuf); if (rv > 0 && rv != GLOB_NOMATCH) throw runtime_error("FindFilesByMask(): glob() error"); DIR* curDir = opendir("."); struct stat curEntryData; for (size_t i = 0; i < globbuf.gl_pathc; ++i) { stat(globbuf.gl_pathv[i], &curEntryData); if (S_ISDIR(curEntryData.st_mode) || S_ISREG(curEntryData.st_mode) || S_ISLNK(curEntryData.st_mode)) { matchingPaths.push_back(globbuf.gl_pathv[i]); ++matchingPathCount; } } closedir(curDir); globfree(&globbuf); #endif return matchingPathCount; } #endif namespace { void copy_recursive(const bfs::path& from, const bfs::path& to) { bfs::copy_directory(from, to); for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename()); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename()); else throw bfs::filesystem_error( "[copy_directory] invalid path type", entry.path(), boost::system::error_code( boost::system::errc::no_such_file_or_directory, boost::system::system_category())); } } void copy_recursive(const bfs::path& from, const bfs::path& to, boost::system::error_code& ec) { bfs::copy_directory(from, to, ec); if (ec.value() != 0) return; for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(ec); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename(), ec); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename(), ec); else if (ec.value() != 0) ec.assign(boost::system::errc::no_such_file_or_directory, boost::system::system_category()); } } } // namespace PWIZ_API_DECL void copy_directory(const bfs::path& from, const bfs::path& to, bool recursive, boost::system::error_code* ec) { if (!bfs::is_directory(from)) throw bfs::filesystem_error( "[copy_directory] source path is not a directory", from, boost::system::error_code(boost::system::errc::not_a_directory, boost::system::system_category())); if (bfs::exists(to)) { if (ec != NULL) ec->assign(boost::system::errc::file_exists, boost::system::system_category()); else throw bfs::filesystem_error( "[copy_directory] target path exists", to, boost::system::error_code(boost::system::errc::file_exists, boost::system::system_category())); } if (recursive) { if (ec != NULL) copy_recursive(from, to, *ec); else copy_recursive(from, to); } else { if (ec != NULL) bfs::copy_directory(from, to, *ec); else bfs::copy_directory(from, to); } } using boost::uintmax_t; template struct double3_policy : boost::spirit::karma::real_policies { // up to 3 digits total, but no unnecessary precision static unsigned int precision(T n) { double fracPart, intPart; fracPart = modf(n, &intPart); return fracPart < 0.005 ? 0 : n < 10 ? 2 : n < 100 ? 1 : 0; } static bool trailing_zeros(T) { return false; } template static bool dot(OutputIterator& sink, T n, unsigned int precision) { if (precision == 0) return false; return boost::spirit::karma::real_policies::dot(sink, n, precision); } }; PWIZ_API_DECL string abbreviate_byte_size(uintmax_t byteSize, ByteSizeAbbreviation abbreviationType) { uintmax_t G, M, K; string GS, MS, KS; switch (abbreviationType) { default: case ByteSizeAbbreviation_IEC: G = (M = (K = 1024) << 10) << 10; GS = " GiB"; MS = " MiB"; KS = " KiB"; break; case ByteSizeAbbreviation_JEDEC: G = (M = (K = 1024) << 10) << 10; GS = " GB"; MS = " MB"; KS = " KB"; break; case ByteSizeAbbreviation_SI: G = (M = (K = 1000) * 1000) * 1000; GS = " GB"; MS = " MB"; KS = " KB"; break; } string suffix; double byteSizeDbl; if (byteSize >= G) { byteSizeDbl = (double)byteSize / G; // byteSizeDbl = round(byteSizeDbl * 100) / 100; suffix = GS; } else if (byteSize >= M) { byteSizeDbl = (double)byteSize / M; suffix = MS; } else if (byteSize >= K) { byteSizeDbl = (double)byteSize / K; suffix = KS; } else { byteSizeDbl = (double)byteSize; suffix = " B"; return lexical_cast(byteSize) + suffix; } using namespace boost::spirit::karma; typedef real_generator> double3_type; static const double3_type double3 = double3_type(); char buffer[256]; char* p = buffer; generate(p, double3, byteSizeDbl); return std::string(&buffer[0], p) + suffix; } PWIZ_API_DECL bool isHTTP(const string& s) { // using namespace boost::xpressive; // from URI RFC via http://stackoverflow.com/a/26766402/638445 // sregex uriRegex = // sregex::compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // return regex_match(s, uriRegex); return bal::istarts_with(s, "http://") || bal::istarts_with(s, "https://"); } #ifdef WIN32 namespace { struct FileWrapper : boost::noncopyable { FileWrapper(HANDLE h) : h(h) {} ~FileWrapper() { CloseHandle(h); } bool operator==(const HANDLE& rhs) { return h == rhs; } private: HANDLE h; }; } // namespace #endif PWIZ_API_DECL string read_file_header(const string& filepath, size_t length) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); string head; if (!bfs::is_directory(filepath) && !isHTTP(filepath)) { if (!bfs::exists(filepath)) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (file does not exist)"); #ifdef WIN32 // check for locked files which can be opened by ifstream but only // produce garbage when read (at least in VC12) { std::wstring wide_filepath = boost::locale::conv::utf_to_utf(filepath); FileWrapper handle(::CreateFileW(wide_filepath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)); if (handle == INVALID_HANDLE_VALUE) throw runtime_error( "[read_file_header()] Unable to open file " + filepath + " (invalid permission or file locked)"); } #endif random_access_compressed_ifstream is(filepath.c_str()); if (!is) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (" + strerror(errno) + ")"); head.resize(length, '\0'); if (!is.read(&head[0], (std::streamsize)head.size()) && !is.eof()) throw runtime_error("[read_file_header()] Unable to read file " + filepath + " (" + strerror(errno) + ")"); } return head; } #ifndef MXE PWIZ_API_DECL std::pair get_console_bounds( const std::pair& defaultBounds) { #ifdef WIN32 CONSOLE_SCREEN_BUFFER_INFO csbi; BOOL ret; ret = GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); if (ret) return make_pair(csbi.dwSize.X, csbi.dwSize.Y); else return defaultBounds; #else winsize max; if (ioctl(0, TIOCGWINSZ, &max) == 0) return make_pair(max.ws_col, max.ws_row); else return defaultBounds; #endif } #endif } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/Filesystem-reduced-to-min-for-build-in-win10-mingw64.cpp000066400000000000000000000573131444255175000324670ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Filesystem.hpp" #ifdef WIN32 #pragma GCC warning "WIN32 is defined" #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN //#define NOMINMAX #define NOGDI #include #include //#include #include #include #include #include #endif #include #include #include #include #include #include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" //#include #include #include using std::runtime_error; using std::string; using std::vector; namespace { class UTF8_BoostFilesystemPathImbuer : public boost::singleton { public: UTF8_BoostFilesystemPathImbuer(boost::restricted) { std::locale global_loc = std::locale(); std::locale loc(global_loc, new boost::filesystem::detail::utf8_codecvt_facet); bfs::path::imbue(loc); } void imbue() const {}; }; #ifdef WIN32 #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 #define SystemHandleInformation 16 extern "C" { typedef NTSTATUS(NTAPI* _NtQuerySystemInformation)( ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength); struct SYSTEM_HANDLE { ULONG ProcessID; BYTE HandleType; BYTE Flags; USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; }; // Rusconi -- This define is performed in CMakeStuff/systemUname.cmake #ifdef WIN10MINGW64 // In file /c/msys64/mingw64/include/winternl.h // this is what is declared: // typedef struct _SYSTEM_HANDLE_INFORMATION { // ULONG Count; // SYSTEM_HANDLE_ENTRY Handle[1]; // } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; // This declaration clashes with the above. struct PWIZ_SYSTEM_HANDLE_INFORMATION { ULONG HandleCount; SYSTEM_HANDLE Handles[1]; }; #else struct SYSTEM_HANDLE_INFORMATION { ULONG HandleCount; SYSTEM_HANDLE Handles[1]; }; #endif enum SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 }; struct SYSTEM_HANDLE_TABLE_ENTRY_INFO { USHORT UniqueProcessId; USHORT CreatorBackTraceIndex; UCHAR ObjectTypeIndex; UCHAR HandleAttributes; USHORT HandleValue; PVOID Object; ULONG GrantedAccess; }; typedef NTSTATUS(NTAPI* _NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress); typedef NTSTATUS(NTAPI* _NtMapViewOfSection)( HANDLE SectionHandle, HANDLE ProcessHandle, PVOID* BaseAddress, ULONG_PTR ZeroBits, SIZE_T CommitSize, PLARGE_INTEGER SectionOffset, PSIZE_T ViewSize, SECTION_INHERIT InheritDisposition, ULONG AllocationType, ULONG Win32Protect); typedef NTSTATUS(NTAPI* _NtQueryObject)( HANDLE Handle, OBJECT_INFORMATION_CLASS ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength); FARPROC GetLibraryProcAddress(PSTR LibraryName, PSTR ProcName) { return GetProcAddress(GetModuleHandleA(LibraryName), ProcName); } } #ifdef WIN10MINGW64 int GetFileHandleTypeNumber(PWIZ_SYSTEM_HANDLE_INFORMATION* handleInfos) { #else int GetFileHandleTypeNumber(SYSTEM_HANDLE_INFORMATION* handleInfos) { #endif DWORD currentProcessId = GetCurrentProcessId(); wstring fileType = L"File"; std::vector typeInfoBytes(sizeof(PUBLIC_OBJECT_TYPE_INFORMATION)); _NtQueryObject NtQueryObject = (_NtQueryObject)GetLibraryProcAddress("ntdll.dll", "NtQueryObject"); if (NtQueryObject == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting NtQueryObject " "function.\n"); return 0; } map handlesPerType; for (size_t i = 0; i < handleInfos->HandleCount; ++i) { if (handleInfos->Handles[i].ProcessID != currentProcessId) continue; if (handleInfos->Handles[i].HandleType < 20) // this is not the File string you're looking for continue; const auto handle = reinterpret_cast(handleInfos->Handles[i].Handle); ULONG size; auto queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), typeInfoBytes.size(), &size); if (queryResult == STATUS_INFO_LENGTH_MISMATCH) { typeInfoBytes.resize(size); queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), size, nullptr); } if (NT_SUCCESS(queryResult)) { const auto typeInfo = reinterpret_cast( typeInfoBytes.data()); const auto type = std::wstring(typeInfo->TypeName.Buffer, typeInfo->TypeName.Length / sizeof(WCHAR)); if (type == fileType) // return handleInfos->Handles[i].HandleType; ++handlesPerType[handleInfos->Handles[i].HandleType]; } } if (handlesPerType.empty()) return 0; auto typeMode = std::max_element( handlesPerType.begin(), handlesPerType.end(), [](const auto& a, const auto& b) { return a.second < b.second; }); return typeMode->first; } bool GetFileNameFromHandle(HANDLE hFile, wchar_t* filepathBuffer, size_t bufferLength) { // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); // Cannot map 0-byte files if (dwFileSizeLo == 0 && dwFileSizeHi == 0) return false; // Create a file mapping object. HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (!hFileMap) return false; void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1); if (!pMem) return false; if (!GetMappedFileNameW(GetCurrentProcess(), pMem, filepathBuffer, bufferLength)) return false; UnmapViewOfFile(pMem); CloseHandle(hFileMap); return true; } #endif } // namespace namespace pwiz { namespace util { PWIZ_API_DECL bool running_on_wine() { #ifdef WIN32 return GetLibraryProcAddress("ntdll.dll", "wine_get_version") != NULL; #else return false; #endif } PWIZ_API_DECL void force_close_handles_to_filepath( const std::string& filepath, bool closeMemoryMappedSections) noexcept(true) { #ifdef WIN32 if (running_on_wine()) return; _NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetLibraryProcAddress( "ntdll.dll", "NtQuerySystemInformation"); if (NtQuerySystemInformation == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtQuerySystemInformation function.\n"); return; } _NtUnmapViewOfSection NtUnmapViewOfSection = nullptr; _NtMapViewOfSection NtMapViewOfSection = nullptr; if (closeMemoryMappedSections) { NtUnmapViewOfSection = (_NtUnmapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtUnmapViewOfSection"); if (NtUnmapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtUnmapViewOfSection function.\n"); return; } NtMapViewOfSection = (_NtMapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtMapViewOfSection"); if (NtMapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtMapViewOfSection function.\n"); return; } } NTSTATUS status = 0; #ifdef WIN10MINGW64 DWORD dwSize = sizeof(PWIZ_SYSTEM_HANDLE_INFORMATION); #else DWORD dwSize = sizeof(SYSTEM_HANDLE_INFORMATION); #endif vector pInfoBytes(dwSize); do { // keep reallocing until buffer is big enough DWORD newSize = 0; status = NtQuerySystemInformation(SystemHandleInformation, pInfoBytes.data(), dwSize, &newSize); if (status == STATUS_INFO_LENGTH_MISMATCH) { if (newSize > 0) dwSize = newSize; else dwSize *= 2; pInfoBytes.resize(dwSize); } } while (status == STATUS_INFO_LENGTH_MISMATCH); if (status != 0) { char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "NtQuerySystemInformation function: %s\n", messageBuffer); return; } #ifdef WIN10MINGW64 auto pInfo = reinterpret_cast(pInfoBytes.data()); #else auto pInfo = reinterpret_cast(pInfoBytes.data()); #endif int fileHandleType = GetFileHandleTypeNumber(pInfo); if (fileHandleType == 0) { fprintf(stderr, "[force_close_handles_to_filepath()] Unable to determine file " "handle type number.\n"); return; } auto currentProcessId = GetCurrentProcessId(); HANDLE currentProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, currentProcessId); SYSTEM_INFO si; GetSystemInfo(&si); MEMORY_BASIC_INFORMATION mbi; PCHAR lpMem = 0; vector mappedFilename(260); string narrowFilename = bfs::path(filepath).filename().string(); vector wideFilename(narrowFilename.length()); std::use_facet>(std::locale()) .widen(narrowFilename.c_str(), narrowFilename.c_str() + narrowFilename.length(), &wideFilename[0]); wstring wideFilepathWithoutRoot = bfs::path(filepath).relative_path().wstring(); if (closeMemoryMappedSections) { bool closedMappedSection = false; while (lpMem < si.lpMaximumApplicationAddress) { VirtualQueryEx(currentProcessHandle, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION)); lpMem += mbi.RegionSize; if (mbi.Type != MEM_MAPPED || mbi.State != MEM_COMMIT || mbi.Protect == PAGE_NOACCESS || mbi.RegionSize <= 4096) continue; if (GetMappedFileNameW(currentProcessHandle, mbi.BaseAddress, &mappedFilename[0], 260) == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!UnmapViewOfFile(mbi.BaseAddress)) { fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "UnmapViewOfFile.\n"); return; } else { // fprintf(stderr, "[force_close_handles_to_filepath()] Closed memory // mapped section.\n"); closedMappedSection = true; } } if (!closedMappedSection) fprintf(stderr, "[force_close_handles_to_filepath()] Failed to find memory " "mapped section.\n"); } wchar_t szPath[260]; // iterate over every handle and close file handles that match the filepath for (DWORD i = 0; i < pInfo->HandleCount; i++) { auto& handleInfo = pInfo->Handles[i]; if (handleInfo.ProcessID != currentProcessId) continue; if (handleInfo.HandleType == fileHandleType) { szPath[0] = '\0'; if (!GetFileNameFromHandle((HANDLE)handleInfo.Handle, szPath, 260)) { /*char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling GetFileNameFromHandle: %s\n", messageBuffer);*/ continue; } wchar_t* handlePath = szPath; if (bal::iends_with(handlePath, wideFilepathWithoutRoot.c_str())) { if (!CloseHandle((HANDLE)handleInfo.Handle)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing file " "handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] Closed file // handle: " + gcnew String(handlePath)); } } else if (closeMemoryMappedSections) { // close handle to memory mapped section SIZE_T viewSize = 1; PVOID viewBase = NULL; NTSTATUS status = NtMapViewOfSection( (HANDLE)handleInfo.Handle, currentProcessHandle, &viewBase, 0, 0, NULL, &viewSize, ViewShare, 0, PAGE_READONLY); if (!NT_SUCCESS(status)) continue; vector mappedFilename(260); auto result = GetMappedFileNameW(currentProcessHandle, viewBase, &mappedFilename[0], 260); NtUnmapViewOfSection(currentProcessHandle, viewBase); if (result == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!CloseHandle((HANDLE)handleInfo.Handle)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing section " "handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] Closed section // handle.\n"); } } #endif } PWIZ_API_DECL void enable_utf8_path_operations() { UTF8_BoostFilesystemPathImbuer::instance->imbue(); } // Begin added PAPPSO for MXE #ifndef MXE // End added PAPPSO for MXE PWIZ_API_DECL int expand_pathmask(const bfs::path& pathmask, vector& matchingPaths) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); using bfs::path; int matchingPathCount = 0; #ifdef WIN32 path maskParentPath = pathmask.branch_path(); WIN32_FIND_DATAW fdata; HANDLE srcFile = FindFirstFileExW( boost::nowide::widen(pathmask.string()).c_str(), FindExInfoStandard, &fdata, FindExSearchNameMatch, NULL, 0); if (srcFile == INVALID_HANDLE_VALUE) return 0; // no matches do { if (!bal::equals(fdata.cFileName, L".") && !bal::equals(fdata.cFileName, L"..") != 0) { matchingPaths.push_back(maskParentPath / fdata.cFileName); ++matchingPathCount; } } while (FindNextFileW(srcFile, &fdata)); FindClose(srcFile); #else glob_t globbuf; int rv = glob(pathmask.string().c_str(), 0, NULL, &globbuf); if (rv > 0 && rv != GLOB_NOMATCH) throw runtime_error("FindFilesByMask(): glob() error"); DIR* curDir = opendir("."); struct stat curEntryData; for (size_t i = 0; i < globbuf.gl_pathc; ++i) { stat(globbuf.gl_pathv[i], &curEntryData); if (S_ISDIR(curEntryData.st_mode) || S_ISREG(curEntryData.st_mode) || S_ISLNK(curEntryData.st_mode)) { matchingPaths.push_back(globbuf.gl_pathv[i]); ++matchingPathCount; } } closedir(curDir); globfree(&globbuf); #endif return matchingPathCount; } // Begin added PAPPSO for MXE #endif // End added PAPPSO for MXE namespace { void copy_recursive(const bfs::path& from, const bfs::path& to) { bfs::copy_directory(from, to); for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename()); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename()); else throw bfs::filesystem_error( "[copy_directory] invalid path type", entry.path(), boost::system::error_code( boost::system::errc::no_such_file_or_directory, boost::system::system_category())); } } void copy_recursive(const bfs::path& from, const bfs::path& to, boost::system::error_code& ec) { bfs::copy_directory(from, to, ec); if (ec.value() != 0) return; for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(ec); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename(), ec); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename(), ec); else if (ec.value() != 0) ec.assign(boost::system::errc::no_such_file_or_directory, boost::system::system_category()); } } } // namespace PWIZ_API_DECL void copy_directory(const bfs::path& from, const bfs::path& to, bool recursive, boost::system::error_code* ec) { if (!bfs::is_directory(from)) throw bfs::filesystem_error( "[copy_directory] source path is not a directory", from, boost::system::error_code(boost::system::errc::not_a_directory, boost::system::system_category())); if (bfs::exists(to)) { if (ec != NULL) ec->assign(boost::system::errc::file_exists, boost::system::system_category()); else throw bfs::filesystem_error( "[copy_directory] target path exists", to, boost::system::error_code(boost::system::errc::file_exists, boost::system::system_category())); } if (recursive) { if (ec != NULL) copy_recursive(from, to, *ec); else copy_recursive(from, to); } else { if (ec != NULL) bfs::copy_directory(from, to, *ec); else bfs::copy_directory(from, to); } } using boost::uintmax_t; template struct double3_policy : boost::spirit::karma::real_policies { // up to 3 digits total, but no unnecessary precision static unsigned int precision(T n) { double fracPart, intPart; fracPart = modf(n, &intPart); return fracPart < 0.005 ? 0 : n < 10 ? 2 : n < 100 ? 1 : 0; } static bool trailing_zeros(T) { return false; } template static bool dot(OutputIterator& sink, T n, unsigned int precision) { if (precision == 0) return false; return boost::spirit::karma::real_policies::dot(sink, n, precision); } }; PWIZ_API_DECL string abbreviate_byte_size(uintmax_t byteSize, ByteSizeAbbreviation abbreviationType) { uintmax_t G, M, K; string GS, MS, KS; switch (abbreviationType) { default: case ByteSizeAbbreviation_IEC: G = (M = (K = 1024) << 10) << 10; GS = " GiB"; MS = " MiB"; KS = " KiB"; break; case ByteSizeAbbreviation_JEDEC: G = (M = (K = 1024) << 10) << 10; GS = " GB"; MS = " MB"; KS = " KB"; break; case ByteSizeAbbreviation_SI: G = (M = (K = 1000) * 1000) * 1000; GS = " GB"; MS = " MB"; KS = " KB"; break; } string suffix; double byteSizeDbl; if (byteSize >= G) { byteSizeDbl = (double)byteSize / G; // byteSizeDbl = round(byteSizeDbl * 100) / 100; suffix = GS; } else if (byteSize >= M) { byteSizeDbl = (double)byteSize / M; suffix = MS; } else if (byteSize >= K) { byteSizeDbl = (double)byteSize / K; suffix = KS; } else { byteSizeDbl = (double)byteSize; suffix = " B"; return lexical_cast(byteSize) + suffix; } using namespace boost::spirit::karma; typedef real_generator> double3_type; static const double3_type double3 = double3_type(); char buffer[256]; char* p = buffer; generate(p, double3, byteSizeDbl); return std::string(&buffer[0], p) + suffix; } PWIZ_API_DECL bool isHTTP(const string& s) { // using namespace boost::xpressive; // from URI RFC via http://stackoverflow.com/a/26766402/638445 // sregex uriRegex = // sregex::compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // return regex_match(s, uriRegex); return bal::istarts_with(s, "http:") || bal::istarts_with(s, "https:"); } #ifdef WIN32 namespace { struct FileWrapper : boost::noncopyable { FileWrapper(HANDLE h) : h(h) {} ~FileWrapper() { CloseHandle(h); } bool operator==(const HANDLE& rhs) { return h == rhs; } private: HANDLE h; }; } // namespace #endif PWIZ_API_DECL string read_file_header(const string& filepath, size_t length) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); string head; if (bfs::is_directory(filepath) || isHTTP(filepath)) return head; if (!bfs::exists(filepath)) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (file does not exist)"); const int RETRY_COUNT = 10; for (int retry = 1; retry <= RETRY_COUNT; ++retry) { try { #ifdef WIN32 // check for locked files which can be opened by ifstream but only // produce garbage when read (at least in VC12) { std::wstring wide_filepath = boost::locale::conv::utf_to_utf(filepath); FileWrapper handle(::CreateFileW(wide_filepath.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); if (handle == INVALID_HANDLE_VALUE) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (invalid permission or file locked)"); } #endif random_access_compressed_ifstream is(filepath.c_str()); if (!is) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (" + strerror(errno) + ")"); head.resize(length, '\0'); if (!is.read(&head[0], (std::streamsize)head.size()) && !is.eof()) throw runtime_error("[read_file_header()] Unable to read file " + filepath + " (" + strerror(errno) + ")"); break; } catch (runtime_error& e) { if (retry == RETRY_COUNT) throw e; std::this_thread::sleep_for(std::chrono::milliseconds(200)); } } return head; } PWIZ_API_DECL void check_path_length(const string& path) { #ifdef WIN32 if (isHTTP(path)) return; std::wstring wide_path = boost::locale::conv::utf_to_utf(bfs::absolute(path).string()); if (wide_path.length() > 250) throw std::invalid_argument( "path is too long (must be 250 characters or less): " + bfs::absolute(path).string()); #endif } PWIZ_API_DECL TemporaryFile::TemporaryFile(const string& extension) { filepath = bfs::temp_directory_path() / bfs::unique_path("%%%%%%%%%%%%%%%%" + extension); } PWIZ_API_DECL TemporaryFile::~TemporaryFile() { if (bfs::exists(filepath)) bfs::remove(filepath); } // Begin added PAPPSO for MXE #ifndef MXE // End added PAPPSO for MXE PWIZ_API_DECL std::pair get_console_bounds( const std::pair& defaultBounds) { #ifdef WIN32 CONSOLE_SCREEN_BUFFER_INFO csbi; BOOL ret; ret = GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); if (ret) return make_pair(csbi.dwSize.X, csbi.dwSize.Y); else return defaultBounds; #else winsize max; if (ioctl(0, TIOCGWINSZ, &max) == 0) return make_pair(max.ws_col, max.ws_row); else return defaultBounds; #endif } // Begin added PAPPSO for MXE #endif // End added PAPPSO for MXE } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/Filesystem.cpp000066400000000000000000000620561444255175000231430ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Filesystem.hpp" // Begin added PAPPSO for MXE #ifdef MXE #pragma GCC warning "MXE is defined" #undef WIN32 #endif // End added PAPPSO for MXE #ifdef WIN32 #pragma GCC warning "WIN32 is defined" #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN //#define NOMINMAX #define NOGDI #include #include //#include #include #include #include #include #else // ifdef WIN32 #pragma GCC warning "WIN32 is NOT defined" #include #include // Begin added PAPPSO for MXE #ifndef MXE // End added PAPPSO for MXE #include #include // Begin added PAPPSO for MXE #endif // End added PAPPSO for MXE #include #include #include #ifndef MAX_PATH #define MAX_PATH 255 #endif #endif // #else // ifdef WIN32 #include #include #include #include #include #include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" //#include #include #include using std::runtime_error; using std::string; using std::vector; namespace { class UTF8_BoostFilesystemPathImbuer : public boost::singleton { public: UTF8_BoostFilesystemPathImbuer(boost::restricted) { std::locale global_loc = std::locale(); std::locale loc(global_loc, new boost::filesystem::detail::utf8_codecvt_facet); bfs::path::imbue(loc); } void imbue() const {}; }; #ifdef WIN32 #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 #define SystemHandleInformation 16 extern "C" { typedef NTSTATUS(NTAPI* _NtQuerySystemInformation)( ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength); struct SYSTEM_HANDLE { ULONG ProcessID; BYTE HandleType; BYTE Flags; USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; }; // Rusconi -- This define is performed in CMakeStuff/systemUname.cmake #ifdef WIN10MINGW64 // In file /c/msys64/mingw64/include/winternl.h // this is what is declared: // typedef struct _SYSTEM_HANDLE_INFORMATION { // ULONG Count; // SYSTEM_HANDLE_ENTRY Handle[1]; // } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; // This declaration clashes with the above. struct PWIZ_SYSTEM_HANDLE_INFORMATION { ULONG HandleCount; SYSTEM_HANDLE Handles[1]; }; #else struct SYSTEM_HANDLE_INFORMATION { ULONG HandleCount; SYSTEM_HANDLE Handles[1]; }; #endif enum SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 }; struct SYSTEM_HANDLE_TABLE_ENTRY_INFO { USHORT UniqueProcessId; USHORT CreatorBackTraceIndex; UCHAR ObjectTypeIndex; UCHAR HandleAttributes; USHORT HandleValue; PVOID Object; ULONG GrantedAccess; }; typedef NTSTATUS(NTAPI* _NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress); typedef NTSTATUS(NTAPI* _NtMapViewOfSection)( HANDLE SectionHandle, HANDLE ProcessHandle, PVOID* BaseAddress, ULONG_PTR ZeroBits, SIZE_T CommitSize, PLARGE_INTEGER SectionOffset, PSIZE_T ViewSize, SECTION_INHERIT InheritDisposition, ULONG AllocationType, ULONG Win32Protect); typedef NTSTATUS(NTAPI* _NtQueryObject)( HANDLE Handle, OBJECT_INFORMATION_CLASS ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength); PVOID GetLibraryProcAddress(PSTR LibraryName, PSTR ProcName) { return (void *) GetProcAddress(GetModuleHandleA(LibraryName), ProcName); } } #ifdef WIN10MINGW64 int GetFileHandleTypeNumber(PWIZ_SYSTEM_HANDLE_INFORMATION* handleInfos) { #else int GetFileHandleTypeNumber(SYSTEM_HANDLE_INFORMATION* handleInfos) { #endif DWORD currentProcessId = GetCurrentProcessId(); wstring fileType = L"File"; std::vector typeInfoBytes(sizeof(PUBLIC_OBJECT_TYPE_INFORMATION)); _NtQueryObject NtQueryObject = (_NtQueryObject)GetLibraryProcAddress("ntdll.dll", "NtQueryObject"); if (NtQueryObject == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting NtQueryObject " "function.\n"); return 0; } map handlesPerType; for (size_t i = 0; i < handleInfos->HandleCount; ++i) { if (handleInfos->Handles[i].ProcessID != currentProcessId) continue; if (handleInfos->Handles[i].HandleType < 20) // this is not the File string you're looking for continue; const auto handle = reinterpret_cast(handleInfos->Handles[i].Handle); ULONG size; auto queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), typeInfoBytes.size(), &size); if (queryResult == STATUS_INFO_LENGTH_MISMATCH) { typeInfoBytes.resize(size); queryResult = NtQueryObject(handle, ObjectTypeInformation, typeInfoBytes.data(), size, nullptr); } if (NT_SUCCESS(queryResult)) { const auto typeInfo = reinterpret_cast( typeInfoBytes.data()); const auto type = std::wstring(typeInfo->TypeName.Buffer, typeInfo->TypeName.Length / sizeof(WCHAR)); if (type == fileType) // return handleInfos->Handles[i].HandleType; ++handlesPerType[handleInfos->Handles[i].HandleType]; } } if (handlesPerType.empty()) return 0; auto typeMode = std::max_element( handlesPerType.begin(), handlesPerType.end(), [](const auto& a, const auto& b) { return a.second < b.second; }); return typeMode->first; } bool GetFileNameFromHandle(HANDLE hFile, wchar_t* filepathBuffer, size_t bufferLength) { // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); // Cannot map 0-byte files if (dwFileSizeLo == 0 && dwFileSizeHi == 0) return false; // Create a file mapping object. HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (!hFileMap) return false; void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1); if (!pMem) return false; if (!GetMappedFileNameW(GetCurrentProcess(), pMem, filepathBuffer, bufferLength)) return false; UnmapViewOfFile(pMem); CloseHandle(hFileMap); return true; } #endif } // namespace namespace pwiz { namespace util { PWIZ_API_DECL bool running_on_wine() { #ifdef WIN32 return GetLibraryProcAddress("ntdll.dll", "wine_get_version") != NULL; #else return false; #endif } PWIZ_API_DECL void force_close_handles_to_filepath( const std::string& filepath, bool closeMemoryMappedSections) noexcept(true) { #ifdef WIN32 if (running_on_wine()) return; _NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetLibraryProcAddress( "ntdll.dll", "NtQuerySystemInformation"); if (NtQuerySystemInformation == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtQuerySystemInformation function.\n"); return; } _NtUnmapViewOfSection NtUnmapViewOfSection = nullptr; _NtMapViewOfSection NtMapViewOfSection = nullptr; if (closeMemoryMappedSections) { NtUnmapViewOfSection = (_NtUnmapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtUnmapViewOfSection"); if (NtUnmapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtUnmapViewOfSection function.\n"); return; } NtMapViewOfSection = (_NtMapViewOfSection)GetLibraryProcAddress( "ntdll.dll", "NtMapViewOfSection"); if (NtMapViewOfSection == nullptr) { fprintf(stderr, "[force_close_handles_to_filepath()] Error getting " "NtMapViewOfSection function.\n"); return; } } NTSTATUS status = 0; #ifdef WIN10MINGW64 DWORD dwSize = sizeof(PWIZ_SYSTEM_HANDLE_INFORMATION); #else DWORD dwSize = sizeof(SYSTEM_HANDLE_INFORMATION); #endif vector pInfoBytes(dwSize); do { // keep reallocing until buffer is big enough DWORD newSize = 0; status = NtQuerySystemInformation(SystemHandleInformation, pInfoBytes.data(), dwSize, &newSize); if (status == STATUS_INFO_LENGTH_MISMATCH) { if (newSize > 0) dwSize = newSize; else dwSize *= 2; pInfoBytes.resize(dwSize); } } while (status == STATUS_INFO_LENGTH_MISMATCH); if (status != 0) { char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "NtQuerySystemInformation function: %s\n", messageBuffer); return; } #ifdef WIN10MINGW64 auto pInfo = reinterpret_cast(pInfoBytes.data()); #else auto pInfo = reinterpret_cast(pInfoBytes.data()); #endif int fileHandleType = GetFileHandleTypeNumber(pInfo); if (fileHandleType == 0) { fprintf(stderr, "[force_close_handles_to_filepath()] Unable to determine file " "handle type number.\n"); return; } auto currentProcessId = GetCurrentProcessId(); HANDLE currentProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, currentProcessId); SYSTEM_INFO si; GetSystemInfo(&si); MEMORY_BASIC_INFORMATION mbi; PCHAR lpMem = 0; vector mappedFilename(260); string narrowFilename = bfs::path(filepath).filename().string(); vector wideFilename(narrowFilename.length()); std::use_facet>(std::locale()) .widen(narrowFilename.c_str(), narrowFilename.c_str() + narrowFilename.length(), &wideFilename[0]); wstring wideFilepathWithoutRoot = bfs::path(filepath).relative_path().wstring(); if (closeMemoryMappedSections) { bool closedMappedSection = false; while (lpMem < si.lpMaximumApplicationAddress) { VirtualQueryEx(currentProcessHandle, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION)); lpMem += mbi.RegionSize; if (mbi.Type != MEM_MAPPED || mbi.State != MEM_COMMIT || mbi.Protect == PAGE_NOACCESS || mbi.RegionSize <= 4096) continue; if (GetMappedFileNameW(currentProcessHandle, mbi.BaseAddress, &mappedFilename[0], 260) == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!UnmapViewOfFile(mbi.BaseAddress)) { fprintf(stderr, "[force_close_handles_to_filepath()] Error calling " "UnmapViewOfFile.\n"); return; } else { // fprintf(stderr, "[force_close_handles_to_filepath()] Closed memory // mapped section.\n"); closedMappedSection = true; } } if (!closedMappedSection) fprintf(stderr, "[force_close_handles_to_filepath()] Failed to find memory " "mapped section.\n"); } wchar_t szPath[260]; // iterate over every handle and close file handles that match the filepath for (DWORD i = 0; i < pInfo->HandleCount; i++) { auto& handleInfo = pInfo->Handles[i]; if (handleInfo.ProcessID != currentProcessId) continue; if (handleInfo.HandleType == fileHandleType) { szPath[0] = '\0'; if (!GetFileNameFromHandle((HANDLE)handleInfo.Handle, szPath, 260)) { /*char messageBuffer[256]; memset(messageBuffer, 0, 256); FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 255, NULL); fprintf(stderr, "[force_close_handles_to_filepath()] Error calling GetFileNameFromHandle: %s\n", messageBuffer);*/ continue; } wchar_t* handlePath = szPath; if (bal::iends_with(handlePath, wideFilepathWithoutRoot.c_str())) { if (!CloseHandle((HANDLE)handleInfo.Handle)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing file " "handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] Closed file // handle: " + gcnew String(handlePath)); } } else if (closeMemoryMappedSections) { // close handle to memory mapped section SIZE_T viewSize = 1; PVOID viewBase = NULL; NTSTATUS status = NtMapViewOfSection( (HANDLE)handleInfo.Handle, currentProcessHandle, &viewBase, 0, 0, NULL, &viewSize, ViewShare, 0, PAGE_READONLY); if (!NT_SUCCESS(status)) continue; vector mappedFilename(260); auto result = GetMappedFileNameW(currentProcessHandle, viewBase, &mappedFilename[0], 260); NtUnmapViewOfSection(currentProcessHandle, viewBase); if (result == 0) continue; if (!bal::iends_with(wstring(mappedFilename.data()), wideFilename)) continue; if (!CloseHandle((HANDLE)handleInfo.Handle)) fprintf(stderr, "[force_close_handles_to_filepath()] Error closing section " "handle.\n"); // else // fprintf(stderr, "[force_close_handles_to_filepath()] Closed section // handle.\n"); } } #endif } PWIZ_API_DECL void enable_utf8_path_operations() { UTF8_BoostFilesystemPathImbuer::instance->imbue(); } // Begin added PAPPSO for MXE #ifndef MXE // End added PAPPSO for MXE PWIZ_API_DECL int expand_pathmask(const bfs::path& pathmask, vector& matchingPaths) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); using bfs::path; int matchingPathCount = 0; #ifdef WIN32 path maskParentPath = pathmask.branch_path(); WIN32_FIND_DATAW fdata; HANDLE srcFile = FindFirstFileExW( boost::nowide::widen(pathmask.string()).c_str(), FindExInfoStandard, &fdata, FindExSearchNameMatch, NULL, 0); if (srcFile == INVALID_HANDLE_VALUE) return 0; // no matches do { if (!bal::equals(fdata.cFileName, L".") && !bal::equals(fdata.cFileName, L"..") != 0) { matchingPaths.push_back(maskParentPath / fdata.cFileName); ++matchingPathCount; } } while (FindNextFileW(srcFile, &fdata)); FindClose(srcFile); #else glob_t globbuf; int rv = glob(pathmask.string().c_str(), 0, NULL, &globbuf); if (rv > 0 && rv != GLOB_NOMATCH) throw runtime_error("FindFilesByMask(): glob() error"); DIR* curDir = opendir("."); struct stat curEntryData; for (size_t i = 0; i < globbuf.gl_pathc; ++i) { stat(globbuf.gl_pathv[i], &curEntryData); if (S_ISDIR(curEntryData.st_mode) || S_ISREG(curEntryData.st_mode) || S_ISLNK(curEntryData.st_mode)) { matchingPaths.push_back(globbuf.gl_pathv[i]); ++matchingPathCount; } } closedir(curDir); globfree(&globbuf); #endif return matchingPathCount; } // Begin added PAPPSO for MXE #endif // End added PAPPSO for MXE namespace { void copy_recursive(const bfs::path& from, const bfs::path& to) { bfs::copy_directory(from, to); for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename()); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename()); else throw bfs::filesystem_error( "[copy_directory] invalid path type", entry.path(), boost::system::error_code( boost::system::errc::no_such_file_or_directory, boost::system::system_category())); } } void copy_recursive(const bfs::path& from, const bfs::path& to, boost::system::error_code& ec) { bfs::copy_directory(from, to, ec); if (ec.value() != 0) return; for (bfs::directory_entry& entry : bfs::directory_iterator(from)) { bfs::file_status status = entry.status(ec); if (status.type() == bfs::directory_file) copy_recursive(entry.path(), to / entry.path().filename(), ec); else if (status.type() == bfs::regular_file) bfs::copy_file(entry.path(), to / entry.path().filename(), ec); else if (ec.value() != 0) ec.assign(boost::system::errc::no_such_file_or_directory, boost::system::system_category()); } } } // namespace PWIZ_API_DECL void copy_directory(const bfs::path& from, const bfs::path& to, bool recursive, boost::system::error_code* ec) { if (!bfs::is_directory(from)) throw bfs::filesystem_error( "[copy_directory] source path is not a directory", from, boost::system::error_code(boost::system::errc::not_a_directory, boost::system::system_category())); if (bfs::exists(to)) { if (ec != NULL) ec->assign(boost::system::errc::file_exists, boost::system::system_category()); else throw bfs::filesystem_error( "[copy_directory] target path exists", to, boost::system::error_code(boost::system::errc::file_exists, boost::system::system_category())); } if (recursive) { if (ec != NULL) copy_recursive(from, to, *ec); else copy_recursive(from, to); } else { if (ec != NULL) bfs::copy_directory(from, to, *ec); else bfs::copy_directory(from, to); } } using boost::uintmax_t; template struct double3_policy : boost::spirit::karma::real_policies { // up to 3 digits total, but no unnecessary precision static unsigned int precision(T n) { double fracPart, intPart; fracPart = modf(n, &intPart); return fracPart < 0.005 ? 0 : n < 10 ? 2 : n < 100 ? 1 : 0; } static bool trailing_zeros(T) { return false; } template static bool dot(OutputIterator& sink, T n, unsigned int precision) { if (precision == 0) return false; return boost::spirit::karma::real_policies::dot(sink, n, precision); } }; PWIZ_API_DECL string abbreviate_byte_size(uintmax_t byteSize, ByteSizeAbbreviation abbreviationType) { uintmax_t G, M, K; string GS, MS, KS; switch (abbreviationType) { default: case ByteSizeAbbreviation_IEC: G = (M = (K = 1024) << 10) << 10; GS = " GiB"; MS = " MiB"; KS = " KiB"; break; case ByteSizeAbbreviation_JEDEC: G = (M = (K = 1024) << 10) << 10; GS = " GB"; MS = " MB"; KS = " KB"; break; case ByteSizeAbbreviation_SI: G = (M = (K = 1000) * 1000) * 1000; GS = " GB"; MS = " MB"; KS = " KB"; break; } string suffix; double byteSizeDbl; if (byteSize >= G) { byteSizeDbl = (double)byteSize / G; // byteSizeDbl = round(byteSizeDbl * 100) / 100; suffix = GS; } else if (byteSize >= M) { byteSizeDbl = (double)byteSize / M; suffix = MS; } else if (byteSize >= K) { byteSizeDbl = (double)byteSize / K; suffix = KS; } else { byteSizeDbl = (double)byteSize; suffix = " B"; return lexical_cast(byteSize) + suffix; } using namespace boost::spirit::karma; typedef real_generator> double3_type; static const double3_type double3 = double3_type(); char buffer[256]; char* p = buffer; generate(p, double3, byteSizeDbl); return std::string(&buffer[0], p) + suffix; } PWIZ_API_DECL bool isHTTP(const string& s) { // using namespace boost::xpressive; // from URI RFC via http://stackoverflow.com/a/26766402/638445 // sregex uriRegex = // sregex::compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // return regex_match(s, uriRegex); return bal::istarts_with(s, "http:") || bal::istarts_with(s, "https:"); } #ifdef WIN32 namespace { struct FileWrapper : boost::noncopyable { FileWrapper(HANDLE h) : h(h) {} ~FileWrapper() { CloseHandle(h); } bool operator==(const HANDLE& rhs) { return h == rhs; } private: HANDLE h; }; } // namespace #endif PWIZ_API_DECL string read_file_header(const string& filepath, size_t length) { UTF8_BoostFilesystemPathImbuer::instance->imbue(); string head; if (bfs::is_directory(filepath) || isHTTP(filepath)) return head; if (!bfs::exists(filepath)) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (file does not exist)"); const int RETRY_COUNT = 10; for (int retry = 1; retry <= RETRY_COUNT; ++retry) { try { #ifdef WIN32 // check for locked files which can be opened by ifstream but only // produce garbage when read (at least in VC12) { std::wstring wide_filepath = boost::locale::conv::utf_to_utf(filepath); FileWrapper handle(::CreateFileW(wide_filepath.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); if (handle == INVALID_HANDLE_VALUE) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (invalid permission or file locked)"); } #endif random_access_compressed_ifstream is(filepath.c_str()); if (!is) throw runtime_error("[read_file_header()] Unable to open file " + filepath + " (" + strerror(errno) + ")"); head.resize(length, '\0'); if (!is.read(&head[0], (std::streamsize)head.size()) && !is.eof()) throw runtime_error("[read_file_header()] Unable to read file " + filepath + " (" + strerror(errno) + ")"); break; } catch (runtime_error& e) { if (retry == RETRY_COUNT) throw e; std::this_thread::sleep_for(std::chrono::milliseconds(200)); } } return head; } PWIZ_API_DECL void check_path_length(const string& path) { #ifdef WIN32 if (isHTTP(path)) return; std::wstring wide_path = boost::locale::conv::utf_to_utf(bfs::absolute(path).string()); if (wide_path.length() > 250) throw std::invalid_argument( "path is too long (must be 250 characters or less): " + bfs::absolute(path).string()); #endif } PWIZ_API_DECL TemporaryFile::TemporaryFile(const string& extension) { filepath = bfs::temp_directory_path() / bfs::unique_path("%%%%%%%%%%%%%%%%" + extension); } PWIZ_API_DECL TemporaryFile::~TemporaryFile() { if (bfs::exists(filepath)) bfs::remove(filepath); } // Begin added PAPPSO for MXE #ifndef MXE // End added PAPPSO for MXE PWIZ_API_DECL std::pair get_console_bounds( const std::pair& defaultBounds) { #ifdef WIN32 CONSOLE_SCREEN_BUFFER_INFO csbi; BOOL ret; ret = GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); if (ret) return make_pair(csbi.dwSize.X, csbi.dwSize.Y); else return defaultBounds; #else winsize max; if (ioctl(0, TIOCGWINSZ, &max) == 0) return make_pair(max.ws_col, max.ws_row); else return defaultBounds; #endif } // Begin added PAPPSO for MXE #endif // End added PAPPSO for MXE } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/Filesystem.hpp000066400000000000000000000130051444255175000231360ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _FILESYSTEM_HPP_ #define _FILESYSTEM_HPP_ #ifdef __cplusplus_cli // "boost/filesystem/path.hpp" uses "generic" as an identifier which is a reserved word in C++/CLI #define generic __identifier(generic) #endif #include "Export.hpp" #include "String.hpp" #include "Container.hpp" #include #include #include #include #include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" namespace bfs = boost::filesystem; #ifndef BOOST_FILESYSTEM_VERSION # if (BOOST_VERSION/100) >= 1046 # define BOOST_FILESYSTEM_VERSION 3 # else # define BOOST_FILESYSTEM_VERSION 2 # endif #endif // BOOST_FILESYSTEM_VERSION // boost filesystem v2 support is going away // and v3 breaks the API in surprising ways // see http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/deprecated.html #if BOOST_FILESYSTEM_VERSION == 2 // in BFS2 p.filename() or p.leaf() or p.extension() returns a string #define BFS_STRING(p) p #define BFS_GENERIC_STRING(p) p // in BFS2 complete() is in namespace #define BFS_COMPLETE bfs::complete #else // in BFS3 p.filename() or p.leaf() or p.extension() returns a bfs::path #define BFS_STRING(p) (p).string() #define BFS_GENERIC_STRING(p) (p).generic_string() // in BFS3 complete() is not in namespace #define BFS_COMPLETE bfs::system_complete #endif namespace pwiz { namespace util { /// returns true iff process is Windows executable running under Wine PWIZ_API_DECL bool running_on_wine(); /// on Windows, closes all file handles and memory mapped sections relating to the given filepath PWIZ_API_DECL void force_close_handles_to_filepath(const std::string& filepath, bool closeMemoryMappedSections = false) noexcept(true); /// adds utf8_codecvt_facet to boost::filesystem::path's default behavior so it works with UTF-8 std::strings; /// uses a singleton so the imbuement is only done once PWIZ_API_DECL void enable_utf8_path_operations(); /// expands (aka globs) a pathmask to zero or more matching paths and returns the number of matching paths /// - matching paths can be either files or directories /// - matching paths will be absolute if input pathmask was absolute /// - matching paths will be relative if input pathmask was relative PWIZ_API_DECL int expand_pathmask(const bfs::path& pathmask, vector& matchingPaths); /// if recursive is true, then copies "from" and all its contents to "to"; /// if "to" already exists or the copy fails for another reason, the error is reported in one of two ways: /// - if "ec" is not NULL, it will set it to the error code /// - if "ec" is NULL, a boost::filesystem_error is thrown PWIZ_API_DECL void copy_directory(const bfs::path& from, const bfs::path& to, bool recursive = true, boost::system::error_code* ec = 0); PWIZ_API_DECL enum ByteSizeAbbreviation { /// sizes are treated as multiples of 2; /// abbreviations are: GiB (Gibibyte), MiB (Mebibyte), KiB (Kibibyte), B (byte) ByteSizeAbbreviation_IEC, /// sizes are treated as multiples of 2; /// abbreviations are: GB (Gigabyte), MB (Megabyte), KB (Kilobyte), B (byte) ByteSizeAbbreviation_JEDEC, /// sizes are treated as multiples of 10; /// abbreviations are: GB (Gigabyte), MB (Megabyte), KB (Kilobyte), B (byte) ByteSizeAbbreviation_SI }; /// abbreviates a byte size (file or RAM) as a readable string, using the specified notation PWIZ_API_DECL std::string abbreviate_byte_size(boost::uintmax_t byteSize, ByteSizeAbbreviation abbreviationType = ByteSizeAbbreviation_SI); PWIZ_API_DECL bool isHTTP(const std::string& filepath); PWIZ_API_DECL std::string read_file_header(const std::string& filepath, size_t length = 512); /// on non-Windows platforms, this does nothing; on Windows it throws an invalid_argument exception if the given path is longer than 250 characters PWIZ_API_DECL void check_path_length(const string & path); /// creates a unique named file in the user temp directory PWIZ_API_DECL class TemporaryFile { public: TemporaryFile(const string& extension/* = ".tmp"*/); ~TemporaryFile(); const bfs::path& path() const { return filepath; } private: bfs::path filepath; }; /// attempts to get the platform-specific console bounds (number of columns and lines), returns defaultBounds if an error occurs or the platform is not supported PWIZ_API_DECL std::pair get_console_bounds(const std::pair& defaultBounds = std::pair(80, 24)); } // util } // pwiz #endif // _FILESYSTEM_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Image.hpp000066400000000000000000000070331444255175000220400ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2005 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _IMAGE_HPP_ #define _IMAGE_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include namespace pwiz { namespace util { /// wrapper class for using 'gd' graphics library class PWIZ_API_DECL Image { public: /// struct for holding rgb values (in [0,255]) struct PWIZ_API_DECL Color { int red; int green; int blue; Color(int r=0, int g=0, int b=0) : red(r), green(g), blue(b) {} }; static Color white() {return Color(255, 255, 255);} static Color black() {return Color(0, 0, 0);} /// struct for holding pixel coordinates struct PWIZ_API_DECL Point { int x; int y; Point(int _x=0, int _y=0) : x(_x), y(_y) {} }; enum PWIZ_API_DECL Align {Left=0x01, CenterX=0x02, Right=0x04, Top=0x08, CenterY=0x10, Bottom=0x20}; enum PWIZ_API_DECL Size {Tiny, Small, MediumBold, Large, Giant}; /// create an instance /// optional output_width and output_height allows easy scaling to a desired output /// image size without complicating the drawing code (default is to use logical width and height) static std::auto_ptr create(int logical_width, int logical_height, int output_width=-1, int output_height=-1); // -1 means use logical /// draw pixel virtual void pixel(const Point& point, const Color& color) = 0; /// draw string virtual void string(const std::string& text, const Point& point, const Color& color, Size size=Large, int align=Left|Top) = 0; /// draw string virtual void stringUp(const std::string& text, const Point& point, const Color& color, Size size=Large, int align=Left|Top) = 0; /// draw rectangle virtual void rectangle(const Point& point1, const Point& point2, const Color& color, bool filled=true) = 0; /// draw circle virtual void circle(const Point& center, int radius, const Color& color, bool filled=true) = 0; /// draw line virtual void line(const Point& point1, const Point& point2, const Color& color) = 0; /// set clipping rectangle virtual void clip(const Point& point1, const Point& point2) = 0; /// write png file virtual bool writePng(const char* filename) const = 0; virtual ~Image(){} }; inline Image::Point operator+(const Image::Point& a, const Image::Point& b) { return Image::Point(a.x+b.x, a.y+b.y); } inline Image::Point operator-(const Image::Point& a, const Image::Point& b) { return Image::Point(a.x-b.x, a.y-b.y); } } // namespace util } // namespace pwiz #endif // _IMAGE_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/IntegerSet.cpp000066400000000000000000000176471444255175000230760ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "IntegerSet.hpp" #include "pwiz/utility/misc/Std.hpp" #include namespace pwiz { namespace util { // IntegerSet::Interval implementation PWIZ_API_DECL IntegerSet::Interval::Interval(int a) : begin(a), end(a) {} PWIZ_API_DECL IntegerSet::Interval::Interval(int a, int b) : begin(a), end(b) { if (a>b) throw runtime_error("[IntegerSet::Interval] Instantiation with a>b"); } PWIZ_API_DECL ostream& operator<<(ostream& os, const IntegerSet::Interval& interval) { os << "[" << interval.begin << "," << interval.end << "]"; return os; } PWIZ_API_DECL istream& operator>>(istream& is, IntegerSet::Interval& interval) { string buffer; is >> buffer; // assumption: no whitespace within the encoded interval if (!is) return is; // first try to parse format [a,b] istringstream iss(buffer); char open = 0, comma = 0, close = 0; int a = 0, b = 0; iss.imbue(locale("C")); // hack for msvc (Dinkumware): by default barfs on comma when reading an int iss >> open >> a >> comma >> b >> close; if (open=='[' && comma==',' && close==']') { interval.begin = a; interval.end = b; return is; } // now try format a[-][b] char dash = 0; a = 0; b = 0; istringstream iss2(buffer); iss2 >> a; if (iss2) interval.begin = interval.end = a; iss2 >> dash; if (dash=='-') interval.end = numeric_limits::max(); iss2 >> b; if (iss2) interval.end = b; return is; } // IntegerSet implementation PWIZ_API_DECL IntegerSet::IntegerSet() {} PWIZ_API_DECL IntegerSet::IntegerSet(int a) {insert(a);} PWIZ_API_DECL IntegerSet::IntegerSet(int a, int b) {insert(a,b);} namespace { inline bool beginBefore(const IntegerSet::Interval& i, const IntegerSet::Interval& j) { return (i.begin < j.begin); } inline bool endBefore(const IntegerSet::Interval& i, const IntegerSet::Interval& j) { return (i.end < j.end); } } // namespace PWIZ_API_DECL void IntegerSet::insert(Interval interval) { // eat any subintervals Intervals::iterator eraseBegin = lower_bound(intervals_.begin(), intervals_.end(), interval.begin, beginBefore); Intervals::iterator eraseEnd = lower_bound(intervals_.begin(), intervals_.end(), interval.end, endBefore); Intervals::iterator insertionPoint = intervals_.erase(eraseBegin, eraseEnd); // eat our left neighbor if it's next to us if (insertionPoint != intervals_.begin()) { --insertionPoint; const Interval& left = *insertionPoint; if (left.end >= interval.begin - 1) { interval.begin = left.begin; insertionPoint = intervals_.erase(insertionPoint); } else { ++insertionPoint; } } // eat our right neighbor if it's next to us if (insertionPoint != intervals_.end()) { const Interval& right = *insertionPoint; if (right.begin <= interval.end + 1) { interval.end = right.end; insertionPoint = intervals_.erase(insertionPoint); } } // insert the interval intervals_.insert(insertionPoint, interval); } PWIZ_API_DECL void IntegerSet::insert(int a) { insert(Interval(a)); } PWIZ_API_DECL void IntegerSet::insert(int a, int b) { insert(Interval(a,b)); } PWIZ_API_DECL void IntegerSet::parse(const std::string& intervalList) { istringstream iss(intervalList); vector intervals; copy(istream_iterator(iss), istream_iterator(), back_inserter(intervals)); for (vector::const_iterator it=intervals.begin(); it!=intervals.end(); ++it) insert(*it); } PWIZ_API_DECL IntegerSet::const_iterator IntegerSet::begin() const { return IntegerSet::Iterator(*this); } PWIZ_API_DECL IntegerSet::const_iterator IntegerSet::end() const { return IntegerSet::Iterator(); } PWIZ_API_DECL bool IntegerSet::contains(int n) const { for (Intervals::const_iterator it=intervals_.begin(); it!=intervals_.end(); ++it) if (it->contains(n)) return true; return false; } PWIZ_API_DECL bool IntegerSet::hasUpperBound(int n) const { if (empty()) return true; int highest = intervals_.back().end; return highest <= n; } PWIZ_API_DECL size_t IntegerSet::intervalCount() const { return intervals_.size(); } PWIZ_API_DECL size_t IntegerSet::size() const { size_t result = 0; for (Intervals::const_iterator it=intervals_.begin(); it!=intervals_.end(); ++it) result += (it->end - it->begin + 1); return result; } PWIZ_API_DECL ostream& operator<<(ostream& os, const IntegerSet& integerSet) { copy(integerSet.intervals_.begin(), integerSet.intervals_.end(), ostream_iterator(os," ")); return os; } // IntegerSet::Iterator implementation namespace { // used for default-constructed Iterators, so that it_ and end_ // can be intialized and are comparable IntegerSet::Intervals nothing_; } // namespace PWIZ_API_DECL IntegerSet::Iterator::Iterator() : it_(nothing_.end()), end_(nothing_.end()), value_(0) {} PWIZ_API_DECL IntegerSet::Iterator::Iterator(const IntegerSet& integerSet) : it_(integerSet.intervals_.begin()), end_(integerSet.intervals_.end()), value_(it_!=end_ ? it_->begin : 0) {} PWIZ_API_DECL IntegerSet::Iterator& IntegerSet::Iterator::operator++() { value_++; // when we finish an interval, jump to the next if (value_ > it_->end) { ++it_; value_ = it_!=end_ ? it_->begin : 0; } return *this; } PWIZ_API_DECL const IntegerSet::Iterator IntegerSet::Iterator::operator++(int) { Iterator temp(*this); this->operator++(); return temp; } PWIZ_API_DECL int IntegerSet::Iterator::operator*() const { if (it_ == end_) throw runtime_error("[IntegerSet::Iterator::operator*()] Invalid dereference."); return value_; } PWIZ_API_DECL bool IntegerSet::Iterator::operator!=(const Iterator& that) const { return !this->operator==(that); } PWIZ_API_DECL bool IntegerSet::Iterator::operator==(const Iterator& that) const { // true in two cases: // 1) "this" and "that" are both valid and equal // 2) "this" is at the end, and "that" is the special default constructed nothing_.end() return (it_!=end_ && that.it_!=that.end_ && it_==that.it_ && value_==that.value_ || it_==end_ && that.it_==nothing_.end()); } const IntegerSet IntegerSet::emptySet = IntegerSet(); const IntegerSet IntegerSet::positive = IntegerSet(1, std::numeric_limits::max()); const IntegerSet IntegerSet::negative = IntegerSet(std::numeric_limits::min(), -1); const IntegerSet IntegerSet::whole = IntegerSet(0, std::numeric_limits::max()); } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/IntegerSet.hpp000066400000000000000000000114071444255175000230670ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _INTEGERSET_HPP_ #define _INTEGERSET_HPP_ #include "pwiz/utility/misc/Export.hpp" #include #include namespace pwiz { namespace util { /// a virtual container of integers, accessible via an iterator interface, /// stored as union of intervals class PWIZ_API_DECL IntegerSet { public: /// a single closed interval of integers struct PWIZ_API_DECL Interval { int begin; int end; Interval(int a = 0); // allow int conversion Interval(int a, int b); bool contains(int n) const {return n>=begin && n<=end;} friend PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const Interval& interval); friend PWIZ_API_DECL std::istream& operator>>(std::istream& is, Interval& interval); }; /// collection of Interval objects typedef std::list Intervals; /// forward iterator providing readonly access to the virtual container class PWIZ_API_DECL Iterator { public: /// \name instantiation //@{ /// default constructed Iterator marks end of any IntegerSet Iterator(); /// initialized to beginning of the IntegerSet Iterator(const IntegerSet& integerSet); //@} /// \name forward iterator operators //@{ Iterator& operator++(); const Iterator operator++(int); int operator*() const; // note return by value bool operator!=(const Iterator& that) const; bool operator==(const Iterator& that) const; //@} /// \name standard iterator typedefs //@{ typedef std::forward_iterator_tag iterator_category; typedef int value_type; typedef int difference_type; typedef value_type* pointer; typedef value_type& reference; //@} private: Intervals::const_iterator it_; Intervals::const_iterator end_; int value_; }; /// default construction IntegerSet(); /// construction with a single integer explicit IntegerSet(int a); /// construction with a single interval IntegerSet(int a, int b); /// \name write access to the virtual container //@{ /// insert an interval of integers into the virtual container void insert(Interval interval); /// insert a single integer into the virtual container void insert(int a); /// insert an interval of integers into the virtual container void insert(int a, int b); /// insert intervals by parsing a string representing a /// whitespace-delimited list of closed intervals: /// parse(" [-3,2] 5 8-9 10- "); // insert(-3,2); insert(5); insert(8,9); insert(10,INT_MAX); void parse(const std::string& intervalList); //@} /// \name const iterator interface to the virtual container //@{ typedef Iterator const_iterator; const_iterator begin() const; const_iterator end() const; //@} /// true iff IntegerSet is empty bool empty() const {return intervals_.empty();} /// true iff n is in the IntegerSet bool contains(int n) const; /// true iff n is an upper bound for the IntegerSet bool hasUpperBound(int n) const; /// returns the number of intervals in the set size_t intervalCount() const; /// returns the number of integers in the set size_t size() const; /// empty set const static IntegerSet emptySet; /// natural numbers (1, 2, 3, ...) const static IntegerSet positive; /// negative integers (-1, -2, -3, ...) const static IntegerSet negative; /// whole numbers (0, 1, 2, ...) const static IntegerSet whole; private: Intervals intervals_; friend PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const IntegerSet& integerSet); }; } // namespace util } // namespace pwiz #endif // _INTEGERSET_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/IterationListener.cpp000066400000000000000000000127241444255175000244600ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "Std.hpp" #include "IterationListener.hpp" #include namespace pwiz { namespace util { // // IterationListenerRegistry::Impl // class IterationListenerRegistry::Impl { public: void addListener(const IterationListenerPtr& listener, size_t iterationPeriod) { listeners_[listener] = iterationPeriod; } void addListenerWithTimer(const IterationListenerPtr& listener, double timePeriod) { listeners_[listener] = CallbackInfo(timePeriod, true); } void removeListener(const IterationListenerPtr& listener) { listeners_.erase(listener); } IterationListener::Status broadcastUpdateMessage( const IterationListener::UpdateMessage& updateMessage) const { IterationListener::Status result = IterationListener::Status_Ok; for (Listeners::const_iterator itr = listeners_.begin(); itr != listeners_.end(); ++itr) { time_t now; time(&now); const IterationListenerPtr& listener = itr->first; const CallbackInfo& callbackInfo = itr->second; CallbackInfo::PeriodType periodType = callbackInfo.periodType; // only update if the iteration has incremented or the message has changed bool iterationIncreased = updateMessage.iterationIndex > callbackInfo.lastIterationIndex || &updateMessage.message != callbackInfo.lastMessage; bool shouldUpdate = updateMessage.iterationIndex == 0 || // always update on iteration 0 (iterationIncreased && updateMessage.iterationCount > 0 && updateMessage.iterationIndex + 1 >= updateMessage.iterationCount) || // always update on the last iteration (index+1 >= count) (iterationIncreased && ((periodType == CallbackInfo::PeriodType_Iteration && (updateMessage.iterationIndex+1) % callbackInfo.iterationPeriod == 0) || (periodType == CallbackInfo::PeriodType_Time && difftime(now, callbackInfo.timestamp) >= callbackInfo.timePeriod))); if (shouldUpdate) { IterationListener::Status status = listener->update(updateMessage); if (status == IterationListener::Status_Cancel) result = status; if (periodType == CallbackInfo::PeriodType_Time) callbackInfo.timestamp = now; callbackInfo.lastIterationIndex = updateMessage.iterationIndex; callbackInfo.lastMessage = &updateMessage.message; } } return result; } private: struct CallbackInfo { enum PeriodType {PeriodType_Iteration, PeriodType_Time}; PeriodType periodType; size_t iterationPeriod; double timePeriod; // seconds mutable time_t timestamp; mutable size_t lastIterationIndex; mutable const string* lastMessage; // never dereference this, only compare pointer values CallbackInfo(size_t _iterationPeriod = 1) : periodType(PeriodType_Iteration), iterationPeriod(_iterationPeriod), timePeriod(0), lastIterationIndex(0), lastMessage(NULL) {} CallbackInfo(double _timePeriod, bool mustBeTrue) : periodType(PeriodType_Time), iterationPeriod(0), timePeriod(_timePeriod), lastIterationIndex(0), lastMessage(NULL) { if (mustBeTrue != true) throw runtime_error("[IterationListenerRegistry::CallbackInfo] Wrong constructor."); } }; typedef map Listeners; mutable Listeners listeners_; }; PWIZ_API_DECL std::string IterationListener::no_message; // // IterationListenerRegistry // PWIZ_API_DECL IterationListenerRegistry::IterationListenerRegistry() : impl_(new Impl) {} PWIZ_API_DECL void IterationListenerRegistry::addListener(const IterationListenerPtr& listener, size_t iterationPeriod) { impl_->addListener(listener, iterationPeriod); } PWIZ_API_DECL void IterationListenerRegistry::addListenerWithTimer(const IterationListenerPtr& listener, double timePeriod) { impl_->addListenerWithTimer(listener, timePeriod); } PWIZ_API_DECL void IterationListenerRegistry::removeListener(const IterationListenerPtr& listener) { impl_->removeListener(listener); } PWIZ_API_DECL IterationListener::Status IterationListenerRegistry::broadcastUpdateMessage( const IterationListener::UpdateMessage& updateMessage) const { return impl_->broadcastUpdateMessage(updateMessage); } } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/IterationListener.hpp000066400000000000000000000054161444255175000244650ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ITERATIONLISTENER_HPP_ #define _ITERATIONLISTENER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "boost/shared_ptr.hpp" #include namespace pwiz { namespace util { /// interface to be implemented by clients who want progress callbacks class PWIZ_API_DECL IterationListener { public: enum Status {Status_Ok, Status_Cancel}; static std::string no_message; struct UpdateMessage { size_t iterationIndex; size_t iterationCount; // 0 == unknown const std::string& message; UpdateMessage(size_t index, size_t count, const std::string& message = no_message) : iterationIndex(index), iterationCount(count), message(message) { // if iterationCount is set, iterationIndex should never exceed count-1 if (iterationCount > 0 && iterationIndex >= iterationCount) iterationIndex = iterationCount - 1; } }; virtual Status update(const UpdateMessage& updateMessage) {return Status_Ok;} virtual ~IterationListener(){} }; typedef boost::shared_ptr IterationListenerPtr; /// handles registration of IterationListeners and broadcast of update messages class PWIZ_API_DECL IterationListenerRegistry { public: IterationListenerRegistry(); void addListener(const IterationListenerPtr& listener, size_t iterationPeriod); void addListenerWithTimer(const IterationListenerPtr& listener, double timePeriod); // seconds void removeListener(const IterationListenerPtr& listener); IterationListener::Status broadcastUpdateMessage( const IterationListener::UpdateMessage& updateMessage) const; private: class Impl; boost::shared_ptr impl_; IterationListenerRegistry(IterationListenerRegistry&); IterationListenerRegistry& operator=(IterationListenerRegistry&); }; } // namespace util } // namespace pwiz #endif // _ITERATIONLISTENER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/MSIHandler.hpp000066400000000000000000000037261444255175000227510ustar00rootroot00000000000000// // $Id$ // // // Original author: Robert Burke // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _MSIREADER_HPP_ #define _MSIREADER_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "TabReader.hpp" #include "boost/shared_ptr.hpp" namespace pwiz { namespace util { class PWIZ_API_DECL MSIHandler : public DefaultTabHandler { public: struct Record { Record() : scan(0), time(0), mz(0), intensity(0), charge(0), chargeStates(0), kl(0), background(0), median(0), peaks(0), scanFirst(0), scanLast(0), scanCount(0) {} Record(const std::vector& fields); Record(const Record& r); size_t scan; float time; float mz; float mass; float intensity; int charge; int chargeStates; float kl; float background; float median; int peaks; int scanFirst; int scanLast; int scanCount; }; MSIHandler(); virtual ~MSIHandler() {} virtual bool updateRecord(const std::vector& fields); size_t size() const; Record record(size_t index) const; Record lastRecord() const; private: class Impl; boost::shared_ptr pimpl; }; } // namespace pwiz } // namespace utility #endif // _MSIREADER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Once.hpp000066400000000000000000000023631444255175000217030ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2010 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ONCE_HPP_ #define _ONCE_HPP_ #include namespace pwiz { namespace util { // since the call_once implementation may be defined as an aggregate, // this proxy class can be used for initializing per-instance once_flags struct once_flag_proxy { boost::once_flag flag; }; /// this proxy class can be used for initializing per-instance once_flag_proxy(s) static once_flag_proxy init_once_flag_proxy = {BOOST_ONCE_INIT}; } // namespace util } // namespace pwiz #endif // _ONCE_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/SHA1.cpp000066400000000000000000000216311444255175000215050ustar00rootroot00000000000000/* $Id$ 100% free public domain implementation of the SHA-1 algorithm by Dominik Reichl Web: http://www.dominik-reichl.de/ See header file for version history. */ // added endianization check -- dk #include "endian.hpp" #ifdef PWIZ_BIG_ENDIAN #define SHA1_BIG_ENDIAN // for SHA1.h #endif // PWIZ_BIG_ENDIAN #define _CRT_SECURE_NO_WARNINGS #include "SHA1.h" #include #include #include #include #include #ifdef SHA1_UTILITY_FUNCTIONS #define SHA1_MAX_FILE_BUFFER (32 * 20 * 820) #endif // Rotate x bits to the left #ifndef ROL32 #ifdef _MSC_VER #define ROL32(_val32,_nBits) _rotl(_val32,_nBits) #else #define ROL32(_val32,_nBits) (((_val32)<<(_nBits))|((_val32)>>(32-(_nBits)))) #endif #endif #ifdef SHA1_LITTLE_ENDIAN #define SHABLK0(i) (m_block->l[i] = \ (ROL32(m_block->l[i],24) & 0xFF00FF00) | (ROL32(m_block->l[i],8) & 0x00FF00FF)) #else #define SHABLK0(i) (m_block->l[i]) #endif #define SHABLK(i) (m_block->l[i&15] = ROL32(m_block->l[(i+13)&15] ^ m_block->l[(i+8)&15] \ ^ m_block->l[(i+2)&15] ^ m_block->l[i&15],1)) // SHA-1 rounds #define _R0(v,w,x,y,z,i) {z+=((w&(x^y))^y)+SHABLK0(i)+0x5A827999+ROL32(v,5);w=ROL32(w,30);} #define _R1(v,w,x,y,z,i) {z+=((w&(x^y))^y)+SHABLK(i)+0x5A827999+ROL32(v,5);w=ROL32(w,30);} #define _R2(v,w,x,y,z,i) {z+=(w^x^y)+SHABLK(i)+0x6ED9EBA1+ROL32(v,5);w=ROL32(w,30);} #define _R3(v,w,x,y,z,i) {z+=(((w|x)&y)|(w&x))+SHABLK(i)+0x8F1BBCDC+ROL32(v,5);w=ROL32(w,30);} #define _R4(v,w,x,y,z,i) {z+=(w^x^y)+SHABLK(i)+0xCA62C1D6+ROL32(v,5);w=ROL32(w,30);} CSHA1::CSHA1() { m_block = (SHA1_WORKSPACE_BLOCK*)m_workspace; Reset(); } CSHA1::~CSHA1() { Reset(); } void CSHA1::Reset() { // SHA1 initialization constants m_state[0] = 0x67452301; m_state[1] = 0xEFCDAB89; m_state[2] = 0x98BADCFE; m_state[3] = 0x10325476; m_state[4] = 0xC3D2E1F0; m_count[0] = 0; m_count[1] = 0; } void CSHA1::Transform(UINT_32* pState, const UINT_8* pBuffer) { UINT_32 a = pState[0], b = pState[1], c = pState[2], d = pState[3], e = pState[4]; memcpy(m_block, pBuffer, 64); // 4 rounds of 20 operations each. Loop unrolled. _R0(a,b,c,d,e, 0); _R0(e,a,b,c,d, 1); _R0(d,e,a,b,c, 2); _R0(c,d,e,a,b, 3); _R0(b,c,d,e,a, 4); _R0(a,b,c,d,e, 5); _R0(e,a,b,c,d, 6); _R0(d,e,a,b,c, 7); _R0(c,d,e,a,b, 8); _R0(b,c,d,e,a, 9); _R0(a,b,c,d,e,10); _R0(e,a,b,c,d,11); _R0(d,e,a,b,c,12); _R0(c,d,e,a,b,13); _R0(b,c,d,e,a,14); _R0(a,b,c,d,e,15); _R1(e,a,b,c,d,16); _R1(d,e,a,b,c,17); _R1(c,d,e,a,b,18); _R1(b,c,d,e,a,19); _R2(a,b,c,d,e,20); _R2(e,a,b,c,d,21); _R2(d,e,a,b,c,22); _R2(c,d,e,a,b,23); _R2(b,c,d,e,a,24); _R2(a,b,c,d,e,25); _R2(e,a,b,c,d,26); _R2(d,e,a,b,c,27); _R2(c,d,e,a,b,28); _R2(b,c,d,e,a,29); _R2(a,b,c,d,e,30); _R2(e,a,b,c,d,31); _R2(d,e,a,b,c,32); _R2(c,d,e,a,b,33); _R2(b,c,d,e,a,34); _R2(a,b,c,d,e,35); _R2(e,a,b,c,d,36); _R2(d,e,a,b,c,37); _R2(c,d,e,a,b,38); _R2(b,c,d,e,a,39); _R3(a,b,c,d,e,40); _R3(e,a,b,c,d,41); _R3(d,e,a,b,c,42); _R3(c,d,e,a,b,43); _R3(b,c,d,e,a,44); _R3(a,b,c,d,e,45); _R3(e,a,b,c,d,46); _R3(d,e,a,b,c,47); _R3(c,d,e,a,b,48); _R3(b,c,d,e,a,49); _R3(a,b,c,d,e,50); _R3(e,a,b,c,d,51); _R3(d,e,a,b,c,52); _R3(c,d,e,a,b,53); _R3(b,c,d,e,a,54); _R3(a,b,c,d,e,55); _R3(e,a,b,c,d,56); _R3(d,e,a,b,c,57); _R3(c,d,e,a,b,58); _R3(b,c,d,e,a,59); _R4(a,b,c,d,e,60); _R4(e,a,b,c,d,61); _R4(d,e,a,b,c,62); _R4(c,d,e,a,b,63); _R4(b,c,d,e,a,64); _R4(a,b,c,d,e,65); _R4(e,a,b,c,d,66); _R4(d,e,a,b,c,67); _R4(c,d,e,a,b,68); _R4(b,c,d,e,a,69); _R4(a,b,c,d,e,70); _R4(e,a,b,c,d,71); _R4(d,e,a,b,c,72); _R4(c,d,e,a,b,73); _R4(b,c,d,e,a,74); _R4(a,b,c,d,e,75); _R4(e,a,b,c,d,76); _R4(d,e,a,b,c,77); _R4(c,d,e,a,b,78); _R4(b,c,d,e,a,79); // Add the working vars back into state pState[0] += a; pState[1] += b; pState[2] += c; pState[3] += d; pState[4] += e; // Wipe variables #ifdef SHA1_WIPE_VARIABLES a = b = c = d = e = 0; #endif } // Use this function to hash in binary data and strings void CSHA1::Update(const UINT_8* pbData, UINT_32 uLen) { UINT_32 j = ((m_count[0] >> 3) & 0x3F); if((m_count[0] += (uLen << 3)) < (uLen << 3)) ++m_count[1]; // Overflow m_count[1] += (uLen >> 29); UINT_32 i; if((j + uLen) > 63) { i = 64 - j; memcpy(&m_buffer[j], pbData, i); Transform(m_state, m_buffer); for( ; (i + 63) < uLen; i += 64) Transform(m_state, &pbData[i]); j = 0; } else i = 0; if((uLen - i) != 0) memcpy(&m_buffer[j], &pbData[i], uLen - i); } #ifdef SHA1_UTILITY_FUNCTIONS // Hash in file contents bool CSHA1::HashFile(const TCHAR* tszFileName) { if(tszFileName == NULL) return false; // first try to use memory-mapped I/O to maximize speed; on 32-bit systems this may fail for large files try { const INT_64 fileSize = (INT_64)boost::filesystem::file_size(tszFileName); // don't use a 32-bit process's entire address space, but 64-bit processes can just use the file size const INT_64 maxRegionSize = std::min(fileSize, (1ll << 30)); const INT_64 lMaxBuf = SHA1_MAX_FILE_BUFFER; using namespace boost::interprocess; file_mapping mmFile(tszFileName, read_only); INT_64 totalRemaining = fileSize; for (INT_64 offset = 0; offset < fileSize; offset += maxRegionSize) { INT_64 currentRegionSize = std::min(maxRegionSize, totalRemaining); mapped_region mmRegion(mmFile, read_only, offset, currentRegionSize); void* addr = mmRegion.get_address(); unsigned char* currentOffset = reinterpret_cast(addr); INT_64 regionRemaining = currentRegionSize; while (regionRemaining > 0) { const size_t uMaxRead = static_cast((regionRemaining > lMaxBuf) ? lMaxBuf : regionRemaining); Update(currentOffset, static_cast(uMaxRead)); currentOffset += uMaxRead; regionRemaining -= static_cast(uMaxRead); } totalRemaining -= currentRegionSize; } return (totalRemaining == 0); } catch (std::exception&) // fall back to using boost::nowide::ifstream { using namespace boost::nowide; ifstream fpIn(tszFileName, std::ios::binary); if (!fpIn) return false; const INT_64 lFileSize = boost::filesystem::file_size(boost::filesystem::path(tszFileName, boost::filesystem::detail::utf8_codecvt_facet())); const INT_64 lMaxBuf = SHA1_MAX_FILE_BUFFER; char vData[SHA1_MAX_FILE_BUFFER]; INT_64 lRemaining = lFileSize; while(lRemaining > 0) { const size_t uMaxRead = static_cast((lRemaining > lMaxBuf) ? lMaxBuf : lRemaining); fpIn.read(vData, uMaxRead); const size_t uRead = fpIn ? uMaxRead : fpIn.gcount(); if(uRead == 0) return false; Update(reinterpret_cast(vData), static_cast(uRead)); lRemaining -= static_cast(uRead); } return (lRemaining == 0); } } #endif void CSHA1::Final() { UINT_32 i; UINT_8 finalcount[8]; for(i = 0; i < 8; ++i) finalcount[i] = (UINT_8)((m_count[((i >= 4) ? 0 : 1)] >> ((3 - (i & 3)) * 8) ) & 255); // Endian independent Update((UINT_8*)"\200", 1); while ((m_count[0] & 504) != 448) Update((UINT_8*)"\0", 1); Update(finalcount, 8); // Cause a SHA1Transform() for(i = 0; i < 20; ++i) m_digest[i] = (UINT_8)((m_state[i >> 2] >> ((3 - (i & 3)) * 8)) & 0xFF); // Wipe variables for security reasons #ifdef SHA1_WIPE_VARIABLES memset(m_buffer, 0, 64); memset(m_state, 0, 20); memset(m_count, 0, 8); memset(finalcount, 0, 8); Transform(m_state, m_buffer); #endif } #ifdef SHA1_UTILITY_FUNCTIONS // Get the final hash as a pre-formatted string bool CSHA1::ReportHash(TCHAR* tszReport, REPORT_TYPE rtReportType) const { if(tszReport == NULL) return false; TCHAR tszTemp[16]; if((rtReportType == REPORT_HEX) || (rtReportType == REPORT_HEX_SHORT)) { _sntprintf(tszTemp, 15, _T("%02X"), m_digest[0]); _tcscpy(tszReport, tszTemp); const TCHAR* lpFmt = ((rtReportType == REPORT_HEX) ? _T(" %02X") : _T("%02X")); for(size_t i = 1; i < 20; ++i) { _sntprintf(tszTemp, 15, lpFmt, m_digest[i]); _tcscat(tszReport, tszTemp); } } else if(rtReportType == REPORT_DIGIT) { _sntprintf(tszTemp, 15, _T("%u"), m_digest[0]); _tcscpy(tszReport, tszTemp); for(size_t i = 1; i < 20; ++i) { _sntprintf(tszTemp, 15, _T(" %u"), m_digest[i]); _tcscat(tszReport, tszTemp); } } else return false; return true; } #endif #ifdef SHA1_STL_FUNCTIONS bool CSHA1::ReportHashStl(std::basic_string& strOut, REPORT_TYPE rtReportType) const { TCHAR tszOut[84]; const bool bResult = ReportHash(tszOut, rtReportType); if(bResult) strOut = tszOut; return bResult; } #endif // Get the raw message digest bool CSHA1::GetHash(UINT_8* pbDest) const { if(pbDest == NULL) return false; memcpy(pbDest, m_digest, 20); return true; } libpwizlite-3.0.5/src/pwiz/utility/misc/SHA1.h000066400000000000000000000160141444255175000211510ustar00rootroot00000000000000/* $Id$ 100% free public domain implementation of the SHA-1 algorithm by Dominik Reichl Web: http://www.dominik-reichl.de/ Version 1.8 - 2008-03-16 - Converted project files to Visual Studio 2008 format. - Added Unicode support for HashFile utility method. - Added support for hashing files using the HashFile method that are larger than 2 GB. - HashFile now returns an error code instead of copying an error message into the output buffer. - GetHash now returns an error code and validates the input parameter. - Added ReportHashStl STL utility method. - Added REPORT_HEX_SHORT reporting mode. - Improved Linux compatibility of test program. Version 1.7 - 2006-12-21 - Fixed buffer underrun warning that appeared when compiling with Borland C Builder (thanks to Rex Bloom and Tim Gallagher for the patch). - Breaking change: ReportHash writes the final hash to the start of the buffer, i.e. it's not appending it to the string anymore. - Made some function parameters const. - Added Visual Studio 2005 project files to demo project. Version 1.6 - 2005-02-07 (thanks to Howard Kapustein for patches) - You can set the endianness in your files, no need to modify the header file of the CSHA1 class anymore. - Aligned data support. - Made support/compilation of the utility functions (ReportHash and HashFile) optional (useful when bytes count, for example in embedded environments). Version 1.5 - 2005-01-01 - 64-bit compiler compatibility added. - Made variable wiping optional (define SHA1_WIPE_VARIABLES). - Removed unnecessary variable initializations. - ROL32 improvement for the Microsoft compiler (using _rotl). Version 1.4 - 2004-07-22 - CSHA1 now compiles fine with GCC 3.3 under MacOS X (thanks to Larry Hastings). Version 1.3 - 2003-08-17 - Fixed a small memory bug and made a buffer array a class member to ensure correct working when using multiple CSHA1 class instances at one time. Version 1.2 - 2002-11-16 - Borlands C++ compiler seems to have problems with string addition using sprintf. Fixed the bug which caused the digest report function not to work properly. CSHA1 is now Borland compatible. Version 1.1 - 2002-10-11 - Removed two unnecessary header file includes and changed BOOL to bool. Fixed some minor bugs in the web page contents. Version 1.0 - 2002-06-20 - First official release. ======== Test Vectors (from FIPS PUB 180-1) ======== SHA1("abc") = A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 SHA1(A million repetitions of "a") = 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F */ #ifndef ___SHA1_HDR___ #define ___SHA1_HDR___ #if !defined(SHA1_UTILITY_FUNCTIONS) && !defined(SHA1_NO_UTILITY_FUNCTIONS) #define SHA1_UTILITY_FUNCTIONS #endif #if !defined(SHA1_STL_FUNCTIONS) && !defined(SHA1_NO_STL_FUNCTIONS) #define SHA1_STL_FUNCTIONS #if !defined(SHA1_UTILITY_FUNCTIONS) #error STL functions require SHA1_UTILITY_FUNCTIONS. #endif #endif #include #ifdef SHA1_UTILITY_FUNCTIONS #include #include #endif #ifdef SHA1_STL_FUNCTIONS #include #endif #ifdef _MSC_VER #include #endif // You can define the endian mode in your files without modifying the SHA-1 // source files. Just #define SHA1_LITTLE_ENDIAN or #define SHA1_BIG_ENDIAN // in your files, before including the SHA1.h header file. If you don't // define anything, the class defaults to little endian. #if !defined(SHA1_LITTLE_ENDIAN) && !defined(SHA1_BIG_ENDIAN) #define SHA1_LITTLE_ENDIAN #endif // If you want variable wiping, #define SHA1_WIPE_VARIABLES, if not, // #define SHA1_NO_WIPE_VARIABLES. If you don't define anything, it // defaults to wiping. #if !defined(SHA1_WIPE_VARIABLES) && !defined(SHA1_NO_WIPE_VARIABLES) #define SHA1_WIPE_VARIABLES #endif #if defined(SHA1_HAS_TCHAR) #include #else #ifdef _MSC_VER #include #else #ifndef TCHAR #define TCHAR char #endif #ifndef _T #define _T(__x) (__x) #define _tmain main #define _tprintf printf #define _getts gets #define _tcslen strlen #define _tfopen fopen #define _tcscpy strcpy #define _tcscat strcat #define _sntprintf snprintf #endif #endif #endif #ifdef _MSC_VER // Compiling with Microsoft compiler #define _fseeki64 _fseeki64 #define _ftelli64 _ftelli64 #elif __MINGW || defined(__MINGW32__) #define _fseeki64 fseeko64 #define _ftelli64 ftello64 #else // assume POSIX #define _fseeki64 fseeko #define _ftelli64 ftello #endif /////////////////////////////////////////////////////////////////////////// // Define variable types #ifndef UINT_8 #ifdef _MSC_VER // Compiling with Microsoft compiler #define UINT_8 unsigned __int8 #else // !_MSC_VER #define UINT_8 unsigned char #endif // _MSC_VER #endif #ifndef UINT_32 #ifdef _MSC_VER // Compiling with Microsoft compiler #define UINT_32 unsigned __int32 #else // !_MSC_VER #if (ULONG_MAX == 0xFFFFFFFF) #define UINT_32 unsigned long #else #define UINT_32 unsigned int #endif #endif // _MSC_VER #endif // UINT_32 #ifndef INT_64 #ifdef _MSC_VER // Compiling with Microsoft compiler #define INT_64 __int64 #else // !_MSC_VER #define INT_64 long long #endif // _MSC_VER #endif // INT_64 #ifndef UINT_64 #ifdef _MSC_VER // Compiling with Microsoft compiler #define UINT_64 unsigned __int64 #else // !_MSC_VER #define UINT_64 unsigned long long #endif // _MSC_VER #endif // UINT_64 /////////////////////////////////////////////////////////////////////////// // Declare SHA-1 workspace typedef union { UINT_8 c[64]; UINT_32 l[16]; } SHA1_WORKSPACE_BLOCK; class CSHA1 { public: #ifdef SHA1_UTILITY_FUNCTIONS // Different formats for ReportHash enum REPORT_TYPE { REPORT_HEX = 0, REPORT_DIGIT = 1, REPORT_HEX_SHORT = 2 }; #endif // Constructor and destructor CSHA1(); ~CSHA1(); UINT_32 m_state[5]; UINT_32 m_count[2]; UINT_32 m_reserved0[1]; // Memory alignment padding UINT_8 m_buffer[64]; UINT_8 m_digest[20]; UINT_32 m_reserved1[3]; // Memory alignment padding void Reset(); // Update the hash value void Update(const UINT_8* pbData, UINT_32 uLen); #ifdef SHA1_UTILITY_FUNCTIONS // Hash in file contents bool HashFile(const TCHAR* tszFileName); #endif // Finalize hash, call before using ReportHash(Stl) void Final(); #ifdef SHA1_UTILITY_FUNCTIONS bool ReportHash(TCHAR* tszReport, REPORT_TYPE rtReportType = REPORT_HEX) const; #endif #ifdef SHA1_STL_FUNCTIONS bool ReportHashStl(std::basic_string& strOut, REPORT_TYPE rtReportType = REPORT_HEX) const; #endif bool GetHash(UINT_8* pbDest) const; private: // Private SHA-1 transformation void Transform(UINT_32* pState, const UINT_8* pBuffer); // Member variables UINT_8 m_workspace[64]; SHA1_WORKSPACE_BLOCK* m_block; // SHA1 pointer to the byte array above }; #endif // ___SHA1_HDR___ libpwizlite-3.0.5/src/pwiz/utility/misc/SHA1Calculator.cpp000066400000000000000000000072541444255175000235240ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "endian.hpp" #ifdef PWIZ_BIG_ENDIAN #define SHA1_BIG_ENDIAN // for SHA1.h #endif // PWIZ_BIG_ENDIAN #include "SHA1.h" // TODO: link errors if not first (?) #include "SHA1Calculator.hpp" #include "pwiz/utility/misc/Std.hpp" namespace pwiz { namespace util { namespace { string formatHash(const CSHA1& csha1) { char buffer[100]; memset(buffer, 0, sizeof(buffer)); csha1.ReportHash(buffer); string result(40,'\0'); const char* p = buffer; for (string::iterator it=result.begin(); it!=result.end();) { *it++ = static_cast(tolower(*p++)); *it++ = static_cast(tolower(*p++)); ++p; } return result; } } // namespace class SHA1Calculator::Impl { public: CSHA1 csha1; bool closed; Impl() : closed(false) {} }; PWIZ_API_DECL SHA1Calculator::SHA1Calculator() : impl_(new Impl) {} PWIZ_API_DECL void SHA1Calculator::reset() { impl_->csha1.Reset(); impl_->closed = false; } PWIZ_API_DECL void SHA1Calculator::update(const unsigned char* buffer, size_t bufferSize) { if (impl_->closed) throw runtime_error("[SHA1Calculator::update()] Should not be called after close()."); impl_->csha1.Update(const_cast(buffer), static_cast(bufferSize)); } PWIZ_API_DECL void SHA1Calculator::update(const string& buffer) { if (!buffer.empty()) update(reinterpret_cast(&buffer[0]), buffer.size()); } PWIZ_API_DECL void SHA1Calculator::close() { impl_->csha1.Final(); impl_->closed = true; } PWIZ_API_DECL string SHA1Calculator::hash() const { return formatHash(impl_->csha1); } PWIZ_API_DECL string SHA1Calculator::hashProjected() const { if (impl_->closed) throw runtime_error("[SHA1Calculator::hashProjected()] Should not be called after close()."); CSHA1 temp(impl_->csha1); temp.Final(); return formatHash(temp); } PWIZ_API_DECL string SHA1Calculator::hash(const string& buffer) { return hash((const unsigned char*)buffer.c_str(), buffer.size()); } PWIZ_API_DECL string SHA1Calculator::hash(const unsigned char* buffer, size_t bufferSize) { CSHA1 sha1; sha1.Update(buffer, static_cast(bufferSize)); sha1.Final(); return formatHash(sha1); } PWIZ_API_DECL string SHA1Calculator::hash(istream& is) { CSHA1 sha1; is.clear(); is.seekg(0); unsigned char buffer[65535]; while (is && is.read(reinterpret_cast(buffer), 65535)) sha1.Update(buffer, 65535u); sha1.Update(buffer, is.gcount()); sha1.Final(); return formatHash(sha1); } PWIZ_API_DECL string SHA1Calculator::hashFile(const string& filename) { CSHA1 sha1; if (!(sha1.HashFile(filename.c_str()))) throw runtime_error(("[SHA1Calculator] Error hashing file " + filename).c_str()); sha1.Final(); return formatHash(sha1); } } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/SHA1Calculator.hpp000066400000000000000000000045051444255175000235250ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SHA1CALCULATOR_HPP_ #define _SHA1CALCULATOR_HPP_ #include "pwiz/utility/misc/Export.hpp" #include "boost/shared_ptr.hpp" #include #include namespace pwiz { namespace util { class PWIZ_API_DECL SHA1Calculator { public: SHA1Calculator(); /// resets hash void reset(); /// update hash with buffer of bytes void update(const unsigned char* buffer, size_t bufferSize); /// update hash with buffer of bytes void update(const std::string& buffer); /// finish the hash void close(); /// returns the current hash value /// note: close() must be called first to retrieve final hash value std::string hash() const; /// returns projected final hash value as if close() were called first; /// hash remains open and update() may be called afterwards std::string hashProjected() const; /// static function to calculate hash of a buffer static std::string hash(const std::string& buffer); /// static function to calculate hash of a buffer static std::string hash(const unsigned char* buffer, size_t bufferSize); /// static function to calculate hash of an input stream static std::string hash(std::istream& is); /// static function to calculate hash of a file static std::string hashFile(const std::string& filename); private: class Impl; boost::shared_ptr impl_; SHA1Calculator(const SHA1Calculator&); SHA1Calculator& operator=(const SHA1Calculator&); }; } // namespace util } // namespace pwiz #endif // _SHA1CALCULATOR_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/SHA1_ostream.hpp000066400000000000000000000054561444255175000232530ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SHA1_OSTREAM_HPP_ #define _SHA1_OSTREAM_HPP_ #include "SHA1Calculator.hpp" #include "boost/iostreams/filtering_stream.hpp" #include "boost/iostreams/filter/symmetric.hpp" #include namespace pwiz { namespace util { /// model of boost::iostreams::SymmetricFilter class SHA1SymmetricFilter { public: typedef char char_type; bool filter(const char*& src_begin, const char* src_end, char*& dest_begin, char* dest_end, bool flush) { const char* dest_begin_orig = dest_begin; for (; src_begin!=src_end && dest_begin!=dest_end; ++src_begin, ++dest_begin) *dest_begin = *src_begin; sha1_.update(reinterpret_cast(dest_begin_orig), dest_begin - dest_begin_orig); return false; } void close() {} std::string hash() { return sha1_.hashProjected(); }; private: SHA1Calculator sha1_; }; /// model of boost::iostreams::Filter class SHA1Filter : public boost::iostreams::symmetric_filter { public: typedef boost::iostreams::symmetric_filter base_type; SHA1Filter(int bufferSize) : base_type(bufferSize) {} std::string hash() {return this->filter().hash();} }; /// ostream filter for calculating a SHA-1 hash of data on the fly class SHA1_ostream : public boost::iostreams::filtering_ostream { public: SHA1_ostream(std::ostream& os, int bufferSize = 4096) : os_(os), filter_(bufferSize) { push(filter_); push(os); } std::string hash() {return filter_.hash();} void explicitFlush() { // hack: not flushing properly with the filter in the pipeline pop(); // this flushes os_ explicitly push(os_); } private: std::ostream& os_; SHA1Filter filter_; }; } // namespace util } // namespace pwiz #endif // _SHA1_OSTREAM_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Singleton.hpp000066400000000000000000000017661444255175000227670ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers vanderbilt.edu> // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SINGLETON_HPP_ #define _SINGLETON_HPP_ // Include this file in any file that creates a singleton. #include namespace { struct Destroyer {~Destroyer() {/*boost::destroy_singletons();*/}}; Destroyer destroyer; } #endif // _SINGLETON_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Std.hpp000066400000000000000000000036501444255175000215510ustar00rootroot00000000000000// // $Id: Exception.hpp 2008 2010-05-29 02:46:49Z brendanx $ // // // Original author: Matt Chambers // // Copyright 2010 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _STD_HPP_ #define _STD_HPP_ // a meta-header providing including common std headers and using common std classes; // note that Filesystem.hpp is not included since it depends on Filesystem.cpp #include "pwiz/utility/misc/Exception.hpp" #include "pwiz/utility/misc/Environment.hpp" #include "pwiz/utility/misc/Container.hpp" #include "pwiz/utility/misc/String.hpp" #include "pwiz/utility/misc/Stream.hpp" #include using std::numeric_limits; #include #include #include "pwiz/utility/math/round.hpp" using std::abs; using std::min; using std::max; using std::complex; using std::swap; using std::copy; using std::locale; #include #include #include using std::auto_ptr; using std::unique_ptr; using boost::shared_ptr; using boost::weak_ptr; using boost::scoped_ptr; using std::exception; using std::runtime_error; using std::out_of_range; using std::domain_error; using std::invalid_argument; using std::length_error; using std::logic_error; using std::overflow_error; using std::range_error; using std::underflow_error; #endif // _STD_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Stream.hpp000066400000000000000000000044711444255175000222540ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include #include #include #include #include #include "pwiz/utility/misc/optimized_lexical_cast.hpp" #include #include #include #include namespace bio = boost::iostreams; namespace bnw = boost::nowide; using std::ios; using std::iostream; using std::istream; using std::ostream; using std::istream_iterator; using std::ostream_iterator; using bnw::fstream; using bnw::ifstream; using bnw::ofstream; using std::stringstream; using std::istringstream; using std::ostringstream; using std::streampos; using std::streamoff; using std::streamsize; //using bnw::system; // TODO: add linting so unqualified system() calls will not be allowed to force developers to consider UTF-8 compatibility using bnw::cin; using bnw::cout; using bnw::cerr; using std::endl; using std::flush; using std::wcin; using std::wcout; using std::wcerr; using std::setprecision; using std::setw; using std::setfill; using std::setbase; using std::showbase; using std::showpoint; using std::showpos; using std::boolalpha; using std::noshowbase; using std::noshowpoint; using std::noshowpos; using std::noboolalpha; using std::fixed; using std::scientific; using std::dec; using std::oct; using std::hex; using boost::lexical_cast; using boost::bad_lexical_cast; libpwizlite-3.0.5/src/pwiz/utility/misc/String.cpp000066400000000000000000000113461444255175000222610ustar00rootroot00000000000000// // Original author: Matt Chambers // // Copyright 2021 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #define PWIZ_SOURCE #include "String.hpp" #include #include #include using boost::spirit::karma::real_policies; using boost::spirit::karma::real_generator; using boost::spirit::karma::int_generator; using boost::spirit::karma::generate; template struct double12_policy : real_policies { // we want to generate up to 12 fractional digits static unsigned int precision(T) { return 12; } }; template struct float5_policy : real_policies { // we want to generate up to 5 fractional digits static unsigned int precision(T) { return 5; } }; template struct double12_policy_fixed : real_policies { // we want to generate up to 12 fractional digits static unsigned int precision(T) { return 12; } // we want the numbers always to be in fixed format static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::fixed; } }; template struct float5_policy_fixed : real_policies { // we want to generate up to 5 fractional digits static unsigned int precision(T) { return 5; } // we want the numbers always to be in fixed format static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::fixed; } }; template struct double12_policy_scientific : real_policies { // we want to generate up to 12 fractional digits static unsigned int precision(T) { return 12; } // we want the numbers always to be in scientific format static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::scientific; } }; template struct float5_policy_scientific : real_policies { // we want to generate up to 5 fractional digits static unsigned int precision(T) { return 5; } // we want the numbers always to be in scientific format static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::scientific; } }; template std::string generateWithPolicy(typename PolicyT::value_type value) { static const real_generator policy = PolicyT(); char buffer[256]; char* p = buffer; generate(p, policy, value); return std::string(&buffer[0], p); } std::string pwiz::util::toString(double value, RealConvertPolicy policyFlags) { // HACK: karma has a stack overflow on subnormal values, so we clamp to normalized values if (value > 0) value = std::max(std::numeric_limits::min(), value); else if (value < 0) value = std::min(-std::numeric_limits::min(), value); switch (policyFlags) { case RealConvertPolicy::AutoNotation: return generateWithPolicy>(value); case RealConvertPolicy::FixedNotation: return generateWithPolicy>(value); case RealConvertPolicy::ScientificNotation: return generateWithPolicy>(value); default: throw std::runtime_error("[toString] unknown RealConvertPolicy"); } } std::string pwiz::util::toString(float value, RealConvertPolicy policyFlags) { // HACK: karma has a stack overflow on subnormal values, so we clamp to normalized values if (value > 0) value = std::max(std::numeric_limits::min(), value); else if (value < 0) value = std::min(-std::numeric_limits::min(), value); switch (policyFlags) { case RealConvertPolicy::AutoNotation: return generateWithPolicy>(value); case RealConvertPolicy::FixedNotation: return generateWithPolicy>(value); case RealConvertPolicy::ScientificNotation: return generateWithPolicy>(value); default: throw std::runtime_error("[toString] unknown RealConvertPolicy"); } } std::string pwiz::util::toString(int value) { static const int_generator intgen = int_generator(); char buffer[256]; char* p = buffer; generate(p, intgen, value); return std::string(&buffer[0], p); }libpwizlite-3.0.5/src/pwiz/utility/misc/String.hpp000066400000000000000000000132321444255175000222620ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _STRING_HPP_ #define _STRING_HPP_ #include #include #include #include #include #include #include "pwiz/utility/misc/optimized_lexical_cast.hpp" using std::string; using std::stringstream; using std::istringstream; using std::ostringstream; #ifndef BOOST_NO_STD_WSTRING // these cause trouble on mingw gcc - libstdc++ widechar not fully there yet using std::wstring; using std::wstringstream; using std::wistringstream; using std::wostringstream; #endif namespace bal = boost::algorithm; using boost::lexical_cast; using boost::bad_lexical_cast; using boost::format; namespace pwiz { namespace util { template std::string longestCommonPrefix(const SequenceT& strings) { if (strings.empty()) return ""; typename SequenceT::const_iterator itr = strings.begin(); std::string result = *itr; for (++itr; itr != strings.end(); ++itr) { const std::string& target = *itr; if (result.empty()) return ""; for (size_t j=0; j < target.length() && j < result.length(); ++j) if (target[j] != result[j]) { result.resize(j); break; } } return result; } /// heuristic that returns iterator in str pointing to first Unicode character, or str.end() if there are no Unicode characters inline std::string::const_iterator findUnicodeBytes(const std::string& str) { return std::find_if(str.begin(), str.end(), [](char ch) { return !isprint(static_cast(ch)) || static_cast(ch) < 0; }); } /// Convenience wrapper for std::getline that strips trailing \r from DOS-style text files on any platform (e.g. OSX and Linux) /// NB: DO NOT USE THIS IF YOU REQUIRE ACCURATE LINE LENGTH, E.G. FOR INDEXING A FILE! template std::basic_istream<_Elem, _Traits>& getlinePortable(std::basic_istream<_Elem, _Traits>&& _Istr, std::basic_string<_Elem, _Traits, _Alloc>& _Str, const _Elem _Delim) { // get characters into string, discard delimiter and trailing \r auto& result = std::getline(_Istr, _Str, _Delim); if (_Delim == _Istr.widen('\n')) bal::trim_right_if(_Str, bal::is_any_of("\r")); return result; } // Convenience wrapper for std::getline that strips trailing \r from DOS-style text files on any platform (e.g. OSX and Linux) /// NB: DO NOT USE THIS IF YOU REQUIRE ACCURATE LINE LENGTH, E.G. FOR INDEXING A FILE! template std::basic_istream<_Elem, _Traits>& getlinePortable(std::basic_istream<_Elem, _Traits>&& _Istr, std::basic_string<_Elem, _Traits, _Alloc>& _Str) { // get characters into string, discard newline and trailing \r return getlinePortable(_Istr, _Str, _Istr.widen('\n')); } // Convenience wrapper for std::getline that strips trailing \r from DOS-style text files on any platform (e.g. OSX and Linux) /// NB: DO NOT USE THIS IF YOU REQUIRE ACCURATE LINE LENGTH, E.G. FOR INDEXING A FILE! template std::basic_istream<_Elem, _Traits>& getlinePortable(std::basic_istream<_Elem, _Traits>& _Istr, std::basic_string<_Elem, _Traits, _Alloc>& _Str, const _Elem _Delim) { // get characters into string, discard delimiter and trailing \r return getlinePortable(std::move(_Istr), _Str, _Delim); } // Convenience wrapper for std::getline that strips trailing \r from DOS-style text files on any platform (e.g. OSX and Linux) /// NB: DO NOT USE THIS IF YOU REQUIRE ACCURATE LINE LENGTH, E.G. FOR INDEXING A FILE! template std::basic_istream<_Elem, _Traits>& getlinePortable(std::basic_istream<_Elem, _Traits>& _Istr, std::basic_string<_Elem, _Traits, _Alloc>& _Str) { // get characters into string, discard newline and trailing \r return getlinePortable(std::move(_Istr), _Str, _Istr.widen('\n')); } enum class RealConvertPolicy { AutoNotation, FixedNotation, ScientificNotation }; /// uses boost::spirit::karma to do fast, fixed-precision conversion of floats to string (avoids lexical_cast's tendency to make values like 123.000007) std::string toString(float value, RealConvertPolicy policyFlags = RealConvertPolicy::AutoNotation); /// uses boost::spirit::karma to do fast, fixed-precision conversion of doubles to string (avoids lexical_cast's tendency to make values like 123.00000000007) std::string toString(double value, RealConvertPolicy policyFlags = RealConvertPolicy::AutoNotation); /// uses boost::spirit::karma to do faster conversion (relative to lexical_cast) of int to string std::string toString(int value); } // namespace util } // namespace pwiz using pwiz::util::getlinePortable; #endif // _STRING_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/TabReader.hpp000066400000000000000000000056351444255175000226550ustar00rootroot00000000000000// // $Id$ // // // Original author: Robert Burke // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _TABREADER_HPP_ #define _TABREADER_HPP_ #include "Export.hpp" #include "boost/shared_ptr.hpp" #include #include #include namespace pwiz { namespace util { struct PWIZ_API_DECL TabHandler { virtual ~TabHandler() {} virtual bool getHeaders() = 0; virtual char useComment() const = 0; virtual bool open() = 0; virtual bool updateLine(const std::string& line) = 0; virtual bool updateRecord(const std::vector& fields) = 0; virtual bool close() = 0; }; class PWIZ_API_DECL DefaultTabHandler : public TabHandler { public: DefaultTabHandler(bool need_headers = true, char comment_char='#'); DefaultTabHandler(const DefaultTabHandler& c); virtual ~DefaultTabHandler() {} virtual bool getHeaders(); virtual char useComment() const; virtual bool open(); virtual bool updateLine(const std::string& line); virtual bool updateRecord(const std::vector& fields); virtual size_t columns() const; virtual size_t getHeader(const std::string& name) const; virtual std::string getHeader(size_t index) const; virtual bool close(); protected: class Impl; boost::shared_ptr pimpl; }; class PWIZ_API_DECL VectorTabHandler : public DefaultTabHandler { public: typedef std::vector< std::vector >::const_iterator const_iterator; typedef std::vector< std::vector >::iterator iterator; VectorTabHandler(); VectorTabHandler(const DefaultTabHandler& c); virtual ~VectorTabHandler() {} virtual const_iterator begin() const; virtual const_iterator end() const; }; class PWIZ_API_DECL TabReader { public: TabReader(); virtual ~TabReader() {} virtual void setHandler(TabHandler* handler); virtual const TabHandler* getHandler(); virtual bool process(const char* filename); //virtual const std::vector< std::vector >& records(); private: class Impl; boost::shared_ptr pimpl; }; } // namespace pwiz } // namespace utility #endif // _TABREADER_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/Timer.hpp000066400000000000000000000023461444255175000221000ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _TIMER_H_ #define _TIMER_H_ #include "pwiz/utility/misc/Export.hpp" #include #include namespace pwiz { namespace util { class PWIZ_API_DECL Timer { public: Timer() {time(&start_);} double elapsed() const {time_t now; time(&now); return difftime(now, start_);} private: time_t start_; time_t finish_; }; } // namespace util } // namespace pwiz #endif //_TIMER_H_ libpwizlite-3.0.5/src/pwiz/utility/misc/VendorReaderTestHarness.hpp000066400000000000000000000076311444255175000255660ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2009 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "pwiz/utility/misc/Export.hpp" #include "pwiz/utility/misc/Filesystem.hpp" #include "pwiz/data/msdata/Reader.hpp" #include #include #include namespace pwiz { namespace util { /// test implementations derive from this to define which paths should be tested struct PWIZ_API_DECL TestPathPredicate { /// returns true iff the given rawpath is a real path to test/generate virtual bool operator() (const std::string& rawpath) const = 0; virtual ~TestPathPredicate() {} }; struct PWIZ_API_DECL IsNamedRawFile : public TestPathPredicate { IsNamedRawFile(const std::string& rawpath) : filenames({ rawpath }) {} IsNamedRawFile(const std::initializer_list& filenames) : filenames(filenames) {} bool operator() (const std::string& rawpath) const { return filenames.count(bfs::path(rawpath).filename().string()) > 0; } std::set filenames; }; struct PWIZ_API_DECL TestResult { int totalTests; int failedTests; TestResult() : totalTests(0), failedTests(0) {} TestResult& operator+= (const TestResult& rhs); TestResult operator+ (const TestResult& rhs) const; void check() const; }; struct PWIZ_API_DECL ReaderTestConfig : public pwiz::msdata::Reader::Config { ReaderTestConfig() : peakPicking(false), peakPickingCWT(false), thresholdCount(0), doublePrecision(false), autoTest(false) {} ReaderTestConfig(const ReaderTestConfig& rhs) : pwiz::msdata::Reader::Config(rhs) { peakPicking = rhs.peakPicking; peakPickingCWT = rhs.peakPickingCWT; thresholdCount = rhs.thresholdCount; doublePrecision = rhs.doublePrecision; diffPrecision = rhs.diffPrecision; indexRange = rhs.indexRange; autoTest = rhs.autoTest; runIndex = rhs.runIndex; } std::string resultFilename(const std::string& baseFilename) const; void wrap(pwiz::msdata::MSData& msd) const; bool peakPicking; // test vendor centroiding bool peakPickingCWT; // test CWT centroiding (happens automatically with vendor centroiding, but only to check for BinaryData bugs) int thresholdCount; // test that downstream mutating filters don't conflict with any vendor reader implementation details bool doublePrecision; // true if vendor data needs 64-bit precision (like Bruker TDF) boost::optional diffPrecision; // override default Diff::BaseDiffConfig::precision boost::optional> indexRange; boost::optional runIndex; bool autoTest; // test config variant generated automatically (e.g. thresholdCount) that does not use a separate mzML file }; /// A common test harness for vendor readers; returns a TestResult (with count of failedTests and totalTests) PWIZ_API_DECL TestResult testReader(const pwiz::msdata::Reader& reader, const std::vector& args, bool testAcceptOnly, bool requireUnicodeSupport, const TestPathPredicate& isPathTestable, const ReaderTestConfig& config = ReaderTestConfig()); } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/almost_equal.hpp000066400000000000000000000023331444255175000235020ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2009 Center for Applied Molecular Medicine // University of Southern California, Los Angeles, California // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ALMOST_EQUAL_HPP_ #define _ALMOST_EQUAL_HPP_ #include #include namespace pwiz { namespace util { template bool almost_equal(float_type a, float_type b, int multiplier = 1) { float_type scale = a==float_type(0.0) ? float_type(1.0) : a; return std::abs((a-b)/scale) < float_type(multiplier) * std::numeric_limits::epsilon(); } } // namespace util } // namespace pwiz #endif // _ALMOST_EQUAL_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/automation_vector.h000066400000000000000000000662651444255175000242340ustar00rootroot00000000000000// // $Id$ // // // Original author: Andrei Alexandrescu // // Copyright 1999 Micro Modeling Associates, Inc. // // This code was downloaded from: // http://erdani.org/publications/adapting_automation_arrays.html // // No license was specified in the article or in the download... permission pending? // #ifndef __AUTOMATION_VECTOR_H__ #define __AUTOMATION_VECTOR_H__ #ifndef _MSC_VER // Because automation_vector provides std::vector semantics, non-MSVC compilers // can parse it equivalently. #include #define automation_vector std::vector #else // _MSC_VER /****************************************************************************** Template class automation_vector Purpose: to wrap the VB safe one-dimensional arrays while having the following properties: 1. The same memory layout as VB's safe arrays, in order to freely pass data back and forth without adapting/copying 2. Provide fully std::vector semantics 3. Hide all the details of locking/unlocking an such to the user. ******************************************************************************/ // identifier was truncated to 'number' characters in the debug information #pragma warning(disable : 4786) #define NOMINMAX #include #include #include #include "Export.hpp" template struct static_checker; template <> struct static_checker {}; class PWIZ_API_DECL automation_vector_base; template struct static_variant_info { enum { vt = varenum }; enum { size = vt == VT_I1 ? 1 : vt == VT_I2 ? 2 : vt == VT_I4 ? 4 : vt == VT_R4 ? 4 : vt == VT_R8 ? 8 : vt == VT_CY ? 8 #ifdef _WIN64 : vt == VT_BSTR ? 8 : vt == VT_DISPATCH ? 8 : vt == VT_UNKNOWN ? 8 #else : vt == VT_BSTR ? 4 : vt == VT_DISPATCH ? 4 : vt == VT_UNKNOWN ? 4 #endif : vt == VT_VARIANT ? 16 : 0 }; static char size_checker[ vt == VT_I1 ? 1 : vt == VT_I2 ? 2 : vt == VT_I4 ? 4 : vt == VT_R4 ? 4 : vt == VT_R8 ? 8 : vt == VT_CY ? 8 #ifdef _WIN64 : vt == VT_BSTR ? 8 : vt == VT_DISPATCH ? 8 : vt == VT_UNKNOWN ? 8 #else : vt == VT_BSTR ? 4 : vt == VT_DISPATCH ? 4 : vt == VT_UNKNOWN ? 4 #endif : vt == VT_VARIANT ? 16 : 0]; }; namespace Configure { static_variant_info deduceVARENUM(char); static_variant_info deduceVARENUM(signed char); static_variant_info deduceVARENUM(unsigned char); static_variant_info deduceVARENUM(short); static_variant_info deduceVARENUM(unsigned short); static_variant_info deduceVARENUM(int); static_variant_info deduceVARENUM(unsigned int); static_variant_info deduceVARENUM(long); static_variant_info deduceVARENUM(unsigned long); static_variant_info deduceVARENUM(float); static_variant_info deduceVARENUM(double); static_variant_info deduceVARENUM(CURRENCY); static_variant_info deduceVARENUM(BSTR); static_variant_info deduceVARENUM(IDispatch *); static_variant_info deduceVARENUM(IUnknown *); static_variant_info deduceVARENUM(VARIANT); static_variant_info deduceVARENUM(automation_vector_base); } template class automation_vector; class PWIZ_API_DECL automation_vector_base { friend void trace(VARIANT &v); typedef automation_vector_base self; protected: // Swap contents efficiently with another vector. void swap(self &that) /*throw()*/ { _ASSERT(valid()); _ASSERT(that.valid()); std::swap(static_cast(m_Value), static_cast(that.m_Value)); } // Attach to a VARIANT. // No checking made! void attach(VARIANT &v) /*throw()*/; // Pours the contents in a VARIANT. // Assume the dest was cleared previously void detach(VARIANT &v) /*throw()*/; public: // SAFEARRAY lock class wrapper // for exception safety class array_lock { SAFEARRAY *pArray; public: array_lock(SAFEARRAY &a) /*throw(std::runtime_error)*/ : pArray(&a) { self::com_enforce(::SafeArrayLock(pArray)); } void leave_ownership() { pArray = 0; } ~array_lock() /*throw()*/ { if (pArray && FAILED(::SafeArrayUnlock(pArray))) _ASSERT(false); } }; typedef size_t size_type; typedef ptrdiff_t difference_type; #ifdef _DEBUG // Check if the vector is okay bool valid() const /*throw()*/; #endif // The index of the first element long low_bound() const /*throw()*/ { _ASSERT(valid()); return empty() ? 0 : bounds().lLbound; } void low_bound(long NewValue) /*throw(std::runtime_error)*/ { _ASSERT(valid()); if (empty()) throw std::runtime_error("Cannot set lower bound on an empty array"); bounds().lLbound = NewValue; } // The index of the last element long up_bound() const /*throw()*/ { _ASSERT(valid()); if (empty()) return -1; const SAFEARRAYBOUND &Bounds = bounds(); return Bounds.lLbound + Bounds.cElements - 1; } VARTYPE plain_vartype() const { return m_Value.vt; } static void com_enforce(HRESULT hr) /*throw(std::runtime_error)*/; // The size of the vector size_t size() const /*throw()*/ { _ASSERT(valid()); return m_Value.vt == VT_EMPTY ? 0 : bounds().cElements; } size_t capacity() const /*throw()*/ { return size(); } // checks whether the vector is empty bool empty() const /*throw()*/ { return size() == 0; } ~automation_vector_base() /*throw()*/; // Creation mode enum TCreateMode { MOVE, COPY }; protected: // Constructors/destructors are protected to prevent direct instantiation self(unsigned Elements, VARENUM VarType) /*throw(std::invalid_argument, std::runtime_error)*/; SAFEARRAY &array() /*throw()*/ { return array(m_Value); } const SAFEARRAY &array() const /*throw()*/ { return array(m_Value); } SAFEARRAYBOUND &bounds() /*throw()*/ { return array().rgsabound[0]; } const SAFEARRAYBOUND &bounds() const /*throw()*/ { return array().rgsabound[0]; } void resize(size_type NewSize, VARENUM Type); void resize_no_initialize(size_type NewSize); // For use only with primitive types! (Not sure about BSTR, CURRENCY etc) void clear() { _ASSERT(!V_ISBYREF(&m_Value)); _ASSERT(empty() || array().cLocks == 0); com_enforce(::VariantClear(&m_Value)); } static void get_element(const VARIANT &Array, long Index, VARIANT &v) /*throw(std::runtime_error)*/; static void put_element(VARIANT &Array, long Index, const VARIANT &v) /*throw(std::runtime_error)*/; private: static SAFEARRAY &array(const VARIANT &v) /*throw()*/ { _ASSERT(V_ISARRAY(&v)); _ASSERT(!V_ISBYREF(&v)); return *v.parray; } // The actual holder of the array VARIANT m_Value; }; // Dummy implementations for deduceVARENUM functions namespace Configure { inline static_variant_info deduceVARENUM(char) { return static_variant_info(); } inline static_variant_info deduceVARENUM(signed char) { return static_variant_info(); } inline static_variant_info deduceVARENUM(unsigned char) { return static_variant_info(); } inline static_variant_info deduceVARENUM(short) { return static_variant_info(); } inline static_variant_info deduceVARENUM(unsigned short) { return static_variant_info(); } inline static_variant_info deduceVARENUM(int) { return static_variant_info(); } inline static_variant_info deduceVARENUM(unsigned int) { return static_variant_info(); } inline static_variant_info deduceVARENUM(long) { return static_variant_info(); } inline static_variant_info deduceVARENUM(unsigned long) { return static_variant_info(); } inline static_variant_info deduceVARENUM(float) { return static_variant_info(); } inline static_variant_info deduceVARENUM(double) { return static_variant_info(); } inline static_variant_info deduceVARENUM(CURRENCY) { return static_variant_info(); } inline static_variant_info deduceVARENUM(BSTR) { return static_variant_info(); } inline static_variant_info deduceVARENUM(IDispatch *) { return static_variant_info(); } inline static_variant_info deduceVARENUM(IUnknown *) { return static_variant_info(); } inline static_variant_info deduceVARENUM(VARIANT) { return static_variant_info(); } inline static_variant_info deduceVARENUM(automation_vector_base) { return static_variant_info(); } } inline void from_automation(SAFEARRAY &, void *) { } inline void to_automation(SAFEARRAY &, void *) { } template void from_automation(SAFEARRAY &Array, automation_vector *pDummy); template void to_automation(SAFEARRAY &Array, automation_vector *pDummy); template class automation_vector : public automation_vector_base { typedef automation_vector_base base; typedef automation_vector self; // Makes unnecessary const_cast in some cases const self &const_this() { return *this; } public: // *** vector compatibilty typedefs typedef T value_type; typedef T &reference; typedef const T &const_reference; // iterators typedef T *iterator; typedef const T *const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; // *** Static VARIANT type mapped from the C++ type static VARENUM myVARENUM() { // If you have an error on the line below, you've instantiated // automation_vector with the wrong type static_checker(); return static_cast(Configure::deduceVARENUM(T()).vt); } // *** Constructors // Construction options (mutual exclusive). // 1. MOVE: the data is moved from the source and the source is cleared. // Use it when you're sure you don't need the source anymore. // 2. COPY: make a full copy of the array. Use it cautiously. automation_vector(VARIANT &vSource, TCreateMode Mode) /*throw(std::invalid_argument, std::runtime_error)*/ : base(0, myVARENUM()) { if (Mode == COPY) { // Make a copy and attach to it VARIANT v; ::VariantInit(&v); ::VariantCopy(&v, &vSource); attach(v); } else // Attach directly to the source attach(vSource); } // *** Constructors // Construction options (mutual exclusive). // 1. MOVE: the data is moved from the source and the source is cleared. // Use it when you're sure you don't need the source anymore. // 2. COPY: make a full copy of the array. Use it cautiously. automation_vector(SAFEARRAY &Array, TCreateMode Mode) /*throw(std::invalid_argument, std::runtime_error)*/ : base(0, myVARENUM()) { if (Mode == COPY) { // Make a copy and attach to it VARIANT vSource, vCopy; ::VariantInit(&vSource); if (Array.rgsabound->cElements == 0) vSource.vt = VT_EMPTY; else { ::SafeArrayGetVartype(&Array, &vSource.vt); vSource.vt |= VT_ARRAY; vSource.parray = &Array; ::VariantInit(&vCopy); ::VariantCopy(&vCopy, &vSource); attach(vCopy); } } else // Attach directly to the source attach(Array); } // Takes the # of elements, the lower bound, and the VType of the elements. // The VType is deducted from the C++ type. explicit automation_vector(unsigned uElements = 0, T t = T()) /*throw(std::invalid_argument, std::runtime_error)*/ : base(uElements, myVARENUM()) { if (empty()) return; _ASSERT(sizeof(T) == array().cbElements); _ASSERT(array().cLocks == 0); com_enforce(::SafeArrayLock(&array())); std::uninitialized_fill(begin(), end(), t); } // Copy constructor. Warning! It copies data, so it may be inefficient. // You may want to use attach() instead. automation_vector(const automation_vector &vSource) /*throw(std::runtime_error)*/ : base(vSource.size(), myVARENUM()) { if (empty()) return; com_enforce(::SafeArrayLock(&array())); std::uninitialized_copy(vSource.begin(), vSource.end(), begin()); } automation_vector(const_iterator first, const_iterator last) : base(last - first, myVARENUM()) { std::uninitialized_copy(first, last, begin()); } // *** ~ ~automation_vector(); // *** Assignment operator. Warning! It copies data, so it may be // inefficient. You may want to use swap() instead. automation_vector &operator=(const automation_vector &that) { resize(that.size()); std::copy(that.begin(), that.end(), begin()); return *this; } // *** Assignment operator. Warning! It copies data, so it may be // inefficient. You may want to use attach() instead automation_vector &operator=(const VARIANT &that) { VARIANT v; ::VariantInit(&v); ::VariantCopy(&v, &that); attach(v); return *this; } // *** Takes the contents of the source and empty it. // Requirement: vSource must be either a safe array or empty // All existing iterators to 'this' will be invalidated. void attach(VARIANT &vSource) /*throw(std::invalid_argument, std::runtime_error)*/; // *** Takes the contents of the source and empty it. // Requirement: vSource must be either a safe array or empty // All existing iterators to 'this' will be invalidated. void attach(SAFEARRAY &vSource) /*throw(std::invalid_argument, std::runtime_error)*/; // *** Moves the vector to Var. // Requirement: Var must be valid // After the move, size() will return zero. // All existing iterators to 'this' will be invalidated. void detach(VARIANT &Var) { _ASSERT(_CrtIsValidPointer(&Var, sizeof(VARIANT), true)); com_enforce(::VariantClear(&Var)); unlock(); base::detach(Var); } VARIANT* detach() { VARIANT* v = new VARIANT; detach(*v); return v; } // *** vector compatibility methods void assign(const_iterator first, const_iterator last) { clear(); insert(begin(), first, last); } void assign(size_type n, const T &x) { clear(); insert(begin(), n, x); } // The start of the vector const_iterator begin() const /*throw(std::runtime_error)*/ { _ASSERT(valid()); _ASSERT(empty() || array().cLocks == 1); return empty() ? 0 : static_cast(array().pvData); } iterator begin() /*throw(std::runtime_error)*/ { return const_cast(const_this().begin()); } // One past the last element of the vector const_iterator end() const /*throw(std::runtime_error)*/ { _ASSERT(valid()); if (empty()) return 0; _ASSERT(array().cLocks == 1); const SAFEARRAY &a = array(); return static_cast(a.pvData) + a.rgsabound[0].cElements; } iterator end() /*throw(std::runtime_error)*/ { return const_cast(const_this().end()); } // The reversed begin of the vector reverse_iterator rbegin() /*throw(std::runtime_error)*/ { return reverse_iterator(end()); } const_reverse_iterator rbegin() const /*throw(std::runtime_error)*/ { return const_reverse_iterator(end()); } // The reversed end of the vector reverse_iterator rend() /*throw(std::runtime_error)*/ { return reverse_iterator(begin()); } const_reverse_iterator rend() const /*throw(std::runtime_error)*/ { return const_reverse_iterator(begin()); } // Reference to the first element of the vector // Requirement: the vector must not be empty const_reference front() const /*throw(std::runtime_error)*/ { _ASSERT(!empty()); return *begin(); } reference front() /*throw(std::runtime_error)*/ { return const_cast(const_this().front()); } // Reference to the last element of the vector // Requirement: the vector must not be empty const_reference back() const /*throw(std::runtime_error)*/ { _ASSERT(!empty()); return end()[-1]; } reference back() /*throw(std::runtime_error)*/ { return const_cast(const_this().back()); } size_t max_size() const /*throw()*/ { return size_type(-1) / sizeof(T); } // C-like random access // Requirements: the index must fall within the bounds const_reference operator[] (long lIndex) const /*throw(std::runtime_error)*/ { _ASSERT(valid()); _ASSERT(!empty()); const SAFEARRAYBOUND &Bounds = bounds(); lIndex -= Bounds.lLbound; _ASSERT(lIndex >= 0 && (unsigned long)lIndex < Bounds.cElements); return begin()[lIndex]; } reference operator[](long lIndex) { return const_cast(const_this()[lIndex]); } const_reference at(long lIndex) const /*throw(std::runtime_error)*/ { _ASSERT(valid()); if (empty()) throw std::out_of_range("out of range"); const SAFEARRAYBOUND &Bounds = bounds(); lIndex -= Bounds.lLbound; if (lIndex < 0 || (unsigned long)lIndex >= Bounds.cElements) throw std::out_of_range("out of range"); return begin()[lIndex]; } reference at(long lIndex) /*throw(std::runtime_error)*/ { return const_cast(const_this().at(lIndex)); } void swap(self &that) /*throw()*/ { base::swap(that); } // Insert an element BEFORE i within the vector. // Call insert(end(), x) or push_back(x) to append. iterator insert(iterator i, const T& x = T()) /*throw(std::runtime_error)*/ { _ASSERT(i >= begin() && i <= end()); size_t Offset = i - begin(); insert(i, (T *)&x, (T *)&x + 1); return begin() + Offset; } // Insert a repetition of x BEFORE i within the vector. void insert(iterator i, size_t n, const T &x) /*throw(std::runtime_error)*/ { size_t OldSize = size(); resize(size() + n); std::copy_backward(begin(), begin() + OldSize, end()); std::fill(begin(), begin() + n, x); } // Insert a sequence of elements BEFORE i within the vector. void insert(iterator i, const_iterator first, const_iterator last) /*throw(std::runtime_error)*/ { _ASSERT(valid()); _ASSERT(last >= first); _ASSERT(i >= begin() && i <= end()); size_t count = last - first; if (count == 0) return; size_t offset = i - begin(), old_size = size(); resize(old_size + count); for (iterator j = begin() + old_size, k = end(); j != begin() + offset; ) std::iter_swap(--j, --k); std::copy(first, last, begin() + offset); _ASSERT(valid()); } iterator erase(iterator i) { unsigned Offset = i - begin(); std::copy(i + 1, end(), i); pop_back(); return begin() + Offset; } iterator erase(iterator From, iterator To) { unsigned Offset = From - begin(); iterator i = std::copy(To, end(), From); resize(i - begin()); return begin() + Offset; } // Change the size of the vector. NewDim may be 0 or whatever. void resize(size_t NewDim, const T &FillWith); void resize(size_t NewDim) { resize(NewDim, T()); } void resize_no_initialize(size_t NewDim); // Don't use with anything but primitives!!! (Not sure about BSTR, CURRENCY etc) // Append an element to the vector. void push_back(const T &ToAdd) /*throw(std::runtime_error)*/ { _ASSERT(valid()); insert(end(), ToAdd); } // Nuke the last element of the vector. void pop_back() /*throw(std::runtime_error)*/ { _ASSERT(valid()); _ASSERT(!empty()); resize(size() - 1); } // Clear the entire vector void clear(); #ifdef _DEBUG // Check if the vector is okay bool valid() const /*throw()*/ { if (!base::valid()) return false; if (empty()) return true; std::string ErrorMessage; if (array().cbElements != sizeof(T)) ErrorMessage += "Element size (cbElements) is incorrect.\n"; VARENUM ElementType = VARENUM(plain_vartype() & VT_TYPEMASK); if (ElementType != myVARENUM() && !(ElementType == VT_DATE && myVARENUM() == VT_R4) && !(ElementType == VT_ERROR && myVARENUM() == VT_I4)) ErrorMessage += "Element type is incorrect.\n"; if (ErrorMessage.empty()) return true; throw std::runtime_error("The automation_vector is invalid due to the following problem(s):\n" + ErrorMessage); } #endif protected: void lock(); void unlock(); }; template automation_vector::~automation_vector() { _ASSERT(valid()); try { unlock(); _ASSERT(plain_vartype() == VT_EMPTY || array().cLocks == 0); } catch (...) { // Don't throw anything - just assert _ASSERT(false); } } template void automation_vector::clear() { _ASSERT(valid()); unlock(); base::clear(); } template void automation_vector::resize(size_t NewSize, const T &t) { _ASSERT(valid()); size_type OldSize = size(); unlock(); base::resize(NewSize, myVARENUM()); lock(); _ASSERT(valid()); if (OldSize < size()) std::uninitialized_fill(begin() + OldSize, end(), t); } // Special version for primitives like double and float, where initialization isn't strictly needed and may not be useful. // (Not sure about use with BSTR, CURRENCY etc - best not to use there) template void automation_vector::resize_no_initialize(size_t NewSize) { _ASSERT(valid()); unlock(); base::resize(NewSize, myVARENUM()); lock(); _ASSERT(valid()); } template void automation_vector::lock() { _ASSERT(valid()); if (empty()) // nothing to do -- all ok return; _ASSERT(array().cLocks == 0); // Lock self array_lock MyLock(array()); _ASSERT(valid()); // Convert contents from_automation(array(), static_cast(0)); // Commit the lock MyLock.leave_ownership(); } template void automation_vector::unlock() { _ASSERT(valid()); if (empty()) // nothing to do -- all ok return; to_automation(array(), static_cast(0)); // Unlock self com_enforce(::SafeArrayUnlock(&array())); } /*template void from_automation(SAFEARRAY &Array, automation_vector *) { _ASSERT(Array.cbElements == sizeof(automation_vector)); automation_vector::array_lock MyLock(Array); VARIANT *f = static_cast(Array.pvData), *t = f + Array.rgsabound[0].cElements; for (; f != t; ++f) { VARIANT ShallowCopy = *f; new (f) automation_vector(ShallowCopy, automation_vector::MOVE); } } template void to_automation(SAFEARRAY &Array, automation_vector *) { _ASSERT(Array.cLocks == 1 && Array.cbElements == sizeof(automation_vector)); automation_vector *f = static_cast *>(Array.pvData), *t = f + Array.rgsabound[0].cElements; VARIANT *iOut = static_cast(Array.pvData); for (; f != t; ++f, ++iOut) { VARIANT Copy; ::VariantInit(&Copy); f->detach(Copy); automation_vector::com_enforce(Copy.Detach(iOut)); } }*/ template void automation_vector::attach(VARIANT &vSource) /*throw(std::invalid_argument, std::runtime_error)*/ { if (V_VT(&vSource) == VT_EMPTY) { clear(); return; } if (!V_ISARRAY(&vSource)) throw std::invalid_argument("Invalid argument passed to attach()"); SAFEARRAY &Array = V_ISBYREF(&vSource) ? **vSource.pparray : *vSource.parray; if (Array.cDims != 1) throw std::invalid_argument("Only one-dimensional arrays are supported"); const VARENUM vt = VARENUM(vSource.vt & VT_TYPEMASK); automation_vector Temp; if (vt == myVARENUM()) { // Great, types match com_enforce(::SafeArrayLock(&Array)); from_automation(Array, static_cast(0)); Temp.base::attach(vSource); } else { // Types don't match, we'll have to do a conversion Temp.resize(Array.rgsabound[0].cElements); VARIANT* Converted = Temp.detach(); long f = Array.rgsabound[0].lLbound, t = f + Array.rgsabound[0].cElements; VARIANT Buffer; ::VariantInit(&Buffer); for (; f != t; ++f) { get_element(vSource, f, Buffer); if (myVARENUM() != VT_VARIANT) com_enforce(::VariantChangeType(&Buffer, &Buffer, 0, myVARENUM())); put_element(*Converted, f, Buffer); } _ASSERT(Converted->vt == (myVARENUM() | VT_ARRAY)); Temp.attach(*Converted); delete Converted; } swap(Temp); _ASSERT(valid()); } template void automation_vector::attach(SAFEARRAY &Array) /*throw(std::invalid_argument, std::runtime_error)*/ { VARIANT v; ::VariantInit(&v); if (Array.rgsabound->cElements == 0) v.vt = VT_EMPTY; else { ::SafeArrayGetVartype(&Array, &v.vt); v.vt |= VT_ARRAY; v.parray = &Array; } attach(v); } #endif // _MSC_VER #endif //__AUTOMATION_VECTOR_H__ libpwizlite-3.0.5/src/pwiz/utility/misc/cpp_cli_utilities.hpp000066400000000000000000000232161444255175000245230ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2010 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _CPP_CLI_UTILITIES_HPP_ #define _CPP_CLI_UTILITIES_HPP_ #define WIN32_LEAN_AND_MEAN #define NOGDI #ifndef NOMINMAX # define NOMINMAX #endif #include #include #pragma unmanaged #include // _com_error #include #include #include #include #include #include "automation_vector.h" #pragma managed #include "BinaryData.hpp" #ifdef __cplusplus_cli #define PWIZ_MANAGED_PASSTHROUGH #endif namespace pwiz { namespace util { inline std::string ToStdString(System::String^ source) { if (System::String::IsNullOrEmpty(source)) return std::string(); System::Text::Encoding^ encoding = System::Text::Encoding::UTF8; array^ encodedBytes = encoding->GetBytes(source); std::string target("", encodedBytes->Length); char* buffer = &target[0]; unsigned char* unsignedBuffer = reinterpret_cast(buffer); System::Runtime::InteropServices::Marshal::Copy(encodedBytes, 0, (System::IntPtr) unsignedBuffer, encodedBytes->Length); return target; } inline System::String^ ToSystemString(const std::string& source, bool utf8=true) { if (utf8) { System::Text::Encoding^ encoding = System::Text::Encoding::UTF8; int length = source.length(); array^ buffer = gcnew array(length); System::Runtime::InteropServices::Marshal::Copy((System::IntPtr) const_cast(source.c_str()), buffer, 0, length); return encoding->GetString(buffer); } else return gcnew System::String(source.c_str()); } template inline cli::array^ ToSystemArray(const std::vector& source, conversion_functor f = [](native_value_type i) {return i;}) { auto result = gcnew cli::array(source.size()); for (int i = 0; i < (int)source.size(); ++i) result[i] = f(source[i]); return result; } template void ToStdVector(cli::array^ managedArray, std::vector& stdVector) { stdVector.clear(); if (managedArray->Length > 0) { cli::pin_ptr pin = &managedArray[0]; native_value_type* begin = (native_value_type*) pin; stdVector.assign(begin, begin + managedArray->Length); } } template void ToStdVector(cli::array^ managedArray, std::vector& stdVector) { stdVector.clear(); if (managedArray->Length > 0) { stdVector.reserve(managedArray->Length); for (size_t i = 0, end = managedArray->Length; i < end; ++i) stdVector.push_back(ToStdString(managedArray[i]->ToString())); } } template std::vector ToStdVector(cli::array^ managedArray) { std::vector result; ToStdVector(managedArray, result); return result; } template void ToStdVector(cli::array^ managedArray, int sourceIndex, std::vector& stdVector, int destinationIndex, int count) { stdVector.clear(); if (managedArray->Length > 0) { cli::pin_ptr pin = &managedArray[sourceIndex]; native_value_type* begin = (native_value_type*)pin; stdVector.assign(begin + destinationIndex, begin + destinationIndex + count); } } template void ToStdVector(System::Collections::Generic::IList^ managedList, std::vector& stdVector) { stdVector.clear(); if (managedList->Count > 0) { stdVector.reserve(managedList->Count); for (size_t i = 0, end = managedList->Count; i < end; ++i) stdVector.push_back((native_value_type) managedList[i]); } } /// wraps a managed array in an automation_vector to enable direct access from unmanaged code template void ToAutomationVector(cli::array^ managedArray, automation_vector& automationArray) { VARIANT v; ::VariantInit(&v); System::IntPtr vPtr = (System::IntPtr) &v; System::Runtime::InteropServices::Marshal::GetNativeVariantForObject((System::Object^) managedArray, vPtr); automationArray.attach(v); } template void ToBinaryData(cli::array^ managedArray, BinaryData& binaryData) { typedef System::Runtime::InteropServices::GCHandle GCHandle; if (managedArray->Length == 0) { binaryData.clear(); return; } #ifdef PWIZ_MANAGED_PASSTHROUGH GCHandle handle = GCHandle::Alloc(managedArray); binaryData = ((System::IntPtr)handle).ToPointer(); handle.Free(); #else ToBinaryData(managedArray, 0, binaryData, 0, managedArray->Length); #endif } template void ToBinaryData(cli::array^ managedArray, int sourceIndex, BinaryData& binaryData, int destinationIndex, int count) { binaryData.clear(); if (managedArray->Length > 0) { cli::pin_ptr pin = &managedArray[sourceIndex]; native_value_type* begin = (native_value_type*)pin; binaryData.assign(begin + destinationIndex, begin + destinationIndex + count); } } template void ToBinaryData(System::Collections::Generic::IList^ managedList, BinaryData& binaryData) { binaryData.clear(); if (managedList->Count > 0) { binaryData.reserve(managedList->Count); for (size_t i = 0, end = managedList->Count; i < end; ++i) binaryData.push_back((native_value_type)managedList[i]); } } ref class Lock { System::Object^ m_pObject; public: Lock(System::Object^ pObject) : m_pObject(pObject) { System::Threading::Monitor::Enter(m_pObject); } ~Lock() { System::Threading::Monitor::Exit(m_pObject); } }; } // namespace util } // namespace pwiz namespace { /// prepends function with a single level of scope, /// e.g. "Reader::read()" instead of "pwiz::data::msdata::Reader::read()" template std::string trimFunctionMacro(const char* function, const T& param) { std::vector > tokens; std::string functionStr(function); boost::algorithm::split(tokens, functionStr, boost::is_any_of(":"), boost::algorithm::token_compress_on); std::string what("["); if (tokens.size() > 1) { boost::range::copy(*(tokens.rbegin() + 1), std::back_inserter(what)); what += "::"; if (boost::range::equal(*(tokens.rbegin() + 1), *tokens.rbegin())) what += "ctor"; else if (tokens.rbegin()->front() == '~') what += "dtor"; else boost::range::copy(*tokens.rbegin(), std::back_inserter(what)); } else if (tokens.size() > 0) boost::range::copy(*tokens.rbegin(), std::back_inserter(what)); what += "(" + lexical_cast(param) + ")] "; return what; } std::string flattenInnerExceptions(System::Exception^ e) { auto what = e->Message; while (e->InnerException != nullptr) { e = e->InnerException; auto newWhat = e->Message; if (!what->Contains(newWhat)) what += "\r\n" + newWhat; } return pwiz::util::ToStdString(what); } } // namespace /// forwards managed exception to unmanaged code; /// prepends function with a single level of scope, /// e.g. "Reader::read()" instead of "pwiz::data::msdata::Reader::read()" #define CATCH_AND_FORWARD_EX(param) \ catch (std::exception&) {throw;} \ catch (_com_error& e) {throw std::runtime_error(std::string("COM error: ") + e.ErrorMessage());} \ /*catch (CException* e) {std::auto_ptr exceptionDeleter(e); char message[1024]; e->GetErrorMessage(message, 1024); throw std::runtime_error(string("MFC error: ") + message);}*/ \ catch (System::AggregateException^ e) { throw std::runtime_error(trimFunctionMacro(__FUNCTION__, (param)) + pwiz::util::ToStdString(e->ToString())); } \ catch (System::Exception^ e) { throw std::runtime_error(trimFunctionMacro(__FUNCTION__, (param)) + flattenInnerExceptions(e)); } #define CATCH_AND_FORWARD CATCH_AND_FORWARD_EX("") #endif // _CPP_CLI_UTILITIES_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/endian.hpp000066400000000000000000000050471444255175000222570ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2007 Spielberg Family Center for Applied Proteomics // Cedars-Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _ENDIAN_HPP_ #define _ENDIAN_HPP_ #include "boost/static_assert.hpp" namespace pwiz { namespace util { #if defined(__GLIBC__) || defined(__GLIBCXX__) #define PWIZ_GCC #endif #if defined(_MSC_VER) #define PWIZ_MSVC #endif #if (defined(PWIZ_GCC) && defined(__BYTE_ORDER) && __BYTE_ORDER==__LITTLE_ENDIAN) || \ (defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER==__DARWIN_LITTLE_ENDIAN) || \ (defined(__LITTLE_ENDIAN__)) || \ (defined(__MINGW32__)) || \ (defined(__i386__)) || \ (defined(PWIZ_MSVC)) #define PWIZ_LITTLE_ENDIAN #endif #if (defined(PWIZ_GCC) && defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) #define PWIZ_BIG_ENDIAN #endif #if defined(PWIZ_LITTLE_ENDIAN) && defined(PWIZ_BIG_ENDIAN) #error "This isn't happening." #endif #if !defined(PWIZ_LITTLE_ENDIAN) && !defined(PWIZ_BIG_ENDIAN) #error "Unsupported platform: probably need a platform-specific define above." #endif BOOST_STATIC_ASSERT(sizeof(unsigned int) == 4); // 32 bits BOOST_STATIC_ASSERT(sizeof(unsigned long long) == 8); // 64 bits inline unsigned int endianize32(unsigned int n) { return ((n&0xff)<<24) | ((n&0xff00)<<8) | ((n&0xff0000)>>8) | ((n&0xff000000)>>24); } inline unsigned long long endianize64(unsigned long long n) { return ((n&0x00000000000000ffll)<<56) | ((n&0x000000000000ff00ll)<<40) | ((n&0x0000000000ff0000ll)<<24) | ((n&0x00000000ff000000ll)<<8) | ((n&0x000000ff00000000ll)>>8) | ((n&0x0000ff0000000000ll)>>24) | ((n&0x00ff000000000000ll)>>40) | ((n&0xff00000000000000ll)>>56); } // // notes: // // To dump gcc's defined macros: // gcc -dM -E source.cpp // // glibc defines __BYTE_ORDER in // } // namespace util } // namespace pwiz #endif // _ENDIAN_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/mru_list.hpp000066400000000000000000000075721444255175000226640ustar00rootroot00000000000000/* $Id$ * * Boost.MultiIndex example of serialization of a MRU list. * * Copyright 2003-2008 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */ #ifndef _MRU_LIST_HPP_ #define _MRU_LIST_HPP_ #if !defined(NDEBUG) #define BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING #define BOOST_MULTI_INDEX_ENABLE_SAFE_MODE #endif #include /* keep it first to prevent nasty warns in MSVC */ #include #include #include #include #include #include #include #include #include #include #include #include namespace pwiz { namespace util { /* An MRU (most recently used) list keeps record of the last n * inserted items, listing first the newer ones. Care has to be * taken when a duplicate item is inserted: instead of letting it * appear twice, the MRU list relocates it to the first position. */ template > class mru_list { struct hash_index_tag {}; typedef boost::multi_index::multi_index_container < Item, boost::multi_index::indexed_by < boost::multi_index::sequenced<>, boost::multi_index::hashed_unique, KeyExtractor> > > item_list; typedef typename item_list::template index::type item_hash_index; public: typedef Item item_type; typedef typename item_list::iterator iterator; typedef typename item_list::reverse_iterator reverse_iterator; typedef typename item_list::const_iterator const_iterator; typedef typename item_list::const_reverse_iterator const_reverse_iterator; typedef typename item_list::value_type value_type; mru_list(std::size_t max_num_items_) : max_num_items(max_num_items_){} bool insert(const item_type& item) { std::pair p=il.push_front(item); if(!p.second){ /* duplicate item */ il.relocate(il.begin(),p.first); /* put in front */ return false; /* item not inserted */ } else if(il.size()>max_num_items){ /* keep the length <= max_num_items */ il.pop_back(); } return true; /* new item inserted */ } template bool modify(iterator position, Modifier modifier) { return il.modify(position, modifier); } bool empty() const {return il.empty();} std::size_t size() const {return il.size();} std::size_t max_size() const {return std::min(max_num_items, il.max_size());} void clear() {il.clear();} const item_type& mru() const {return *il.begin();} const item_type& lru() const {return *il.rbegin();} iterator begin() {return il.begin();} iterator end() {return il.end();} reverse_iterator rbegin() {return il.rbegin();} reverse_iterator rend() {return il.rend();} const_iterator begin() const {return il.begin();} const_iterator end() const {return il.end();} const_reverse_iterator rbegin() const {return il.rbegin();} const_reverse_iterator rend() const {return il.rend();} iterator find(const typename KeyExtractor::result_type& key) const { const auto& idx = il.template get(); return this->il.template project<0>(idx.find(key)); } private: item_list il; std::size_t max_num_items; }; } // namespace util } // namespace pwiz #endif // _MRU_LIST_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/optimized_lexical_cast.hpp000066400000000000000000000253131444255175000255360ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _OPTIMIZED_LEXICAL_CAST_HPP_ #define _OPTIMIZED_LEXICAL_CAST_HPP_ #include #include #include #include // HACK: Darwin strtod isn't threadsafe so strtod_l must be used #ifdef __APPLE__ #include #include "pwiz/utility/misc/Singleton.hpp" namespace { class ThreadSafeCLocale : public boost::singleton { public: ThreadSafeCLocale(boost::restricted) : c_locale(::newlocale(LC_ALL_MASK, "C", 0)) {} ~ThreadSafeCLocale() {::freelocale(c_locale);} ::locale_t c_locale; }; } // namespace #define STRTOD(x, y) strtod_l((x), (y), ThreadSafeCLocale::instance->c_locale) #define ATOF(x) STRTOD(x,NULL) #else // __APPLE__ #define STRTOD(x, y) strtod((x), (y)) #define ATOF(x) atof(x) #endif // __APPLE__ #define OPTIMIZED_LEXICAL_CAST(toType) \ template<> inline toType lexical_cast(const std::string& str) { \ bool success; \ toType value = lexical_cast(str, success); \ if (!success) \ throw bad_lexical_cast(); \ return value; \ } // optimized string->numeric conversions namespace boost { template inline toType lexical_cast(const std::string& str, bool& success) { // error: new overload needed below throw std::logic_error("BUG: new overload needed"); } template <> inline float lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; float value = (float) STRTOD( stringToConvert, const_cast(&endOfConversion) ); if( value == 0.0f && stringToConvert == endOfConversion ) // error: conversion could not be performed success = false; return value; } OPTIMIZED_LEXICAL_CAST(float) template <> inline double lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; double value = STRTOD( stringToConvert, const_cast(&endOfConversion) ); if( value == 0.0 && stringToConvert == endOfConversion ) // error: conversion could not be performed success = false; return value; } OPTIMIZED_LEXICAL_CAST(double) template <> inline int lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; int value = (int) strtol( stringToConvert, const_cast(&endOfConversion), 10 ); if( ( value == 0 && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(int) template <> inline long lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; long value = strtol( stringToConvert, const_cast(&endOfConversion), 10 ); if( ( value == 0l && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(long) template <> inline unsigned int lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; unsigned int value = (unsigned int) strtoul( stringToConvert, const_cast(&endOfConversion), 10 ); if( ( value == 0u && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(unsigned int) template <> inline unsigned long lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; unsigned long value = strtoul( stringToConvert, const_cast(&endOfConversion), 10 ); if( ( value == 0ul && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(unsigned long) template <> inline long long lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; long long value = strtoll( stringToConvert, const_cast(&endOfConversion), 10 ); if ((value == 0ll && stringToConvert == endOfConversion) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(long long) template <> inline unsigned long long lexical_cast( const std::string& str, bool& success ) { errno = 0; success = true; const char* stringToConvert = str.c_str(); const char* endOfConversion = stringToConvert; unsigned long long value = strtoull( stringToConvert, const_cast(&endOfConversion), 10 ); if( ( value == 0ull && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow success = false; return value; } OPTIMIZED_LEXICAL_CAST(unsigned long long) template<> inline bool lexical_cast( const std::string& str ) { if (str == "0" || str == "false") return false; return true; } template<> inline boost::logic::tribool lexical_cast( const std::string& str ) { using namespace boost::logic; if (str.empty()) return tribool(indeterminate); if (str == "0" || str == "false") return false; return true; } /*template<> inline float lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; float value = (float) STRTOD( str, const_cast(&endOfConversion) ); if( ( value == 0.0f && str == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } template<> inline double lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; double value = STRTOD( str, const_cast(&endOfConversion) ); if( ( value == 0.0 && str == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } template<> inline int lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; int value = (int) strtol( str, const_cast(&endOfConversion), 0 ); if( ( value == 0 && str == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } template<> inline long lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; long value = strtol( str, const_cast(&endOfConversion), 0 ); if( ( value == 0l && str == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } template<> inline unsigned int lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; unsigned int value = (unsigned int) strtoul( str, const_cast(&endOfConversion), 0 ); if( ( value == 0u && str == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } template<> inline unsigned long lexical_cast( const char*& str ) { errno = 0; const char* endOfConversion = str; unsigned long value = strtoul( str, const_cast(&endOfConversion), 0 ); if( ( value == 0ul && stringToConvert == endOfConversion ) || // error: conversion could not be performed errno != 0 ) // error: overflow or underflow throw bad_lexical_cast();//throw bad_lexical_cast( std::type_info( str ), std::type_info( value ) ); return value; } */ } // boost #endif // _OPTIMIZED_LEXICAL_CAST_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/random_access_compressed_ifstream.cpp000066400000000000000000001423031444255175000277300ustar00rootroot00000000000000// $Id$ // // This is just an istream which chooses its streambuf implementation // based on whether the file is gzipped or not. Could be extended // to work with other compression formats, too. // // What makes it interesting compared to the classic gzstream implementation // is the ability to perform seeks in a reasonably efficient manner. In the // event that a seek is requested (other than a rewind, or tellg()) the file // is decompressed once and snapshots of the compression state are made // every 1MB or so. Further seeks are then quite efficient since they don't // have to begin at the head of the file. // // It also features threaded readahead with adaptive buffering - it will read // increasingly larger chunks of the raw file as it perceives a sequential read // in progress, and will launch a thread to grab the next probable chunk of the // file while the previous chunk is being parsed. This is especially helpful for // files being read across a slow network connection. // If lots of seeking is going on, and the buffer size proves excessive, the read // buffer size decreases. This is also true for the non-compressed case, so this // is generally useful for file read speed optimization. // // draws heavily on example code from the zlib distro, so // for conditions of distribution and use, see copyright notice in zlib.h // // Copyright (C) Insilicos LLC 2008,2011 ALl Rights Reserved. // For conditions of distribution and use, see copyright notice in zlib.h // // based on: /* gzio.c -- IO on .gz files * Copyright (C) 1995-2005 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h Main idea there is as follows: This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ // efficient random access stuff based on /* zran.c -- example of zlib/gzip stream indexing and random access * Copyright (C) 2005 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h Version 1.0 29 May 2005 Mark Adler */ #define PWIZ_SOURCE #include #include "zlib.h" #include "random_access_compressed_ifstream.hpp" #include #include #include #include #include #include #include #include "pwiz/utility/misc/Std.hpp" #include #include #include #if defined(_MSC_VER) || defined(__MINGW32__) // MSVC or MinGW #include #else #include #include #endif namespace pwiz { namespace util { #ifndef Z_BUFSIZE # ifdef MAXSEG_64K # define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ # else # define Z_BUFSIZE 16384 # endif #endif #define DECOMPRESS_BUFSIZE 16384 #define DEFAULT_CHUNKY_BUFSIZE 32768 #define MAX_CHUNKY_BUFSIZE DEFAULT_CHUNKY_BUFSIZE*1024 #define ALLOC(size) malloc(size) #define TRYFREE(p) {if (p) free(p); p=NULL;} static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ /* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ #define SPAN 1048576L /* desired distance between access points */ #define WINSIZE 32768U /* sliding window size */ #define CHUNK 16384 /* file input buffer size */ /* access point entry */ class synchpoint { public: random_access_compressed_ifstream_off_t out; /* corresponding offset in uncompressed data */ random_access_compressed_ifstream_off_t in; /* offset in input file of first full byte */ z_stream *state; // stream state }; // // here's where the real customization of the stream happens // class chunky_streambuf; // forward ref class random_access_compressed_streambuf : public std::streambuf { friend class random_access_compressed_ifstream; // so we can modify some behaviors public: random_access_compressed_streambuf(chunky_streambuf *rdbuf); // ctor virtual ~random_access_compressed_streambuf(); bool is_open() const; chunky_streambuf *close(); // close file and hand back readbuf protected: virtual pos_type seekoff(off_type off, std::ios_base::seekdir way, std::ios_base::openmode which = std::ios_base::in); // we don't do out virtual pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in); // we don't do out virtual int_type underflow(); // repopulate the input buffer private: std::streampos my_seekg(std::streampos offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode); // streampos not the same as streamoff, esp in win32 z_stream stream; int z_err; /* error code for last stream operation */ int z_eof; /* set if end of input file */ std::istream *infile; /* raw .gz file we're reading */ Byte *inbuf; /* input buffer */ Byte *outbuf; /* output buffer */ uLong crc; /* crc32 of uncompressed data */ random_access_compressed_ifstream_off_t start; /* start of compressed data in file (header skipped) */ random_access_compressed_ifstream_off_t uncompressedLength; /* total length of uncompressed file */ std::streampos last_seek_pos; /* last requested seek position (uncompressed) */ std::streampos outbuf_headpos; /* filepos for head of outbuf */ std::streamoff outbuf_len; /* length of outbuf last time we populated it */ std::vector index; // index for random access /* Add an entry to the access point list. */ synchpoint *addIndexEntry(random_access_compressed_ifstream_off_t in, random_access_compressed_ifstream_off_t out); // gzip stuff int do_flush(int flush); int get_byte(); int get_buf(int len); void check_header(); int destroy(); uLong getLong(); int build_index(); void update_istream_ptrs(std::streampos new_headpos,int new_buflen,int new_posoffset=0) { outbuf_headpos = new_headpos; // note the decompressed filepos corresponding to buf head outbuf_len = new_buflen; // how many bytes in the buffer are consumable? // declare first, next, last for istream use setg((char *)outbuf,(char *)outbuf+new_posoffset,(char *)outbuf + new_buflen); } std::streampos get_next_read_pos() { return outbuf_headpos+boost::iostreams::offset_to_position(gptr()-(char *)outbuf); } bool pos_is_in_outbuf(std::streampos pos) { return ((outbuf_headpos <= pos) && (pos < (outbuf_headpos + outbuf_len))); } }; class chunky_streambuf : public std::streambuf { public: chunky_streambuf(); virtual ~chunky_streambuf(); bool open(const char *path); bool is_open() const; void close(); virtual pos_type seekoff(off_type off, std::ios_base::seekdir way, std::ios_base::openmode which = std::ios_base::in); // we don't do out virtual pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in); // we don't do out virtual int_type underflow(); // repopulate the input buffer std::streampos my_seekg(boost::iostreams::stream_offset offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode); // streampos not the same as streamoff, esp in win32 boost::iostreams::file_descriptor_source *handle; /* handle of file we're reading */ char *path; /* path name for debugging only */ size_t desired_readbuf_len; /* dynamic sizing of disk reads */ boost::iostreams::stream_offset last_seek_pos; /* last requested seek position */ #define N_INBUFS 3 // lookback, current, readahead struct { Byte *filereadbuf; /* file read buffer */ size_t maxbufsize; /* size of read buffer */ boost::iostreams::stream_offset readbuf_head_filepos; /* filepos for head of readbuf */ std::streamsize readbuf_len; /* length of readbuf last time we populated it */ std::streamsize readbuf_requested_len; /* number of bytes we actually tried to load */ boost::iostreams::stream_offset chars_used; /* number of chars actually read out of buffer */ } inbuf[N_INBUFS]; // read out of one while the other populates in another thread int current_inbuf; int readerThread_inbuf; boost::thread *readerThread; boost::iostreams::stream_offset flen; /* unknown until first SEEK_END */ inline void test_invariant() const { #ifdef _DEBUG assert(gptr()>=(char *)inbuf[current_inbuf].filereadbuf); assert(gptr()<=(char *)inbuf[current_inbuf].filereadbuf+inbuf[current_inbuf].readbuf_len); #endif } inline boost::iostreams::stream_offset &readbuf_head_filepos() { return inbuf[current_inbuf].readbuf_head_filepos; } inline boost::iostreams::stream_offset &readbuf_head_filepos(int n) { return inbuf[n].readbuf_head_filepos; } inline Byte* &filereadbuf() { /* file read buffer */ return inbuf[current_inbuf].filereadbuf; /* file read buffer */ } inline Byte* &filereadbuf(int n) { /* file read buffer */ return inbuf[n].filereadbuf; /* file read buffer */ } inline size_t &maxbufsize() { /* size of read buffer */ return inbuf[current_inbuf].maxbufsize; /* size of read buffer */ } inline size_t &maxbufsize(int n) { /* size of read buffer */ return inbuf[n].maxbufsize; /* size of read buffer */ } inline std::streamsize &readbuf_len() { /* length of readbuf last time we populated it */ return inbuf[current_inbuf].readbuf_len; /* length of readbuf last time we populated it */ } inline std::streamsize &readbuf_len(int n) { /* length of readbuf last time we populated it */ return inbuf[n].readbuf_len; /* length of readbuf last time we populated it */ } inline std::streamsize &readbuf_requested_len() { /* bytes we tried to read last time we populated it */ return inbuf[current_inbuf].readbuf_requested_len; } inline std::streamsize &readbuf_requested_len(int n) { /* bytes we tried to read last time we populated it */ return inbuf[n].readbuf_requested_len; } inline void resize_readbufs(size_t newsize) { newsize = (newsize < DEFAULT_CHUNKY_BUFSIZE) ? DEFAULT_CHUNKY_BUFSIZE : newsize; newsize = (newsize > MAX_CHUNKY_BUFSIZE) ? MAX_CHUNKY_BUFSIZE : newsize; this->desired_readbuf_len = newsize; int hotbuf = find_readbuf_for_gptr(); for (int n=N_INBUFS;n--;) { if (newsize > this->maxbufsize(n)) { Byte * newbuf = (Byte *)realloc(this->filereadbuf(n),newsize); if (newbuf) { this->filereadbuf(n) = newbuf; this->maxbufsize(n) = newsize; if (n==hotbuf) { // let parent know we moved the read buffer // declare first, next, last for istream use setg((char *)newbuf, (char *)newbuf+(gptr()-eback()), (char *)newbuf + this->readbuf_len(n)); test_invariant(); } } else { // Failed to reallocate. So, stick with the old size and stop trying. this->desired_readbuf_len = this->maxbufsize(n); break; } } } } inline bool shortread(int n) const { test_invariant(); return ((inbuf[n].readbuf_requested_len > 0) && (inbuf[n].readbuf_requested_len != inbuf[n].readbuf_len)); } inline boost::iostreams::stream_offset &chars_used() { /* number of chars actually read out of buffer */ test_invariant(); return inbuf[current_inbuf].chars_used; /* number of chars actually read out of buffer */ } std::streamsize readBuffer(int inbuf, boost::iostreams::stream_offset headpos, size_t readlen) { inbuf = inbuf%N_INBUFS; test_invariant(); std::streamsize nread = this->handle->read((char *)this->filereadbuf(inbuf), readlen); // cout << headpos << " read " << nread << " ask " << readlen << "\n"; if (nread > 0) { // in case of eof, leave current buffer state alone test_invariant(); this->readbuf_len(inbuf) = nread; this->readbuf_head_filepos(inbuf) = headpos; this->readbuf_requested_len(inbuf) = readlen; test_invariant(); return nread; } else { test_invariant(); return 0; } } void set_inbuf(int bufnum, boost::iostreams::stream_offset readpos) { // for reusing an already loaded buffer bufnum = bufnum%N_INBUFS; set_inbuf(bufnum,readbuf_head_filepos(bufnum),readbuf_len(bufnum),readpos,readbuf_requested_len(bufnum)); } void set_inbuf(int bufnum,boost::iostreams::stream_offset headpos, size_t readlen, boost::iostreams::stream_offset readpos, size_t requested_readlen) { current_inbuf = bufnum%N_INBUFS; update_istream_ptrs(headpos,readlen,readpos-headpos); inbuf[current_inbuf].readbuf_requested_len = requested_readlen; } void update_istream_ptrs(boost::iostreams::stream_offset new_headpos,int new_buflen,int new_posoffset=0) { readbuf_head_filepos() = new_headpos; // note the filepos corresponding to buf head readbuf_len() = new_buflen; // how many bytes in the buffer? if (new_buflen) { // not just a reset to provoke underflow int n = find_readbuf_for_gptr(); if (n>=0) inbuf[n].chars_used = this->gptr()-this->eback(); // note usage of old buffer } // declare first, next, last for istream use setg((char *)filereadbuf(),(char *)filereadbuf()+new_posoffset,(char *)filereadbuf() + new_buflen); test_invariant(); } boost::iostreams::stream_offset get_next_read_pos() { test_invariant(); return readbuf_head_filepos()+(gptr()-(char *)filereadbuf()); } bool pos_is_in_readbuf(boost::iostreams::stream_offset pos) { test_invariant(); return ((readbuf_head_filepos() <= pos) && (pos < (readbuf_head_filepos() + readbuf_len()))); } int find_readbuf_for_gptr() { for (int n=N_INBUFS;n--;) { if (inbuf[n].filereadbuf && ((char *)inbuf[n].filereadbuf<=gptr()) && (gptr() <= ((char *)inbuf[n].filereadbuf + inbuf[n].readbuf_len))) { return n; } } return -1; } int find_readbuf_for_pos(boost::iostreams::stream_offset pos) { test_invariant(); for (int n=N_INBUFS;n--;) { if (((!readerThread) || (n!=readerThread_inbuf)) && // don't mess with an active read (readbuf_head_filepos(n) <= pos) && (pos < (readbuf_head_filepos(n) + readbuf_len(n)))) { return n; } } // didn't find it - maybe we're loading it? if (readerThread) { this->readerThread->join(); // wait for completion int n = readerThread_inbuf; delete this->readerThread; this->readerThread = NULL; if ((readbuf_head_filepos(n) <= pos) && (pos < (readbuf_head_filepos(n) + readbuf_len(n)))) { return n; } } return -1; } bool physical_seek(const std::streampos &pos) { return physical_seek(boost::iostreams::position_to_offset(pos)); } bool physical_seek(const boost::iostreams::stream_offset &off) { if (off >= 0) { this->handle->seek(off,std::ios_base::beg); return true; } return false; } }; #define gzio_raw_readerror(s) (s->infile->bad()) // default ctor PWIZ_API_DECL random_access_compressed_ifstream::random_access_compressed_ifstream() : std::istream(new chunky_streambuf()) { compressionType = NONE; } // constructor PWIZ_API_DECL random_access_compressed_ifstream::random_access_compressed_ifstream(const char *path) : std::istream(new chunky_streambuf()) { open(path); } PWIZ_API_DECL void random_access_compressed_ifstream::open(const char *path) { chunky_streambuf *fb = (chunky_streambuf *)rdbuf(); // cout << "opening "<open(path)) { // check for gzip magic header gzipped = ((fb->sbumpc() == gz_magic[0]) && (fb->sbumpc() == gz_magic[1])); fb->pubseekpos(0); // rewind if (gzipped) { // replace streambuf with gzip handler (handing it current rdbuf) rdbuf( new random_access_compressed_streambuf( (chunky_streambuf *)rdbuf() )); compressionType = GZIP; } } else { this->setstate(std::ios::failbit); // could not open, set the fail flag } } PWIZ_API_DECL bool random_access_compressed_ifstream::is_open() const { // for ease of use as ifstream replacement if (NONE == compressionType) { return ((chunky_streambuf *)rdbuf())->is_open(); } else { return ((random_access_compressed_streambuf *)rdbuf())->is_open(); } } PWIZ_API_DECL void random_access_compressed_ifstream::close() { // cout << "close\n"; if (rdbuf()) { if (NONE != compressionType) { // retrieve rdbuf from gzip handler rdbuf(((random_access_compressed_streambuf *)rdbuf())->close()); } ((chunky_streambuf *)rdbuf())->close(); compressionType = NONE; } } PWIZ_API_DECL random_access_compressed_ifstream::~random_access_compressed_ifstream() { close(); delete rdbuf(NULL); } random_access_compressed_streambuf::random_access_compressed_streambuf(chunky_streambuf *rawbuf) { int err; this->stream.zalloc = (alloc_func)0; this->stream.zfree = (free_func)0; this->stream.opaque = (voidpf)0; this->stream.next_in = this->inbuf = Z_NULL; this->stream.next_out = this->outbuf = Z_NULL; this->stream.avail_in = this->stream.avail_out = 0; this->last_seek_pos = -1; this->infile = new istream(rawbuf); // dynamic disk buffer size this->z_err = Z_OK; this->z_eof = 0; this->crc = crc32(0L, Z_NULL, 0); if ((this->infile->fail())) { this->destroy(); return; } this->stream.next_in = this->inbuf = (Byte*)ALLOC(Z_BUFSIZE); this->outbuf = (Byte*)ALLOC(DECOMPRESS_BUFSIZE); err = inflateInit2(&(this->stream), -MAX_WBITS); /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are * present after the compressed stream. */ if (err != Z_OK || this->inbuf == Z_NULL) { this->destroy(); return; } this->stream.avail_out = DECOMPRESS_BUFSIZE; errno = 0; this->check_header(); /* skip the .gz header */ this->infile->clear(); // clear eof flag for short files this->start = this->infile->tellg() - (std::streamoff)(this->stream.avail_in); this->update_istream_ptrs(0,0); // we're pointed at head of file, but no read yet } bool random_access_compressed_streambuf::is_open() const { // for ifstream-ish-ness return true; // only ever exist when file is open } chunky_streambuf * random_access_compressed_streambuf::close() { // for ifstream-ish-ness chunky_streambuf *rawbuf = (chunky_streambuf *) this->infile->rdbuf(); // preserve this->infile->rdbuf(NULL); this->destroy(); return rawbuf; // hand it back to parent } random_access_compressed_streambuf::~random_access_compressed_streambuf() { this->destroy(); } /* =========================================================================== Read a byte from a random_access_gzstream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. */ int random_access_compressed_streambuf::get_byte() { if (this->z_eof) { return EOF; } if (this->stream.avail_in == 0) { errno = 0; this->infile->read((char *)this->inbuf, Z_BUFSIZE); this->stream.avail_in = this->infile->gcount(); // how many did we read? if (this->stream.avail_in <= 0) { this->z_eof = 1; if (gzio_raw_readerror(this)) { this->z_err = Z_ERRNO; } else if (this->infile->eof()) { this->infile->clear(); // clear eof flag } return EOF; } this->stream.next_in = this->inbuf; } this->stream.avail_in--; return *(this->stream.next_in)++; } /* =========================================================================== Check the gzip header of a random_access_gzstream opened for reading. set this->err to Z_DATA_ERROR if the magic header is not present, or present but the rest of the header is incorrect. IN assertion: the stream s has already been created sucessfully; this->stream.avail_in is zero for the first time, but may be non-zero for concatenated .gz files. */ void random_access_compressed_streambuf::check_header() { int method; /* method byte */ int flags; /* flags byte */ uInt len; int c; /* Assure two bytes in the buffer so we can peek ahead -- handle case where first byte of header is at the end of the buffer after the last gzip segment */ len = this->stream.avail_in; if (len < 2) { if (len) { this->inbuf[0] = this->stream.next_in[0]; } errno = 0; this->infile->read((char *)(this->inbuf + len), Z_BUFSIZE >> len); len = this->infile->gcount(); if (len <= 0 && gzio_raw_readerror(this)) { this->z_err = Z_ERRNO; } this->stream.avail_in += len; this->stream.next_in = this->inbuf; if (this->stream.avail_in < 2) { if (this->stream.avail_in) { this->z_err = Z_DATA_ERROR; } return; } } /* Peek ahead to check the gzip magic header */ if (this->stream.next_in[0] != gz_magic[0] || this->stream.next_in[1] != gz_magic[1]) { this->z_err = Z_DATA_ERROR; return; } this->stream.avail_in -= 2; this->stream.next_in += 2; /* Check the rest of the gzip header */ method = this->get_byte(); flags = this->get_byte(); if (method != Z_DEFLATED || (flags & RESERVED) != 0) { this->z_err = Z_DATA_ERROR; return; } /* Discard time, xflags and OS code: */ for (len = 0; len < 6; len++) { this->get_byte(); } if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ len = (uInt)this->get_byte(); len += ((uInt)this->get_byte())<<8; /* len is garbage if EOF but the loop below will quit anyway */ while (len-- != 0 && this->get_byte() != EOF) ; } if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ while ((c = this->get_byte()) != 0 && c != EOF) ; } if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ while ((c = this->get_byte()) != 0 && c != EOF) ; } if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ for (len = 0; len < 2; len++) { this->get_byte(); } } this->z_err = this->z_eof ? Z_DATA_ERROR : Z_OK; } /* =========================================================================== * Cleanup then free the given random_access_gzstream. Return a zlib error code. Try freeing in the reverse order of allocations. */ int random_access_compressed_streambuf::destroy () { int err = Z_OK; bool bClosedOK=true; if (this->stream.state != NULL) { err = inflateEnd(&(this->stream)); if (this->infile) { delete this->infile; } this->infile = NULL; } // clean up the seek index list if any for (int i=(int)this->index.size();i--;) { inflateEnd(this->index[i]->state); delete this->index[i]->state; delete this->index[i]; } this->index.clear(); // set length 0 if (!bClosedOK) { #ifdef ESPIPE if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ #endif err = Z_ERRNO; } if (this->z_err < 0) { err = this->z_err; } TRYFREE(this->inbuf); TRYFREE(this->outbuf); return err; } // // this gets called each time ifstream uses up its input buffer // random_access_compressed_streambuf::int_type random_access_compressed_streambuf::underflow() { int nread = 0; int len = DECOMPRESS_BUFSIZE; // we'll try to read the next full chunk if (this->last_seek_pos >= 0) { // we had a seek request /* here's where we tear out the inefficient default seek behavior and replace with the stuff from zran.c - bpratt */ /* Use the index to read len bytes from offset into buf, return bytes read or negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past the end of the uncompressed data, then extract() will return a value less than len, indicating how much as actually read into buf. This function should not return a data error unless the file was modified since the index was generated. extract() may also return Z_ERRNO if there is an error on reading or seeking the input file. */ int skip, ret; unsigned char *discard = new unsigned char[WINSIZE]; random_access_compressed_ifstream_off_t offset = boost::iostreams::position_to_offset(this->last_seek_pos); // last requested absolute uncompress filepos std::streampos next_read_pos = this->last_seek_pos; // will be new outbuf head pos this->last_seek_pos = -1; // satisfied it // first locate the index entry which will get us at or just before target size_t ind = this->index.size(); while (--ind && this->index[ind]->out > offset); // and prepare to decompress synchpoint *synch = this->index[ind]; inflateEnd(&this->stream); // tidy up old ptrs inflateCopy(&this->stream,synch->state); z_stream &strm = this->stream; assert(strm.total_in == synch->in-this->start); this->infile->clear(); // clear eof flag if any this->infile->seekg(boost::iostreams::offset_to_position(synch->in)); /* skip uncompressed bytes until offset reached */ offset -= synch->out; // now offset is the number of uncompressed bytes we need to skip strm.avail_in = 0; // inflateCopy doesn't retain the input buffer skip = 1; /* while skipping to offset */ do { /* define where to put uncompressed data, and how much */ if (offset == 0 && skip) { /* at offset now */ strm.avail_out = len; strm.next_out = (Bytef *)this->outbuf; skip = 0; /* only do this once */ } if (offset > WINSIZE) { /* skip WINSIZE bytes */ strm.avail_out = WINSIZE; strm.next_out = discard; offset -= WINSIZE; } else if (offset != 0) { /* last skip */ strm.avail_out = (unsigned)offset; strm.next_out = discard; offset = 0; } /* uncompress until avail_out filled, or end of stream */ do { if (strm.avail_in == 0) { this->infile->read((char *)this->inbuf, CHUNK); strm.avail_in = this->infile->gcount(); if (gzio_raw_readerror(this)) { ret = Z_ERRNO; goto perform_seek_ret; } else if (this->infile->eof()) { this->infile->clear(); // clear eof flag } if (strm.avail_in == 0) { ret = Z_DATA_ERROR; goto perform_seek_ret; } strm.next_in = this->inbuf; } ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ if (ret == Z_NEED_DICT) ret = Z_DATA_ERROR; if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) goto perform_seek_ret; if (ret == Z_STREAM_END) { break; } } while (strm.avail_out != 0); /* if reach end of stream, then don't keep trying to get more */ if (ret == Z_STREAM_END) { // reached EOF, clear fail bit this->infile->clear(); break; } /* do until offset reached and requested data read, or stream ends */ } while (skip); nread = skip ? 0 : len - strm.avail_out; update_istream_ptrs(next_read_pos,nread); /* return error if any */ perform_seek_ret: delete []discard; } else { std::streampos buftailpos = get_next_read_pos(); // buf tail will be buf head unless we seek Bytef *start = (Bytef*)this->outbuf; /* starting point for crc computation */ Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ next_out = (Byte*)start; this->stream.next_out = next_out; this->stream.avail_out = len; while (this->stream.avail_out != 0) { if (this->stream.avail_in == 0 && !this->z_eof) { errno = 0; this->infile->read((char *)this->inbuf, Z_BUFSIZE); this->stream.avail_in = this->infile->gcount(); if (this->stream.avail_in <= 0) { this->z_eof = 1; if (gzio_raw_readerror(this)) { this->z_err = Z_ERRNO; break; } else if (this->infile->eof()) { this->infile->clear(); // clear eof flag } } this->stream.next_in = this->inbuf; } this->z_err = inflate(&(this->stream), Z_NO_FLUSH); if (this->z_err != Z_OK || this->z_eof) { break; } } this->crc = crc32(this->crc, start, (uInt)(this->stream.next_out - start)); if (len == (int)this->stream.avail_out && (this->z_err == Z_DATA_ERROR || this->z_err == Z_ERRNO)) { return traits_type::eof();; } nread = (int)(len - this->stream.avail_out); // how many bytes actually read? update_istream_ptrs(buftailpos,nread); // update outbuf head position, length } return (nread>0)?outbuf[0]:traits_type::eof(); } std::streampos random_access_compressed_streambuf::seekpos(std::streampos pos,std::ios_base::openmode Mode) { return my_seekg(pos,std::ios_base::beg,Mode); } std::streampos random_access_compressed_streambuf::seekoff(std::streamoff offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode) { return my_seekg(boost::iostreams::offset_to_position(offset),whence,Mode); } std::streampos random_access_compressed_streambuf::my_seekg(std::streampos offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode) { if (this->z_err == Z_ERRNO || this->z_err == Z_DATA_ERROR) { return -1; } // watch out for a simple rewind or tellg if (0==offset) { if (whence == std::ios_base::cur) { if (this->last_seek_pos >= 0 ) { // unsatisfied seek request return last_seek_pos; // that's where we'd be if we'd actually seeked } else { return get_next_read_pos(); // nothing to do } } if ((whence == std::ios_base::beg) && // just a rewind !this->index.size()) { // no index yet // do we already have this decompressed? if (pos_is_in_outbuf(offset) || // already in buffer (offset==outbuf_headpos)) // or buffer is not yet loaded, let underflow() do it { update_istream_ptrs(outbuf_headpos,outbuf_len); } else { // rewind without provoking index build this->stream.avail_in = 0; this->stream.avail_out = 0; this->stream.total_in = 0; this->stream.total_out = 0; this->stream.next_in = this->inbuf; this->crc = crc32(0L, Z_NULL, 0); (void)inflateReset(&this->stream); this->last_seek_pos = -1; // no need to seek this->infile->seekg(boost::iostreams::offset_to_position(this->start)); update_istream_ptrs(0,0); // blow the cache } return 0; } // end just a rewind and no index yet } // end if offset==0 this->z_err = Z_OK; this->z_eof = 0; /* find where in stream to start */ /* compute absolute position */ std::streampos pos = offset; if (whence == std::ios_base::cur) { pos += this->get_next_read_pos(); } else if (whence == std::ios_base::end) { if (!this->index.size()) { // first seek - build index this->build_index(); // sets uncompressedLength } pos += boost::iostreams::offset_to_position(this->uncompressedLength); } // do we already have this decompressed? if (pos_is_in_outbuf(pos)) { update_istream_ptrs(outbuf_headpos,outbuf_len,pos-outbuf_headpos); this->last_seek_pos = -1; // no need to actually seek } else { // just note the request for now, actually seek at read time this->last_seek_pos = pos; if (!this->index.size()) { // first seek - build index this->build_index(); } update_istream_ptrs(outbuf_headpos,0); // blow the cache } return pos; } /* =========================================================================== Reads a long in LSB order from the given random_access_gzstream. Sets z_err in case of error. */ uLong random_access_compressed_streambuf::getLong () { uLong x = (uLong)this->get_byte(); int c; x += ((uLong)this->get_byte())<<8; x += ((uLong)this->get_byte())<<16; c = this->get_byte(); if (c == EOF) { this->z_err = Z_DATA_ERROR; } x += ((uLong)c)<<24; return x; } // // from here we're stealing from zran.c // /* Add an entry to the access point list. */ synchpoint *random_access_compressed_streambuf::addIndexEntry(random_access_compressed_ifstream_off_t in, random_access_compressed_ifstream_off_t out) { /* fill in entry and increment how many we have */ synchpoint *next = new synchpoint(); if (next) { next->in = in; next->out = out; next->state = new z_stream; inflateCopy(next->state,&this->stream); this->index.push_back(next); } return next; } /* Make one entire pass through the compressed stream and build an index, with access points about every span bytes of uncompressed output -- span is chosen to balance the speed of random access against the memory requirements of the list, about 32K bytes per access point. Note that data after the end of the first zlib or gzip stream in the file is ignored. build_index() returns 0 on success, Z_MEM_ERROR for out of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a file read error. On success, *built points to the resulting index. */ int random_access_compressed_streambuf::build_index() { int ret; random_access_compressed_ifstream_off_t span=SPAN; random_access_compressed_ifstream_off_t totin, totout; /* our own total counters to avoid 4GB limit */ random_access_compressed_ifstream_off_t last; /* totout value of last access point */ unsigned char *input = new unsigned char[CHUNK]; unsigned char *window = new unsigned char[WINSIZE]; z_stream &strm = this->stream; /* initialize inflate */ this->stream.avail_in = 0; this->stream.avail_out = 0; this->stream.total_in = 0; this->stream.total_out = 0; this->stream.next_in = this->inbuf; this->crc = crc32(0L, Z_NULL, 0); ret = inflateReset(&strm); this->infile->clear(); // clear stale eof bit if any this->infile->seekg((std::streamoff)this->start); // rewind if (ret != Z_OK) { goto build_index_error; } /* inflate the input, maintain a sliding window, and build an index -- this also validates the integrity of the compressed data using the check information at the end of the gzip or zlib stream */ totout = last = 0; totin = this->start; this->addIndexEntry(totin,totout); // note head of file do { /* get some compressed data from input file */ this->infile->read((char *)input, CHUNK); strm.avail_in = this->infile->gcount(); if (gzio_raw_readerror(this)) { ret = Z_ERRNO; goto build_index_error; } if (strm.avail_in == 0) { ret = Z_DATA_ERROR; goto build_index_error; } strm.next_in = input; /* process all of that, or until end of stream */ do { /* reset sliding window if necessary */ if (strm.avail_out == 0) { strm.avail_out = WINSIZE; strm.next_out = window; } /* inflate until out of input, output, or at end of block -- update the total input and output counters */ totin += strm.avail_in; // note input filepos at start of inflate totout += strm.avail_out; // note uncompressed filepos prior to inflate ret = inflate(&strm, Z_BLOCK); /* return at end of block */ totin -= strm.avail_in; // if we use this as a synchpoint we'll have to repopulate the input buffer totout -= strm.avail_out; if (ret == Z_NEED_DICT) ret = Z_DATA_ERROR; if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) goto build_index_error; if (ret == Z_STREAM_END) { // reached end successfully this->infile->clear(); // clear the fail bit break; } /* add an index entry every 'span' bytes */ if (( totout - last) > span) { if (!this->addIndexEntry(totin,totout)) { ret = Z_MEM_ERROR; goto build_index_error; } last = totout; } } while (strm.avail_in != 0); } while (ret != Z_STREAM_END); /* return index (release unused entries in list) */ this->uncompressedLength = totout; /* return error */ build_index_error: delete[] window; delete[] input; return ret; } // // stuff for an ifstream with a really big buffer and smarter seek // // chunky_streambuf::chunky_streambuf() { this->handle = NULL; this->flen = 0; this->path = NULL; this->readerThread = NULL; this->desired_readbuf_len = DEFAULT_CHUNKY_BUFSIZE; this->last_seek_pos = -1; for (this->current_inbuf=N_INBUFS;this->current_inbuf--;) { this->inbuf[current_inbuf].chars_used = 0; this->inbuf[current_inbuf].filereadbuf = NULL; } this->current_inbuf = 0; } bool chunky_streambuf::open(const char *path) { if (!path) { return false; } boost::filesystem::detail::utf8_codecvt_facet utf8; this->handle = new boost::iostreams::file_descriptor_source(boost::filesystem::path(path, utf8)); this->flen = 0; this->desired_readbuf_len = 0; // dynamic read buffer sizing - start small for (this->current_inbuf=N_INBUFS;this->current_inbuf--;) { this->chars_used() = 0; this->readbuf_len() = 0; this->readbuf_head_filepos() = -1; this->filereadbuf() = NULL; this->maxbufsize() = 0; } // allocate a modest read buffer (we'll grow it if that makes // sense for how the file is being read) this->resize_readbufs(4*DEFAULT_CHUNKY_BUFSIZE); // alloc moderately this->resize_readbufs(DEFAULT_CHUNKY_BUFSIZE); // but start small for (this->current_inbuf=N_INBUFS;this->current_inbuf--;) { if (!this->filereadbuf()) { return false; // no memory } } this->path = strdup(path); if ((this->path == NULL) || !this->is_open()) { return false; } this->set_inbuf(0,0,0,0,0); // we're pointed at head of file, but no read yet return true; } bool chunky_streambuf::is_open() const { // for ifstream-ish-ness return (this->handle && this->handle->is_open()); } void chunky_streambuf::close() { // for ifstream-ish-ness if (this->is_open()) { if (this->readerThread) { // were we working on a readahead? this->readerThread->join(); // wait for completion delete this->readerThread; this->readerThread = NULL; } delete this->handle; this->handle = NULL; } } chunky_streambuf::~chunky_streambuf() { // cout << "destroy\n"; this->close(); for (this->current_inbuf=N_INBUFS;this->current_inbuf--;) { TRYFREE(this->filereadbuf()); } TRYFREE(this->path); } // code for thread that reads the next chunk while we parse the current one void readAhead(chunky_streambuf *csb, int inbuf, boost::iostreams::stream_offset headpos, size_t readlen) { // cout << "t "; csb->readBuffer(inbuf, headpos, readlen); } // // this gets called each time ifstream uses up its input buffer // chunky_streambuf::int_type chunky_streambuf::underflow() { test_invariant(); std::streamsize nread = 0; boost::iostreams::stream_offset next_read_pos; if (this->last_seek_pos >= 0) { // we had a seek request int bufnum = find_readbuf_for_pos(this->last_seek_pos); // will wait for readahead thread if (bufnum>=0) { // found it already loaded set_inbuf(bufnum,last_seek_pos); std::streamsize offset = last_seek_pos-readbuf_head_filepos(); last_seek_pos = -1; // satisfied it test_invariant(); return filereadbuf()[offset]; } else { // actually need to read // did we leave a lot of chars unread in current buffer? if (chars_used() && (int)this->desired_readbuf_len > 2*chars_used()) { // reduce the read size a bit size_t newsize = DEFAULT_CHUNKY_BUFSIZE*(1+(chars_used()/DEFAULT_CHUNKY_BUFSIZE)); // ugh - why isn't min() portable this->resize_readbufs(newsize); } next_read_pos = this->last_seek_pos; // will be new outbuf head pos this->last_seek_pos = -1; // satisfied it if (this->physical_seek(next_read_pos)) { nread = readBuffer(current_inbuf+1,next_read_pos,this->desired_readbuf_len); if (nread) { set_inbuf(current_inbuf+1,next_read_pos); } } } } else { // we hit end of buffer - perhaps we are streaming? next_read_pos = get_next_read_pos(); int bufnum = find_readbuf_for_pos(next_read_pos); // will wait for readahead thread bool readahead_success = false; if (bufnum >= 0) { // already loaded set_inbuf(bufnum,next_read_pos); readahead_success = true; if (shortread(bufnum) || // eof after this buffer find_readbuf_for_pos(readbuf_head_filepos()+readbuf_len())>-1) { // fully cached - just get on with it test_invariant(); return filereadbuf()[get_next_read_pos()-readbuf_head_filepos()]; } } // are we making contiguous reads? int last_inbuf = find_readbuf_for_pos(readbuf_head_filepos()-1); bool streaming = ((last_inbuf>-1) && (find_readbuf_for_pos(readbuf_head_filepos(last_inbuf)-1)>-1)); // we read all of last buffer, try a bigger read now this->resize_readbufs(this->desired_readbuf_len*4); if (!readahead_success) { // need an immediate blocking read if (this->physical_seek(next_read_pos)) { nread = readBuffer(current_inbuf+1, next_read_pos, this->desired_readbuf_len); if (nread > 0) { // eof? set_inbuf(current_inbuf+1, next_read_pos); } } } else { nread = readbuf_len(); } if (nread && !readerThread && streaming && !shortread(current_inbuf)) { // not eof, not already reading, in sequential read mode // read the next chunk asynchronously in hopes we'll want that next readerThread_inbuf=(current_inbuf+1)%N_INBUFS; if (this->physical_seek(readbuf_head_filepos()+nread)) { readerThread = new boost::thread(readAhead, this, readerThread_inbuf, readbuf_head_filepos()+nread, this->desired_readbuf_len); } } } if (!nread) { return traits_type::eof(); } else { test_invariant(); return filereadbuf()[get_next_read_pos()-readbuf_head_filepos()]; } } std::streampos chunky_streambuf::seekpos(std::streampos pos,std::ios_base::openmode Mode) { return my_seekg(boost::iostreams::position_to_offset(pos),std::ios_base::beg,Mode); } std::streampos chunky_streambuf::seekoff(std::streamoff offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode) { return my_seekg(offset,whence,Mode); } std::streampos chunky_streambuf::my_seekg(boost::iostreams::stream_offset offset, std::ios_base::seekdir whence,std::ios_base::openmode Mode) { if (!this->is_open()) { return -1; } // watch out for a simple rewind or tellg if (0==offset) { if (whence == std::ios_base::cur) { if (this->last_seek_pos >= 0) { // unsatisfied seek request return last_seek_pos; // that's where we'd be if we'd actually seeked } else { return get_next_read_pos(); // nothing to do } } if (whence == std::ios_base::beg) { // just a rewind // do we already have this loaded? int n = find_readbuf_for_pos(0); if (n >= 0) { set_inbuf(n,0); } else { // rewind this->physical_seek(0); set_inbuf(current_inbuf+1,0,0,0,0); // blow the cache } last_seek_pos = -1; // no need to seek return 0; } // end just a rewind } // end if offset==0 /* find where in stream to start */ /* compute absolute position */ boost::iostreams::stream_offset pos = offset; if (whence == std::ios_base::cur) { pos += this->get_next_read_pos(); } else if (whence == std::ios_base::end) { if (!this->flen) { // length is unknown this->flen = boost::iostreams::position_to_offset(this->handle->seek(0,std::ios_base::end)); } pos = this->flen+pos; } // do we already have this loaded? int n = find_readbuf_for_pos(pos); // will wait for readhead if any if (n>=0) { set_inbuf(n,pos); this->last_seek_pos = -1; // no need to actually seek } else { // just note the request for now, actually seek at read time this->last_seek_pos = pos; set_inbuf(current_inbuf+1,0,0,0,0); // blow the cache } return pos; } } // namespace util } // namespace pwiz libpwizlite-3.0.5/src/pwiz/utility/misc/random_access_compressed_ifstream.hpp000066400000000000000000000100071444255175000277300ustar00rootroot00000000000000// $Id$ // // This is just an istream which chooses its streambuf implementation // based on whether the file is gzipped or not. Could be extended // to work with other compression formats, too. // // What makes it interesting compared to the classic gzstream implementation // is the ability to perform seeks in a reasonably efficient manner. In the // event that a seek is requested (other than a rewind, or tellg()) the file // is decompressed once and snapshots of the compression state are made // every 1MB or so. Further seeks are then quite efficient since they don't // have to begin at the head of the file. // // It also features threaded readahead with adaptive buffering - it will read // increasingly larger chunks of the raw file as it perceives a sequential read // in progress, and will launch a thread to grab the next probable chunk of the // file while the previous chunk is being parsed. This is especially helpful for // files being read across a slow network connection. // If lots of seeking is going on, and the buffer size proves excessive, the read // buffer size decreases. This is also true for the non-compressed case, so this // is generally useful for file read speed optimization. // // Copyright (C) Insilicos LLC 2008,2011 All Rights Reserved. // // draws heavily on example code from the zlib distro, so // for conditions of distribution and use, see copyright notice in zlib.h // // based on: /* gzio.c -- IO on .gz files * Copyright (C) 1995-2005 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h Main idea there is as follows: This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ // efficient random access stuff based on /* zran.c -- example of zlib/gzip stream indexing and random access * Copyright (C) 2005 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h Version 1.0 29 May 2005 Mark Adler */ #ifndef RANDOM_ACCESS_COMPRESSED_IFSTREAM_INCL #define RANDOM_ACCESS_COMPRESSED_IFSTREAM_INCL #include "pwiz/utility/misc/Export.hpp" #ifdef WIN32 #ifdef max //trouble with windef.h max(a,b) colliding with datatype.max() #undef max #undef min #endif #endif #include "boost/iostreams/positioning.hpp" #include namespace pwiz { namespace util { typedef boost::iostreams::stream_offset random_access_compressed_ifstream_off_t; //class random_access_compressed_streambuf; // forward ref class PWIZ_API_DECL random_access_compressed_ifstream : public std::istream { public: random_access_compressed_ifstream(); // default ctor random_access_compressed_ifstream(const char *fname); // optional arg to learn compression state virtual ~random_access_compressed_ifstream(); // destructor void open(const char *fname); // for ease of use as ifstream replacement bool is_open() const; // for ease of use as ifstream replacement void close(); // for ease of use as ifstream replacement enum eCompressionType {NONE, GZIP}; // maybe add bz2 etc later? eCompressionType getCompressionType() const { return compressionType; } private: eCompressionType compressionType; }; } // namespace util } // namespace pwiz #endif // RANDOM_ACCESS_COMPRESSED_IFSTREAM_INCL libpwizlite-3.0.5/src/pwiz/utility/misc/shared_map.hpp000066400000000000000000000256321444255175000231260ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2011 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _SHARED_MAP_HPP_ #define _SHARED_MAP_HPP_ #include #include namespace pwiz { namespace util { /// copy semantics of shared_ptr > with a std::map interface template, class _Alloc = std::allocator > > class shared_map { public: typedef std::map BaseType; typedef typename BaseType::allocator_type allocator_type; typedef typename BaseType::key_type key_type; typedef typename BaseType::value_type value_type; typedef typename BaseType::key_compare key_compare; typedef typename BaseType::value_compare value_compare; typedef typename BaseType::size_type size_type; typedef typename BaseType::mapped_type mapped_type; typedef typename BaseType::difference_type difference_type; typedef typename BaseType::pointer pointer; typedef typename BaseType::const_pointer const_pointer; typedef typename BaseType::reference reference; typedef typename BaseType::const_reference const_reference; typedef typename BaseType::iterator iterator; typedef typename BaseType::const_iterator const_iterator; typedef typename BaseType::reverse_iterator reverse_iterator; typedef typename BaseType::const_reverse_iterator const_reverse_iterator; private: boost::shared_ptr _base; public: /// Constructs an empty map that uses the predicate _Pred to order keys, if it is supplied. The map uses the allocator _Alloc for all storage management, if it is supplied. explicit shared_map(const key_compare& predicate = key_compare(), const allocator_type& allocator = allocator_type()) : _base(new BaseType(predicate, allocator)) { } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template shared_map(_Iter _First, _Iter _Last) : _base(new BaseType(key_compare(), allocator_type())) { for (; _First != _Last; ++_First) this->insert(*_First); } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template shared_map(_Iter _First, _Iter _Last, const key_compare& _Pred) : _base(new BaseType(_Pred, allocator_type())) { for (; _First != _Last; ++_First) this->insert(*_First); } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template shared_map(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _base(new BaseType(_Pred, _Al)) { for (; _First != _Last; ++_First) this->insert(*_First); } ~shared_map() {} /// Returns a copy of the allocator used by self for storage management. allocator_type get_allocator() const {return _base->get_allocator();} /// Returns an iterator pointing to the first element stored in the map. First is defined by the map's comparison operator, Compare. iterator begin() {return _base->begin();} /// Returns a const_iterator pointing to the first element stored in the map. const_iterator begin() const {return _base->begin();} /// Returns an iterator pointing to the last element stored in the map; in other words, to the off-the-end value. iterator end() {return _base->end();} /// Returns a const_iterator pointing to the last element stored in the map. const_iterator end() const {return _base->end();} /// Returns a reverse_iterator pointing to the first element stored in the map. First is defined by the map's comparison operator, Compare. reverse_iterator rbegin() {return _base->rbegin();} /// Returns a const_reverse_iterator pointing to the first element stored in the map. const_reverse_iterator rbegin() const {return _base->rbegin();} /// Returns a reverse_iterator pointing to the last element stored in the map; in other words, to the off-the-end value). reverse_iterator rend() {return _base->rend();} /// Returns a const_reverse_iterator pointing to the last element stored in the map. const_reverse_iterator rend() const {return _base->rend();} /// Replaces the contents of *this with a copy of the map x. shared_map& operator=(const shared_map& x) {_base = x._base; return *this;} /// If an element with the key x exists in the map, then a reference to its associated value is returned. Otherwise the pair x,T() is inserted into the map and a reference to the default object T() is returned. mapped_type& operator[](const key_type& x) {return (*_base)[x];} /// Erases all elements from the self. void clear() {_base->clear();} /// Returns a 1 if a value with the key x exists in the map. Otherwise returns a 0. size_type count(const key_type& x) const {return _base->count(x);} /// Returns true if the map is empty, false otherwise. bool empty() const {return _base->empty();} /// Returns the pair (lower_bound(x), upper_bound(x)). std::pair equal_range(const key_type& x) {return _base->equal_range(x);} /// Returns the pair (lower_bound(x), upper_bound(x)). std::pair equal_range(const key_type& x) const {return _base->equal_range(x);} /// Deletes the map element pointed to by the iterator position. void erase(iterator position) {_base->erase(position);} /// If the iterators start and finish point to the same map and last is reachable from first, all elements in the range [start, finish) are deleted from the map. void erase(iterator start, iterator finish) {_base->erase(start, finish);} /// Deletes the element with the key value x from the map, if one exists. Returns 1 if x existed in the map, 0 otherwise. size_type erase(const key_type& x) {return _base->erase(x);} /// Searches the map for a pair with the key value x and returns an iterator to that pair if it is found. If such a pair is not found the value end() is returned. iterator find(const key_type& x) {return _base->find(x);} /// Same as find above but returns a const_iterator. const_iterator find(const key_type& x) const {return _base->find(x);} /// If a value_type with the same key as x is not present in the map, then x is inserted into the map. Otherwise, the pair is not inserted. A position may be supplied as a hint regarding where to do the insertion. If the insertion is done right after position, then it takes amortized constant time. Otherwise it takes O(log N) time. std::pair insert(const value_type& x) {return _base->insert(x);} /// If a value_type with the same key as x is not present in the map, then x is inserted into the map. Otherwise, the pair is not inserted. A position may be supplied as a hint regarding where to do the insertion. If the insertion is done right after position, then it takes amortized constant time. Otherwise it takes O(log N) time. iterator insert(iterator position, const value_type& x) {return _base->insert(position, x);} /// Copies of each element in the range [start, finish) that possess a unique key (one not already in the map) are inserted into the map. The iterators start and finish must return values of type pair. This operation takes approximately O(N*log(size()+N)) time. template void insert(InputIterator start, InputIterator finish) {_base->insert(start, finish);} /// Returns a function object capable of comparing key values using the comparison operation, Compare, of the current map. key_compare key_comp() const {return _base->key_comp();} /// Returns a reference to the first entry with a key greater than or equal to x. iterator lower_bound(const key_type& x) {return _base->lower_bound(x);} /// Same as lower_bound above but returns a const_iterator. const_iterator lower_bound(const key_type& x) const {return _base->lower_bound(x);} /// Returns the maximum possible size of the map. This size is only constrained by the number of unique keys that can be represented by the type Key. size_type max_size() const {return _base->max_size();} /// Returns the number of elements in the map. size_type size() const {return _base->size();} /// Swaps the contents of the map x with the current map, *this. void swap(shared_map& x) {_base->swap(x._base);} /// Returns an iterator for the first entry with a key greater than x. iterator upper_bound(const key_type& x) {return _base->upper_bound(x);} /// Same as upper_bound above, but returns a const_iterator. const_iterator upper_bound(const key_type& x) const {return _base->upper_bound(x);} /// Returns a function object capable of comparing pair values using the comparison operation, Compare, of the current map. This function is identical to key_comp for sets. value_compare value_comp() const {return _base->value_comp();} }; } // namespace util } // namespace pwiz #endif // _SHARED_MAP_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/unit.hpp000066400000000000000000000215101444255175000217710ustar00rootroot00000000000000// // $Id$ // // // Original author: Darren Kessner // // Copyright 2006 Louis Warschaw Prostate Cancer Center // Cedars Sinai Medical Center, Los Angeles, California 90048 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _UNIT_HPP_ #define _UNIT_HPP_ #include "Exception.hpp" #include "DateTime.hpp" #include "Filesystem.hpp" #include "Stream.hpp" #include "pwiz/utility/math/round.hpp" #include #include namespace pwiz { namespace util { // // These are assertion macros for unit testing. They throw a runtime_error // exception on failure, instead of calling abort(), allowing the application // to recover and return an appropriate error value to the shell. // // unit_assert(x): asserts x is true // unit_assert_equal(x, y, epsilon): asserts x==y, within epsilon // unit_assert_matrices_equal(A, B, epsilon): asserts A==B, within epsilon // inline std::string unit_assert_message(const char* filename, int line, const char* expression) { std::ostringstream oss; oss << "[" << filename << ":" << line << "] Assertion failed: " << expression; return oss.str(); } inline std::string unit_assert_equal_message(const char* filename, int line, const std::string& x, const std::string& y, const char* expression) { std::ostringstream oss; oss << "[" << filename << ":" << line << "] Assertion failed: expected \"" << x << "\" but got \"" << y << "\" (" << expression << ")"; return oss.str(); } inline std::string unit_assert_numeric_equal_message(const char* filename, int line, double x, double y, double epsilon) { std::ostringstream oss; oss.precision(10); oss << "[" << filename << ":" << line << "] Assertion failed: |" << x << " - " << y << "| < " << epsilon; return oss.str(); } inline std::string unit_assert_exception_message(const char* filename, int line, const char* expression, const std::string& exception) { std::ostringstream oss; oss << "[" << filename << ":" << line << "] Assertion \"" << expression << "\" failed to throw " << exception; return oss.str(); } inline std::string quote_string(const string& str) {return "\"" + str + "\"";} #define unit_assert(x) \ (!(x) ? throw std::runtime_error(unit_assert_message(__FILE__, __LINE__, #x)) : 0) #define unit_assert_to_stream(x, os) \ ((os) << (!(x) ? unit_assert_message(__FILE__, __LINE__, #x) + "\n" : "")) #define unit_assert_operator_equal(expected, actual) \ (!((expected) == (actual)) ? throw std::runtime_error(unit_assert_equal_message(__FILE__, __LINE__, lexical_cast(expected), lexical_cast(actual), #actual)) : 0) #define unit_assert_operator_equal_to_stream(expected, actual, os) \ ((os) << (!((expected) == (actual)) ? unit_assert_equal_message(__FILE__, __LINE__, lexical_cast(expected), lexical_cast(actual), #actual) + "\n" : "")) #define unit_assert_equal(x, y, epsilon) \ (!(fabs((x)-(y)) <= (epsilon)) ? throw std::runtime_error(unit_assert_numeric_equal_message(__FILE__, __LINE__, (x), (y), (epsilon))) : 0) #define unit_assert_equal_to_stream(x, y, epsilon, os) \ ((os) << (!(fabs((x)-(y)) <= (epsilon)) ? unit_assert_numeric_equal_message(__FILE__, __LINE__, (x), (y), (epsilon)) + "\n" : "")) #define unit_assert_throws(x, exception) \ { \ bool threw = false; \ try { (x); } \ catch (exception&) \ { \ threw = true; \ } \ if (!threw) \ throw std::runtime_error(unit_assert_exception_message(__FILE__, __LINE__, #x, #exception)); \ } #define unit_assert_throws_what(x, exception, whatStr) \ { \ bool threw = false; \ try { (x); } \ catch (exception& e) \ { \ if (e.what() == std::string(whatStr)) \ threw = true; \ else \ throw std::runtime_error(unit_assert_exception_message(__FILE__, __LINE__, #x, std::string(#exception)+" "+quote_string(whatStr)+"\nBut a different exception was thrown: ")+quote_string(e.what())); \ } \ if (!threw) \ throw std::runtime_error(unit_assert_exception_message(__FILE__, __LINE__, #x, std::string(#exception)+" "+quote_string(whatStr))); \ } #define unit_assert_matrices_equal(A, B, epsilon) \ unit_assert(boost::numeric::ublas::norm_frobenius((A)-(B)) < (epsilon)) #define unit_assert_vectors_equal(A, B, epsilon) \ unit_assert(boost::numeric::ublas::norm_2((A)-(B)) < (epsilon)) // the following macros are used by the ProteoWizard tests to report test status and duration to TeamCity inline std::string escape_teamcity_string(const std::string& str) { string result = str; bal::replace_all(result, "'", "|'"); bal::replace_all(result, "\n", "|n"); bal::replace_all(result, "\r", "|r"); bal::replace_all(result, "|", "||"); bal::replace_all(result, "[", "|["); bal::replace_all(result, "]", "|]"); return result; } #define TEST_PROLOG_EX(argc, argv, suffix) \ bnw::args args(argc, argv); \ std::locale global_loc = std::locale(); \ std::locale loc(global_loc, new boost::filesystem::detail::utf8_codecvt_facet); \ bfs::path::imbue(loc); \ bfs::path testName = bfs::change_extension(bfs::basename(argv[0]), (suffix)); \ string teamcityTestName = pwiz::util::escape_teamcity_string(testName.string()); \ bpt::ptime testStartTime; \ vector testArgs(argv, argv+argc); \ bool teamcityTestDecoration = find(testArgs.begin(), testArgs.end(), "--teamcity-test-decoration") != testArgs.end(); \ if (teamcityTestDecoration) \ { \ testStartTime = bpt::microsec_clock::local_time(); \ cout << "##teamcity[testStarted name='" << teamcityTestName << "']" << endl; \ } \ int testExitStatus = 0; #define TEST_PROLOG(argc, argv) TEST_PROLOG_EX(argc, argv, "") #define TEST_FAILED(x) \ if (teamcityTestDecoration) \ cout << "##teamcity[testFailed name='" << teamcityTestName << "' message='" << pwiz::util::escape_teamcity_string((x)) << "']\n"; \ cerr << (x) << endl; \ testExitStatus = 1; #define TEST_EPILOG \ if (teamcityTestDecoration) \ cout << "##teamcity[testFinished name='" << teamcityTestName << \ "' duration='" << round((bpt::microsec_clock::local_time() - testStartTime).total_microseconds() / 1000.0) << "']" << endl; \ return testExitStatus; } // namespace util } // namespace pwiz // without PWIZ_DOCTEST defined, disable doctest macros; when it is defined, doctest will be configured with main() #if !defined(PWIZ_DOCTEST) && !defined(PWIZ_DOCTEST_NO_MAIN) #ifndef __cplusplus_cli #define DOCTEST_CONFIG_DISABLE #include "libraries/doctest.h" #endif #else #define DOCTEST_CONFIG_IMPLEMENT #include "libraries/doctest.h" #ifndef PWIZ_DOCTEST_NO_MAIN int main(int argc, char* argv[]) { TEST_PROLOG(argc, argv) try { doctest::Context context; testExitStatus = context.run(); } catch (std::exception& e) { TEST_FAILED(e.what()) } catch (...) { TEST_FAILED("Caught unknown exception.") } TEST_EPILOG } #endif namespace std { template vector operator~(const vector& lhs) { vector result(lhs.size(), doctest::Approx(0)); for (size_t i = 0; i < lhs.size(); ++i) result[i] = doctest::Approx(lhs[i]); return result; } inline ostream& operator<< (ostream& o, const doctest::Approx& rhs) { o << rhs.toString(); return o; } template bool operator==(const vector& lhs, const vector& rhs) { if (doctest::isRunningInTest()) REQUIRE(lhs.size() == rhs.size()); else if (lhs.size() != rhs.size()) return false; for (size_t i = 0; i < lhs.size(); ++i) if (lhs[i] != rhs[i]) return false; return true; } template bool operator==(const vector& rhs, const vector& lhs) { return lhs == rhs; } } #endif #endif // _UNIT_HPP_ libpwizlite-3.0.5/src/pwiz/utility/misc/virtual_map.hpp000066400000000000000000000265531444255175000233510ustar00rootroot00000000000000// // $Id$ // // // Original author: Matt Chambers // // Copyright 2008 Spielberg Family Center for Applied Proteomics // Cedars Sinai Medical Center, Los Angeles, California 90048 // Copyright 2008 Vanderbilt University - Nashville, TN 37232 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _VIRTUAL_MAP_HPP_ #define _VIRTUAL_MAP_HPP_ #include namespace pwiz { namespace util { /// a wrapper for std::map that will behave properly with polymorphism template, class _Alloc = std::allocator > > class virtual_map { public: typedef std::map BaseType; typedef typename BaseType::allocator_type allocator_type; typedef typename BaseType::key_type key_type; typedef typename BaseType::value_type value_type; typedef typename BaseType::key_compare key_compare; typedef typename BaseType::value_compare value_compare; typedef typename BaseType::size_type size_type; typedef typename BaseType::mapped_type mapped_type; typedef typename BaseType::difference_type difference_type; typedef typename BaseType::pointer pointer; typedef typename BaseType::const_pointer const_pointer; typedef typename BaseType::reference reference; typedef typename BaseType::const_reference const_reference; typedef typename BaseType::iterator iterator; typedef typename BaseType::const_iterator const_iterator; typedef typename BaseType::reverse_iterator reverse_iterator; typedef typename BaseType::const_reverse_iterator const_reverse_iterator; private: BaseType _base; public: /// Constructs an empty map that uses the predicate _Pred to order keys, if it is supplied. The map uses the allocator _Alloc for all storage management, if it is supplied. explicit virtual_map(const key_compare& predicate = key_compare(), const allocator_type& allocator = allocator_type()) : _base(predicate, allocator) { } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template virtual_map(_Iter _First, _Iter _Last) : _base(key_compare(), allocator_type()) { for (; _First != _Last; ++_First) this->insert(*_First); } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template virtual_map(_Iter _First, _Iter _Last, const key_compare& _Pred) : _base(_Pred, allocator_type()) { for (; _First != _Last; ++_First) this->insert(*_First); } /// Constructs a map containing values in the range [_First, _Last). Creation of the new map is only guaranteed to succeed if the iterators start and finish return values of type pair and all values of Key in the range [_First, _Last) are unique. The map uses the predicate _Pred to order keys, and the allocator _Alloc for all storage management. template virtual_map(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _base(_Pred, _Al) { for (; _First != _Last; ++_First) this->insert(*_First); } virtual ~virtual_map() {} /// Returns a copy of the allocator used by self for storage management. virtual allocator_type get_allocator() const {return _base.get_allocator();} /// Returns an iterator pointing to the first element stored in the map. First is defined by the map's comparison operator, Compare. virtual iterator begin() {return _base.begin();} /// Returns a const_iterator pointing to the first element stored in the map. virtual const_iterator begin() const {return _base.begin();} /// Returns an iterator pointing to the last element stored in the map; in other words, to the off-the-end value. virtual iterator end() {return _base.end();} /// Returns a const_iterator pointing to the last element stored in the map. virtual const_iterator end() const {return _base.end();} /// Returns a reverse_iterator pointing to the first element stored in the map. First is defined by the map's comparison operator, Compare. virtual reverse_iterator rbegin() {return _base.rbegin();} /// Returns a const_reverse_iterator pointing to the first element stored in the map. virtual const_reverse_iterator rbegin() const {return _base.rbegin();} /// Returns a reverse_iterator pointing to the last element stored in the map; in other words, to the off-the-end value). virtual reverse_iterator rend() {return _base.rend();} /// Returns a const_reverse_iterator pointing to the last element stored in the map. virtual const_reverse_iterator rend() const {return _base.rend();} /// Replaces the contents of *this with a copy of the map x. virtual virtual_map& operator=(const virtual_map& x) {_base = x._base; return *this;} /// If an element with the key x exists in the map, then a reference to its associated value is returned. Otherwise the pair x,T() is inserted into the map and a reference to the default object T() is returned. virtual mapped_type& operator[](const key_type& x) {return _base[x];} /// Erases all elements from the self. virtual void clear() {_base.clear();} /// Returns a 1 if a value with the key x exists in the map. Otherwise returns a 0. virtual size_type count(const key_type& x) const {return _base.count(x);} /// Returns true if the map is empty, false otherwise. virtual bool empty() const {return _base.empty();} /// Returns the pair (lower_bound(x), upper_bound(x)). virtual std::pair equal_range(const key_type& x) {return _base.equal_range(x);} /// Returns the pair (lower_bound(x), upper_bound(x)). virtual std::pair equal_range(const key_type& x) const {return _base.equal_range(x);} /// Deletes the map element pointed to by the iterator position. virtual void erase(iterator position) {_base.erase(position);} /// If the iterators start and finish point to the same map and last is reachable from first, all elements in the range [start, finish) are deleted from the map. virtual void erase(iterator start, iterator finish) {_base.erase(start, finish);} /// Deletes the element with the key value x from the map, if one exists. Returns 1 if x existed in the map, 0 otherwise. virtual size_type erase(const key_type& x) {return _base.erase(x);} /// Searches the map for a pair with the key value x and returns an iterator to that pair if it is found. If such a pair is not found the value end() is returned. virtual iterator find(const key_type& x) {return _base.find(x);} /// Same as find above but returns a const_iterator. virtual const_iterator find(const key_type& x) const {return _base.find(x);} /// If a value_type with the same key as x is not present in the map, then x is inserted into the map. Otherwise, the pair is not inserted. A position may be supplied as a hint regarding where to do the insertion. If the insertion is done right after position, then it takes amortized constant time. Otherwise it takes O(log N) time. virtual std::pair insert(const value_type& x) {return _base.insert(x);} /// If a value_type with the same key as x is not present in the map, then x is inserted into the map. Otherwise, the pair is not inserted. A position may be supplied as a hint regarding where to do the insertion. If the insertion is done right after position, then it takes amortized constant time. Otherwise it takes O(log N) time. virtual iterator insert(iterator position, const value_type& x) {return _base.insert(position, x);} /// Copies of each element in the range [start, finish) that possess a unique key (one not already in the map) are inserted into the map. The iterators start and finish must return values of type pair. This operation takes approximately O(N*log(size()+N)) time. template void insert(InputIterator start, InputIterator finish) {_base.insert(start, finish);} /// Returns a function object capable of comparing key values using the comparison operation, Compare, of the current map. virtual key_compare key_comp() const {return _base.key_comp();} /// Returns a reference to the first entry with a key greater than or equal to x. virtual iterator lower_bound(const key_type& x) {return _base.lower_bound(x);} /// Same as lower_bound above but returns a const_iterator. virtual const_iterator lower_bound(const key_type& x) const {return _base.lower_bound(x);} /// Returns the maximum possible size of the map. This size is only constrained by the number of unique keys that can be represented by the type Key. virtual size_type max_size() const {return _base.max_size();} /// Returns the number of elements in the map. virtual size_type size() const {return _base.size();} /// Swaps the contents of the map x with the current map, *this. virtual void swap(virtual_map& x) {_base.swap(x._base);} /// Returns an iterator for the first entry with a key greater than x. virtual iterator upper_bound(const key_type& x) {return _base.upper_bound(x);} /// Same as upper_bound above, but returns a const_iterator. virtual const_iterator upper_bound(const key_type& x) const {return _base.upper_bound(x);} /// Returns a function object capable of comparing pair values using the comparison operation, Compare, of the current map. This function is identical to key_comp for sets. virtual value_compare value_comp() const {return _base.value_comp();} /// Access to backing map for serialization const BaseType& base() const {return _base;} /// Access to backing map for serialization BaseType& base() {return _base;} }; } // namespace util } // namespace pwiz #endif // _VIRTUAL_MAP_HPP_