Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 34 additions & 3 deletions metadata/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
from omero.model import ExternalInfoI
from omero.rtypes import rbool, rdouble, rint, rlong, rstring, rtime
from omero.model import ChecksumAlgorithmI
from omero.model import LengthI
from omero.model import NamedValue
from omero.model.enums import ChecksumAlgorithmSHA1160
from omero_version import omero_version
Expand Down Expand Up @@ -236,8 +237,17 @@ def parse_image_metadata(store, img_attrs, image_path=None):
else:
sizes[axis["name"]] = size

pixel_size = {}
transforms = multiscale_attrs["datasets"][0]["coordinateTransformations"]
for transform in transforms:
if transform["type"] == "scale":
scale = transform["scale"]
pixel_size = {axis["name"]: (pixel_size, axis.get("unit", "")) for axis, pixel_size
in zip(axes, scale) if axis["name"] in "xyz"}
break

pixels_type = array_data.dtype.name
return sizes, pixels_type
return sizes, pixel_size, pixels_type


def create_image(conn, store, image_attrs, object_name, families, models, args, image_path=None):
Expand All @@ -246,7 +256,7 @@ def create_image(conn, store, image_attrs, object_name, families, models, args,
'''
query_service = conn.getQueryService()
pixels_service = conn.getPixelsService()
sizes, pixels_type = parse_image_metadata(store, image_attrs, image_path)
sizes, pixel_size, pixels_type = parse_image_metadata(store, image_attrs, image_path)
size_t = sizes.get("t", 1)
size_z = sizes.get("z", 1)
size_x = sizes.get("x", 1)
Expand All @@ -263,6 +273,8 @@ def create_image(conn, store, image_attrs, object_name, families, models, args,
# Set rendering settings and channel names if omero_attrs is provided
rnd_def = set_rendering_settings(conn, image, image_attrs, pixels_type, families, models)

set_pixel_size(image, pixel_size)

img_obj = image._obj
set_external_info(img_obj, args, image_path)

Expand Down Expand Up @@ -391,6 +403,25 @@ def set_rendering_settings(conn, image, image_attrs, pixels_type, families=None,
return rnd_def


def create_length(value_unit):
if len(value_unit) > 1 and value_unit[1]:
try:
return LengthI(value_unit[0], value_unit[1].upper())
except:
pass
return LengthI(value_unit[0])


def set_pixel_size(image, pixel_size):
pixels = image.getPrimaryPixels()._obj
if "x" in pixel_size:
pixels.setPhysicalSizeX(create_length(pixel_size["x"]))
if "y" in pixel_size:
pixels.setPhysicalSizeY(create_length(pixel_size["y"]))
if "z" in pixel_size:
pixels.setPhysicalSizeZ(create_length(pixel_size["z"]))


def load_families(query_service):
ctx = {'omero.group': '-1'}
return query_service.findAllByQuery('select f from Family as f', None, ctx)
Expand Down Expand Up @@ -725,7 +756,7 @@ def main():
image_path = str(series)
image_attrs = load_attrs(store, image_path)
# pixels_type is only used if we have *incomplete* `omero` metadata
sizes, pixels_type = parse_image_metadata(store, image_attrs, image_path)
sizes, pixel_size, pixels_type = parse_image_metadata(store, image_attrs, image_path)
rnd_def = set_rendering_settings(conn, image, image_attrs, pixels_type)
if rnd_def is not None:
conn.getUpdateService().saveAndReturnObject(rnd_def)
Expand Down