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
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