Repository 'metfrag_vis'
hg clone https://toolshed.g2.bx.psu.edu/repos/computational-metabolomics/metfrag_vis

Changeset 0:3dbe79671820 (2020-07-14)
Commit message:
"planemo upload for repository https://github.com/computational-metabolomics/metfrag-galaxy commit b337c6296968848e3214f4b51df3d86776f84b6a"
added:
metfrag-vis.py
metfrag-vis.xml
metfrag_logo.png
test-data/metfrag_vis_input.tabular
test-data/metfrag_vis_output.html
b
diff -r 000000000000 -r 3dbe79671820 metfrag-vis.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metfrag-vis.py Tue Jul 14 07:42:34 2020 -0400
[
b'@@ -0,0 +1,695 @@\n+#!/usr/bin/env python\n+\n+# Load modules\n+import argparse\n+import base64\n+import csv\n+import os\n+import re\n+import time\n+import urllib.parse\n+\n+import matplotlib.pyplot as plt\n+\n+import pubchempy\n+\n+import requests\n+\n+# Parse arguments\n+parser = argparse.ArgumentParser(\n+    description=\'Visualise MetFrag results in html.\')\n+parser.add_argument(\'-v\', \'--version\', action=\'version\',\n+                    version=\'MetFrag-vis Version 0.9\',\n+                    help=\'show version\')\n+parser.add_argument(\'-i\', \'--input\', metavar=\'metfrag_results.tsv\',\n+                    dest="input_tsv", required=True,\n+                    help=\'MetFrag results as input\')\n+parser.add_argument(\'-o\', \'--output\', metavar=\'metfrag_results.html\',\n+                    dest="output_html", required=True,\n+                    help=\'Write MetFrag results into this output file\')\n+parser.add_argument(\'-m\', \'--max-candidates\', metavar=\'10\',\n+                    dest="max_candidates", default=10, type=int,\n+                    required=False,\n+                    help=\'Maximum number of candidates per compound [1-1000]\')\n+parser.add_argument(\'-s\', \'--synonyms\', dest=\'synonyms\', action=\'store_true\',\n+                    required=False,\n+                    help=\'Fetch synonyms from PubChem [disabled by default]\')\n+parser.add_argument(\'-c\', \'--classyfire\', dest=\'classyfire\',\n+                    action=\'store_true\', required=False,\n+                    help=\'Fetch compound classes from ClassyFire\'\n+                         \' [disabled by default]\')\n+\n+args = parser.parse_args()\n+\n+# Input CSV with MetFrag results\n+input_tsv = args.input_tsv\n+\n+# Output html of MetFrag results\n+output_html = args.output_html\n+\n+# Max number of candidates per compound\n+max_candidates = args.max_candidates\n+\n+# PubChem synonyms\n+pubchem_synonyms_enabled = args.synonyms\n+\n+# ClassyFire classes\n+classyfire_classes_enabled = args.classyfire\n+\n+\n+# ---------- cdk_inchi_to_svg ----------\n+def cdk_inchi_to_svg(inchi):\n+    if "cdk-inchi-to-svg" in os.environ:\n+        JAVA_CMD = \'cdk-inchi-to-svg\' + \' \' + str(\n+            \'\\\'\' + inchi + \'\\\'\') + \' \' + \'cdk-inchi-to-svg-output.svg\'\n+    else:\n+        JAVA_BINARY = \'/usr/local/bin/java\'\n+        CDK_INCHI_TO_SVG_JAR = \'/usr/local/bin/\' \\\n+                               \'cdk-inchi-to-svg-0.0.1-\' \\\n+                               \'SNAPSHOT-jar-with-dependencies.jar\'\n+        JAVA_CMD = str(\n+            JAVA_BINARY + \' \' + \'-jar\' + \' \' + CDK_INCHI_TO_SVG_JAR + \' \'\n+            + str(\'\\\'\' + inchi + \'\\\'\') + \' \' + \'cdk-inchi-to-svg-output.svg\')\n+\n+    # Exec cdk-inchi-to-svg JAVA binary\n+    exitcode = os.system(JAVA_CMD)\n+\n+    # Check whether binary has successfully been run\n+    if (exitcode == 0):\n+        with open("cdk-inchi-to-svg-output.svg", "r") as svg_file:\n+            svg_string = []\n+            for line in svg_file:\n+                if not (\'<?xml\' in line) and not (\'<!DOCTYPE\' in line):\n+                    if (\' fill=\\\'#FFFFFF\\\'\' in line):\n+                        line = re.sub(\' fill=\\\'#FFFFFF\\\'\',\n+                                      \' fill=\\\'#FFFFFF\\\' fill-opacity=\\\'0.0\\\'\',\n+                                      line)\n+                    svg_string.append(line)\n+        svg_file.close()\n+        os.remove("cdk-inchi-to-svg-output.svg")\n+        return (str(\'\'.join(svg_string)))\n+    else:\n+        return (\'&nbsp;\')\n+\n+\n+# ---------- pubchem_link ----------\n+def pubchem_link(compound_name):\n+    return (str(\'https://pubchem.ncbi.nlm.nih.gov/#query=\' + compound_name))\n+\n+\n+# ---------- kegg_link ----------\n+def kegg_link(compound_name):\n+    return (str(\n+        \'https://www.genome.jp/dbget-bin/\'\n+        \'www_bfind_sub?mode=bfind&max_hit=1000&dbkey=kegg&keywords=\' +\n+        compound_name))\n+\n+\n+# ---------- biocyc_link ----------\n+def biocyc_link(compound_name):\n+    biocyc_url = urllib.parse.urlparse(\n+        str(\n+            \'https://www.biocyc.org/\'\n+            \'substring-search?type=NIL&object=\' +'..b'                      re.sub(\n+                                    \'.*MetFragDatabaseType=\',\n+                                    \'MetFragDatabaseType=\',\n+                                    row["MetFragCLIString"])))\n+\n+                metfrag_web = str(\n+                    \'https://msbi.ipb-halle.de/MetFrag/landing.xhtml?\' +\n+                    FragmentPeakMatchAbsoluteMassDeviation + \'&\' +\n+                    FragmentPeakMatchRelativeMassDeviation + \'&\' +\n+                    DatabaseSearchRelativeMassDeviation + \'&\' +\n+                    IonizedPrecursorMass + \'&\' +\n+                    NeutralPrecursorMass + \'&\' +\n+                    # NeutralPrecursorMolecularFormula + \'&\' +\n+                    PrecursorIonMode + \'&\' +\n+                    PeakList + \'&\' +\n+                    MetFragDatabaseType)\n+\n+                # Write html code\n+                metfrag_html.write(str(\'<tr style="vertical-align:center">\' +\n+                                       \'<td class="tdmax">\' +\n+                                       spectrum_string +\n+                                       \'</td>\' +\n+                                       \'<td class="tdmax">\' +\n+                                       svg_string +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       monoisotopic_mass +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       mol_formula +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       compound_name +\n+                                       \'</td>\' +\n+                                       \'<td class="tdvar">\' +\n+                                       pubchem_synonyms +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       compound_classes + \'</td>\' +\n+                                       \'<td>\' +\n+                                       str(round(float(score), 3)) +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       str(round(float(metfusion_score), 3)) +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       str(round(float(frag_score), 3)) +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       str(\n+                                           round(float(suspectlist_score), 3)\n+                                       ) +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       peaks_explained +\n+                                       \' / \' +\n+                                       peaks_used +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       \'<a  target="_blank" href="\' +\n+                                       metfrag_web +\n+                                       \'">MetFragWeb</a>\' +\n+                                       \'</td>\' +\n+                                       \'<td>\' +\n+                                       external_links +\n+                                       \'</td>\' +\n+                                       \'<td class="tdmax">\' +\n+                                       inchi +\n+                                       \'</td>\' +\n+                                       \'</tr>\\n\'))\n+\n+        line_count += 1\n+        candidates += 1\n+\n+    # Finish candidate list\n+    metfrag_html.write(str(\'</table>\\n\'))\n+\n+# Write html footer\n+metfrag_html.write(\'\\n</body>\\n\')\n+metfrag_html.write(\'</html>\\n\')\n+\n+# Close output html file\n+metfrag_html.close()\n'
b
diff -r 000000000000 -r 3dbe79671820 metfrag-vis.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metfrag-vis.xml Tue Jul 14 07:42:34 2020 -0400
[
b'@@ -0,0 +1,154 @@\n+<tool id="metfrag_vis" name="MetFrag Vis" version="2.4.5+galaxy0" profile="18.01">\n+    <description>\n+        Visualisation for MetFrag results\n+    </description>\n+    <requirements>\n+        <requirement type="package" version="2.4.5">metfrag</requirement>\n+        <requirement type="package" version="0.9">cdk-inchi-to-svg</requirement>\n+        <requirement type="package" version="3.7.3">python</requirement>\n+        <requirement type="package" version="1.0.4">pubchempy</requirement>\n+        <requirement type="package">matplotlib</requirement>\n+        <requirement type="package">requests</requirement>\n+        <requirement type="package">numpy</requirement>\n+    </requirements>\n+    <stdio>\n+        <regex match="Cannot allocate memory"\n+           source="stderr"\n+           level="fatal_oom"\n+           description="Out of memory error occurred" />\n+    </stdio>\n+    <command detect_errors="exit_code">\n+    <![CDATA[\n+         python \'$__tool_directory__/metfrag-vis.py\'\n+            -i $metfrag_vis_input\n+            -o $metfrag_vis_output\n+            -m $metfrag_vis_hits_limit\n+            $metfrag_synonyms\n+            $metfrag_classyfire\n+    ]]></command>\n+    <inputs>\n+        <param argument="-i" name="metfrag_vis_input" type="data" format="tsv,tabular" multiple="False" optional="False" label="MetFrag result file (Output tabular file from MetFrag tool)" />\n+        <param argument="-m" name="metfrag_vis_hits_limit" type="text" value="10" label="MetFrag Hits Limit" optional="False" help="Limit of candidate hits returned per compound" />\n+        <param argument="-s" name="metfrag_synonyms" type="boolean" truevalue="-s" falsevalue="" checked="true" label="Synonyms" help="Fetch synonyms for each candidate from PubChem"/>\n+        <param argument="-c" name="metfrag_classyfire"  type="boolean" truevalue="-c" falsevalue="" label="ClassyFire" help="Fetch compound classes for each candidate using ClassyFire"/>\n+    </inputs>\n+    <outputs>\n+        <data name="metfrag_vis_output" format="html" label="Summary HTML file" />\n+    </outputs>\n+\n+    <tests>\n+        <test>\n+            <param name="metfrag_vis_input" value="metfrag_vis_input.tabular"/>\n+            <output name="metfrag_vis_output" file="metfrag_vis_output.html" compare="sim_size"/>\n+        </test>\n+    </tests>\n+\n+    <help>\n+---------------------\n+MetFrag Visualisation\n+---------------------\n+\n+Description\n+-----------\n+\n+MetFrag is a freely available software for the annotation of high precision tandem mass spectra of metabolites which is\n+a first and critical step for the identification of a molecule\'s structure. Candidate molecules of different databases\n+are fragmented "in silico" and matched against mass to charge values. A score calculated using the fragment peak\n+matches gives hints to the quality of the candidate spectrum assignment.\n+\n+This module summarises the results generated by MetFrag. It takes the (sometimes very large) output tabular file, parses the file and enriches it with images of the spectra showing the extracted and matched peaks and putative structures of the compound candidates. The module supports limiting the results per compound (default 10 candidates). Results can be enriched with further information from PubChem and ClassyFire to make it easier to select candidates. The information is summarised in a HTML5 file which can be viewed directly in Galaxy.\n+\n+Website: http://ipb-halle.github.io/MetFrag/\n+\n+Parameters\n+----------\n+\n+**\\1. Tabular file**\n+\n+Tabular file created using the *MetFrag* tool.\n+\n+**\\2. MetFrag Hits Limit**\n+\n+Defines the limit of candidates returned per compound.\n+\n+**\\3. Synonyms**\n+\n+If set to True, synonyms for each candidate are fetched from PubChem.\n+\n+**\\4. ClassyFire**\n+\n+If set to True, compound classes are fetched for each candidate using ClassyFire.\n+\n+Output\n+-------\n+\n+The output is similar to the MetFrag results tabular, but enriched with additional images of spectra, compo'..b'  |...|\n++---+------------------+----------------------------+------------------------------------------------------+------------+---------------------------------------------------------------------------------+---+\n+|...| 105.844569063138 | 696.0;1156.0;696.0;1156.0  | 6-(hydroxymethyl)oxane-2,3,4,5-tetrol                |  206       | InChI=1S/C6H12O6/c7-1-2-3(8)4(9)5(10)6(11)12-2/h2-11H,1H                        |...|\n++---+------------------+----------------------------+------------------------------------------------------+------------+---------------------------------------------------------------------------------+---+\n+|...| 105.844569063138 | 696.0;1156.0;696.0;1156.0  | (3R,4S,5S,6R)-6-(hydroxymethyl)oxane-2,3,4,5-tetrol  |  5793      | InChI=1S/C6H12O6/c7-1-2-3(8)4(9)5(10)6(11)12-2/h2-11H,1H2/t2-,3-,4+,5-,6?/m1/s1 |...|\n++---+------------------+----------------------------+------------------------------------------------------+------------+---------------------------------------------------------------------------------+---+\n+|...| ...              | ...                        | ...                                                  | ...        | ...                                                                             |...|\n++---+------------------+----------------------------+------------------------------------------------------+------------+---------------------------------------------------------------------------------+---+\n+\n+Table continued (columns are derived from the MetFrag result):\n+\n+\n++---+-------------+-----------------+-----------------------+----------------------------------------------+------------------+------------------+--------+\n+|...| NoExplPeaks | NumberPeaksUsed | OfflineMetFusionScore | SMILES\t                                   | Score            | SuspectListScore | XlogP3 |\n++---+-------------+-----------------+-----------------------+----------------------------------------------+------------------+------------------+--------+\n+|...| 4           | 5\t            | 2.84566828424078\t    | C(C1C(C(C(C(O1)O)O)O)O)O                     | 1.82678219603441 | 1                | -2.6   |\n++---+-------------+-----------------+-----------------------+----------------------------------------------+------------------+------------------+--------+\n+|...| 4           | 5               | 2.84566828424078      | C([C@@H]1[C@H]([C@@H]([C@H](C(O1)O)O)O)O)O   | 1.82678219603441 | 1                | -2.6   |\n++---+-------------+-----------------+-----------------------+----------------------------------------------+------------------+------------------+--------+\n+|...| ...         | ...             | ...                   | ...                                          | ...              | ...              | ...    |\n++---+-------------+-----------------+-----------------------+----------------------------------------------+------------------+------------------+--------+\n+\n+Additional notes\n+--------------------\n+\n+This module queries the online services PubChem and ClassyFire.\n+\n+Feunang YD, Eisner R, Knox C, Chepelev L, Hastings J, Owen G, Fahy E, Steinbeck C, Subramanian S, Bolton E,\n+Greiner R, Wishart DS (2016): ClassyFire: automated chemical classification with a comprehensive, computable taxonomy. J Cheminform 8:61. doi: 10.1186/s13321-016-0174-y\n+\n+Kim S, Chen J, Cheng T, Gindulyte A, He J, He S, Li Q, Shoemaker BA, Thiessen PA, Yu B, Zaslavsky L, Zhang J, Bolton EE (2019): PubChem 2019 update: improved access to chemical data. Nucleic Acids Res. 8;47(D1):D1102-D1109. doi: 10.1093/nar/gky1033\n+\n+Developers and contributors\n+---------------------------\n+- **Kristian Peters (kpeters@ipb-halle.de) - IPB Halle (Germany)**\n+- **Tom Lawson (t.n.lawson@bham.ac.uk) - University of Birmingham (UK)**\n+- **Christoph Ruttkies (christoph.ruttkies@ipb-halle.de) - IPB Halle (Germany)**\n+    </help>\n+    <citations>\n+        <citation type="doi">10.1186/s13321-016-0115-9</citation>\n+    </citations>\n+</tool> \n'
b
diff -r 000000000000 -r 3dbe79671820 metfrag_logo.png
b
Binary file metfrag_logo.png has changed
b
diff -r 000000000000 -r 3dbe79671820 test-data/metfrag_vis_input.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/metfrag_vis_input.tabular Tue Jul 14 07:42:34 2020 -0400
[
@@ -0,0 +1,4 @@
+MetFragCLIString name AlignmentID retention_time num_peaks sample_name precursor_type precursor_mz ExplPeaks FormulasOfExplPeaks FragmenterScore FragmenterScore_Values IUPACName Identifier InChI InChIKey InChIKey1 InChIKey2 MaximumTreeDepth MolecularFormula MonoisotopicMass NoExplPeaks NumberPeaksUsed OfflineMetFusionScore SMILES Score XlogP3
+metfrag PrecursorIonMode=1 MetFragScoreWeights=1.0,1.0 SampleName=1_metfrag_result FragmentPeakMatchAbsoluteMassDeviation=0.001 NumberThreads=1 DatabaseSearchRelativeMassDeviation=10.0 PeakListPath=./temp/1_tmpspec.txt MetFragDatabaseType=PubChem FragmentPeakMatchRelativeMassDeviation=5.0 MetFragCandidateWriter=CSV MetFragScoreTypes=FragmenterScore,OfflineMetFusionScore IsPositiveIonMode=True NeutralPrecursorMass=148.12786092 ResultsPath=./temp/ PeakListString=121.099329887276_182;149.133267159026_510;150.14016979533_114 pos_27_winter_Marpol_27_2.E.3_01_17272:1 1 720.852 3 1_metfrag_result [M+H]+ 149.13513692 NA NA 0.0 NA dimethyl(dipropyl)-lambda4-sulfane 71774044 InChI=1S/C8H20S/c1-5-7-9(3,4)8-6-2/h5-8H2,1-4H3 OPMSGHPOQIQQRS-UHFFFAOYSA-N OPMSGHPOQIQQRS UHFFFAOYSA 2 C8H20S 148.128572 0 1 0.37031226614982965 CCCS(C)(C)CCC 1.0 2.7
+metfrag PrecursorIonMode=1 MetFragScoreWeights=1.0,1.0 SampleName=1_metfrag_result FragmentPeakMatchAbsoluteMassDeviation=0.001 NumberThreads=1 DatabaseSearchRelativeMassDeviation=10.0 PeakListPath=./temp/1_tmpspec.txt MetFragDatabaseType=PubChem FragmentPeakMatchRelativeMassDeviation=5.0 MetFragCandidateWriter=CSV MetFragScoreTypes=FragmenterScore,OfflineMetFusionScore IsPositiveIonMode=True NeutralPrecursorMass=148.12786092 ResultsPath=./temp/ PeakListString=121.099329887276_182;149.133267159026_510;150.14016979533_114 pos_27_winter_Marpol_27_2.E.3_01_17272:1 1 720.852 3 1_metfrag_result [M+H]+ 149.13513692 NA NA 0.0 NA butyl-ethyl-dimethyl-lambda4-sulfane 90984195 InChI=1S/C8H20S/c1-5-7-8-9(3,4)6-2/h5-8H2,1-4H3 HCGXHQGSWBNABQ-UHFFFAOYSA-N HCGXHQGSWBNABQ UHFFFAOYSA 2 C8H20S 148.128572 0 1 0.37031226614982965 CCCCS(C)(C)CC 1.0 2.5
+metfrag PrecursorIonMode=1 MetFragScoreWeights=1.0,1.0 SampleName=1_metfrag_result FragmentPeakMatchAbsoluteMassDeviation=0.001 NumberThreads=1 DatabaseSearchRelativeMassDeviation=10.0 PeakListPath=./temp/1_tmpspec.txt MetFragDatabaseType=PubChem FragmentPeakMatchRelativeMassDeviation=5.0 MetFragCandidateWriter=CSV MetFragScoreTypes=FragmenterScore,OfflineMetFusionScore IsPositiveIonMode=True NeutralPrecursorMass=148.12786092 ResultsPath=./temp/ PeakListString=121.099329887276_182;149.133267159026_510;150.14016979533_114 pos_27_winter_Marpol_27_2.E.3_01_17272:1 1 720.852 3 1_metfrag_result [M+H]+ 149.13513692 NA NA 0.0 NA trimethyl(3-methylbutyl)-lambda4-sulfane 118334050 InChI=1S/C8H20S/c1-8(2)6-7-9(3,4)5/h8H,6-7H2,1-5H3 DFXVYXYADDYUJD-UHFFFAOYSA-N DFXVYXYADDYUJD UHFFFAOYSA 2 C8H20S 148.128572 0 1 0.3692650195260169 CC(C)CCS(C)(C)C 0.9971719904536216 2.6
\ No newline at end of file
b
diff -r 000000000000 -r 3dbe79671820 test-data/metfrag_vis_output.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/metfrag_vis_output.html Tue Jul 14 07:42:34 2020 -0400
b
b'@@ -0,0 +1,1317 @@\n+<!DOCTYPE html>\n+<html>\n+<head>\n+<title>msPurity MetFrag results</title>\n+<style type="text/css">\n+svg { width: 200px; height: 100%; }\n+body { font-family: Lucida, Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: left; color: #000000; margin: 8px 8px 8px 8px; }\n+A { color: #2b8126; text-decoration: none; background: transparent; }\n+A:visited { color: #19681a; text-decoration: none; background: transparent; }\n+A:hover { color: #8fc180; text-decoration: underline; background: transparent; }\n+h1 { font-size: 32px; font-weight: bold; text-align: center; padding: 0px 0px 4px 0px; margin: 26px 0px 0px 0px; }\n+h2 { font-size: 24px; font-weight: bold; text-align: left; padding: 0px 0px 4px 0px; margin: 26px 0px 0px 0px; }\n+table { font-family: Lucida, Verdana, Arial, Helvetica, sans-serif; font-size: 10px; text-align: left; line-height: 10px; border: 1px solid #e3efdf; background-color: #ecf5ea; margin-bottom: 8px; min-width: 1600px; max-width: 2400px; }\n+#tablediv { width: 100%; min-width: 20px; max-width: 200px; }\n+.tdmax { min-width: 200px; max-width: 200px; }\n+.tdvar { min-width: 200px; max-width: 600px; }\n+tr:nth-child(even) { background-color: #f6faf5; }\n+</style>\n+</head>\n+<body>\n+\n+<h1><img style="vertical-align:bottom" src="data:image/png;base64,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'..b'.15625" xlink:href="#DejaVuSans-116"/>\n+      <use x="374.365234" xlink:href="#DejaVuSans-121"/>\n+     </g>\n+    </g>\n+   </g>\n+   <g id="line2d_14">\n+    <path clip-path="url(#p0594580799)" d="M 63.45 270.864 \n+L 63.45 191.726118 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;"/>\n+   </g>\n+   <g id="line2d_15">\n+    <defs>\n+     <path d="M 0 2 \n+C 0.530406 2 1.03916 1.789267 1.414214 1.414214 \n+C 1.789267 1.03916 2 0.530406 2 0 \n+C 2 -0.530406 1.789267 -1.03916 1.414214 -1.414214 \n+C 1.03916 -1.789267 0.530406 -2 0 -2 \n+C -0.530406 -2 -1.03916 -1.789267 -1.414214 -1.414214 \n+C -1.789267 -1.03916 -2 -0.530406 -2 0 \n+C -2 0.530406 -1.789267 1.03916 -1.414214 1.414214 \n+C -1.03916 1.789267 -0.530406 2 0 2 \n+z\n+" id="mfbdc5fcc44" style="stroke:#000000;"/>\n+    </defs>\n+    <g clip-path="url(#p0594580799)">\n+     <use style="stroke:#000000;" x="63.45" xlink:href="#mfbdc5fcc44" y="191.726118"/>\n+    </g>\n+   </g>\n+   <g id="line2d_16">\n+    <path clip-path="url(#p0594580799)" d="M 332.776525 270.864 \n+L 332.776525 49.104 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;"/>\n+   </g>\n+   <g id="line2d_17">\n+    <g clip-path="url(#p0594580799)">\n+     <use style="stroke:#000000;" x="332.776525" xlink:href="#mfbdc5fcc44" y="49.104"/>\n+    </g>\n+   </g>\n+   <g id="line2d_18">\n+    <path clip-path="url(#p0594580799)" d="M 342.45 270.864 \n+L 342.45 221.294118 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;"/>\n+   </g>\n+   <g id="line2d_19">\n+    <g clip-path="url(#p0594580799)">\n+     <use style="stroke:#000000;" x="342.45" xlink:href="#mfbdc5fcc44" y="221.294118"/>\n+    </g>\n+   </g>\n+   <g id="patch_3">\n+    <path d="M 49.5 281.952 \n+L 49.5 38.016 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>\n+   </g>\n+   <g id="patch_4">\n+    <path d="M 356.4 281.952 \n+L 356.4 38.016 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>\n+   </g>\n+   <g id="patch_5">\n+    <path d="M 49.5 281.952 \n+L 356.4 281.952 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>\n+   </g>\n+   <g id="patch_6">\n+    <path d="M 49.5 38.016 \n+L 356.4 38.016 \n+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>\n+   </g>\n+  </g>\n+ </g>\n+ <defs>\n+  <clipPath id="p0594580799">\n+   <rect height="243.936" width="306.9" x="49.5" y="38.016"/>\n+  </clipPath>\n+ </defs>\n+</svg>\n+</td><td class="tdmax">&nbsp;</td><td>148.128572</td><td>C8H20S</td><td>trimethyl(3-methylbutyl)-lambda4-sulfane</td><td class="tdvar">SCHEMBL17037255</td><td>&nbsp;</td><td>0.997</td><td>0.369</td><td>0.0</td><td>0.0</td><td>0 / 1</td><td><a  target="_blank" href="https://msbi.ipb-halle.de/MetFrag/landing.xhtml?FragmentPeakMatchAbsoluteMassDeviation=0.001&FragmentPeakMatchRelativeMassDeviation=5.0&DatabaseSearchRelativeMassDeviation=10.0&IonizedPrecursorMass=149.13513692&NeutralPrecursorMass=148.12786092&PrecursorIonMode=1&PeakList=121.099329887276_182;149.133267159026_510;150.14016979533_114&MetFragDatabaseType=PubChem">MetFragWeb</a></td><td><a target="_blank" href="https://pubchem.ncbi.nlm.nih.gov/#query=trimethyl(3-methylbutyl)-lambda4-sulfane">PubChem</a>, <a target="_blank" href="https://www.genome.jp/dbget-bin/www_bfind_sub?mode=bfind&max_hit=1000&dbkey=kegg&keywords=trimethyl(3-methylbutyl)-lambda4-sulfane">KEGG</a>, <a target="_blank" href="https://hmdb.ca/unearth/q?utf8=\xe2\x9c\x93&query=trimethyl(3-methylbutyl)-lambda4-sulfane&searcher=metabolites&button=">HMDB</a>, <a target="_blank" href="https://www.biocyc.org/substring-search?type=NIL&object=trimethyl(3-methylbutyl)-lambda4-sulfane&quickSearch=Quick+Search">BioCyc</a>, <a target="_blank" href="https://www.ebi.ac.uk/chebi/advancedSearchFT.do?searchString=InChI=1S/C8H20S/c1-8(2)6-7-9(3,4)5/h8H,6-7H2,1-5H3">ChEBI</a></td><td class="tdmax">InChI=1S/C8H20S/c1-8(2)6-7-9(3,4)5/h8H,6-7H2,1-5H3</td></tr>\n+</table>\n+\n+</body>\n+</html>\n'