Beispiel #1
0
 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'][:],
     )
Beispiel #2
0
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,
    }