def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join( tmp, 'testTiledVolume_data' ) logger.debug("Using test directory: {}".format( self.TILE_DIRECTORY )) self.REFERENCE_VOL_PATH = os.path.join( self.TILE_DIRECTORY, 'reference_volume.h5/data' ) ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'volume_description.json' ) self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'transposed_volume_description.json' ) if not os.path.exists(self.TILE_DIRECTORY): print "Creating new tile directory: {}".format( self.TILE_DIRECTORY ) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0,255, (100,600,600) ).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, 'w') as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, 'r') as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists( self.VOLUME_DESCRIPTION_FILE ): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, 'r') as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, 'w') as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription(self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser( TiledVolume.DescriptionFields ) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile(self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext(name)[1] == '.' + volume_description.format: os.remove( os.path.join(self.TILE_DIRECTORY, name) ) # Write the new tiles export_to_tiles( ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False ) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print "removing:", p os.remove( p ) # lastly, start the server self._start_server()
def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join(tmp, 'testTiledVolume_data') logger.debug("Using test directory: {}".format(self.TILE_DIRECTORY)) self.REFERENCE_VOL_PATH = os.path.join(self.TILE_DIRECTORY, 'reference_volume.h5/data') ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, 'volume_description.json') self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'transposed_volume_description.json') if not os.path.exists(self.TILE_DIRECTORY): print "Creating new tile directory: {}".format(self.TILE_DIRECTORY) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0, 255, (100, 600, 600)).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, 'w') as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, 'r') as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists(self.VOLUME_DESCRIPTION_FILE): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, 'r') as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, 'w') as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription( self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser(TiledVolume.DescriptionFields) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile( self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext( name)[1] == '.' + volume_description.format: os.remove(os.path.join(self.TILE_DIRECTORY, name)) # Write the new tiles export_to_tiles(ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print "removing:", p os.remove(p) # lastly, start the server self._start_server()