def from_string(header_str): """ Reads Header string and returns Header object if header was generated by pymatgen. Args: header_str: pymatgen generated feff.inp header Returns: structure object. """ lines = tuple(clean_lines(header_str.split("\n"), False)) comment = lines[0] feffpmg = comment.find("pymatgen") if feffpmg > 0: source = lines[1].split()[2] natoms = int(lines[7].split()[2]) basis_vec = lines[5].split() a = float(basis_vec[2]) b = float(basis_vec[3]) c = float(basis_vec[4]) lengths = [a, b, c] basis_ang = lines[6].split() alpha = float(basis_ang[2]) beta = float(basis_ang[3]) gamma = float(basis_ang[4]) angles = [alpha, beta, gamma] lattice = Lattice.from_lengths_and_angles(lengths, angles) atomic_symbols = [] for i in xrange(8, 8 + natoms): atomic_symbols.append(lines[i].split()[2]) # read the atomic coordinates coords = [] for i in xrange(natoms): toks = lines[i + 8].split() coords.append([float(s) for s in toks[3:]]) struct_fromfile = Structure(lattice, atomic_symbols, coords, False, False, False) struct_fromfile.compound = lines[3].split()[2] h = Header(struct_fromfile, comment) h.set_source(source) return h else: return "Header not generated by pymatgen, " \ "cannot return header object"