Skip to content

Commit

Permalink
Merge pull request #1197 from girder/actual-levels
Browse files Browse the repository at this point in the history
Report actual populated image levels
  • Loading branch information
manthey authored Jun 8, 2023
2 parents 1dd17ed + 253a228 commit 095852f
Show file tree
Hide file tree
Showing 8 changed files with 10 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Improvements
- Better DICOM multi-level detection ([#1196](../../pull/1196))
- Added an internal field to report populated tile levels in some sources ([#1197](../../pull/1197))

### Changes
- Change how extensions and fallback priorities interact ([#1192](../../pull/1192))
Expand Down
2 changes: 2 additions & 0 deletions girder/girder_large_image/models/image_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ def getInternalMetadata(self, item, **kwargs):
if tileSource.getICCProfiles(onlyInfo=True):
result['iccprofiles'] = tileSource.getICCProfiles(onlyInfo=True)
result['tilesource'] = tileSource.name
if hasattr(tileSource, '_populatedLevels'):
result['populatedLevels'] = tileSource._populatedLevels
return result

def getTile(self, item, x, y, z, mayRedirect=False, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions sources/bioformats/large_image_source_bioformats/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,8 @@ def __init__(self, path, **kwargs): # noqa
self.getTile(0, 0, self.levels - 1)
except Exception as exc:
raise TileSourceError('Bioformats cannot read a tile: %r' % exc)
self._populatedLevels = len([
v for v in self._metadata['frameSeries'][0]['series'] if v is not None])

def __del__(self):
if getattr(self, '_bioimage', None) is not None:
Expand Down
1 change: 1 addition & 0 deletions sources/dicom/large_image_source_dicom/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ def __init__(self, path, **kwargs):
self.tileHeight = min(max(self.tileHeight, self._minTileSize), self._maxTileSize)
self.levels = int(max(1, math.ceil(math.log(
max(self.sizeX / self.tileWidth, self.sizeY / self.tileHeight)) / math.log(2)) + 1))
self._populatedLevels = len(self._dicom.levels)

def __del__(self):
if getattr(self, '_dicom', None) is not None:
Expand Down
1 change: 1 addition & 0 deletions sources/openjpeg/large_image_source_openjpeg/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ def __init__(self, path, **kwargs):
self.sizeX, self.sizeY)) / self.tileWidth) / math.log(2))) + 1
self._minlevel = self.levels - self._openjpeg.codestream.segment[2].num_res - 1
self._getAssociatedImages()
self._populatedLevels = self.levels - self._minlevel

def _getAssociatedImages(self):
"""
Expand Down
1 change: 1 addition & 0 deletions sources/openslide/large_image_source_openslide/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ def __init__(self, path, **kwargs): # noqa
'svslevel': bestlevel,
'scale': scale
})
self._populatedLevels = len({l['svslevel'] for l in self._svslevels})

def _getTileSize(self):
"""
Expand Down
1 change: 1 addition & 0 deletions sources/tiff/large_image_source_tiff/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ def _checkForInefficientDirectories(self, warn=True):
:param warn: if True and inefficient, emit a warning.
"""
self._populatedLevels = len([v for v in self._tiffDirectories if v is not None])
missing = [v is None for v in self._tiffDirectories]
maxMissing = max(0 if not v else missing.index(False, idx) - idx
for idx, v in enumerate(missing))
Expand Down
1 change: 1 addition & 0 deletions sources/tifffile/large_image_source_tifffile/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ def __init__(self, path, **kwargs):
if (key.startswith('is_') and hasattr(self, '_handle_' + key[3:]) and
getattr(self._tf, key)):
getattr(self, '_handle_' + key[3:])()
self._populatedLevels = len(self._baseSeries.levels)

def _biggestSeries(self):
"""
Expand Down

0 comments on commit 095852f

Please sign in to comment.