func EncodeCoords(coords *v3.Matrix, enc *json.Encoder) *Error { c := new(Coords) t := make([]float64, 3, 3) for i := 0; i < coords.NVecs(); i++ { c.Coords = coords.Row(t, i) if err := enc.Encode(c); err != nil { return NewError("postprocess", "chemjson.EncodeCoords", err) } } return nil }
//XYZStringWrite writes the mol Ref and the Coord coordinates in an XYZ-formatted string. func XYZStringWrite(Coords *v3.Matrix, mol Atomer) (string, error) { var out string if mol.Len() != Coords.NVecs() { return "", CError{"Ref and Coords dont have the same number of atoms", []string{"XYZStringWrite"}} } c := make([]float64, 3, 3) out = fmt.Sprintf("%-4d\n\n", mol.Len()) //towrite := Coords.Arrays() //An array of array with the data in the matrix for i := 0; i < mol.Len(); i++ { //c := towrite[i] //coordinates for the corresponding atoms c = Coords.Row(c, i) temp := fmt.Sprintf("%-2s %12.6f%12.6f%12.6f \n", mol.Atom(i).Symbol, c[0], c[1], c[2]) out = strings.Join([]string{out, temp}, "") } return out, nil }
//XYZStringWrite writes the mol Ref and the Coord coordinates in an XYZ-formatted string. func XYZWrite(out io.Writer, Coords *v3.Matrix, mol Atomer) error { iowriterError := func(err error) error { return CError{"Failed to write in io.Writer" + err.Error(), []string{"io.Writer.Write", "XYZWrite"}} } if mol.Len() != Coords.NVecs() { return CError{"Ref and Coords dont have the same number of atoms", []string{"XYZWrite"}} } c := make([]float64, 3, 3) _, err := out.Write([]byte(fmt.Sprintf("%-4d\n\n", mol.Len()))) if err != nil { return iowriterError(err) } //towrite := Coords.Arrays() //An array of array with the data in the matrix for i := 0; i < mol.Len(); i++ { //c := towrite[i] //coordinates for the corresponding atoms c = Coords.Row(c, i) temp := fmt.Sprintf("%-2s %12.6f%12.6f%12.6f \n", mol.Atom(i).Symbol, c[0], c[1], c[2]) _, err := out.Write([]byte(temp)) if err != nil { return iowriterError(err) } } return nil }