def setup(self): f = h5py.File(self.filename, 'r') self.spec = ProviderSpec() self.ndims = None for (volume_type, ds) in self.datasets.items(): if ds not in f: raise RuntimeError("%s not in %s" % (ds, self.filename)) dims = f[ds].shape self.spec.volumes[volume_type] = Roi((0, ) * len(dims), dims) if self.ndims is None: self.ndims = len(dims) else: assert self.ndims == len(dims) if self.specified_resolution is None: if 'resolution' in f[ds].attrs: self.resolutions[volume_type] = tuple( f[ds].attrs['resolution']) else: default_resolution = (1, ) * self.ndims logger.warning( "WARNING: your source does not contain resolution information" " (no attribute 'resolution' in {} dataset). I will assume {}. " "This might not be what you want.".format( ds, default_resolution)) self.resolutions[volume_type] = default_resolution else: self.resolutions[volume_type] = self.specified_resolution f.close()
def provides(self, key, spec): '''Introduce a new output provided by this :class:`BatchProvider`. Implementations should call this in their :func:`setup` method, which will be called when the pipeline is build. Args: key (:class:`ArrayKey` or :class:`PointsKey`): The array or point set key provided. spec (:class:`ArraySpec` or :class:`PointsSpec`): The spec of the array or point set provided. ''' logger.debug("Current spec of %s:\n%s", self.name(), self.spec) if self.spec is None: self._spec = ProviderSpec() assert key not in self.spec, ( "Node %s is trying to add spec for %s, but is already " "provided." % (type(self).__name__, key)) self.spec[key] = copy.deepcopy(spec) self.provided_items.append(key) logger.debug("%s provides %s with spec %s", self.name(), key, spec)
def __init__(self, hostname, port, uuid, raw_array_name, gt_array_name=None, gt_mask_roi_name=None, resolution=None): """ :param hostname: hostname for DVID server :type hostname: str :param port: port for DVID server :type port: int :param uuid: UUID of node on DVID server :type uuid: str :param raw_array_name: DVID data instance for image data :type raw_array_name: str :param gt_array_name: DVID data instance for segmentation label data :type gt_array_name: str :param gt_mask_roi_name: DVID region of interest for masking the segmentation :type gt_mask_roi_name: str :param resolution: resolution of source voxels in nanometers :type resolution: tuple """ self.hostname = hostname self.port = port self.url = "http://{}:{}".format(self.hostname, self.port) self.uuid = uuid self.raw_array_name = raw_array_name self.gt_array_name = gt_array_name self.gt_mask_roi_name = gt_mask_roi_name self.specified_resolution = resolution self.node_service = None self.dims = 0 self.spec = ProviderSpec()