def pixelize(self, dimension, data_source, field, bounds, size, antialias = True, periodic = True): """ Method for pixelizing datasets in preparation for two-dimensional image plots. Relies on several sampling routines written in cython """ index = data_source.ds.index if (hasattr(index, 'meshes') and not isinstance(index.meshes[0], SemiStructuredMesh)): ftype, fname = field if ftype == "all": mesh_id = 0 indices = np.concatenate([mesh.connectivity_indices for mesh in index.mesh_union]) else: mesh_id = int(ftype[-1]) - 1 indices = index.meshes[mesh_id].connectivity_indices coords = index.meshes[mesh_id].connectivity_coords offset = index.meshes[mesh_id]._index_offset ad = data_source.ds.all_data() field_data = ad[field] buff_size = size[0:dimension] + (1,) + size[dimension:] ax = data_source.axis xax = self.x_axis[ax] yax = self.y_axis[ax] c = np.float64(data_source.center[dimension].d) extents = np.zeros((3, 2)) extents[ax] = np.array([c, c]) extents[xax] = bounds[0:2] extents[yax] = bounds[2:4] # if this is an element field, promote to 2D here if len(field_data.shape) == 1: field_data = np.expand_dims(field_data, 1) # if this is a higher-order element, we demote to 1st order # here, for now. elif field_data.shape[1] == 27: # hexahedral mylog.warning("High order elements not yet supported, " + "dropping to 1st order.") field_data = field_data[:, 0:8] indices = indices[:, 0:8] img = pixelize_element_mesh(coords, indices, buff_size, field_data, extents, index_offset=offset) # re-order the array and squeeze out the dummy dim return np.squeeze(np.transpose(img, (yax, xax, ax))) elif self.axis_id.get(dimension, dimension) < 3: return self._ortho_pixelize(data_source, field, bounds, size, antialias, dimension, periodic) else: return self._oblique_pixelize(data_source, field, bounds, size, antialias)
def pixelize(self, dimension, data_source, field, bounds, size, antialias=True, periodic=True): index = data_source.ds.index if (hasattr(index, 'meshes') and not isinstance(index.meshes[0], SemiStructuredMesh)): ftype, fname = field mesh_id = int(ftype[-1]) - 1 mesh = index.meshes[mesh_id] coords = mesh.connectivity_coords indices = mesh.connectivity_indices offset = mesh._index_offset ad = data_source.ds.all_data() field_data = ad[field] buff_size = size[0:dimension] + (1, ) + size[dimension:] ax = data_source.axis xax = self.x_axis[ax] yax = self.y_axis[ax] c = np.float64(data_source.center[dimension].d) extents = np.zeros((3, 2)) extents[ax] = np.array([c, c]) extents[xax] = bounds[0:2] extents[yax] = bounds[2:4] # if this is an element field, promote to 2D here if len(field_data.shape) == 1: field_data = np.expand_dims(field_data, 1) # if this is a higher-order element, we demote to 1st order # here, for now. elif field_data.shape[1] == 27: # hexahedral mylog.warning("High order elements not yet supported, " + "dropping to 1st order.") field_data = field_data[:, 0:8] indices = indices[:, 0:8] elif field_data.shape[1] == 10: # tetrahedral mylog.warning("High order elements not yet supported, " + "dropping to 1st order.") field_data = field_data[:, 0:4] indices = indices[:, 0:4] img = pixelize_element_mesh(coords, indices, buff_size, field_data, extents, index_offset=offset) # re-order the array and squeeze out the dummy dim return np.squeeze(np.transpose(img, (yax, xax, ax))) elif dimension < 3: return self._ortho_pixelize(data_source, field, bounds, size, antialias, dimension, periodic) else: return self._oblique_pixelize(data_source, field, bounds, size, antialias)