From 319c7c51ddb63538d947bfddf9940cb7cf318687 Mon Sep 17 00:00:00 2001 From: vagisha Date: Mon, 11 Mar 2024 17:28:17 -0700 Subject: [PATCH] Add unimod_xl.xml. This file contains master crosslink entries in Unimod. These entries are not included in the unimod.xml file. We want them to be available to Panorama Public submitters when try to assign Unimod Ids to their Skyline modifications. --- panoramapublic/resources/unimod_xl.xml | 1577 +++++++++++++++++ .../proteomexchange/UnimodParser.java | 41 +- 2 files changed, 1610 insertions(+), 8 deletions(-) create mode 100644 panoramapublic/resources/unimod_xl.xml diff --git a/panoramapublic/resources/unimod_xl.xml b/panoramapublic/resources/unimod_xl.xml new file mode 100644 index 00000000..5715a84b --- /dev/null +++ b/panoramapublic/resources/unimod_xl.xml @@ -0,0 +1,1577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Imidoester Cross-linkers + Misc. URL + https://assets.thermofisher.com/TFS-Assets/LSG/manuals/MAN0011314_ImidoesterCrsLnk_DMA_DMP_DMS_DTBP_UG.pdf + + + Packman, L.C. and Perhan, R.N. (1982). Quaternary Structures the Pyruvate Dehydrogenase Multienzyme Complex of Bacillus StearothermophilusStudies by a New Reversible Crosslinking Procedure with Bis(imidoesters). Biochem. 21, 5171-5175. + Journal + + + + Hand, E.S., and Jencks, W.P. (1962). Mechanism of the reaction of imidoesters with amines. J. Am. Chem. Soc. 84, 3505-3514. + Journal + + + + + + + + + + + + + ThermoFisher data sheet + PubMed PMID + https://assets.thermofisher.com/TFS-Assets/LSG/manuals/MAN0011282_DST_UG.pdf + + + 212103 + PubMed PMID + http://www.ncbi.nlm.nih.gov/pubmed/212103 + + + 3001048 + Misc. URL + http://www.ncbi.nlm.nih.gov/pubmed?term=Characterization%20of%20the%20cell%20surface%20receptor%20for%20a%20multi-lineage%20colony-stimulating%20factor%20%28CSF-2%20%29 + + + + + + + + + + + bis[sulfosuccinimidyl] suberate (BS3) + + ThermoFisher data sheet + Misc. URL + https://www.thermofisher.com/order/catalog/product/21655 + + + + + + + + + + + + + Thermo Fisher data sheet + Misc. URL + https://www.thermofisher.com/order/catalog/product/A33545 + + + Kao et. al, Development of a Novel Cross-linking Strategy for Fast and Accurate Identification of Cross-linked Peptides of Protein Complexes, MCP + Journal + http://dx.doi.org/10.1074/mcp.M110.002212 + + + + + + + + + + + Ethylene glycolbis(succinimidylsuccinate) + + Pierce data sheet + Misc. URL + https://tools.thermofisher.com/content/sfs/manuals/MAN0011281_EGS_SulfoEGS_UG.pdf + + + 36892 + PubMed PMID + http://www.ncbi.nlm.nih.gov/pubmed?term=A%20new%20cleavable%20reagent%20for%20cross-linking%20and%20reversible%20immobilization%20of%20proteins + + + + + + + + + + + + + + + Also known as DSBU + + Thermo Fisher data sheet + Misc. URL + https://www.thermofisher.com/order/catalog/product/A35459 + + + Anal. Chem. 2016, 88, 7930−7937, Integrated Workflow for Structural Proteomics Studies + Journal + http://dx.doi.org/10.1021/acs.analchem.5b04853 + + + + + + + + + + + + + Pierce data sheet + Misc. URL + http://tools.thermofisher.com/content/sfs/manuals/MAN0011314_ImidoesterCrsLnk_DMA_DMP_DMS_DTBP_UG.pdf + + + 770170 + PubMed PMID + + + imidoester cross-linker + + + + + + + + + + + Also known as DSP + + 8457554 + PubMed PMID + http://www.ncbi.nlm.nih.gov/pubmed/8457554 + + + 322714 + PubMed PMID + http://www.ncbi.nlm.nih.gov/pubmed/322714 + + + 1262347 + PubMed PMID + http://www.ncbi.nlm.nih.gov/pubmed/1262347 + + + ThermoFisher data sheet + Misc. URL + https://tools.thermofisher.com/content/sfs/manuals/MAN0011280_DTSSP_DSP_UG.pdf + + + + + + + + + + + + + + ThermoFisher data sheet + Misc. URL + https://assets.thermofisher.com/TFS-Assets/LSG/manuals/MAN0011295_SMCC_SulfoSMCC_UG.pdf + + + + + + + + + + + + ThermoFisher data sheet + Misc. URL + https://assets.thermofisher.com/TFS-Assets/LSG/manuals/MAN0011542_BS3_d0d4_BS2G_d0d3_UG.pdf + + + + + + + + + + + + Anal. Chem., 2016, 88 (16), pp 8239–8247 + Journal + https://pubs.acs.org/doi/full/10.1021/acs.analchem.7b00046 + + + ThermoFisher data sheet + Misc. URL + https://www.thermofisher.com/order/catalog/product/26173 + + + + + + + + + + + + + + + + + + + 1-ethyl-3-(3-dimethylaminopropyl)carbodiimide hydrochloride + + Thermo data sheet + Misc. URL + https://www.thermofisher.com/order/catalog/product/22980 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/panoramapublic/src/org/labkey/panoramapublic/proteomexchange/UnimodParser.java b/panoramapublic/src/org/labkey/panoramapublic/proteomexchange/UnimodParser.java index 257b6b21..9c65d4d8 100644 --- a/panoramapublic/src/org/labkey/panoramapublic/proteomexchange/UnimodParser.java +++ b/panoramapublic/src/org/labkey/panoramapublic/proteomexchange/UnimodParser.java @@ -45,20 +45,33 @@ public class UnimodParser public UnimodModifications parse() throws PxException { Module module = ModuleLoader.getInstance().getModule(PanoramaPublicModule.class); - FileResource resource = (FileResource)module.getModuleResolver().lookup(Path.parse("unimod.xml")); + UnimodModifications uMods = new UnimodModifications(); + File unimodXml = getXmlFile("unimod.xml", module); + parse(unimodXml, uMods, true); + // unimod_xl.xml contains master entries for crosslinks, e.g. Xlink:BuUrBu + // Details are on this page: https://www.unimod.org/xlink.html. Link to download the file is also available on this page. + File unimodXlXml = getXmlFile("unimod_xl.xml", module); + parse(unimodXlXml, uMods, false); + return uMods; + } + + @NotNull + private File getXmlFile(String fileName, Module module) throws PxException + { + FileResource resource = (FileResource) module.getModuleResolver().lookup(Path.parse(fileName)); if(resource == null) { - throw new PxException("UNIMOD xml file resource not found."); + throw new PxException("UNIMOD xml file resource, " + fileName + ", not found."); } File unimodXml = resource.getFile(); if(unimodXml == null) { - throw new PxException("UNIMOD xml file not found."); + throw new PxException("UNIMOD xml file, " + fileName + ", not found."); } - return parse(unimodXml); + return unimodXml; } - private UnimodModifications parse(File unimodXml) throws PxException + private void parse(File unimodXml, UnimodModifications uMods, boolean isPrimaryXml) throws PxException { if(!unimodXml.exists()) { @@ -84,10 +97,12 @@ private UnimodModifications parse(File unimodXml) throws PxException throw new PxException("UNIMOD xml document has no root document element."); } - UnimodModifications uMods = new UnimodModifications(); readModifications(root, uMods); - readAminoAcids(root, uMods); - return uMods; + if (isPrimaryXml) + { + readAminoAcids(root, uMods); + updateDiffIsotopeMods(uMods); + } } private void readAminoAcids(Element root, UnimodModifications uMods) throws PxException @@ -136,6 +151,16 @@ private void readModifications(Element root, UnimodModifications uMods) throws P } } } + } + + // For isotope modifications that are the heavy versions of a structural modification, calculate the isotope formula + // as the difference between the formula of the modification and the formula of the associated, unlabeled structural + // modification. + // For example: the isotope formula for Dimethyl:2H(6) is the difference between the formulas of Dimethyl:2H(6) and Dimethyl. + // This difference is H'6C2-H2 - H4C2 = H'6-H6 + // This is how it is represented in Skyline, so we need to be able to lookup Unimod matches based on this formula. + private void updateDiffIsotopeMods(UnimodModifications uMods) + { for (UnimodModification uMod: uMods.getModifications()) { if (uMod.isIsotopeLabel())