{
  "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/2006/12/30/modern-chemistry-in-cdk-beyond-two.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/h2ytc-6pt51",
      "url": "https://chem-bla-ics.linkedchemistry.info/2006/12/30/modern-chemistry-in-cdk-beyond-two.html",
      "title": "Modern chemistry in the CDK: beyond the two-atom bond",
      "content_html": "<p><a href=\"http://depth-first.com/\">Rich</a> <a href=\"https://doi.org/10.59350/pz3p6-fv247\">recently blogged <i class=\"fa-solid fa-recycle fa-xs\"></i></a>\nabout the limitations of the two-atom bond representation often used in chemoinformatics,\ntriggered by <a href=\"https://doi.org/10.59350/xnt9b-80962\">the four ferrocene entries in PubChem <i class=\"fa-solid fa-recycle fa-xs\"></i></a>.\nIn reply to himself, <a href=\"https://doi.org/10.59350/s1vtx-e9q82\">Rich described FlexMol <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\nan XML language that can describe bond systems that involve more than two atoms.</p>\n\n<p>Obviously, the problems originates from the lack of mathematical knowledge of chemists: the\ncurrent chemoinformatics heavily depends on graph theory, where each atom is a vertex and each\nbond an edge. This has the advantage that we can borrow all algorithms that work with graph\nrepresentations, such as <a href=\"http://en.wikipedia.org/wiki/Dijkstra's_algorithm\">Dijkstra’s algorithm</a>\nto find the shortest path between two vertices. Or, in chemical language, an algorithm to\ncalculate how many bonds two atoms are apart in a molecule.</p>\n\n<p>When discussing FlexMol, Rich mentions the work by Dietz (DOI:<a href=\"https://doi.org/10.1021/ci00027a001\">10.1021/ci00027a001</a>),\nbut I would like to mention the PhD thesis of S. Bauerschmidt to this (see\nDOI:<a href=\"https://doi.org/10.1021/ci9704423\">10.1021/ci9704423</a>) done in Gasteiger’s group.\nDropping this ‘two-atom bond’ representation in favor of something that better describes compounds\nlike ferrocene, like the Dietz and Bauerschmidt approaches, has the unfortunate disadvantage of\nloosing compatibility with graph theory algorithms. Nevertheless, in order to take\nchemoinformatics to the next level, we have to address these issues. But hope is not lost, and\npeople are working on rewriting our toolkit of chemoinformatics algorithms to match such new\nrepresentations.</p>\n\n<h2 id=\"cdk\">CDK</h2>\n\n<p>I will postpone analyzing the <a href=\"http://cdk.sf.net/\">CDK</a> for compatibility with such more modern\nrepresentations (look out for a <a href=\"http://cdknews.org/\">CDK News</a> article), and now just describe\nhow the CDK can be used for FlexMol/Dietz/Bauerschmidt representations. Consider\n<a href=\"https://doi.org/10.59350/s1vtx-e9q82\">the four examples Rich gives <i class=\"fa-solid fa-recycle fa-xs\"></i></a>\nin his blog. Here are the CDK ways of doing the same.</p>\n\n<p>For example, 1,3,5-cyclohexatriene:</p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public</span> <span class=\"nc\">IMolecule</span> <span class=\"nf\">makeCycloHexaTriene</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">cyclohexatriene</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newMolecule</span><span class=\"o\">();</span>\n\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C0\"</span><span class=\"o\">);</span> <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C1\"</span><span class=\"o\">);</span> <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C2\"</span><span class=\"o\">);</span> <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C3\"</span><span class=\"o\">);</span> <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C4\"</span><span class=\"o\">);</span> <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C5\"</span><span class=\"o\">);</span> <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"mf\">1.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB0</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"mf\">2.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB1</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">4</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"mf\">1.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB2</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"mf\">2.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB3</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">4</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">,</span> <span class=\"mf\">1.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB4</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">,</span> <span class=\"mf\">2.0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB5</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">4</span><span class=\"o\">);</span>\n\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">);</span>\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">);</span>\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC5</span><span class=\"o\">);</span>\n\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB0</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB1</span><span class=\"o\">);</span>\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB2</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB3</span><span class=\"o\">);</span>\n  <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB4</span><span class=\"o\">);</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB5</span><span class=\"o\">);</span>\n\n  <span class=\"k\">return</span> <span class=\"n\">cyclohexatriene</span><span class=\"o\">;</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n\n<p>Summarizing, the key thing is to use the <code class=\"language-plaintext highlighter-rouge\">IBond.setElectronCount()</code> method.\nThe call is sort of  redundant, as the CDK defaults to two electrons if not\nexplicitly given. This compound is, of course, benzene which we can represent\nlike this too:</p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public</span> <span class=\"nc\">IMolecule</span> <span class=\"nf\">makeBenzene</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">benzene</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newMolecule</span><span class=\"o\">();</span>\n\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C0\"</span><span class=\"o\">);</span> <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C1\"</span><span class=\"o\">);</span> <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C2\"</span><span class=\"o\">);</span> <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C3\"</span><span class=\"o\">);</span> <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span> \n    <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C4\"</span><span class=\"o\">);</span> <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span> \n    <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C5\"</span><span class=\"o\">);</span> <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB0</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB1</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB2</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB3</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB4</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB5</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondingSystem</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">();</span>\n    <span class=\"n\">bondingSystem</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">6</span><span class=\"o\">);</span>\n    <span class=\"n\">bondingSystem</span><span class=\"o\">.</span><span class=\"na\">setAtoms</span><span class=\"o\">(</span>\n      <span class=\"k\">new</span> <span class=\"nc\">IAtom</span><span class=\"o\">[]</span> <span class=\"o\">{</span> <span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">,</span> \n                    <span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">}</span>\n    <span class=\"o\">);</span>\n\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">);</span>\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">);</span>\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC5</span><span class=\"o\">);</span>\n\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB0</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB1</span><span class=\"o\">);</span>\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB2</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB3</span><span class=\"o\">);</span>\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB4</span><span class=\"o\">);</span> <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB5</span><span class=\"o\">);</span>\n  <span class=\"n\">benzene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondingSystem</span><span class=\"o\">);</span>\n\n  <span class=\"k\">return</span> <span class=\"n\">benzene</span><span class=\"o\">;</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n\n<p>This version represents the delocalized aromatic pi-system as one IBond:\none with 6 electrons, and 6 associated atoms.</p>\n\n<p>The cyclopentadienyl anion is represented similarly:</p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public</span> <span class=\"nc\">IMolecule</span> <span class=\"nf\">makeCycloPentadienylAnion</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">cp</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newMolecule</span><span class=\"o\">();</span>\n\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C0\"</span><span class=\"o\">);</span> <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C1\"</span><span class=\"o\">);</span> <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C2\"</span><span class=\"o\">);</span> <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C3\"</span><span class=\"o\">);</span> <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C4\"</span><span class=\"o\">);</span> <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB0</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB1</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB2</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB3</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">atomC0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB4</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondingSystem</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">();</span>\n    <span class=\"n\">bondingSystem</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">6</span><span class=\"o\">);</span>\n  <span class=\"n\">bondingSystem</span><span class=\"o\">.</span><span class=\"na\">setAtoms</span><span class=\"o\">(</span>\n    <span class=\"k\">new</span> <span class=\"nc\">IAtom</span><span class=\"o\">[]{</span> <span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">}</span>\n  <span class=\"o\">);</span>\n\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">);</span> <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">);</span>\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">);</span> <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">);</span>\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">);</span>\n\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB0</span><span class=\"o\">);</span> <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB1</span><span class=\"o\">);</span>\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB2</span><span class=\"o\">);</span> <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB3</span><span class=\"o\">);</span>\n  <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB4</span><span class=\"o\">);</span> <span class=\"n\">cp</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondingSystem</span><span class=\"o\">);</span>\n\n  <span class=\"k\">return</span> <span class=\"n\">cp</span><span class=\"o\">;</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n\n<p>And the final step in this series, is ferrocene:</p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public</span> <span class=\"nc\">IMolecule</span> <span class=\"nf\">makeFerrocene</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">ferrocene</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newMolecule</span><span class=\"o\">();</span>\n\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C0\"</span><span class=\"o\">);</span> <span class=\"n\">atomC0</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C1\"</span><span class=\"o\">);</span> <span class=\"n\">atomC1</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C2\"</span><span class=\"o\">);</span> <span class=\"n\">atomC2</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C3\"</span><span class=\"o\">);</span> <span class=\"n\">atomC3</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C4\"</span><span class=\"o\">);</span> <span class=\"n\">atomC4</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C5\"</span><span class=\"o\">);</span> <span class=\"n\">atomC5</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC6</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC6</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C6\"</span><span class=\"o\">);</span> <span class=\"n\">atomC6</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC7</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC7</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C7\"</span><span class=\"o\">);</span> <span class=\"n\">atomC7</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC8</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC8</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C8\"</span><span class=\"o\">);</span> <span class=\"n\">atomC8</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">atomC9</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">CARBON</span><span class=\"o\">);</span>\n    <span class=\"n\">atomC9</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"C9\"</span><span class=\"o\">);</span> <span class=\"n\">atomC9</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">1</span><span class=\"o\">);</span>\n  <span class=\"nc\">IAtom</span> <span class=\"n\">iron</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newAtom</span><span class=\"o\">(</span><span class=\"nc\">Elements</span><span class=\"o\">.</span><span class=\"na\">IRON</span><span class=\"o\">);</span>\n    <span class=\"n\">iron</span><span class=\"o\">.</span><span class=\"na\">setID</span><span class=\"o\">(</span><span class=\"s\">\"Fe10\"</span><span class=\"o\">);</span> <span class=\"n\">iron</span><span class=\"o\">.</span><span class=\"na\">setHydrogenCount</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB0</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB0</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB1</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB2</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB3</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB4</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">atomC0</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB4</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB5</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC5</span><span class=\"o\">,</span> <span class=\"n\">atomC6</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB5</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB6</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC6</span><span class=\"o\">,</span> <span class=\"n\">atomC7</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB6</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB7</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC7</span><span class=\"o\">,</span> <span class=\"n\">atomC8</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB7</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB8</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC8</span><span class=\"o\">,</span> <span class=\"n\">atomC9</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB8</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondB9</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">(</span><span class=\"n\">atomC9</span><span class=\"o\">,</span> <span class=\"n\">atomC5</span><span class=\"o\">);</span>\n    <span class=\"n\">bondB9</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">2</span><span class=\"o\">);</span>\n\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondingSystem1</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">();</span>\n    <span class=\"n\">bondingSystem1</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">6</span><span class=\"o\">);</span>\n    <span class=\"n\">bondingSystem1</span><span class=\"o\">.</span><span class=\"na\">setAtoms</span><span class=\"o\">(</span>\n      <span class=\"k\">new</span> <span class=\"nc\">IAtom</span><span class=\"o\">[]</span> <span class=\"o\">{</span>\n       <span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">,</span> <span class=\"n\">iron</span>\n      <span class=\"o\">}</span>\n    <span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondingSystem2</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">();</span> \n    <span class=\"n\">bondingSystem2</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">6</span><span class=\"o\">);</span>\n    <span class=\"n\">bondingSystem2</span><span class=\"o\">.</span><span class=\"na\">setAtoms</span><span class=\"o\">(</span>\n      <span class=\"k\">new</span> <span class=\"nc\">IAtom</span><span class=\"o\">[]</span> <span class=\"o\">{</span>\n        <span class=\"n\">atomC5</span><span class=\"o\">,</span> <span class=\"n\">atomC6</span><span class=\"o\">,</span> <span class=\"n\">atomC7</span><span class=\"o\">,</span> <span class=\"n\">atomC8</span><span class=\"o\">,</span> <span class=\"n\">atomC9</span><span class=\"o\">,</span> <span class=\"n\">iron</span>\n      <span class=\"o\">}</span>\n    <span class=\"o\">);</span>\n  <span class=\"nc\">IBond</span> <span class=\"n\">bondingSystem3</span> <span class=\"o\">=</span> <span class=\"n\">builder</span><span class=\"o\">.</span><span class=\"na\">newBond</span><span class=\"o\">();</span>\n    <span class=\"n\">bondingSystem3</span><span class=\"o\">.</span><span class=\"na\">setElectronCount</span><span class=\"o\">(</span><span class=\"mi\">6</span><span class=\"o\">);</span>\n    <span class=\"n\">bondingSystem3</span><span class=\"o\">.</span><span class=\"na\">setAtoms</span><span class=\"o\">(</span>\n      <span class=\"k\">new</span> <span class=\"nc\">IAtom</span><span class=\"o\">[]{</span>\n        <span class=\"n\">atomC0</span><span class=\"o\">,</span> <span class=\"n\">atomC1</span><span class=\"o\">,</span> <span class=\"n\">atomC2</span><span class=\"o\">,</span> <span class=\"n\">atomC3</span><span class=\"o\">,</span> <span class=\"n\">atomC4</span><span class=\"o\">,</span>\n        <span class=\"n\">atomC5</span><span class=\"o\">,</span> <span class=\"n\">atomC6</span><span class=\"o\">,</span> <span class=\"n\">atomC7</span><span class=\"o\">,</span> <span class=\"n\">atomC8</span><span class=\"o\">,</span> <span class=\"n\">atomC9</span><span class=\"o\">,</span>\n        <span class=\"n\">iron</span>\n      <span class=\"o\">}</span>\n    <span class=\"o\">);</span>\n\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC0</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC1</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC2</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC3</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC4</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC5</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC6</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC7</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC8</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">atomC9</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addAtom</span><span class=\"o\">(</span><span class=\"n\">iron</span><span class=\"o\">);</span>\n\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB0</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB1</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB2</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB3</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB4</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB5</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB6</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB7</span><span class=\"o\">);</span> <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB8</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondB9</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondingSystem1</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondingSystem2</span><span class=\"o\">);</span>\n  <span class=\"n\">ferrocene</span><span class=\"o\">.</span><span class=\"na\">addBond</span><span class=\"o\">(</span><span class=\"n\">bondingSystem3</span><span class=\"o\">);</span>\n\n  <span class=\"k\">return</span> <span class=\"n\">ferrocene</span><span class=\"o\">;</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n\n<p>Now, you will note that this approach does not exactly follow Rich’s FlexMol examples: the\nskipped atom pair concepts in the FlexMol version of ferrocene. His example, more closely follows\nwhat we are likely to draw, while the CDK code above more closely follows the molecular orbital\nconcept. (I have to check to see how Dietz and Bauerschmidt did this.)</p>\n\n<p>As said, the real trick is to have the chemoinformatics toolkit that can work with this\nrepresentation, but I will save that for later. At least our algorithms to calculate the\nmolecular mass should work ;)</p>\n\n<h4>References</h4>\n<div class=\"csl-bib-body\">\n    <div class=\"csl-entry\">Apodaca, R. (2006). A Molecular Language for Modern Chemistry: Getting Started with FlexMol. In <i>Front Matter</i>. Front Matter. https://doi.org/10.59350/s1vtx-e9q82 <a href=\"https://doi.org/10.59350/s1vtx-e9q82\">CrossRef</a> <a href=\"https://qlever.scholia.wiki/doi/10.59350/s1vtx-e9q82\">Scholia</a></div>\n    <div class=\"csl-entry\">Apodaca, R. (2006). Ferrocene and Beyond: A Solution to the Molecular Representation Problem. In <i>Front Matter</i>. Front Matter. https://doi.org/10.59350/pz3p6-fv247 <a href=\"https://doi.org/10.59350/pz3p6-fv247\">CrossRef</a> <a href=\"https://qlever.scholia.wiki/doi/10.59350/pz3p6-fv247\">Scholia</a></div>\n    <div class=\"csl-entry\">Apodaca, R. (2006). The Problem with Ferrocene. In <i>Front Matter</i>. Front Matter. https://doi.org/10.59350/xnt9b-80962 <a href=\"https://doi.org/10.59350/xnt9b-80962\">CrossRef</a> <a href=\"https://qlever.scholia.wiki/doi/10.59350/xnt9b-80962\">Scholia</a></div>\n    <div class=\"csl-entry\">Bauerschmidt, S., &#38; Gasteiger, J. (1997). Overcoming the Limitations of a Connection Table Description:  A Universal Representation of Chemical Species. <i>Journal of Chemical Information and Computer Sciences</i>, <i>37</i>(4), 705–714. https://doi.org/10.1021/ci9704423 <a href=\"https://doi.org/10.1021/ci9704423\">CrossRef</a> <a href=\"https://qlever.scholia.wiki/doi/10.1021/ci9704423\">Scholia</a></div>\n    <div class=\"csl-entry\">Dietz, A. (1995). Yet Another Representation of Molecular Structure. <i>Journal of Chemical Information and Computer Sciences</i>, <i>35</i>(5), 787–802. https://doi.org/10.1021/ci00027a001 <a href=\"https://doi.org/10.1021/ci00027a001\">CrossRef</a> <a href=\"https://qlever.scholia.wiki/doi/10.1021/ci00027a001\">Scholia</a></div>\n  </div>",
      "summary": "Rich recently blogged about the limitations of the two-atom bond representation often used in chemoinformatics, triggered by the four ferrocene entries in PubChem . In reply to himself, Rich described FlexMol , an XML language that can describe bond systems that involve more than two atoms.",
      
      "date_published": "2006-12-30T00:00:00+00:00",
      "date_modified": "2025-02-16T00:00:00+00:00",
      "tags": ["cheminf","cdk"],
      "_references": [
        
          
          
            { "url": "https://doi.org/10.1021/ci00027a001", "doi": "10.1021/ci00027a001"
             }
            ,
          
        
          
          
            { "url": "https://doi.org/10.1021/ci9704423", "doi": "10.1021/ci9704423"
             }
            ,
          
        
          
          
            { "url": "https://doi.org/10.59350/pz3p6-fv247", "doi": "10.59350/pz3p6-fv247"
             }
            ,
          
        
          
          
            { "url": "https://doi.org/10.59350/xnt9b-80962", "doi": "10.59350/xnt9b-80962"
             }
            ,
          
        
          
          
            { "url": "https://doi.org/10.59350/s1vtx-e9q82", "doi": "10.59350/s1vtx-e9q82"
             }
            
          
        ],
      
      
      
      
      
      
        "authors": [ { "name": "Egon Willighagen", "url": "https://orcid.org/0000-0001-7542-0286" } ]
      
    }

  ]
}
