(** Z-matrix representation of nuclear coordinates *) (** let zmt = Zmatrix.of_string " * n * n 1 nn * h 1 hn 2 hnn * h 2 hn 1 hnn 3 dih4 * h 1 hn 2 hnn 4 dih5 * h 2 hn 1 hnn 3 dih5 * * nn 1.446 * hn 1.016 * hnn 106.0 * dih4 -54.38 * dih5 54.38 * " ;; * - : Zmatrix.t = N * N 1 1.446000 * H 1 1.016000 2 106.000000 * H 2 1.016000 1 106.000000 3 -54.380000 * H 1 1.016000 2 106.000000 4 54.380000 * H 2 1.016000 1 106.000000 3 54.380000 * * * Zmatrix.to_xyz zmt ;; * - : (Element.t * float * float * float) array = * [|(N, 0., 0., 0.); (N, 0., 0., 1.446); * (H, -0.976641883073332107, 0., -0.280047553510071046); * (H, -0.568802835186988709, 0.793909757123734683, 1.726047553510071); * (H, 0.314092649983635563, 0.924756819385119, -0.280047553510071101); * (H, -0.568802835186988709, -0.793909757123734683, 1.726047553510071)|] * * * Zmatrix.to_xyz_string zmt ;; * - : string = * "N 0.000000 0.000000 0.000000 * N 0.000000 0.000000 1.446000 * H -0.976642 0.000000 -0.280048 * H -0.568803 0.793910 1.726048 * H 0.314093 0.924757 -0.280048 * H -0.568803 -0.793910 1.726048" *) type t (** Conversion *) val of_string : string -> t (** Reads a z-matrix from a string *) val to_xyz : t -> (Element.t * float * float * float) array (** Converts to xyz format, as in the ~Nuclei~ module *) val to_xyz_string : t -> string (** Converts to xyz format, as a string *) (** Printers *) val pp : Format.formatter -> t -> unit