diff -Nru libpwizlite-3.0.3/CMakeLists.txt libpwizlite-3.0.4/CMakeLists.txt --- libpwizlite-3.0.3/CMakeLists.txt 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/CMakeLists.txt 2022-02-09 10:59:48.000000000 +0000 @@ -13,10 +13,10 @@ set(PWIZLITE_VERSION_MAJOR "3") set(PWIZLITE_VERSION_MINOR "0") -set(PWIZLITE_VERSION_PATCH "3") +set(PWIZLITE_VERSION_PATCH "4") set(PWIZLITE_VERSION "${PWIZLITE_VERSION_MAJOR}.${PWIZLITE_VERSION_MINOR}.${PWIZLITE_VERSION_PATCH}") # This VERSION is parseable by the makeOrigTarball script. -set(VERSION 3.0.3) +set(VERSION 3.0.4) message(STATUS "${BoldYellow}CMAKE_LIBRARY_ARCHITECTURE: ${CMAKE_LIBRARY_ARCHITECTURE}${ColourReset}") @@ -161,10 +161,6 @@ set(CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}" ${CMAKE_PREFIX_PATH}) endif() -# Before going down the directories, create a variable to store -# all the platform-specific library to link to -set(PLATFORM_SPECIFIC_LINK_LIBRARIES "") - # Subdirectories message(STATUS "Adding subdirectory src for PROJECT: ${PROJECT}") add_subdirectory(src) diff -Nru libpwizlite-3.0.3/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake libpwizlite-3.0.4/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake --- libpwizlite-3.0.3/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/CMakeStuff/toolchains/win10-mingw64-toolchain.cmake 2022-02-09 10:59:48.000000000 +0000 @@ -19,7 +19,8 @@ # Specific library to link to: -set(PLATFORM_SPECIFIC_LINK_LIBRARIES "${PLATFORM_SPECIFIC_LINK_LIBRARIES} Psapi") +list(APPEND PLATFORM_SPECIFIC_LINK_LIBRARIES "psapi") +message(STATUS "Add psapi.dll as a win64-specific link-time dependency.") # On Win10 all the code is relocatable. remove_definitions(-fPIC) diff -Nru libpwizlite-3.0.3/debian/changelog libpwizlite-3.0.4/debian/changelog --- libpwizlite-3.0.3/debian/changelog 2020-12-12 12:07:55.000000000 +0000 +++ libpwizlite-3.0.4/debian/changelog 2022-02-09 10:59:15.000000000 +0000 @@ -1,8 +1,15 @@ -libpwizlite (3.0.3-1build1) hirsute; urgency=medium +libpwizlite (3.0.4-1) unstable; urgency=low - * No-change rebuild for boost soname change. + * New upstream release (downloaded 20220208), filename + pwiz-src-without-v-3_0_22039_5908c98.tar.bz2. - -- Matthias Klose Sat, 12 Dec 2020 13:07:55 +0100 + * Add debian/not-installed to document uninstalled files. + + * Standards-Version: 4.6.0 (no changes required). + + * Build-Depends: debhelper-compat (= 13). + + -- Filippo Rusconi Wed, 09 Feb 2022 11:59:15 +0100 libpwizlite (3.0.3-1) unstable; urgency=low @@ -38,7 +45,7 @@ libpwizlite (3.0.1-1) unreleased; urgency=low * New upstream version with new files to perform some - mass speak feature searching from the same + mass speak feature searching from the same ProteoWizard source tree as for version 3.0.0-1: pwiz-src-without-v-3_0_20155_05bff32-downloaded-20200603-19h19. diff -Nru libpwizlite-3.0.3/debian/control libpwizlite-3.0.4/debian/control --- libpwizlite-3.0.3/debian/control 2020-07-15 10:55:57.000000000 +0000 +++ libpwizlite-3.0.4/debian/control 2022-02-09 10:59:15.000000000 +0000 @@ -2,7 +2,7 @@ Priority: optional Maintainer: The Debichem Group Uploaders: Filippo Rusconi -Build-Depends: debhelper-compat (= 12), +Build-Depends: debhelper-compat (= 13), cmake (>=3.12), dh-exec (>= 0.3), dpkg-dev (>= 1.18.25), @@ -13,7 +13,7 @@ libboost-chrono-dev, zlib1g-dev, python3-docutils -Standards-Version: 4.5.0 +Standards-Version: 4.6.0 Section: libs Homepage: https://salsa.debian.org/debichem-team/libpwizlite Vcs-Browser: https://salsa.debian.org/debichem-team/libpwizlite @@ -24,12 +24,12 @@ Section: libdevel Architecture: any Multi-Arch: same -Depends: libpwizlite3 (= ${binary:Version}), +Depends: libpwizlite3 (= ${binary:Version}), ${misc:Depends} Replaces: libpwizlite-dev (<< ${binary:Version}) Description: Library to load mzML/mzXML files (dev files) This library is a dumbed-down version of the Proteowizard library. - This library only contains the required features to + This library only contains the required features to load standard mzML/mzXML mass spectrometry data files. . See http://proteowizard.sourceforge.net/ for the original project. @@ -40,12 +40,12 @@ Package: libpwizlite3 Architecture: any Multi-Arch: same -Depends: ${shlibs:Depends}, +Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: libpwizlite3 (<< ${binary:Version}) Description: Library to load mzML/mzXML files (runtime files) This library is a dumbed-down version of the Proteowizard library. - This library only contains the required features to + This library only contains the required features to load standard mzML/mzXML mass spectrometry data files. . See http://proteowizard.sourceforge.net/ for the original project. diff -Nru libpwizlite-3.0.3/debian/copyright libpwizlite-3.0.4/debian/copyright --- libpwizlite-3.0.3/debian/copyright 2020-10-20 15:32:42.000000000 +0000 +++ libpwizlite-3.0.4/debian/copyright 2022-02-09 10:59:15.000000000 +0000 @@ -86,6 +86,11 @@ License: Apache-2.0 +Files: src/pwiz/utility/misc/String.cpp +Copyright: 2021 Matt Chambers +License: Apache-2.0 + + Files: src/pwiz/data/msdata/Index_mzML.*pp src/pwiz/data/msdata/Serializer_MGF.*pp src/pwiz/data/msdata/Serializer_MSn.*pp diff -Nru libpwizlite-3.0.3/debian/libpwizlite3.install libpwizlite-3.0.4/debian/libpwizlite3.install --- libpwizlite-3.0.3/debian/libpwizlite3.install 2020-07-15 10:16:23.000000000 +0000 +++ libpwizlite-3.0.4/debian/libpwizlite3.install 2022-02-09 10:59:15.000000000 +0000 @@ -5,5 +5,5 @@ # Make sure this file is executable !!! -debian/tmp/usr/lib/*/libpwizlite.so.${LIB_VERSION} usr/lib/${DEB_HOST_MULTIARCH}/ +debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libpwizlite.so.${LIB_VERSION} usr/lib/${DEB_HOST_MULTIARCH}/ diff -Nru libpwizlite-3.0.3/debian/libpwizlite.3.rst libpwizlite-3.0.4/debian/libpwizlite.3.rst --- libpwizlite-3.0.3/debian/libpwizlite.3.rst 2020-06-04 11:45:02.000000000 +0000 +++ libpwizlite-3.0.4/debian/libpwizlite.3.rst 2022-02-09 10:59:15.000000000 +0000 @@ -17,7 +17,7 @@ SYNOPSIS ======== - pwizlite is a shared object library (*.so file) +pwizlite is a shared object library (\*.so file) DESCRIPTION diff -Nru libpwizlite-3.0.3/debian/not-installed libpwizlite-3.0.4/debian/not-installed --- libpwizlite-3.0.3/debian/not-installed 1970-01-01 00:00:00.000000000 +0000 +++ libpwizlite-3.0.4/debian/not-installed 2022-02-09 10:59:15.000000000 +0000 @@ -0,0 +1,10 @@ +#! /usr/bin/dh-exec + +# Filippo Rusconi 20200611 - This is the cleanest solution: +# https://wiki.debian.org/Multiarch/Implementation#Dynamic_debian.2F.2A_files + +# Make sure this file is executable !!! + +debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libpwizlite.so +debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libpwizlite.so.3 + diff -Nru libpwizlite-3.0.3/debian/rules libpwizlite-3.0.4/debian/rules --- libpwizlite-3.0.3/debian/rules 2020-10-20 15:32:42.000000000 +0000 +++ libpwizlite-3.0.4/debian/rules 2022-02-09 10:59:15.000000000 +0000 @@ -19,7 +19,7 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 -export LIB_VERSION = 3.0.3 +export LIB_VERSION = 3.0.4 export LIB_SOVERSION = 3 %: diff -Nru libpwizlite-3.0.3/.gitignore libpwizlite-3.0.4/.gitignore --- libpwizlite-3.0.3/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ libpwizlite-3.0.4/.gitignore 2022-02-09 10:59:48.000000000 +0000 @@ -0,0 +1,2 @@ +compile_commands.json +.ycm_extra_conf.py diff -Nru libpwizlite-3.0.3/src/CMakeLists.txt libpwizlite-3.0.4/src/CMakeLists.txt --- libpwizlite-3.0.3/src/CMakeLists.txt 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/CMakeLists.txt 2022-02-09 10:59:48.000000000 +0000 @@ -37,6 +37,7 @@ 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 diff -Nru libpwizlite-3.0.3/src/pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp libpwizlite-3.0.4/src/pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp --- libpwizlite-3.0.3/src/pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/analysis/spectrum_processing/SpectrumList_Demux.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -23,6 +23,7 @@ #include "pwiz/data/msdata/SpectrumListWrapper.hpp" #include #include "pwiz/utility/chemistry/MZTolerance.hpp" +#include "boost/enum.hpp" namespace pwiz { namespace analysis { @@ -40,11 +41,10 @@ struct Params { /// Optimization methods available - enum class Optimization - { - NONE, - OVERLAP_ONLY - }; + BOOST_ENUM(Optimization, + (NONE) + (OVERLAP_ONLY) + ); /// Converts an optimization enum to a string static std::string optimizationToString(Optimization opt); diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/cv.cpp libpwizlite-3.0.4/src/pwiz/data/common/cv.cpp --- libpwizlite-3.0.3/src/pwiz/data/common/cv.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/cv.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -151,7 +151,7 @@ {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", "The charge state of the ion, single or multiple and positive or negatively charged.", 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}, @@ -334,7 +334,7 @@ {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_OBSOLETE, "MS:1000224", "molecular mass", "The mass of one mole of a molecular substance (6.022 1415(10) x 10^23 molecules).", 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}, @@ -551,7 +551,7 @@ {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", "A mass spectrum is an intensity vs m/z (mass-to-charge ratio) plot representing a chemical analysis.", 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}, @@ -606,21 +606,21 @@ {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_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", "Spectrum properties that are associated with a value.", false}, + {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", "Scan properties that are associated with a value.", 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_attribute_OBSOLETE, "MS:1000507", "ion attribute", "Ion properties that are associated with a value.", 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", "Stages of ms achieved in a multi stage mass spectrometry experiment.", 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}, @@ -677,8 +677,8 @@ {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 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) and published by the NIST as a U. S. government standard. It is also used to verify file integrity.", 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}, @@ -686,7 +686,7 @@ {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_raw_data_file, "MS:1000577", "raw data file", "Describes the type of file and its content.", 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}, @@ -904,7 +904,7 @@ {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", "A free-form text title describing a spectrum.", 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}, @@ -966,16 +966,16 @@ {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", "A molecules is a fundamental component of a chemical compound that is the smallest part of the compound that can participate in a chemical reaction.", false}, - {MS_peptide, "MS:1000860", "peptide", "A compound of low molecular weight that is composed of two or more amino acids.", false}, - {MS_chemical_compound_attribute, "MS:1000861", "chemical compound attribute", "A describable property of a chemical compound.", 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_compound_formula, "MS:1000864", "chemical compound formula", "A combination of symbols used to express the chemical composition of a compound.", 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_string, "MS:1000868", "SMILES string", "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_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}, @@ -988,19 +988,19 @@ {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_chemical_compound, "MS:1000881", "chemical compound", "A substance formed by chemical union of two or more elements or ingredients in definite proportion by weight.", 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 coding for the protein.", 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 attribute describing a specific protein.", false}, - {MS_protein_accession, "MS:1000885", "protein accession", "Accession number for a specific protein in a database.", 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", "A nonphysical attribute that can be used to describe a peptide.", false}, - {MS_unmodified_peptide_sequence, "MS:1000888", "unmodified peptide sequence", "A sequence of letter symbols denoting the order of amino acids that compose the peptide, without encoding any amino acid mass modifications that might be present.", false}, - {MS_modified_peptide_sequence, "MS:1000889", "modified peptide sequence", "A sequence of letter symbols denoting the order of amino acids that compose the peptide plus the encoding any amino acid modifications that are present.", false}, - {MS_peptide_labeling_state, "MS:1000890", "peptide labeling state", "A state description of how a peptide might be isotopically or isobarically labelled.", false}, - {MS_heavy_labeled_peptide, "MS:1000891", "heavy labeled peptide", "A peptide that has been created or labelled with some heavier-than-usual isotopes.", false}, - {MS_unlabeled_peptide, "MS:1000892", "unlabeled peptide", "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_peptide_group_label, "MS:1000893", "peptide 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_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}, @@ -1136,8 +1136,8 @@ {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", "The 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", "The 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_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}, @@ -1905,7 +1905,7 @@ {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 second generation Velos and Orbitrap.", 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}, @@ -2470,7 +2470,7 @@ {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_drift_time_array, "MS:1002477", "mean drift time array", "Array of drift times, averaged from a matrix of binned m/z and drift time values, corresponding to spectrum of individual peaks encoded with an m/z array.", 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}, @@ -2699,6 +2699,8 @@ {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}, @@ -2786,22 +2788,22 @@ {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", "An atomic or molecular species having a net positive or negative electric charge.", 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", "Attribute describing an adduct formation.", false}, - {MS_adduct_ion_mass, "MS:1002810", "adduct ion mass", "Mass of an adduct formation specified by the given value.", 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 specified by the given value.", 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 drift times, averaged from a matrix of binned m/z and ion mobility values, corresponding to a spectrum of individual peaks encoded with an m/z array.", 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)", "M+H ion from positive ion mode (M in the property ionMass denotes the mass of the neutral molecule).", false}, - {MS_M_H_ion_1002821, "MS:1002821", "M-H ion (MS:1002821)", "M-H ion from negative ion mode (M in the property ionMass denotes the mass of the neutral molecule).", 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}, @@ -2836,8 +2838,8 @@ {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", "The PX dataset is supported by and is available through the submission repository.", false}, - {MS_Unsupported_dataset_by_repository, "MS:1002857", "Unsupported dataset by repository", "The PX dataset is not fully supported by the submission repository.", 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}, @@ -2873,7 +2875,7 @@ {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", "An array of ion mobility data.", 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}, @@ -2983,16 +2985,16 @@ {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 inverse reduced ion mobilities, averaged from a matrix of binned m/z and ion mobility values, 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 drift times.", false}, - {MS_raw_inverse_reduced_ion_mobility_array, "MS:1003008", "raw inverse reduced ion mobility array", "Array of raw inverse reduced ion mobilities.", 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", "A peptide which is shared between protein groups and assigned to the protein group with the largest number of identified peptides.", 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}, @@ -3008,6 +3010,138 @@ {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}, @@ -3098,7 +3232,7 @@ {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)", "N-linked glycan core.", 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}, @@ -3119,7 +3253,7 @@ {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)", "Hex3HexNAc2.", 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}, @@ -3188,12 +3322,12 @@ {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)", "Fucosylated biantennary (-2 galactose).", false}, - {UNIMOD_dHex_1_Hex_4_HexNAc_4_, "UNIMOD:307", "dHex(1)Hex(4)HexNAc(4)", "DHex Hex(4) HexNAc(4) ---OR--- Hex(4) HexNAc(4) Pent Me.", false}, - {UNIMOD_dHex_1_Hex_5_HexNAc_4_, "UNIMOD:308", "dHex(1)Hex(5)HexNAc(4)", "Fucosylated biantennary.", false}, - {UNIMOD_Hex_3_HexNAc_4_, "UNIMOD:309", "Hex(3)HexNAc(4)", "Biantennary (-2 galactose).", false}, - {UNIMOD_Hex_4_HexNAc_4_, "UNIMOD:310", "Hex(4)HexNAc(4)", "Biantennary (-1 galactose).", false}, - {UNIMOD_Hex_5_HexNAc_4_, "UNIMOD:311", "Hex(5)HexNAc(4)", "Biantennary.", 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}, @@ -3592,7 +3726,6 @@ {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_Ethoxyformyl, "UNIMOD:915", "Ethoxyformyl", "Ethoxyformylation.", 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}, @@ -3920,7 +4053,7 @@ {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)", "13C3 15N1 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}, @@ -3975,7 +4108,7 @@ {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", "Conversion of carboxylic acid to hydroxamic 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}, @@ -3994,10 +4127,10 @@ {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)", "Hex(5) HexNAc(4) NeuAc(2).", false}, - {UNIMOD_Hex_5_HexNAc_4_NeuAc_1_, "UNIMOD:1409", "Hex(5)HexNAc(4)NeuAc(1)", "Hex(5) HexNAc(4) NeuAc.", false}, - {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_1_, "UNIMOD:1410", "dHex(1)Hex(5)HexNAc(4)NeuAc(1)", "DHex Hex(5) HexNAc(4) NeuAc.", false}, - {UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_, "UNIMOD:1411", "dHex(1)Hex(5)HexNAc(4)NeuAc(2)", "DHex Hex(5) HexNAc(4) NeuAc(2).", 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}, @@ -4045,7 +4178,7 @@ {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)", "Hex(6) HexNAc(2).", 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}, @@ -4060,7 +4193,7 @@ {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)", "Hex(7) HexNAc(2).", 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}, @@ -4084,7 +4217,7 @@ {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)", "Hex(8) HexNAc(2).", 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}, @@ -4111,7 +4244,7 @@ {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)", "Hex(9) HexNAc(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}, @@ -4139,7 +4272,7 @@ {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)", "Hex(6) HexNAc(5).", 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}, @@ -4338,11 +4471,11 @@ {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)", "Hex(3) HexNAc(5).", 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)", "Hex(3) HexNAc(6).", 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}, @@ -4495,6 +4628,20 @@ {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}, @@ -4534,7 +4681,7 @@ {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, "UO:0000039", "micromole", "A substance unit equal to a millionth of a mol or 10^[-6] mol.", 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}, @@ -4821,9 +4968,9 @@ {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_kilobasepair, "UO:0000328", "kilobasepair", "A unit equal to one thousand base pairs.", false}, - {UO_megabasepair, "UO:0000329", "megabasepair", "A unit equal to one million base pairs", false}, - {UO_gigabasepair, "UO:0000330", "gigabasepair", "A unit equal to one billion base pairs.", 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}, @@ -4873,6 +5020,22 @@ {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_ @@ -4965,6 +5128,7 @@ {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}, @@ -5114,6 +5278,7 @@ {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}, @@ -5145,7 +5310,7 @@ {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_attribute}, + {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}, @@ -5174,7 +5339,7 @@ {MS_ion_to_photon_detector, MS_detector_type}, {MS_point_collector, MS_detector_type}, {MS_postacceleration_detector, MS_detector_type}, - {MS_adduct_ion, MS_ion}, + {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}, @@ -5237,14 +5402,13 @@ {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_spectrum_attribute}, - {MS_spectrum_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_attribute}, - {MS_base_peak_intensity, MS_spectrum_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}, @@ -5258,10 +5422,10 @@ {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_spectrum_attribute}, {MS_highest_observed_m_z, MS_chromatogram_attribute}, - {MS_lowest_observed_m_z, MS_spectrum_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}, @@ -5325,6 +5489,7 @@ {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}, @@ -5368,9 +5533,9 @@ {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_attribute}, + {MS_highest_observed_wavelength, MS_spectrum_property}, {MS_highest_observed_wavelength, MS_chromatogram_attribute}, - {MS_lowest_observed_wavelength, MS_spectrum_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}, @@ -5628,12 +5793,12 @@ {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_attribute}, {MS_spectrum_title, MS_spectrum_identification_result_details}, - {MS_peak_list_scans, MS_spectrum_attribute}, + {MS_spectrum_title, MS_spectrum_attribute}, {MS_peak_list_scans, MS_spectrum_identification_result_details}, - {MS_peak_list_raw_scans, MS_spectrum_attribute}, + {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}, @@ -5695,13 +5860,15 @@ {MS_LTQ_Velos_ETD, MS_Thermo_Scientific_instrument_model}, {MS_run_attribute, MS_object_attribute}, {MS_fraction_identifier, MS_run_attribute}, - {MS_peptide, MS_chemical_compound}, - {MS_isoelectric_point, MS_chemical_compound_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_empirical_formula, MS_chemical_compound_formula}, - {MS_molecular_formula, MS_chemical_compound_formula}, - {MS_structural_formula, MS_chemical_compound_formula}, - {MS_SMILES_string, MS_chemical_compound_formula}, + {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}, @@ -5714,18 +5881,19 @@ {MS_external_reference_identifier, MS_external_reference_data}, {MS_PubMed_identifier, MS_external_reference_identifier}, {MS_interchannel_delay, MS_scan_attribute}, - {MS_protein, MS_chemical_compound}, + {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_unmodified_peptide_sequence, MS_peptide_attribute}, - {MS_modified_peptide_sequence, MS_peptide_attribute}, - {MS_peptide_labeling_state, MS_peptide_attribute}, - {MS_heavy_labeled_peptide, MS_peptide_labeling_state}, - {MS_unlabeled_peptide, MS_peptide_labeling_state}, - {MS_peptide_group_label, MS_peptide_attribute}, - {MS_retention_time, MS_peptide_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}, @@ -5856,7 +6024,9 @@ {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}, @@ -7226,7 +7396,7 @@ {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_drift_time_array, MS_ion_mobility_array}, + {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}, @@ -7461,6 +7631,8 @@ {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}, @@ -7551,11 +7723,11 @@ {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_attribute, MS_object_attribute}, - {MS_adduct_ion_mass, MS_adduct_ion_attribute}, - {MS_adduct_ion_isotope, MS_adduct_ion_attribute}, + {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}, @@ -7709,11 +7881,12 @@ {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_chemical_compound_attribute}, + {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}, @@ -7771,7 +7944,7 @@ {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_instrument_model}, + {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}, @@ -7802,6 +7975,141 @@ {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}, @@ -8385,7 +8693,6 @@ {UNIMOD_MTSL, UNIMOD_unimod_root_node}, {UNIMOD_HNE_BAHAH, UNIMOD_unimod_root_node}, {UNIMOD_Methylmalonylation, UNIMOD_unimod_root_node}, - {UNIMOD_Ethoxyformyl, 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}, @@ -9288,6 +9595,20 @@ {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}, @@ -9333,7 +9654,7 @@ {UO_year, UO_time_unit}, {UO_milliampere, UO_electric_current_unit}, {UO_microampere, UO_electric_current_unit}, - {UO_micromole, UO_substance_unit}, + {UO_micromole_300000039, UO_substance_unit}, {UO_millimole, UO_substance_unit}, {UO_nanomole, UO_substance_unit}, {UO_picomole, UO_substance_unit}, @@ -9624,9 +9945,9 @@ {UO_megaHertz, UO_frequency_unit}, {UO_centiMorgan, UO_length_unit}, {UO_centiRay, UO_length_unit}, - {UO_kilobasepair, UO_base_pair}, - {UO_megabasepair, UO_base_pair}, - {UO_gigabasepair, UO_base_pair}, + {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}, @@ -9684,6 +10005,22 @@ {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_ @@ -9722,29 +10059,30 @@ {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_raw_data_file}, + {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_raw_data_file}, + {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_raw_data_file, MS_spectrum_generation_information}, + {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_raw_data_file}, + {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}, @@ -9753,10 +10091,8 @@ {MS_laser, MS_source_attribute}, {MS_laser_attribute, MS_laser}, {MS_laser_type, MS_laser}, - {MS_molecule, MS_chemical_compound}, - {MS_chemical_compound_attribute, MS_chemical_compound}, - {MS_chemical_compound_formula, MS_chemical_compound}, - {MS_chemical_compound, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, + {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}, @@ -9802,13 +10138,20 @@ {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_raw_data_file}, + {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_ion, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, + {MS_adduct_ion_attribute, MS_adduct_ion}, {MS_external_reference_data, MS_Proteomics_Standards_Initiative_Mass_Spectrometry_Vocabularies}, - {MS_isomer, 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_ @@ -9866,7 +10209,7 @@ {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_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}, @@ -9997,6 +10340,7 @@ {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}, @@ -10108,8 +10452,8 @@ {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_drift_time_array, "has_units", UO_millisecond}, - {MS_mean_drift_time_array, "has_units", UO_second}, + {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}, @@ -10137,6 +10481,7 @@ {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}, @@ -10170,6 +10515,33 @@ {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_ @@ -10303,7 +10675,7 @@ {MS_Applied_Biosystems_instrument_model, "ABI"}, {MS_zoom_scan, "enhanced resolution scan"}, {MS_massWolf, "wolf"}, - {MS_raw_data_file, "source file"}, + {MS_source_data_file, "source file"}, {MS_MS1_spectrum, "full spectrum"}, {MS_MS1_spectrum, "Q1 spectrum"}, {MS_MS1_spectrum, "Q3 spectrum"}, @@ -10336,7 +10708,7 @@ {MS_electromagnetic_radiation_chromatogram, "EMR radiation chromatogram"}, {MS_isoelectric_point, "pI"}, {MS_predicted_isoelectric_point, "predicted pI"}, - {MS_unlabeled_peptide, "light labeled peptide"}, + {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"}, @@ -10370,7 +10742,9 @@ {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"}, @@ -10407,7 +10781,7 @@ {UO_hour, "h"}, {UO_milliampere, "mA"}, {UO_microampere, "uA"}, - {UO_micromole, "umol"}, + {UO_micromole_300000039, "umol"}, {UO_millimole, "mmol"}, {UO_nanomole, "nmol"}, {UO_picomole, "pmol"}, @@ -10607,6 +10981,7 @@ {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"}, @@ -10691,9 +11066,12 @@ {UO_microcurie_per_milliliter, "microcurie per millilitre"}, {UO_centiMorgan, "cM"}, {UO_centiRay, "cR"}, - {UO_kilobasepair, "kbp"}, - {UO_megabasepair, "Mb"}, - {UO_gigabasepair, "Gb"}, + {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"}, @@ -10739,6 +11117,29 @@ {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_ @@ -13068,8 +13469,8 @@ {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", "S"}, {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"}, @@ -13684,6 +14085,10 @@ {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"}, @@ -16478,12 +16883,6 @@ {UNIMOD_Methylmalonylation, "spec_1_hidden", "1"}, {UNIMOD_Methylmalonylation, "spec_1_position", "Anywhere"}, {UNIMOD_Methylmalonylation, "spec_1_site", "S"}, - {UNIMOD_Ethoxyformyl, "approved", "0"}, - {UNIMOD_Ethoxyformyl, "delta_composition", "H(4) C(3) O(2)"}, - {UNIMOD_Ethoxyformyl, "spec_1_classification", "Chemical derivative"}, - {UNIMOD_Ethoxyformyl, "spec_1_hidden", "1"}, - {UNIMOD_Ethoxyformyl, "spec_1_position", "Anywhere"}, - {UNIMOD_Ethoxyformyl, "spec_1_site", "H"}, {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"}, @@ -16638,6 +17037,10 @@ {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"}, @@ -18684,15 +19087,15 @@ {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", "Other"}, + {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", "Other"}, + {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", "Other"}, + {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"}, @@ -18868,6 +19271,10 @@ {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"}, @@ -22770,8 +23177,8 @@ {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", "S"}, {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"}, @@ -22826,8 +23233,8 @@ {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", "S"}, {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"}, @@ -24151,23 +24558,15 @@ {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(14) C(10) N(9) O(6) S(2)"}, + {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_classification", "Artefact"}, - {UNIMOD_Unknown_420, "spec_1_hidden", "1"}, {UNIMOD_Unknown_420, "spec_1_hidden", "1"}, - {UNIMOD_Unknown_420, "spec_1_position", "Anywhere"}, - {UNIMOD_Unknown_420, "spec_1_position", "Anywhere"}, - {UNIMOD_Unknown_420, "spec_1_site", "D"}, - {UNIMOD_Unknown_420, "spec_1_site", "E"}, + {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 C-term"}, - {UNIMOD_Unknown_420, "spec_2_site", "C-term"}, - {UNIMOD_Unknown_420, "spec_3_classification", "Artefact"}, - {UNIMOD_Unknown_420, "spec_3_hidden", "1"}, - {UNIMOD_Unknown_420, "spec_3_position", "Any N-term"}, - {UNIMOD_Unknown_420, "spec_3_site", "N-term"}, + {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"}, @@ -24444,6 +24843,126 @@ {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_ @@ -24495,13 +25014,13 @@ cvMap_["PEFF"].URI = cvMap_["MS"].URI; cvMap_["MS"].id = "MS"; - cvMap_["MS"].version = "4.1.30"; + cvMap_["MS"].version = "4.1.56"; cvMap_["PEFF"].id = "PEFF"; - cvMap_["PEFF"].version = "4.1.30"; + cvMap_["PEFF"].version = "4.1.56"; cvMap_["UNIMOD"].id = "UNIMOD"; - cvMap_["UNIMOD"].version = "2019-09-10"; + cvMap_["UNIMOD"].version = "2021-03-11"; cvMap_["UO"].id = "UO"; cvMap_["UO"].version = "09:04:2014"; diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/cv.hpp libpwizlite-3.0.4/src/pwiz/data/common/cv.hpp --- libpwizlite-3.0.3/src/pwiz/data/common/cv.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/cv.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -41,9 +41,9 @@ // [psi-ms.obo] #define _PSI_MS_OBO_ // format-version: 1.2 -// data-version: 4.1.30 -// date: 30:08:2019 16:10 -// saved-by: Gerhard Mayer +// 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 @@ -53,6 +53,7 @@ // 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> @@ -60,6 +61,7 @@ // 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 @@ -71,7 +73,7 @@ // [unimod.obo] #define _UNIMOD_OBO_ // format-version: 1.2 -// date: 2019:09:10 09:30 +// date: 2021:03:11 13:32 // // [unit.obo] #define _UNIT_OBO_ @@ -413,10 +415,10 @@ /// 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: The charge state of the ion, single or multiple and positive or negatively charged. + /// charge state: Number of net charges, positive or negative, on an ion. MS_charge_state = 1000041, - /// z (charge state): The charge state of the ion, single or multiple and positive or negatively charged. + /// 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. @@ -1082,8 +1084,8 @@ /// mass number: The sum of the protons and neutrons in an atom, molecule or ion. MS_mass_number_OBSOLETE = 1000223, - /// molecular mass: The mass of one mole of a molecular substance (6.022 1415(10) x 10^23 molecules). - MS_molecular_mass_OBSOLETE = 1000224, + /// 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, @@ -1925,7 +1927,7 @@ /// scan: Function or process of the mass spectrometer where it records a spectrum. MS_scan = 1000441, - /// spectrum: A mass spectrum is an intensity vs m/z (mass-to-charge ratio) plot representing a chemical analysis. + /// 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. @@ -2111,16 +2113,16 @@ /// 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. + /// 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. + /// 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: Spectrum properties that are associated with a value. + /// 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. @@ -2132,7 +2134,7 @@ /// dwell time: The time spent gathering data across a peak. MS_dwell_time = 1000502, - /// scan attribute: Scan properties that are associated with a value. + /// 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. @@ -2144,8 +2146,8 @@ /// ion role: Ion Role. MS_ion_role_OBSOLETE = 1000506, - /// ion attribute: Ion properties that are associated with a value. - MS_ion_attribute_OBSOLETE = 1000507, + /// ion property: Nonphysical characteristic attributed to an ion. + MS_ion_property = 1000507, /// ion chemical type: Ion Type. MS_ion_chemical_type_OBSOLETE = 1000508, @@ -2156,7 +2158,7 @@ /// precursor activation attribute: Precursor Activation Attribute. MS_precursor_activation_attribute = 1000510, - /// ms level: Stages of ms achieved in a multi stage mass spectrometry experiment. + /// 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. @@ -2330,10 +2332,10 @@ /// Bruker/Agilent YEP format: Bruker/Agilent YEP file format. MS_Bruker_Agilent_YEP_format = 1000567, - /// MD5: MD5 (Message-Digest algorithm 5) is a cryptographic hash function with a 128-bit hash value used to check the integrity of files. + /// 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) and published by the NIST as a U. S. government standard. It is also used to verify file integrity. + /// 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. @@ -2357,11 +2359,11 @@ /// no compression: No Compression. MS_no_compression = 1000576, - /// raw data file: Describes the type of file and its content. - MS_raw_data_file = 1000577, + /// source data file: Data file from which an entity is sourced. + MS_source_data_file = 1000577, - /// source file (raw data file): Describes the type of file and its content. - MS_source_file = MS_raw_data_file, + /// 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, @@ -3092,7 +3094,7 @@ /// 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: A free-form text title describing a spectrum. + /// 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. @@ -3290,14 +3292,14 @@ /// 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: A molecules is a fundamental component of a chemical compound that is the smallest part of the compound that can participate in a chemical reaction. + /// molecule: Group of two or more atoms held together by chemical bonds. MS_molecule = 1000859, - /// peptide: A compound of low molecular weight that is composed of two or more amino acids. + /// peptide: A molecule of low molecular weight that is composed of two or more amino acid residues. MS_peptide = 1000860, - /// chemical compound attribute: A describable property of a chemical compound. - MS_chemical_compound_attribute = 1000861, + /// 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, @@ -3311,8 +3313,8 @@ /// 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 compound formula: A combination of symbols used to express the chemical composition of a compound. - MS_chemical_compound_formula = 1000864, + /// 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, @@ -3323,8 +3325,8 @@ /// 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 string: 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_string = 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. + MS_SMILES_formula = 1000868, /// collision gas pressure: The gas pressure of the collision gas used for collisional excitation. MS_collision_gas_pressure = 1000869, @@ -3362,47 +3364,47 @@ /// interchannel delay: The duration of intervals between scanning, during which the instrument configuration is switched. MS_interchannel_delay = 1000880, - /// chemical compound: A substance formed by chemical union of two or more elements or ingredients in definite proportion by weight. - MS_chemical_compound = 1000881, + /// 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 coding for the protein. + /// 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 attribute describing a specific protein. + /// protein attribute: An nonphysical characterstic attributed to a specific protein. MS_protein_attribute = 1000884, - /// protein accession: Accession number for a specific protein in a database. + /// 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: A nonphysical attribute that can be used to describe a peptide. + /// peptide attribute: Nonphysical characteristic attributed to a peptide. MS_peptide_attribute = 1000887, - /// unmodified peptide sequence: A sequence of letter symbols denoting the order of amino acids that compose the peptide, without encoding any amino acid mass modifications that might be present. - MS_unmodified_peptide_sequence = 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. + MS_stripped_peptide_sequence = 1000888, - /// modified peptide sequence: A sequence of letter symbols denoting the order of amino acids that compose the peptide plus the encoding any amino acid modifications that are present. - MS_modified_peptide_sequence = 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. + MS_peptidoform_sequence = 1000889, - /// peptide labeling state: A state description of how a peptide might be isotopically or isobarically labelled. - MS_peptide_labeling_state = 1000890, + /// peptidoform labeling state: A state description of how a peptide might be isotopically or isobarically labelled. + MS_peptidoform_labeling_state = 1000890, - /// heavy labeled peptide: A peptide that has been created or labelled with some heavier-than-usual isotopes. - MS_heavy_labeled_peptide = 1000891, + /// heavy labeled peptidoform: A peptide that has been created or labelled with some heavier-than-usual isotopes. + MS_heavy_labeled_peptidoform = 1000891, - /// unlabeled peptide: 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_peptide = 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\". + MS_unlabeled_peptidoform = 1000892, - /// light labeled peptide (unlabeled peptide): 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_peptide, + /// 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, - /// peptide 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_peptide_group_label = 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. + 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, @@ -3812,10 +3814,10 @@ /// SEQUEST:Full: MS_SEQUEST_Full = 1001111, - /// n-terminal flanking residue: The 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. + /// 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: The 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. + /// 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. @@ -6161,7 +6163,7 @@ /// Velos Plus: Thermo Scientific second generation Velos. MS_Velos_Plus = 1001909, - /// LTQ Orbitrap Elite: Thermo Scientific second generation Velos and Orbitrap. + /// 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. @@ -7901,8 +7903,8 @@ /// 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 drift time array: Array of drift times, averaged from a matrix of binned m/z and drift time values, corresponding to spectrum of individual peaks encoded with an m/z array. - MS_mean_drift_time_array = 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. + 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, @@ -8597,6 +8599,15 @@ /// 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, @@ -8858,7 +8869,7 @@ /// 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: An atomic or molecular species having a net positive or negative electric charge. + /// ion: Molecular entity having a net positive or negative electric charge. MS_ion = 1002806, /// positive mode adduct ion: Adduct ion with positive ionization. @@ -8867,11 +8878,11 @@ /// negative mode adduct ion: Adduct ion with negative ionization. MS_negative_mode_adduct_ion = 1002808, - /// adduct ion attribute: Attribute describing an adduct formation. + /// adduct ion attribute: Nonphysical characteristic attributed to an adduct ion. MS_adduct_ion_attribute = 1002809, - /// adduct ion mass: Mass of an adduct formation specified by the given value. - MS_adduct_ion_mass = 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. + 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, @@ -8879,7 +8890,7 @@ /// 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 specified by the given value. + /// 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]. @@ -8891,7 +8902,7 @@ /// 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 drift times, averaged from a matrix of binned m/z and ion mobility values, corresponding to a spectrum of individual peaks encoded with an m/z array. + /// 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. @@ -8903,10 +8914,10 @@ /// 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: M+H ion from positive ion mode (M in the property ionMass denotes the mass of the neutral molecule). + /// 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: M-H ion from negative ion mode (M in the property ionMass denotes the mass of the neutral molecule). + /// 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. @@ -9011,10 +9022,10 @@ /// Non peer-reviewed dataset: Dataset that has not been peer-reviewed by any means. MS_Non_peer_reviewed_dataset = 1002855, - /// Supported dataset by repository: The PX dataset is supported by and is available through the submission repository. + /// 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: The PX dataset is not fully supported by the submission repository. + /// 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. @@ -9122,7 +9133,7 @@ /// ion mobility attribute: An attribute describing ion mobility searches. MS_ion_mobility_attribute = 1002892, - /// ion mobility array: An array of ion mobility data. + /// 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. @@ -9452,13 +9463,13 @@ /// timsTOF Pro: Bruker Daltonics' timsTOF Pro. MS_timsTOF_Pro = 1003005, - /// mean inverse reduced ion mobility array: Array of inverse reduced ion mobilities, averaged from a matrix of binned m/z and ion mobility values, corresponding to a spectrum of individual peaks encoded with an m/z array. + /// 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 drift times. + /// 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 inverse reduced ion mobilities. + /// 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. @@ -9479,7 +9490,7 @@ /// MSFragger: A database search-based peptide identification tool. MS_MSFragger = 1003014, - /// razor peptide: A peptide which is shared between protein groups and assigned to the protein group with the largest number of identified peptides. + /// 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. @@ -9527,6 +9538,405 @@ /// 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, @@ -9797,7 +10207,7 @@ /// Benzoyl: Labeling reagent light form (N-term & K). UNIMOD_Benzoyl = 200000136, - /// Hex(5)HexNAc(2): N-linked glycan core. + /// Hex(5)HexNAc(2): M5/Man5. UNIMOD_Hex_5_HexNAc_2_ = 200000137, /// Dansyl: 5-dimethylaminonaphthalene-1-sulfonyl. @@ -9860,7 +10270,7 @@ /// Hex(2)HexNAc(2)dHex(1): Hex2HexNAc2dHex1. UNIMOD_Hex_2_HexNAc_2_dHex_1_ = 200000158, - /// Hex(3)HexNAc(2): Hex3HexNAc2. + /// 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. @@ -10067,22 +10477,22 @@ /// DeStreak: Cysteine mercaptoethanol. UNIMOD_DeStreak = 200000303, - /// dHex(1)Hex(3)HexNAc(4): Fucosylated biantennary (-2 galactose). + /// dHex(1)Hex(3)HexNAc(4): FA2/G0F. UNIMOD_dHex_1_Hex_3_HexNAc_4_ = 200000305, - /// dHex(1)Hex(4)HexNAc(4): DHex Hex(4) HexNAc(4) ---OR--- Hex(4) HexNAc(4) Pent Me. + /// dHex(1)Hex(4)HexNAc(4): FA2G1/G1F. UNIMOD_dHex_1_Hex_4_HexNAc_4_ = 200000307, - /// dHex(1)Hex(5)HexNAc(4): Fucosylated biantennary. + /// dHex(1)Hex(5)HexNAc(4): FA2G2/G2F. UNIMOD_dHex_1_Hex_5_HexNAc_4_ = 200000308, - /// Hex(3)HexNAc(4): Biantennary (-2 galactose). + /// Hex(3)HexNAc(4): A2/G0. UNIMOD_Hex_3_HexNAc_4_ = 200000309, - /// Hex(4)HexNAc(4): Biantennary (-1 galactose). + /// Hex(4)HexNAc(4): A2G1/G1. UNIMOD_Hex_4_HexNAc_4_ = 200000310, - /// Hex(5)HexNAc(4): Biantennary. + /// Hex(5)HexNAc(4): A2G2/G2. UNIMOD_Hex_5_HexNAc_4_ = 200000311, /// Cysteinyl: Cysteinylation. @@ -11279,9 +11689,6 @@ /// Methylmalonylation: Methylmalonylation on Serine. UNIMOD_Methylmalonylation = 200000914, - /// Ethoxyformyl: Ethoxyformylation. - UNIMOD_Ethoxyformyl = 200000915, - /// Label:13C(4)15N(2)+GG: 13C(4) 15N(2) Lysine glygly. UNIMOD_Label_13C_4_15N_2__GG = 200000923, @@ -12263,7 +12670,7 @@ /// Label:13C(3): 13C3 label for SILAC. UNIMOD_Label_13C_3_ = 200001296, - /// Label:13C(3)15N(1): 13C3 15N1 label for SILAC. + /// 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. @@ -12428,7 +12835,7 @@ /// Homocysteic_acid: Methionine oxidation to homocysteic acid. UNIMOD_Homocysteic_acid = 200001384, - /// Hydroxamic_acid: Conversion of carboxylic acid to hydroxamic acid. + /// Hydroxamic_acid: ADP-ribosylation followed by conversion to hydroxamic acid via hydroxylamine. UNIMOD_Hydroxamic_acid = 200001385, /// 3-phosphoglyceryl: 3-phosphoglyceryl. @@ -12485,16 +12892,16 @@ /// EDEDTIDVFQQQTGG: Sumoylation by SUMO-2/3 after Cyanogen bromide (CNBr) cleavage. UNIMOD_EDEDTIDVFQQQTGG = 200001406, - /// Hex(5)HexNAc(4)NeuAc(2): Hex(5) HexNAc(4) NeuAc(2). + /// Hex(5)HexNAc(4)NeuAc(2): A2G2S2/G2S2. UNIMOD_Hex_5_HexNAc_4_NeuAc_2_ = 200001408, - /// Hex(5)HexNAc(4)NeuAc(1): Hex(5) HexNAc(4) NeuAc. + /// Hex(5)HexNAc(4)NeuAc(1): A2G2S1/G2S1. UNIMOD_Hex_5_HexNAc_4_NeuAc_1_ = 200001409, - /// dHex(1)Hex(5)HexNAc(4)NeuAc(1): DHex Hex(5) HexNAc(4) NeuAc. + /// 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): DHex Hex(5) HexNAc(4) NeuAc(2). + /// dHex(1)Hex(5)HexNAc(4)NeuAc(2): FA2G2S2/G2FS2. UNIMOD_dHex_1_Hex_5_HexNAc_4_NeuAc_2_ = 200001411, /// s-GlcNAc: O3S1HexNAc1. @@ -12638,7 +13045,7 @@ /// Hex(3)HexNAc(4)Sulf(1): Hex(3) HexNAc(4) Sulf. UNIMOD_Hex_3_HexNAc_4_Sulf_1_ = 200001464, - /// Hex(6)HexNAc(2): Hex(6) HexNAc(2). + /// Hex(6)HexNAc(2): M6/Man6. UNIMOD_Hex_6_HexNAc_2_ = 200001465, /// Hex(4)HexNAc(3)Pent(1): Hex(4) HexNAc(3) Pent. @@ -12683,7 +13090,7 @@ /// Hex(4)HexNAc(4)Sulf(1): Hex(4) HexNAc(4) Sulf. UNIMOD_Hex_4_HexNAc_4_Sulf_1_ = 200001479, - /// Hex(7)HexNAc(2): Hex(7) HexNAc(2). + /// Hex(7)HexNAc(2): M7/Man7. UNIMOD_Hex_7_HexNAc_2_ = 200001480, /// dHex(2)Hex(4)HexNAc(3): DHex(2) Hex(4) HexNAc(3). @@ -12755,7 +13162,7 @@ /// Hex(5)HexNAc(4)Sulf(1): Hex(5) HexNAc(4) Sulf. UNIMOD_Hex_5_HexNAc_4_Sulf_1_ = 200001503, - /// Hex(8)HexNAc(2): Hex(8) HexNAc(2). + /// 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). @@ -12836,7 +13243,7 @@ /// Hex(3)HexNAc(6)Sulf(2): Hex(3) HexNAc(6) Sulf(2). UNIMOD_Hex_3_HexNAc_6_Sulf_2_ = 200001530, - /// Hex(9)HexNAc(2): Hex(9) HexNAc(2). + /// Hex(9)HexNAc(2): M9/Man9. UNIMOD_Hex_9_HexNAc_2_ = 200001531, /// Hex(4)HexNAc(6): Hex(4) HexNAc(6). @@ -12920,7 +13327,7 @@ /// Hex(3)HexNAc(7)Sulf(1): Hex(3) HexNAc(7) Sulf. UNIMOD_Hex_3_HexNAc_7_Sulf_1_ = 200001558, - /// Hex(6)HexNAc(5): Hex(6) HexNAc(5). + /// 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. @@ -13517,7 +13924,7 @@ /// dHex(2)Hex(3)HexNAc(3): DHex(2) Hex(3) HexNAc(3). UNIMOD_dHex_2_Hex_3_HexNAc_3_ = 200001771, - /// Hex(3)HexNAc(5): Hex(3) HexNAc(5). + /// 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. @@ -13529,7 +13936,7 @@ /// dHex(1)Hex(3)HexNAc(5): DHex Hex(3) HexNAc(5). UNIMOD_dHex_1_Hex_3_HexNAc_5_ = 200001775, - /// Hex(3)HexNAc(6): Hex(3) HexNAc(6). + /// Hex(3)HexNAc(6): A4. UNIMOD_Hex_3_HexNAc_6_ = 200001776, /// Hex(4)HexNAc(4)NeuAc(1): Hex(4) HexNAc(4) NeuAc. @@ -13988,6 +14395,48 @@ /// 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, @@ -14106,7 +14555,7 @@ UO_microampere = 300000038, /// micromole: A substance unit equal to a millionth of a mol or 10^[-6] mol. - UO_micromole = 300000039, + UO_micromole_300000039 = 300000039, /// millimole: A substance unit equal to a thousandth of a mol or 10^[-3] mol. UO_millimole = 300000040, @@ -14966,14 +15415,14 @@ /// 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, - /// kilobasepair: A unit equal to one thousand base pairs. - UO_kilobasepair = 300000328, + /// kilo base pair: A unit equal to one thousand base pairs. + UO_kilo_base_pair = 300000328, - /// megabasepair: A unit equal to one million base pairs - UO_megabasepair = 300000329, + /// mega base pair: A unit equal to one million base pairs + UO_mega_base_pair = 300000329, - /// gigabasepair: A unit equal to one billion base pairs. - UO_gigabasepair = 300000330, + /// 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, @@ -15120,7 +15569,55 @@ 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 + 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 diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/CVTranslator.cpp libpwizlite-3.0.4/src/pwiz/data/common/CVTranslator.cpp --- libpwizlite-3.0.3/src/pwiz/data/common/CVTranslator.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/CVTranslator.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -99,11 +99,23 @@ 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; - transform(result.begin(), result.end(), result.begin(), alnum_lower); + 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; } diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/ParamTypes.cpp libpwizlite-3.0.4/src/pwiz/data/common/ParamTypes.cpp --- libpwizlite-3.0.3/src/pwiz/data/common/ParamTypes.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/ParamTypes.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -25,8 +25,7 @@ #include "ParamTypes.hpp" #include "diff_std.hpp" -#include "pwiz/utility/misc/Std.hpp" -#include +#include "pwiz/utility/misc/Std.hpp" namespace pwiz { @@ -79,32 +78,13 @@ return timeInSecondsHelper(units, valueAs()); } -template -struct nosci_policy : boost::spirit::karma::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; } -}; - /// convenience function to return value without scientific notation (throws if not a double) PWIZ_API_DECL std::string CVParam::valueFixedNotation() const { - std::string result = value; - if (std::string::npos != result.find_first_of("eE")) - { - using namespace boost::spirit::karma; - typedef real_generator > nosci_type; - static const nosci_type nosci = nosci_type(); - char buffer[256]; - char* p = buffer; - double d = valueAs(); - generate(p, nosci, d); - *p = 0; - result = buffer; - } - return result; + 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) @@ -293,43 +273,24 @@ } cvParams.push_back(CVParam(cvid, value, units)); -} - - -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 ParamContainer::set(CVID cvid, double value, CVID units) -{ - // 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); - set(cvid, std::string(&buffer[0], p), 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) -{ - using namespace boost::spirit::karma; - static const int_generator intgen = int_generator(); - char buffer[256]; - char* p = buffer; - generate(p, intgen, value); - set(cvid, std::string(&buffer[0], p), units); +{ + set(cvid, pwiz::util::toString(value), units); } diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/ParamTypes.hpp libpwizlite-3.0.4/src/pwiz/data/common/ParamTypes.hpp --- libpwizlite-3.0.3/src/pwiz/data/common/ParamTypes.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/ParamTypes.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -310,6 +310,9 @@ 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) diff -Nru libpwizlite-3.0.3/src/pwiz/data/common/Unimod.hpp libpwizlite-3.0.4/src/pwiz/data/common/Unimod.hpp --- libpwizlite-3.0.3/src/pwiz/data/common/Unimod.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/common/Unimod.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -29,7 +29,7 @@ #include "pwiz/utility/chemistry/MZTolerance.hpp" #include "cv.hpp" #include -#include +#include namespace pwiz { diff -Nru libpwizlite-3.0.3/src/pwiz/data/misc/MinimumPepXML.hpp libpwizlite-3.0.4/src/pwiz/data/misc/MinimumPepXML.hpp --- libpwizlite-3.0.3/src/pwiz/data/misc/MinimumPepXML.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/misc/MinimumPepXML.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -27,7 +27,7 @@ #include "pwiz/utility/minimxml/XMLWriter.hpp" #include "pwiz/data/misc/PeakData.hpp" #include "boost/shared_ptr.hpp" -#include "boost/logic/tribool.hpp" +#include "boost/logic/tribool_io.hpp" #include #include diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/BinaryDataEncoder.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/BinaryDataEncoder.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/BinaryDataEncoder.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/BinaryDataEncoder.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -489,13 +489,9 @@ if (!decompressed.empty()) { byteBuffer = reinterpret_cast(&decompressed[0]); - byteCount = decompressed.size(); } - else - { - throw runtime_error("[BinaryDataEncoder::decode()] Compression error?"); - } - } + byteCount = decompressed.size(); + } break; case Compression_None: break; diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/DefaultReaderList.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/DefaultReaderList.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/DefaultReaderList.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/DefaultReaderList.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -447,6 +447,10 @@ { return ""; } + catch (...) + { + return ""; + } return ""; } diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/IO.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/IO.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/IO.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/IO.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -1727,12 +1727,16 @@ 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) + 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) { @@ -1766,27 +1770,62 @@ 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; @@ -1807,6 +1846,9 @@ virtual Status characters(const SAXParser::saxstring& text, stream_offset position) { + if (binaryDataFlag == IgnoreBinaryData) + return Status::Ok; + BinaryDataEncoder encoder(config); switch (cvidBinaryDataType) @@ -1814,7 +1856,6 @@ case MS_32_bit_float: case MS_64_bit_float: { - auto& binaryDataArray = binaryDataArrayPtrs->back(); encoder.decode(text.c_str(), text.length(), binaryDataArray->data); if (binaryDataArray->data.size() != arrayLength_) @@ -1826,15 +1867,11 @@ case MS_32_bit_integer: case MS_64_bit_integer: { - auto& binaryDataArray = integerDataArrayPtrs->back(); - encoder.decode(text.c_str(), text.length(), binaryDataArray->data); + encoder.decode(text.c_str(), text.length(), integerDataArray->data); - if (binaryDataArray->data.size() != arrayLength_) + 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_ % binaryDataArray->data.size()).str()); - - swap(static_cast(*binaryDataArray), paramContainer); - binaryDataArray->dataProcessingPtr = dataProcessingPtr; + % position % arrayLength_ % integerDataArray->data.size()).str()); } break; @@ -2154,13 +2191,11 @@ } else if (name == "binaryDataArray") { - if (binaryDataFlag == IgnoreBinaryData) - return Status::Done; - 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") @@ -2303,12 +2338,10 @@ } else if (name == "binaryDataArray") { - if (binaryDataFlag == IgnoreBinaryData) - return Status::Done; - handlerBinaryDataArray_.binaryDataArrayPtrs = &chromatogram->binaryDataArrayPtrs; handlerBinaryDataArray_.integerDataArrayPtrs = &chromatogram->integerDataArrayPtrs; handlerBinaryDataArray_.defaultArrayLength = chromatogram->defaultArrayLength; + handlerBinaryDataArray_.binaryDataFlag = binaryDataFlag; return Status(Status::Delegate, &handlerBinaryDataArray_); } else if (name == "binaryDataArrayList") @@ -2367,7 +2400,7 @@ if (iterationListenerRegistry) status = iterationListenerRegistry->broadcastUpdateMessage( - IterationListener::UpdateMessage(i, spectrumList.size(), "converting spectra")); + IterationListener::UpdateMessage(i, spectrumList.size(), "writing spectra")); if (status == IterationListener::Status_Cancel) break; @@ -2471,7 +2504,7 @@ if (iterationListenerRegistry) status = iterationListenerRegistry->broadcastUpdateMessage( - IterationListener::UpdateMessage(i, chromatogramList.size(), "converting chromatograms")); + IterationListener::UpdateMessage(i, chromatogramList.size(), "writing chromatograms")); if (status == IterationListener::Status_Cancel) break; diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/MSData.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/MSData.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/MSData.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/MSData.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -501,6 +501,9 @@ 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")); @@ -1088,21 +1091,27 @@ if (empty()) return size(); // "sample=1 period=1 cycle=123 experiment=2" splits to { sample, 1, period, 1, cycle, 123, experiment, 2 } - string firstId = spectrumIdentity(0).id; - bal::split(actualTokens, firstId, bal::is_any_of(" =")); - - if (actualTokens.size() != abbreviatedTokens.size() * 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 { - // 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()); - return size(); - } + string firstId = spectrumIdentity(s).id; + bal::split(actualTokens, firstId, bal::is_any_of(" =")); - string fullId(actualTokens[0] + "=" + abbreviatedTokens[0]); - for (size_t i = 1; i < abbreviatedTokens.size(); ++i) - fullId += " " + actualTokens[2*i] + "=" + abbreviatedTokens[i]; + 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(); + } - return find(fullId); + 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; + } } diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/MSDataFile.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/MSDataFile.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/MSDataFile.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/MSDataFile.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -77,6 +77,8 @@ 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); @@ -219,6 +221,8 @@ const WriteConfig& config, const IterationListenerRegistry* iterationListenerRegistry) { + check_path_length(filename); + switch (config.format) { case MSDataFile::Format_MZ5: @@ -256,6 +260,7 @@ { 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()); @@ -263,20 +268,25 @@ bfs::path p(location); p /= sourceFile.name; - try + static map cachedHashBySourcePath; + auto& sha1 = cachedHashBySourcePath[p.string()]; + if (sha1.empty()) { - bfs::file_status status = bfs::status(p); - if (!bfs::exists(status) || bfs::is_directory(status)) - // TODO: log warning about source file not available + 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; - } - catch (exception&) - { - // TODO: log warning about filesystem error - return; - } + } - string sha1 = SHA1Calculator::hashFile(p.string()); + sha1 = SHA1Calculator::hashFile(p.string()); + } sourceFile.set(MS_SHA_1, sha1); } diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/Reader.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/Reader.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/Reader.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/Reader.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -42,6 +42,7 @@ , acceptZeroLengthSpectra(false) , ignoreZeroIntensityPoints(false) , combineIonMobilitySpectra(false) + , reportSonarBins(false) , unknownInstrumentIsError(false) , adjustUnknownTimeZonesToHostTimeZone(true) , iterationListenerRegistry(nullptr) @@ -60,6 +61,7 @@ acceptZeroLengthSpectra = rhs.acceptZeroLengthSpectra; ignoreZeroIntensityPoints = rhs.ignoreZeroIntensityPoints; combineIonMobilitySpectra = rhs.combineIonMobilitySpectra; + reportSonarBins = rhs.reportSonarBins; unknownInstrumentIsError = rhs.unknownInstrumentIsError; adjustUnknownTimeZonesToHostTimeZone = rhs.adjustUnknownTimeZonesToHostTimeZone; iterationListenerRegistry = rhs.iterationListenerRegistry; @@ -73,6 +75,8 @@ // 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); @@ -87,6 +91,8 @@ 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) { @@ -108,6 +114,8 @@ 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)) { @@ -127,6 +135,8 @@ 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)) { @@ -146,6 +156,8 @@ 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)) { @@ -242,6 +254,8 @@ PWIZ_API_DECL ReaderPtr ReaderList::identifyAsReader(const std::string& filepath) const { + check_path_length(filepath); + try { string head = read_file_header(filepath, 512); diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/Reader.hpp libpwizlite-3.0.4/src/pwiz/data/msdata/Reader.hpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/Reader.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/Reader.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -59,6 +59,9 @@ /// 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; diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_MGF.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_MGF.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_MGF.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_MGF.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -72,6 +72,8 @@ 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); @@ -144,6 +146,7 @@ } os << "END IONS\n"; + ++scansWritten; } // update any listeners and handle cancellation @@ -156,6 +159,11 @@ 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)"); } diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_mzML.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_mzML.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_mzML.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_mzML.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -163,6 +163,10 @@ 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) diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_mzXML.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_mzXML.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/Serializer_mzXML.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/Serializer_mzXML.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -889,6 +889,7 @@ 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 diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumListBase.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumListBase.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumListBase.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumListBase.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -23,6 +23,7 @@ #define PWIZ_SOURCE #include "SpectrumListBase.hpp" +#include "pwiz/utility/misc/String.hpp" #include #include @@ -44,17 +45,30 @@ if (result < size() || size() == 0) return result; - { - 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(); - } + 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()); @@ -69,12 +83,12 @@ 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()); + 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(e.what()); // TODO: log exception + warn_once((std::string("[SpectrumList::find] error checking for spectrum id conformance: ") + e.what()).c_str()); // TODO: log exception return size(); } } diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_MGF.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_MGF.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_MGF.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_MGF.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -159,7 +159,7 @@ spectrum.setMZIntensityArrays(vector(), vector(), MS_number_of_detector_counts); BinaryData& mzArray = spectrum.getMZArray()->data; BinaryData& intensityArray = spectrum.getIntensityArray()->data; - while (getline(*is_, lineStr)) + while (getlinePortable(*is_, lineStr)) { size_t lineBegin = lineStr.find_first_not_of(" \t"); if (lineBegin == string::npos) @@ -405,7 +405,7 @@ vector::iterator curIdentityItr; map::iterator curIdToIndexItr; - while (getline(*is_, lineStr)) + while (std::getline(*is_, lineStr)) // need accurate line length, so do not use pwiz::util convenience wrapper { ++lineCount; if (lineStr.find("BEGIN IONS") == 0) diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_MSn.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_MSn.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_MSn.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_MSn.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -239,7 +239,7 @@ double precursor_mz = 0; // start reading the file - if( getline(*is_, lineStr) ) // not end of file + if(getlinePortable(*is_, lineStr) ) // not end of file { // confirm that the first line is an S line if (lineStr.find("S") != 0) @@ -278,7 +278,7 @@ vector< pair > chargeMassPairs; // read in remainder of spectrum - while (getline(*is_, lineStr)) + while (getlinePortable(*is_, lineStr)) { if (lineStr.find("S") == 0) // we are at the next spectrum { @@ -641,7 +641,7 @@ size_t lineCount = 0; map::iterator curIdToIndexItr; - while (getline(*is_, lineStr)) + while (std::getline(*is_, lineStr)) // need accurate line length, so do not use pwiz::util convenience wrapper { ++lineCount; if (lineStr.find("S") == 0) diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_mzXML.cpp libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_mzXML.cpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumList_mzXML.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumList_mzXML.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -135,7 +135,7 @@ if (name == "precursorMz") { - string precursorScanNum, precursorIntensity, precursorCharge, possibleCharges, activationMethod, windowWideness, driftTime, collisionalCrossSection; + string precursorScanNum, precursorIntensity, precursorCharge, possibleCharges, activationMethod, windowWideness, driftTime, collisionalCrossSection, invK0; getAttribute(attributes, "precursorScanNum", precursorScanNum); getAttribute(attributes, "precursorIntensity", precursorIntensity); getAttribute(attributes, "precursorCharge", precursorCharge); @@ -144,6 +144,7 @@ getAttribute(attributes, "windowWideness", windowWideness); getAttribute(attributes, "DT", driftTime); getAttribute(attributes, "CCS", collisionalCrossSection); + getAttribute(attributes, "invK0", invK0); if (!precursorScanNum.empty()) // precursorScanNum is an optional element precursor->spectrumID = id::translateScanNumberToNativeID(nativeIdFormat, precursorScanNum); @@ -195,6 +196,8 @@ if (!driftTime.empty()) scan->set(MS_ion_mobility_drift_time, driftTime, UO_millisecond); + else if (!invK0.empty()) + scan->set(MS_inverse_reduced_ion_mobility, invK0, MS_Vs_cm_2); if (!collisionalCrossSection.empty()) scan->userParams.emplace_back("CCS", collisionalCrossSection); @@ -327,8 +330,9 @@ { public: - HandlerScan(const MSData& msd, Spectrum& spectrum, const SpectrumIdentityFromMzXML &spectrum_id, bool getBinaryData,size_t peakscount) + 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), @@ -437,6 +441,11 @@ 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; @@ -551,6 +560,7 @@ private: const MSData& msd_; + const SpectrumList_mzXMLImpl& sl_; Spectrum& spectrum_; const SpectrumIdentityFromMzXML& spectrum_id_; // for noting binary data position bool getBinaryData_; @@ -639,7 +649,7 @@ if (!*is_) throw runtime_error("[SpectrumList_mzXML::spectrum()] Error seeking to ."); - HandlerScan handler(msd_, *result, id, binaryDataFlag!=IO::IgnoreBinaryData, peakscount); + 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 diff -Nru libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumListWrapper.hpp libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumListWrapper.hpp --- libpwizlite-3.0.3/src/pwiz/data/msdata/SpectrumListWrapper.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/data/msdata/SpectrumListWrapper.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -26,6 +26,7 @@ #include "pwiz/data/msdata/SpectrumListBase.hpp" +#include #include @@ -67,11 +68,25 @@ 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 diff -Nru libpwizlite-3.0.3/src/pwiz/utility/findmf/base/base/scale.hpp libpwizlite-3.0.4/src/pwiz/utility/findmf/base/base/scale.hpp --- libpwizlite-3.0.3/src/pwiz/utility/findmf/base/base/scale.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/findmf/base/base/scale.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -88,8 +88,7 @@ if(center) { scaled.first = ralab::base::base::mean( begin , end); - //std::transform(begin, end, begin, std::bind2nd( std::minus(), scaled.first)); - std::transform(begin, end, begin, [scaled] (const TReal &real) {return (real - scaled.first);}); + std::transform(begin, end, begin, std::bind2nd( std::minus(), scaled.first)); } else { @@ -98,8 +97,7 @@ if(scale) { scaled.second = rootMeanSquare( begin , end ); - //std::transform(begin, end, begin , std::bind2nd(std::divides(), scaled.second) ); - std::transform(begin, end, begin , [scaled] (const TReal &real) { return (real / scaled.second);}); + std::transform(begin, end, begin , std::bind2nd(std::divides(), scaled.second) ); } else { diff -Nru libpwizlite-3.0.3/src/pwiz/utility/findmf/base/filter/filter.hpp libpwizlite-3.0.4/src/pwiz/utility/findmf/base/filter/filter.hpp --- libpwizlite-3.0.3/src/pwiz/utility/findmf/base/filter/filter.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/findmf/base/filter/filter.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -53,7 +53,7 @@ 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). - [[maybe_unused]] uint32_t sides = 2 //!<[in] currently only sides 2 supported.... + uint32_t sides = 2 //!<[in] currently only sides 2 supported.... ) { typedef typename std::iterator_traits::value_type TReal; diff -Nru libpwizlite-3.0.3/src/pwiz/utility/findmf/base/filter/utilities/gauss.hpp libpwizlite-3.0.4/src/pwiz/utility/findmf/base/filter/utilities/gauss.hpp --- libpwizlite-3.0.3/src/pwiz/utility/findmf/base/filter/utilities/gauss.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/findmf/base/filter/utilities/gauss.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -102,8 +102,7 @@ //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 )) ; - std::transform(gauss.begin(),gauss.end(),gauss.begin(), [sum] (const TReal &real){ return (real / sum);}); + std::transform(gauss.begin(),gauss.end(),gauss.begin(),std::bind2nd(std::divides(),sum )) ; TReal sumfilter = std::accumulate(gauss.begin(),gauss.end(),0.); return sumfilter; } @@ -117,16 +116,14 @@ //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 )) ; - std::transform(mh.begin(),mh.end(),mh.begin(), [sum] (const TReal &real) { return (real / sum) ; }); + 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 )) ; - std::transform(mh.begin(),mh.end(),mh.begin(), [sumAbs] (const TReal &real){ return (real / sumAbs);}); + std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::divides(), sumAbs )) ; } template diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Exception.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/Exception.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Exception.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Exception.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -46,6 +46,11 @@ } // 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 @@ -53,9 +58,6 @@ #include #include -// 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); namespace { @@ -106,9 +108,19 @@ _CrtSetReportHookW2(_CRT_RPTHOOK_REMOVE, &CrtReportHookW); } }; -static ReportHooker reportHooker; +#else +struct ReportHooker +{ + ReportHooker() + { + SetErrorMode(SetErrorMode(0) | 0x0002); // SEM_NOGPFAULTERRORBOX + } +}; #endif // _DEBUG +static ReportHooker reportHooker; +#endif + // make Boost assertions throw exceptions #if !defined(NDEBUG) diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Filesystem.cpp libpwizlite-3.0.4/src/pwiz/utility/misc/Filesystem.cpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Filesystem.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Filesystem.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -1,748 +1,763 @@ -// -// $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 +// +// $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 _MSC_VER + #ifdef _WIN32_WINNT + #undef _WIN32_WINNT + #endif + #define _WIN32_WINNT 0x0600 + #define WIN32_LEAN_AND_MEAN + #define NOMINMAX + #define NOGDI + #include + #include + #include + #include + #include + #include + #include +#else + #include + #include + #include + #include + #include + #include + #include + #ifndef MAX_PATH + #define MAX_PATH 255 + #endif +#endif + +#include +#include "pwiz/utility/misc/random_access_compressed_ifstream.hpp" +#include +#include +#include +#include +//#include +#include +#include + +using std::string; +using std::vector; +using std::runtime_error; + + +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; + }; + + 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 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->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; + 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->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(); +} + + +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; +} + + +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()); + } + } +} + +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; + }; +} +#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); +} + + +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 +} + + +} // util +} // pwiz diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Filesystem.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/Filesystem.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Filesystem.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Filesystem.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -123,6 +123,22 @@ 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)); diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/optimized_lexical_cast.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/optimized_lexical_cast.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/optimized_lexical_cast.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/optimized_lexical_cast.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -26,8 +26,8 @@ #include #include -#include -#include +#include +#include // HACK: Darwin strtod isn't threadsafe so strtod_l must be used diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/random_access_compressed_ifstream.cpp libpwizlite-3.0.4/src/pwiz/utility/misc/random_access_compressed_ifstream.cpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/random_access_compressed_ifstream.cpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/random_access_compressed_ifstream.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -66,12 +66,6 @@ #include "random_access_compressed_ifstream.hpp" -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC or MinGW -#include -#else -#include -#include -#endif #include #include #include @@ -84,6 +78,12 @@ #include #include +#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC or MinGW +#include +#else +#include +#include +#endif namespace pwiz { namespace util { diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Singleton.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/Singleton.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Singleton.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Singleton.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -27,7 +27,7 @@ namespace { - struct Destroyer {~Destroyer() {boost::destroy_singletons();}}; + struct Destroyer {~Destroyer() {/*boost::destroy_singletons();*/}}; Destroyer destroyer; } diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Std.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/Std.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Std.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Std.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -49,6 +49,7 @@ #include #include +#include using std::auto_ptr; using std::unique_ptr; using boost::shared_ptr; diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/Stream.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/Stream.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/Stream.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/Stream.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -1,91 +1,91 @@ -// -// $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::getline; - -using std::streampos; -using std::streamoff; -using std::streamsize; - -using bnw::system; // unqualified system() calls will be ambiguous, by intention, 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; +// +// $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; diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/String.cpp libpwizlite-3.0.4/src/pwiz/utility/misc/String.cpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/String.cpp 1970-01-01 00:00:00.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/String.cpp 2022-02-09 10:59:48.000000000 +0000 @@ -0,0 +1,137 @@ +// +// 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); +} \ No newline at end of file diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/String.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/String.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/String.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/String.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -33,7 +33,6 @@ #include "pwiz/utility/misc/optimized_lexical_cast.hpp" using std::string; -using std::getline; using std::stringstream; using std::istringstream; using std::ostringstream; @@ -89,8 +88,62 @@ } +/// 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_ diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/unit.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/unit.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/unit.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/unit.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -28,9 +28,8 @@ #include "Exception.hpp" #include "DateTime.hpp" #include "Filesystem.hpp" +#include "Stream.hpp" #include "pwiz/utility/math/round.hpp" -#include -#include #include #include @@ -211,7 +210,7 @@ doctest::Context context; testExitStatus = context.run(); } - catch (exception& e) + catch (std::exception& e) { TEST_FAILED(e.what()) } diff -Nru libpwizlite-3.0.3/src/pwiz/utility/misc/virtual_map.hpp libpwizlite-3.0.4/src/pwiz/utility/misc/virtual_map.hpp --- libpwizlite-3.0.3/src/pwiz/utility/misc/virtual_map.hpp 2020-10-20 17:03:55.000000000 +0000 +++ libpwizlite-3.0.4/src/pwiz/utility/misc/virtual_map.hpp 2022-02-09 10:59:48.000000000 +0000 @@ -229,6 +229,14 @@ /// 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;} };