コード例 #1
0
def open_structure_factors(session, path, structure_model = None,
        over_sampling=2.0, always_raise_errors=True):
    if structure_model is None:
        raise UserError('Reflection data must be associated with an atomic '
            'structure, provided via the structure_model argument.')
    from .symmetry import get_map_mgr
    mmgr = get_map_mgr(structure_model, create=True)
    try:
        xmapset = mmgr.add_xmapset_from_file(path, oversampling_rate=over_sampling)
        log_str = 'Opened crystallographic dataset from {}\n'.format(path)
        if xmapset.experimental_data:
            log_str += 'Found experimental reflection data: \n'
            log_str += '\n'.join(['\t{}'.format(n) for n in xmapset.experimental_data.keys()])
            log_str += '\n'
            log_str += 'Rwork: {:.4f}; Rfree: {:.4f}\n'.format(
                xmapset.rwork, xmapset.rfree
            )
        log_str += 'Generated maps: \n{}\n'.format(
            '\n'.join(['\t{}'.format(m.name) for m in xmapset]))
        log_str += 'Any unwanted maps may be safely closed via the Model panel.'
        return [mmgr.crystal_mgr], log_str

    except RuntimeError as e:
        if always_raise_errors:
            raise e
        else:
            session.logger.warning(str(e))
            return None, None
コード例 #2
0
 def _fetch(session,
            pdb_id,
            fetch_source='rcsb',
            ignore_cache=False,
            structure_factors=False,
            over_sampling=2.0,
            **kw):
     models, status = fetch_func(session,
                                 pdb_id,
                                 ignore_cache=ignore_cache,
                                 **kw)
     if structure_factors:
         if len(models) != 1:
             raise UserError(
                 'Structure factors can only be used with a single model!')
         m = models[0]
         sf_file = fetch_structure_factors(session,
                                           pdb_id,
                                           fetch_source=fetch_source,
                                           ignore_cache=ignore_cache,
                                           **kw)
         from chimerax.clipper.symmetry import get_map_mgr
         mmgr = get_map_mgr(m, create=True)
         mmgr.add_xmapset_from_mtz(sf_file, oversampling_rate=over_sampling)
         return [mmgr.crystal_mgr], status
     return models, status
コード例 #3
0
    def _optimize_anisou(self):
        import numpy
        from numpy import cov
        natoms = len(self.model.atoms)
        covariances = self._covariances = numpy.empty((natoms, 3, 3))
        traj = self._trajectory
        for i in range(natoms):
            coords = traj[:, i, :]
            covariances[i] = numpy.abs(cov(coords, rowvar=False))
        #tensors = self._tensors = numpy.empty(covariances.shape)
        # for cv, t in zip(covariances, tensors):
        #     t[:] = numpy.abs(numpy.linalg.inv(cv))

        anisou = self._anisou_base = numpy.empty((natoms, 6))
        anisou[:, 0] = covariances[:, 0, 0]
        anisou[:, 1] = covariances[:, 1, 1]
        anisou[:, 2] = covariances[:, 2, 2]
        anisou[:, 3] = covariances[:, 0, 1]
        anisou[:, 4] = covariances[:, 0, 2]
        anisou[:, 5] = covariances[:, 1, 2]
        # Convert from B to U
        from math import pi
        anisou[:] = numpy.sqrt(anisou / (8 * pi**2))
        from chimerax.clipper.symmetry import get_map_mgr
        map_mgr = get_map_mgr(self.model)
        xmapset = self._xmapset = map_mgr.xmapsets[0]
        xmapset.triggers.add_handler('maps recalculated', self._map_update_cb)
        self._map_update_cb()
コード例 #4
0
def associate_volumes(session, volumes, to_model=None):
    if to_model is None:
        from chimerax.core.errors import UserError
        raise UserError('The toModel argument must be provided!')
    from chimerax.clipper.symmetry import get_map_mgr
    mgr = get_map_mgr(to_model, create=True)
    for v in volumes:
        mgr.nxmapset.add_nxmap_handler_from_volume(v)
    if mgr.crystal_mgr not in session.models.list():
        session.models.add([mgr.crystal_mgr])
コード例 #5
0
 def _optimize_u_iso(self):
     import numpy
     traj = self._trajectory
     variance = traj.var(axis=0).sum(axis=1)
     from chimerax.clipper.clipper_python import Util
     self._u_base = numpy.array([Util.u2b(u)
                                 for u in variance]).astype(numpy.float32)
     from chimerax.clipper.symmetry import get_map_mgr
     map_mgr = get_map_mgr(self.model)
     xmapset = self._xmapset = map_mgr.xmapsets[0]
     xmapset.triggers.add_handler('maps recalculated', self._map_update_cb)
     self._map_update_cb()