to_zmat¶
-
Cartesian.
to_zmat
(buildlist=None, fragment_list=None, check_linearity=True)[source]¶ Transform to internal coordinates.
- Transforming to internal coordinates involves basically three
- steps:
- Define an order of how to build.
- Check for problematic local linearity. In this algorithm an
- angle with
170 < angle < 10
is assumed to be linear. This is not the mathematical definition, but makes it safer against “floating point noise”
- Calculate the bond lengths, angles and dihedrals using the
- references defined in step 1 and 2.
In the first two steps a so called
buildlist
is created. This is basically anp.array
of shape(n_atoms, 4)
andinteger type.- The four columns are ``[‘own_index’, ‘bond_with’, ‘angle_with’,
- ‘dihedral_with’]``.
- This means that usually the upper right triangle can be any
- number, because for example the first atom has no other atom as reference.
- It is important to know, that getting the buildlist is a very
- costly step since the algoritym tries to make some guesses based on the connectivity to create a “chemical” zmatrix.
- If you create several zmatrices based on the same references
- you can save the buildlist of a zmatrix with
Zmat.build_list()
. - If you then pass the buildlist as argument to
to_zmat
, - then the algorithm directly starts with step 3.
Another thing is that you can specify fragments. For this purpose the function
Cartesian.get_fragment()
is quite handy.An element of fragment_list looks like:
(fragment, connections)
- Fragment is a
Cartesian
instance and connections is a (3, 4)
numpy integer array, that defines how the fragment is connected to the molecule.
Parameters: - buildlist (np.array) –
- fragment_list (list) –
- check_linearity (bool) –
Returns: A new instance of
Zmat
.Return type: