Skip to content

Bond order of heteroatoms in aromatics #982

@alongd

Description

@alongd

We should fix the treatment of heteroatoms (i.e., with lone pairs) that participate in aromatic rings.

Since RMG hard-codes a "benzene" bond as having a bond order of 1.5, we get the following error for sulfur, for example:
InvalidAdjacencyListError: Invalid valency for atom S (S4b) with 0 unpaired electrons, 1 pairs of electrons, 0 charge, and bonds [1.5,1.5].
One of the two lone pairs of sulfur participates in the aromaticity. However, with an aromatic (benzene) bond order of 1.5, RMG always gets the valency wrong:

  • If we ascribe the S atom both lone pairs, its valence_electrons become 2 pairs * 2 electron/pair + 2 bonds * 1.5 bond order = 7 ≠ 6
  • If we don't ascribe the lone pair that gets delocalozed to the S atom (as in the above example), its valence_electrons become 1 pairs * 2 electron/pair + 2 bonds * 1.5 bond order = 5 ≠ 6

We should consider the following cases:

  • Carbon donates 3 electrons in total to the ring, hence its aromatic bond order is indeed 1.5
  • Nitrogen has two cases:
    • It could either behave like carbon, what we currently call an N3b atomType, retaining its lone pair in an aromatic ring, donating 3 electrons in total to the ring, making its aromatic bond order 1.5, like carbon (e.g., pyridine)
    • But it could also share its lone pair with the ring (with a 5-member ring), what we currently call an N5b atomType, donating 4 electrons in total to the ring, making its aromatic bond order 2 (e.g., pyrrole)
  • Oxygen in an aromatic ring donates one of its lone pairs, or 4 electrons in total, hence its aromatic bond order is 2.
  • Sulfur behaves similarly to oxygen (aromatic bond order of 2). We currently call this an S4b atomType.

With these definitions implemented, the valency in the above example will be valid: Sulfur's valence_electrons in an aromatic ring become 1 pairs * 2 electron/pair + 2 bonds * 2 bond order = 6

I suggest we switch to calling these type of bonds aromatic, rather than benzene.
We should perhaps hard code the different aromatic bond orders according to the respective atomType.
We should also define an aromatic oxygen atomType.

Metadata

Metadata

Assignees

No one assigned

    Labels

    stalestale issue/PR as determined by actions bot

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions