Skip to main content

lone pair rendering

JCP now has minimal lone pair display. I would prefer the layout to be at the corners of a square, rather than on the edges. Videlicet, they are currently only at N, W, S, E; I think that NW, SW, SW, and NE would be better.

Strangely lone pairs don't seem to appear in CML files when written out, but Egon says he will look at this. Perhaps I should file a bug report...
Oh, and radicals are implemented too, but I don't have a picture of that (see right). They are in different generators, but I guess a single 'DotGenerator' could do both :)


Kirill said…
According to this IUPAC Recommendations (section GR-5.2 Lone pairs):
Isolated lone pairs should be positioned, like unpaired electrons, close to the atom with which they are associated. They should normally be positioned exactly above, below, to the left, or to the right of the atom label, with the two dots of the lone pair parallel to the closest side (horizontally if above or below the label, vertically if to the left or the right). Positioning of lone pairs at other angles should be strongly avoided unless it is impossible to do otherwise.
To illustrate the latter point, there is an example of ClF3 where two lone pairs are shown to NE and SE of Cl atom.
Kirill said…
Do they (lone pairs) actually have to be present in CML file? I think this is a matter of representation / style. The lone pair in ammonia is there irrespectively of whether we want to see it or not.
gilleain said…
wow - I didn't know there were so many ways to get a chemical diagram wrong! :)

That looks like a very useful document, thanks.

I had assumed that the lone pair should be drawn where a bond would be. So an COH would have a trigonal planar structure...

This is true that lone pairs are implicit. I was distracted by the fact that the CDK requires there to be an explicit lone pair object attached to an atom.

I guess the situation is a lot like hydrogens, actually.
Gillean, looks great!

Kirill, the LPs are there always, sure. However, diagrams are somewhat special, where you might want to put focus on some lone pairs, not all. For example, those involved in a reaction. This is why one would be interested in serializing this to CML.

Regarding the oxygen lone pairs... it actually has two lone pairs, and the diagram chooses to show only one...
Kirill said…
Sure, it would be great to show where lone pair is, especially if that adds clarity to the sketch. Another IUPAC Recommendations (you see, I am promoting my own work here), p. 1942, top, show two examples of trigonal pyramidal confuguration due to lone pair. If you do not draw this lone pair, you may not even realise that sulfur and phosphorus are chiral atoms there.

Popular posts from this blog

How many isomers of C4H11N are there?

One of the most popular queries that lands people at this blog is about the isomers of C4H11N - which I suspect may be some kind of organic chemistry question on student homework. In any case, this post will describe how to find all members of a small space like this by hand rather than using software.

Firstly, lets connect all the hydrogens to the heavy atoms (C and N, in this case). For example:

Now eleven hydrogens can be distributed among these five heavy atoms in various ways. In fact this is the problem of partitioning a number into a list of other numbers which I've talked about before. These partitions and (possible) fragment lists are shown here:

One thing to notice is that all partitions have to have 5 parts - even if one of those parts is 0. That's not strictly a partition anymore, but never mind. The other important point is that some of the partitions lead to multiple fragment lists - [3, 3, 2, 2, 1] could have a CH+NH2 or an NH+CH2.

The final step is to connect u…

The Gale-Ryser Theorem

This is a small aside. While reading a paper by Grüner, Laue, and Meringer on generation by homomorphism they mentioned the Gale-Ryser (GR) theorem. As it turns out, this is a nice small theorem closely related to the better known Erdős-Gallai (EG).

So, GR says that given two partitions of an integer (p and q) there exists a (0, 1) matrixA iff p*dominatesq such that the row sum vector r(A) = p and the column sum vector c(A) = q.

As with most mathematics, that's quite terse and full of terminology like 'dominates' : but it's relatively simple. Here is an example:

The partitions p and q are at the top left, they both sum to 10. Next, p is transposed to get p* = [5, 4, 1] and this is compared to q at the bottom left. Since the sum at each point in the sequence is greater (or equal) for p* than q, the former dominates. One possible matrix is at the top left with the row sum vector to the right, and the column sum vector below.

Finally, the matrix can be interpreted as a bi…

Havel-Hakimi Algorithm for Generating Graphs from Degree Sequences

A degree sequence is an ordered list of degrees for the vertices of a graph. For example, here are some graphs and their degree sequences:

Clearly, each graph has only one degree sequence, but the reverse is not true - one degree sequence can correspond to many graphs. Finally, an ordered sequence of numbers (d1 >= d2 >= ... >= dn > 0) may not be the degree sequence of a graph - in other words, it is not graphical.

The Havel-Hakimi (HH) theorem gives us a way to test a degree sequence to see if it is graphical or not. As a side-effect, a graph is produced that realises the sequence. Note that it only produces one graph, not all of them. It proceeds by attaching the first vertex of highest degree to the next set of high-degree vertices. If there are none left to attach to, it has either used up all the sequence to produce a graph, or the sequence was not graphical.

The image above shows the HH algorithm at work on the sequence [3, 3, 2, 2, 1, 1]. Unfortunately, this produce…