Exemple #1
0
    def __init__(self,
                 model=None,
                 xray_structure=None,
                 mask_atoms_atom_radius=None,
                 n_real=None,
                 map_manager=None):
        '''
     Create a mask (map object) with values of 1 near atoms in xray_structure

     Parameters are:
       model:   required source of information about where atoms are
       xray_structure:   alternate source of information about where atoms are
       mask_atoms_atom_radius:  radius around atoms to mask
       n_real:  dimensions of map to create, e.g., existing map_data.all()
       map_manager: alternate source of information for n_real. origin (0,0,0)
    '''

        assert (model is not None) or (xray_structure is not None)
        assert mask_atoms_atom_radius is not None
        assert (n_real is not None) or (map_manager is not None)

        if not n_real:
            assert map_manager.map_data().origin() == (0, 0, 0)
            n_real = map_manager.map_data().all()

        if model:
            xray_structure = model.get_xray_structure()
            self._crystal_symmetry = model.crystal_symmetry()
        else:
            self._crystal_symmetry = xray_structure.crystal_symmetry()

        import boost.python
        cctbx_maptbx_ext = boost.python.import_ext("cctbx_maptbx_ext")
        radii = flex.double(xray_structure.sites_frac().size(),
                            mask_atoms_atom_radius)
        self._mask = cctbx_maptbx_ext.mask(
            sites_frac=xray_structure.sites_frac(),
            unit_cell=xray_structure.unit_cell(),
            n_real=n_real,
            mask_value_inside_molecule=1,
            mask_value_outside_molecule=0,
            radii=radii)
        # Set up map_manager with this mask
        if map_manager:
            self._map_manager = map_manager.customized_copy(
                map_data=self._mask)
        else:
            from iotbx.map_manager import map_manager as map_man
            self._map_manager = map_man(
                map_data=self._mask,
                unit_cell_crystal_symmetry=self.crystal_symmetry(),
                unit_cell_grid=self._mask.all())
        # Initialize soft mask
        self._is_soft_mask = False
        self._is_soft_mask_around_edges = False
Exemple #2
0
    def __init__(self,
                 model=None,
                 xray_structure=None,
                 mask_atoms_atom_radius=None,
                 n_real=None,
                 map_manager=None,
                 wrapping=None):
        '''
     Create a mask (map object) with values of 1 near atoms in xray_structure

     Parameters are:
       model:   required source of information about where atoms are
       xray_structure:   alternate source of information about where atoms are
       mask_atoms_atom_radius:  radius around atoms to mask
       n_real:  dimensions of map to create, e.g., existing map_data.all()
       map_manager: alternate source of information for n_real. origin (0, 0, 0)
         and source of wrapping
       wrapping:  Whether map wraps around unit cell boundaries, where unit
         cell is that defined by xray_structure or model
    '''

        assert (model is not None) or (xray_structure is not None)
        assert mask_atoms_atom_radius is not None
        assert (n_real is not None) or (map_manager is not None)
        assert (map_manager is not None) or isinstance(wrapping, bool)

        if not n_real:
            assert map_manager.map_data().origin() == (0, 0, 0)
            n_real = map_manager.map_data().all()

        if model:
            xray_structure = model.get_xray_structure()
            self._crystal_symmetry = model.crystal_symmetry()
        else:
            self._crystal_symmetry = xray_structure.crystal_symmetry()

        if map_manager and wrapping is None:
            wrapping = map_manager.wrapping()

        assert wrapping is not None

        if (not wrapping) or (self._crystal_symmetry.space_group_number == 1):
            # usual
            sites_frac = xray_structure.sites_frac()
        else:  # wrapping and cs: need to expand
            sites_frac = xray_structure.expand_to_p1().sites_frac()

        import boost_adaptbx.boost.python as bp
        cctbx_maptbx_ext = bp.import_ext("cctbx_maptbx_ext")
        radii = flex.double(sites_frac.size(), mask_atoms_atom_radius)
        self._mask = cctbx_maptbx_ext.mask(
            sites_frac=sites_frac,
            unit_cell=xray_structure.unit_cell(),
            n_real=n_real,
            mask_value_inside_molecule=1,
            mask_value_outside_molecule=0,
            radii=radii,
            wrapping=wrapping)
        # Set up map_manager with this mask
        if map_manager:
            self._map_manager = map_manager.customized_copy(
                map_data=self._mask)
        else:
            from iotbx.map_manager import map_manager as map_man
            self._map_manager = map_man(
                map_data=self._mask,
                unit_cell_crystal_symmetry=self.crystal_symmetry(),
                unit_cell_grid=self._mask.all(),
                wrapping=wrapping)

        self._map_manager.set_is_mask(True)

        # Initialize soft mask
        self._is_soft_mask = False
        self._is_soft_mask_around_edges = False