Algorithmic Details

For the interested reader, a brief description of how PyConnect builds a disconnectivity graph from a database of minima and transitions states;

The minima and transition states contained in the database files are read and saved into memory.

The database is then pruned;

Firstly, the minima and transition states which are not connected to a particular minimum (by default the global minimum) below the energy threshold FIRST are discarded from the database.

The database is checked to ensure that it is connected and that the stationary points are physically plausible (i.e. the transition state joining a pair of minima has a higher energy than both of them).

Once this database has been built, the minima can be organised into basins, a basin being all the minima which are connected below a particular energy level, and can contain either a single minimum, or a number of minima. The tree graph structure has now been determined, and the graph can be plotted.

For metric disconnectivity graphs, plotting the graph is fairly trivial. Nodes are positioned according to the mean value of the metric for each minima they contain. For disconnectivity graphs, positioning the nodes and edges can be a little trickier, as each node and edge must be placed for maximum clarity and to avoid edge-crossing. This is achieved as follows;

The x-axis is divided into "columns", with a column for each minimum contained in the graph.

Starting from the highest energy level and iterating through to the lowest;

Nodes are assigned a column for each minima they contain

Nodes are positioned below their parents, with the largest nodes positioned as close to the centre of their parents, and smaller nodes positioned progressively further out.

Once the positions of each node are determined, the graph can be plotted using matplotlib