def read_xdatcar(filename, skip=0, every=1): f = open(filename, 'r') lines = f.readlines() f.close() lattice_constant = float(lines[1].strip()) cell = numpy.array( [[float(x) * lattice_constant for x in lines[2].split()], [float(x) * lattice_constant for x in lines[3].split()], [float(x) * lattice_constant for x in lines[4].split()]]) elements = lines[5].split() natoms = [int(x) for x in lines[6].split()] nframes = (len(lines) - 7) / (sum(natoms) + 1) trajectory = [] for i in range(skip, nframes, every): a = Atoms('H' * sum(natoms)) a.masses = [1.0] * len(a) a.set_chemical_symbols(''.join( [n * e for (n, e) in zip(natoms, elements)])) a.cell = cell.copy() j = 0 for N, e in zip(natoms, elements): for k in range(N): split = lines[8 + i * (sum(natoms) + 1) + j].split() a[j].position = [float(l) for l in split[0:3]] j += 1 a.positions = numpy.dot(a.positions, cell) trajectory.append(a) return trajectory
def read_xdatcar(filename, skip=0, every=1): f = open(filename, 'r') lines = f.readlines() f.close() lattice_constant = float(lines[1].strip()) cell = numpy.array([[float(x) * lattice_constant for x in lines[2].split()], [float(x) * lattice_constant for x in lines[3].split()], [float(x) * lattice_constant for x in lines[4].split()]]) elements = lines[5].split() natoms = [int(x) for x in lines[6].split()] nframes = (len(lines)-7)/(sum(natoms) + 1) trajectory = [] for i in range(skip, nframes, every): a = Atoms('H'*sum(natoms)) a.masses = [1.0] * len(a) a.set_chemical_symbols(''.join([n*e for (n, e) in zip(natoms, elements)])) a.cell = cell.copy() j = 0 for N, e in zip(natoms, elements): for k in range(N): split = lines[8 + i * (sum(natoms) + 1) + j].split() a[j].position = [float(l) for l in split[0:3]] j += 1 a.positions = numpy.dot(a.positions, cell) trajectory.append(a) return trajectory
def absorber_sphere(atoms, absorber, radius): box = atoms.get_cell() ibox = numpy.linalg.inv(box) pos = atoms.get_positions() elements = atoms.get_chemical_symbols() atoms_sphere = [Atom(elements[absorber], (0.,0.,0.))] for i in xrange(len(atoms)): if i == absorber: continue r = pbc(pos[i] - pos[absorber], box, ibox) d = numpy.linalg.norm(r) if d <= radius: atoms_sphere.append(Atom(elements[i], r)) return Atoms(atoms_sphere)
def read_con(filename): f = open(filename, 'r') lines = f.readlines() f.close() trajectory = [] line_index = 0 while True: try: boxlengths = numpy.array([float(length) for length in lines[line_index+2].split()[0:3]]) boxangles = numpy.array([float(angle) for angle in lines[line_index+3].split()[0:3]]) cell = length_angle_to_box(boxlengths, boxangles) num_types = int(lines[line_index+6].split()[0]) num_each_type = [int(n) for n in lines[line_index+7].split()[0:num_types]] mass_each_type = [float(n) for n in lines[line_index+8].split()[0:num_types]] a = Atoms('H'*sum(num_each_type)) a.cell = cell a.set_pbc((True, True, True)) frozen = [] positions = [] symbols = [] masses = [] line_index += 9 atom_index = 0 for i in range(num_types): symbol = lines[line_index].strip() mass = mass_each_type[i] line_index += 2 for j in range(num_each_type[i]): split = lines[line_index].split() positions.append([float(s) for s in split[0:3]]) symbols.append(symbol) masses.append(mass) if split[3] != '0': frozen.append(atom_index) atom_index += 1 line_index += 1 a.set_chemical_symbols(symbols) a.set_positions(positions) a.set_masses(masses) a.set_constraint(FixAtoms(frozen)) except: if len(trajectory) == 1: return trajectory[0] if len(trajectory) == 0: raise IOError, "Could not read con file." return trajectory trajectory.append(a)
def load_feff_dat(filename): xk = [] cdelta = [] afeff = [] phfeff = [] redfac = [] xlam = [] rep = [] atoms = Atoms() atoms.set_pbc((False,False,False)) path_section = False atoms_section = False data_section = False f = open(filename) for line in f: line = line.strip() fields = line.split() if "genfmt" in line: path_section = True continue if fields[0] == "x" and fields[1] == "y" and fields[2] == "z": atoms_section = True path_section = False continue if fields[0] == "k" and fields[1] == "real[2*phc]": data_section = True atoms_section = False continue if path_section: if "---------------" in line: continue reff = float(fields[2]) path_section = False if atoms_section: x = float(fields[0]) y = float(fields[1]) z = float(fields[2]) pot = int(fields[3]) atomic_number = int(fields[4]) atoms.append(Atom(symbol=atomic_number, position=(x,y,z), tag=pot)) if data_section: fields = [ float(f) for f in fields ] xk.append(fields[0]) cdelta.append(fields[1]) afeff.append(fields[2]) phfeff.append(fields[3]) redfac.append(fields[4]) xlam.append(fields[5]) rep.append(fields[6]) xk = numpy.array(xk) cdelta = numpy.array(cdelta) afeff = numpy.array(afeff) phfeff = numpy.array(phfeff) redfac = numpy.array(redfac) xlam = numpy.array(xlam) rep = numpy.array(rep) return { "atoms":atoms, "reff":reff, "xk":xk, "cdelta":cdelta, "afeff":afeff, "phfeff":phfeff, "redfac":redfac, "xlam":xlam, "rep":rep, }
def read_con(filename): f = open(filename, 'r') lines = f.readlines() f.close() trajectory = [] line_index = 0 while True: try: boxlengths = numpy.array([ float(length) for length in lines[line_index + 2].split()[0:3] ]) boxangles = numpy.array( [float(angle) for angle in lines[line_index + 3].split()[0:3]]) cell = length_angle_to_box(boxlengths, boxangles) num_types = int(lines[line_index + 6].split()[0]) num_each_type = [ int(n) for n in lines[line_index + 7].split()[0:num_types] ] mass_each_type = [ float(n) for n in lines[line_index + 8].split()[0:num_types] ] a = Atoms('H' * sum(num_each_type)) a.cell = cell a.set_pbc((True, True, True)) frozen = [] positions = [] symbols = [] masses = [] line_index += 9 atom_index = 0 for i in range(num_types): symbol = lines[line_index].strip() mass = mass_each_type[i] line_index += 2 for j in range(num_each_type[i]): split = lines[line_index].split() positions.append([float(s) for s in split[0:3]]) symbols.append(symbol) masses.append(mass) if split[3] != '0': frozen.append(atom_index) atom_index += 1 line_index += 1 a.set_chemical_symbols(symbols) a.set_positions(positions) a.set_masses(masses) a.set_constraint(FixAtoms(frozen)) except: if len(trajectory) == 1: return trajectory[0] if len(trajectory) == 0: raise IOError, "Could not read con file." return trajectory trajectory.append(a)