def convert_kpoints(kpoints): """Convert the k-points output from string to float.""" if kpoints is None: return False, None kpoints_node = DataFactory('array.kpoints')() kpoints_node.set_kpoints([[float(x) for x in k.split()] for k in kpoints]) return True, kpoints_node
def vasp_kpoints(request, fresh_aiida_env): """Fixture: (kpoints object, resulting KPOINTS).""" from aiida.plugins import DataFactory if request.param == 'mesh': kpoints = DataFactory('array.kpoints')() kpoints.set_kpoints_mesh([2, 2, 2]) ref_kpoints = _ref_kp_mesh() elif request.param == 'list': kpoints = DataFactory('array.kpoints')() kpoints.set_kpoints([[0., 0., 0.], [0., 0., .5]], weights=[1., 1.]) ref_kpoints = _ref_kp_list() return kpoints, ref_kpoints
def _parse_kpoints(hdf5_handle): type_tag = hdf5_handle['type_tag'].value kpoints = DataFactory('array.kpoints')() if 'kpoints_mesh' in type_tag: kpoints.set_kpoints_mesh( hdf5_handle['mesh'].value, hdf5_handle['offset'].value ) elif 'kpoints_explicit' in type_tag: kpoints.set_kpoints(hdf5_handle['kpoints'].value) else: raise NotImplementedError( "Unrecognized type_tag '{}' encountered when parsing k-points data." .format(type_tag) ) return kpoints
def read_bands(*args, **kwargs): """ Read a HDF5 in bands_inspect HDF5 format containing an EigenvalsData instance, and return an AiiDA BandsData instance. Positional and keyword arguments are passed to :class:`h5py.File`. """ with h5py.File(*args, **kwargs) as f: kpoints = _parse_kpoints(f['kpoints_obj']) # BandsData cannot have a mesh as k-points... bands = DataFactory('array.bands')() if 'mesh' in kpoints.attributes: bands.set_kpoints(kpoints.get_kpoints_mesh(print_list=True)) else: bands.set_kpointsdata(kpoints) bands.set_bands(f['eigenvals'].value) return bands
def get_bands(qpoints, frequencies, labels, path_connections, label=None): qpoints_list = list(qpoints[0]) frequencies_list = list(frequencies[0]) labels_list = [ (0, labels[0]), ] label_index = 1 for pc, qs, fs in zip(path_connections[:-1], qpoints[1:], frequencies[1:]): if labels[label_index] == 'GAMMA' and pc: labels_list.append((len(qpoints_list) - 1, labels[label_index])) if label_index < len(labels): labels_list.append((len(qpoints_list), labels[label_index])) label_index += 1 qpoints_list += list(qs) frequencies_list += list(fs) elif pc: labels_list.append((len(qpoints_list) - 1, labels[label_index])) label_index += 1 qpoints_list += list(qs[1:]) frequencies_list += list(fs[1:]) else: labels_list.append((len(qpoints_list) - 1, labels[label_index])) label_index += 1 if label_index < len(labels): labels_list.append((len(qpoints_list), labels[label_index])) label_index += 1 qpoints_list += list(qs) frequencies_list += list(fs) labels_list.append((len(qpoints_list) - 1, labels[-1])) bs = DataFactory('array.bands')() bs.set_kpoints(np.array(qpoints_list)) bs.set_bands(np.array(frequencies_list), units='THz') bs.labels = labels_list if label is not None: bs.label = label return bs