{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "chem-bla-ics",
  "description": "Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.",
  "home_page_url": "https://chem-bla-ics.linkedchemistry.info/",
  "feed_url": "https://chem-bla-ics.linkedchemistry.info/2026/07/26/inorganic-compounds-smiles-mdl-molfile-v3000-and-inchis.json",
  "icon": "https://chem-bla-ics.linkedchemistry.info/assets/images/chem-bla-ics_logo.png",
  "language": "en",
  "authors": [
    {
      "name": "Egon Willighagen",
      "url": "https://orcid.org/0000-0001-7542-0286",
      "_orcid": "0000-0001-7542-0286"
    }
  ],
  "items": [

    {
      "id": "https://doi.org/10.59350/yhf27-fp921",
      "url": "https://chem-bla-ics.linkedchemistry.info/2026/07/26/inorganic-compounds-smiles-mdl-molfile-v3000-and-inchis.html",
      "title": "Molecular Inorganics: SMILES, MDL molfile v3000, and InChIs",
      "content_html": "<p>Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that\ndo a great job. Last year and last week, I attended two technical <a href=\"https://www.inchi-trust.org/\">InChI</a> meetings, both with\n<a href=\"https://en.wikipedia.org/wiki/Organometallic_chemistry\">organometallic compounds</a> and other molecular inorganics as one of the key topics. Thanks to\n<a href=\"https://bsky.app/profile/herreslab.bsky.social\">Sonja</a> (<a href=\"https://fed.brid.gy/bsky/herreslab.bsky.social\">Mastodon bridge</a>)\nand <a href=\"https://www.linkedin.com/in/gerd-blanke-b13115/\">Gerd</a> for the invitations. My role includes thinking about what all the\nwork on the InChI means for the <a href=\"http://cdk.github.io/\">Chemistry Development Kit</a>.</p>\n\n<p>Many things came up. One was testing of new InChI functionality for these organometallic compounds, particularly the stereochemistry.\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2007/08/02/molecules-in-wikipedia.html\">Wikipedia has many chemical compounds</a> and could\nbe a source, but <a href=\"https://chem-bla-ics.linkedchemistry.info/2022/11/12/wikidata-script-for-smiles-smarts-and.html\">so does Wikidata</a>.\nBoth use the SMILES, but not all SMILES captures all the chemistry we need. And the InChI software needs\n<a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#V3000\">an V3000 MDL Molfile</a>. Thanks to John and other CDK developers, there\nis good support for recent cheminformatics software, but I was not sure it had what I would need.</p>\n\n<p>This post is the first of a few related posts. This post is about converting SMILES from <a href=\"https://wikidata.org/\">Wikidata</a>\nto V3000 files. Take <a href=\"https://qlever.scholia.wiki/chemical/Q412415\">cisplatin</a>: it has four ligands around a platinum atom,\nall in a single plane:</p>\n\n<p><img src=\"/assets/images/cisplatin.png\" alt=\"\" /></p>\n\n<p>In this image, in red, is actually an annotation of how the ligands are oriented around the platinum. This is also reflected\nin the <em>isomeric SMILES</em> in Wikidata: <code class=\"language-plaintext highlighter-rouge\">Cl[Pt@SP1]([NH3])([NH3])Cl</code>.</p>\n\n<p>The following source code is written in <a href=\"https://chem-bla-ics.linkedchemistry.info/tag/groovy\">Groovy</a> which I have used for many\nyears because it is less verbose than Java. First, we set up our helper classes:</p>\n\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-smiles'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-silent'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-ctab'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-sdg'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.smiles.SmilesParser</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.silent.SilentChemObjectBuilder</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.io.SDFWriter</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.layout.StructureDiagramGenerator</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">javax.vecmath.Vector2d</span>\n\n<span class=\"n\">builder</span> <span class=\"o\">=</span> <span class=\"n\">SilentChemObjectBuilder</span><span class=\"o\">.</span><span class=\"na\">getInstance</span><span class=\"o\">()</span>\n<span class=\"n\">sp</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SmilesParser</span><span class=\"o\">(</span><span class=\"n\">builder</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">StructureDiagramGenerator</span><span class=\"o\">();</span>\n</code></pre></div></div>\n\n<p>With some extra code, I can actually get many compounds from Wikidata to convert to v3000 with a SAPRQL (as I have done\nlast year with CXSMILES and polymers, unpublished), but let’s go with a single example:</p>\n\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">smiles</span> <span class=\"o\">=</span> <span class=\"s2\">\"Cl[Pt@SP1]([NH3])([NH3])Cl\"</span>\n<span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"s2\">\"cisplatin\"</span>\n<span class=\"n\">wdItem</span> <span class=\"o\">=</span> <span class=\"s2\">\"Q412415\"</span>\n</code></pre></div></div>\n\n<p>I can parse the SMILES and generated 2D coordinates with (which is also the approach by <a href=\"https://www.simolecule.com/cdkdepict/depict/bow/svg?smi=Cl%5BPt%40SP1%5D(%5BNH3%5D)(%5BNH3%5D)Cl&amp;zoom=2.0&amp;annotate=cip\">CDK Depict</a>\nwhich I used for the above 2D diagram of cisplatin):</p>\n\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sp</span><span class=\"o\">.</span><span class=\"na\">parseSmiles</span><span class=\"o\">(</span><span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">setMolecule</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">generateCoordinates</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">Vector2d</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"mi\">1</span><span class=\"o\">));</span>\n<span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">getMolecule</span><span class=\"o\">();</span>\n</code></pre></div></div>\n\n<p>If you have more than one molfile, they can be combined into a <a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#SDF\">SD file</a>,\nto which additional properties can be added:</p>\n\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setTitle</span><span class=\"o\">(</span><span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_SYNONYM\"</span><span class=\"o\">,</span> <span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_COMMENT\"</span><span class=\"o\">,</span> <span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_DATASOURCE_REGID\"</span><span class=\"o\">,</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_SUBSTANCE_URL\"</span><span class=\"o\">,</span> <span class=\"s2\">\"https://qlever.scholia.wiki/\"</span> <span class=\"o\">+</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n</code></pre></div></div>\n\n<p>And then generate the actual SD file with:</p>\n\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">FileWriter</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">File</span><span class=\"o\">(</span><span class=\"s2\">\"demo.sdf\"</span><span class=\"o\">))</span>\n<span class=\"n\">SDFWriter</span> <span class=\"n\">sdfWriter</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SDFWriter</span><span class=\"o\">(</span><span class=\"n\">writer</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">getSetting</span><span class=\"o\">(</span><span class=\"n\">SDFWriter</span><span class=\"o\">.</span><span class=\"na\">OptAlwaysV3000</span><span class=\"o\">).</span><span class=\"na\">setSetting</span><span class=\"o\">(</span><span class=\"s2\">\"true\"</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">write</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n<span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n</code></pre></div></div>\n\n<p>We then get this v3000 file:</p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>cisplatin\n  CDK     07262618042D\n\n  0  0  0     0  0            999 V3000\nM  V30 BEGIN CTAB\nM  V30 COUNTS 5 4 0 0 0\nM  V30 BEGIN ATOM\nM  V30 1 Cl -1.29904 2.25 0 0\nM  V30 2 Pt 0 1.5 0 0\nM  V30 3 N 1.29904 2.25 0 0 VAL=4\nM  V30 4 N 1.29904 0.75 0 0 VAL=4\nM  V30 5 Cl -1.29904 0.75 0 0\nM  V30 END ATOM\nM  V30 BEGIN BOND\nM  V30 1 1 2 1 CFG=3\nM  V30 2 1 2 3 CFG=3\nM  V30 3 1 2 4 CFG=1\nM  V30 4 1 2 5 CFG=1\nM  V30 END BOND\nM  V30 END CTAB\nM  END\n&gt; &lt;PUBCHEM_SUBSTANCE_COMMENT&gt;\nCl[Pt@SP1]([NH3])([NH3])Cl\n\n&gt; &lt;PUBCHEM_EXT_DATASOURCE_REGID&gt;\nQ412415\n\n&gt; &lt;PUBCHEM_SUBSTANCE_SYNONYM&gt;\ncisplatin\n\n&gt; &lt;PUBCHEM_EXT_SUBSTANCE_URL&gt;\nhttps://qlever.scholia.wiki/Q412415\n\n$$$$\n</code></pre></div></div>\n\n<p>I can copy/paste the resulting v3000 content to the <a href=\"https://iupac-inchi.github.io/InChI-Web-Demo/\">InChI Web Demo</a> to calculate the\nStandard InChI:</p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1S/2ClH.2H3N.Pt/h2*1H;2*1H3;/q;;;;+2/p-2\n</code></pre></div></div>\n\n<p>And this is what the two technical meetings I attended were about: <em>molecular inorganics</em>. The above InChI does not feel right,\nand certainly lost the connectivity of the ligands with the platinum. However, if we add the beta option <code class=\"language-plaintext highlighter-rouge\">-MolecularInorganics</code>,\nthen we get this InChI (where the <code class=\"language-plaintext highlighter-rouge\">B</code> in <code class=\"language-plaintext highlighter-rouge\">InChI=1B</code> reflects the beta state of this feature):</p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1B/Cl2H6N2Pt/c1-5(2,3)4/h3-4H3\n</code></pre></div></div>\n\n<p>However, this beta version does not distinguish cisplatin from <a href=\"https://qlever.scholia.wiki/chemical/Q25403157\">transplatin</a>. For that,\nwe need to dive into how to represent the stereochemistry of these inorganics first.</p>",
      "summary": "Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that do a great job. Last year and last week, I attended two technical InChI meetings, both with organometallic compounds and other molecular inorganics as one of the key topics. Thanks to Sonja (Mastodon bridge) and Gerd for the invitations. My role includes thinking about what all the work on the InChI means for the Chemistry Development Kit.",
      "image": "https://chem-bla-ics.linkedchemistry.info/assets/images/cisplatin.png",
      "date_published": "2026-07-26T00:00:00+00:00",
      "date_modified": "2026-07-26T00:00:00+00:00",
      "tags": ["chemistry","inchi","wikidata","smiles","pubchem"],
      
      
      
      "_funding": [{"award": { "title" : "FAIR4ChemNL: Accelerating the adoption of universal data standards in chemistry", "acronym" : "FAIR4ChemNL", "uri" : "doi:10.61686/XVYQV45374" }, "funder": { "name": "Dutch Research Council", "ror": "04jsz6e67" } }],
      
      
        "authors": [ { "name": "Egon Willighagen", "url": "https://orcid.org/0000-0001-7542-0286" } ]
      
    }

  ]
}
