def from_hdf5(cls, grp): '''Construct a Symmetry object from a HDF5 group''' return cls( grp['name'][()], grp['generators'][:], grp['fracs'][:], grp['numbers'][:], Cell.from_hdf5(grp['cell']), grp['labels'][:], )
def load_cif(filename, lf): '''Load a CIF file **Arguments:** filename The name of an existing CIF file lf An instance of the LinalgFactory class. (Ignored here) **Returns** a dictionary with: ``title``, ``coordinates``, ``numbers``, ``symmetry``, ``links``, ``cell``. ''' title, fields = _load_cif_low(filename) name = fields.get('symmetry_Int_Tables_number', 'None') generators = [equiv_pos_to_generator(s) for s in fields['symmetry_equiv_pos_as_xyz']] x = fields['atom_site_fract_x'].reshape(-1, 1) y = fields['atom_site_fract_y'].reshape(-1, 1) z = fields['atom_site_fract_z'].reshape(-1, 1) prim_fracs = np.hstack((x, y, z)) prim_numbers = np.array([periodic[symbol].number for symbol in fields['atom_site_type_symbol']]) lengths = np.array([fields['cell_length_a'], fields['cell_length_b'], fields['cell_length_c']])*angstrom angles = np.array([fields['cell_angle_alpha'], fields['cell_angle_beta'], fields['cell_angle_gamma']])*deg cell = Cell.from_parameters(lengths, angles) prim_labels = fields['atom_site_label'] symmetry = Symmetry(name, generators, prim_fracs, prim_numbers, cell, prim_labels) coordinates, numbers, links = symmetry.generate() return { 'title': title, 'coordinates': coordinates, 'numbers': numbers, 'symmetry': symmetry, 'links': links, 'cell': cell, }