Support for ORCA Internal Coordinates

As I am moving into research on some new topics for the summer, I am trying to use my current tools to work on my new project, and I am coming up a bit short with a specific issue.

ORCA allows users to use a few different kinds of coordinate input, relevant to this post are the XYZ and Internal coordinates. The XYZ coordinates are the same as in Avogadro, however there doesn’t appear to be any way to generate an internal coordinate output from A2. ORCA’s internal coordinate function is structure as follows:

AtomN NA NB NC RN AN DN

Such that NA is a reference atom that AtomN has a specified distance from (RN), NB is another reference atom that forms some angle (AN) between NA, NB, and AtomN, and NC is a third reference atom that forms a dihedral (DN) with atom NA, NB, NC, and AtomN. An example of this is taken from the ORCA 5.0.4 manual, and shows formaldehyde in this structure.

C 0 0 0 0 0 0
O 1 0 0 1.23 0 0
H 1 2 0 1.10 122 0
H 1 2 3 1.10 122 180

As I am not a programmer, I have just about zero idea how this would be implemented, however all of the values represented here are accessible from preexisting features in Avogadro, such as measuring the distances, angles, and dihedrals with the measuring tool. The exact specifications of how one would go about implementing this is unclear to me, so I’ll refrain from making any suggestions beyond the bare minimum. Hopefully someone will find the time to implement something like this, and if I get an itch or some down time this summer I’ll even look into writing a python script to do this myself. Thanks a ton to the team, happy computing!

One reason for avoiding internal coordinate specifications in the input generators is that there are a huge number of variations (even more than Cartesian atom specifications). For example,

C
C   1 1.519
C   2 1.519  1 111.551
H   1 1.094  2 110.334  3 180.0

On the other hand, there’s definitely a need for internal coordinates. I’m working on code for the peptide builder, which requires internal → Cartesian (and thus the reverse for testing).

I can’t remember if there’s a GitHub issue, but please go to Issues · OpenChemistry/avogadrolibs · GitHub and file one.

(One other trick with z-matrix is that the atom order is not always the best choice.)

If you want a workaround in the meantime, the Python package chemcoord is quite nice: Welcome to ChemCoord’s documentation! — ChemCoord 2.1.2 documentation