import os import re import sys from miscMethods import au2A def xyzWrite(atoms, positions): output=[str(len(atoms))] output.append("Cu16 H2") fmtstr = "{{}} {{:.{0}f}} {{:.{0}f}} {{:.{0}f}}".format(6) for i in range(len(atoms)): output.append(fmtstr.format(atoms[i], positions[i][0], positions[i][1], positions[i][2])) return "\n".join(output) def dimer2dict(atom1, atom2, r, units): """ Creates a list of dicts in angstrom ready to create an xyz file via dict2xyz for a dimer. Arguments: atom1(str): abbreviation of first atom (e.g. H or Cu) atom2(str): abbreviation of secon atom r(real): distance between the first and second atom in units defined in units units(str): "angstrom" or "bohr" (Hartree atomic units) Returns: dict of molecule """ #Convert to Angstrom if units=="angstrom": r = r elif units=="bohr": r = au2A(r) else: sys.exit("illegal unit") molDict=[] molDict.append({"atom":atom1, "position":[0.0, 0.0, 0.0]}) molDict.append({"atom":atom2, "position":[0.0, 0.0, r]}) return molDict def atom2dict(atom1): """ Creates a dict in angstrom ready to create an xyz file via dict2xyz for an atom. Arguments: atom1(str): abbreviation of first atom (e.g. H or Cu) """ molDict=[] molDict.append({"atom":atom1, "position":[0.0, 0.0, 0.0]}) return molDict # In[33]: def dict2xyz(molDict): """ returns xyz string Arguments: molDict: list of dictionaries with entries atom(str) and position(list of reals, dimension 3) positions have to be in angstrom! filename: name of xyz file (hast to end on .xyz) """ #prepare xyz file atoms=[] positions=[] for entry in molDict: atoms.append(entry["atom"]) positions.append(entry["position"]) return xyzWrite(atoms, positions)