2. Development#

[1]:
%load_ext autoreload
%autoreload 2
# import skimage.io
# import matplotlib
# import matplotlib.pyplot as plt
# %matplotlib inline
# nd2 = "/home/dan/pims/pims/tests/data/bioformats/cluster.nd2"
from pathlib import Path

import nima_io.read as ir

tdata = Path("../../tests/data/")

lif = tdata / "2015Aug28_TransHXB2_50min+DMSO.lif"
img_tile = tdata / "t4_1.tif"  # C=3 T=4 S=15
img_void_tile = tdata / "tile6_1.tif"  # C=4 T=3 S=14 scattered
# imgsingle = tdata / "exp2_2.tif"  # C=2 T=81

# mcts = tdata / "multi-channel-time-series.ome.tif"  # C=3 T=7
# bigtiff = tdata / "LC26GFP_1.tf8"  # bigtiff

slif = str(lif)
simg_tile = str(img_tile)
simg_void_tile = str(img_void_tile)
# simgsingle = str(imgsingle)
# smcts = str(mcts)Z`Z
# sbigtiff = str(bigtiff)

Core metadata list at: https://docs.openmicroscopy.org/bio-formats/7.1.0/developers/file-reader.html

[2]:
md, wr = ir.read(slif)
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[2], line 1
----> 1 md, wr = ir.read(slif)

File ~/work/nima_io/nima_io/src/nima_io/read.py:428, in read(filepath)
    426 if not Path(filepath).is_file():
    427     msg = f"File not found: {filepath}"
--> 428     raise FileNotFoundError(msg)
    429 ensure_jvm()
    430 channel_separator = jimport("loci.formats.ChannelSeparator")

FileNotFoundError: File not found: ../../tests/data/2015Aug28_TransHXB2_50min+DMSO.lif
[3]:
wr.rdr.setSeries(4)
wr.rdr.getImageCount()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 wr.rdr.setSeries(4)
      2 wr.rdr.getImageCount()

NameError: name 'wr' is not defined
[4]:
wr.rdr.getDimensionOrder()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[4], line 1
----> 1 wr.rdr.getDimensionOrder()

NameError: name 'wr' is not defined

TODO: test convert value

[5]:
ome_store = wr.rdr.getMetadataStore()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[5], line 1
----> 1 ome_store = wr.rdr.getMetadataStore()

NameError: name 'wr' is not defined

2.1. XML#

getRoot was used in imgread-0.2.1

[6]:
root = ome_store.getRoot()
instrument = root.getInstrument(0)
detector = instrument.getDetector(0)
detector.getModel()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 root = ome_store.getRoot()
      2 instrument = root.getInstrument(0)
      3 detector = instrument.getDetector(0)

NameError: name 'ome_store' is not defined
[7]:
wr.rdr.getMetadataStoreRoot().getInstrument(0).getDetector(0).getModel()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[7], line 1
----> 1 wr.rdr.getMetadataStoreRoot().getInstrument(0).getDetector(0).getModel()

NameError: name 'wr' is not defined
[8]:
wr.rdr.getMetadataStore().getRoot().getInstrument(0).getDetector(0).getModel()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[8], line 1
----> 1 wr.rdr.getMetadataStore().getRoot().getInstrument(0).getDetector(0).getModel()

NameError: name 'wr' is not defined
[9]:
[m for m in root.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[9], line 1
----> 1 [m for m in root.__dir__() if m[:3] == "get"]

NameError: name 'root' is not defined
[10]:
image = root.getImage(3)
[m for m in image.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[10], line 1
----> 1 image = root.getImage(3)
      2 [m for m in image.__dir__() if m[:3] == "get"]

NameError: name 'root' is not defined
[11]:
obj = image.getObjectiveSettings()
[m for m in obj.__dir__() if m[:3] == "get"]
obj.getID()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[11], line 1
----> 1 obj = image.getObjectiveSettings()
      2 [m for m in obj.__dir__() if m[:3] == "get"]
      3 obj.getID()

NameError: name 'image' is not defined
[12]:
pixels = image.getPixels()
[m for m in pixels.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 pixels = image.getPixels()
      2 [m for m in pixels.__dir__() if m[:3] == "get"]

NameError: name 'image' is not defined
[13]:
ch = pixels.getChannel(0)
[m for m in ch.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[13], line 1
----> 1 ch = pixels.getChannel(0)
      2 [m for m in ch.__dir__() if m[:3] == "get"]

NameError: name 'pixels' is not defined
[14]:
lp = ch.getLightPath()
[m for m in lp.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[14], line 1
----> 1 lp = ch.getLightPath()
      2 [m for m in lp.__dir__() if m[:3] == "get"]

NameError: name 'ch' is not defined
[15]:
pixels.getTimeIncrement()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[15], line 1
----> 1 pixels.getTimeIncrement()

NameError: name 'pixels' is not defined
[16]:
plane = pixels.getPlane(11)
[m for m in plane.__dir__() if m[:3] == "get"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[16], line 1
----> 1 plane = pixels.getPlane(11)
      2 [m for m in plane.__dir__() if m[:3] == "get"]

NameError: name 'pixels' is not defined
[17]:
import jpype

jpype.JObject(plane.getTheC()), plane.getDeltaT(), plane.getExposureTime()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[17], line 3
      1 import jpype
----> 3 jpype.JObject(plane.getTheC()), plane.getDeltaT(), plane.getExposureTime()

NameError: name 'plane' is not defined
[18]:
for k in root.__dir__():
    if k[:3] == "get":
        print(k)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[18], line 1
----> 1 for k in root.__dir__():
      2     if k[:3] == "get":
      3         print(k)

NameError: name 'root' is not defined
[19]:
im = root.getImage(0)
obj = im.getObjectiveSettings()
(
    obj.getID(),
    obj.getMedium(),
    obj.getRefractiveIndex(),
    obj.getCorrectionCollar(),
    obj.getObjective(),
)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[19], line 1
----> 1 im = root.getImage(0)
      2 obj = im.getObjectiveSettings()
      3 (
      4     obj.getID(),
      5     obj.getMedium(),
   (...)      8     obj.getObjective(),
      9 )

NameError: name 'root' is not defined
[20]:
(
    wr.rdr.getMetadataStore().getObjectiveID(0, 0) == obj.getID(),
    wr.rdr.getMetadataStore().getObjectiveLensNA(0, 0),
)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[20], line 2
      1 (
----> 2     wr.rdr.getMetadataStore().getObjectiveID(0, 0) == obj.getID(),
      3     wr.rdr.getMetadataStore().getObjectiveLensNA(0, 0),
      4 )

NameError: name 'wr' is not defined

2.2. md vs root (to remember)#

from md i can get info on camera, objectives …

but also key parameters like exposuretime, DeltaT, planePositionXYZ

[21]:
md_vtile, wr_vtile = ir.read(simg_void_tile)
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[21], line 1
----> 1 md_vtile, wr_vtile = ir.read(simg_void_tile)

File ~/work/nima_io/nima_io/src/nima_io/read.py:428, in read(filepath)
    426 if not Path(filepath).is_file():
    427     msg = f"File not found: {filepath}"
--> 428     raise FileNotFoundError(msg)
    429 ensure_jvm()
    430 channel_separator = jimport("loci.formats.ChannelSeparator")

FileNotFoundError: File not found: ../../tests/data/tile6_1.tif
[22]:
wr_vtile.rdr.getMetadataStore().getObjectiveCount(0)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[22], line 1
----> 1 wr_vtile.rdr.getMetadataStore().getObjectiveCount(0)

NameError: name 'wr_vtile' is not defined
[23]:
ome_store = wr_vtile.rdr.getMetadataStore()
ome_store.getXMLAnnotationValue(
    0
) == ome_store.getRoot().getStructuredAnnotations().getXMLAnnotation(0).getValue()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[23], line 1
----> 1 ome_store = wr_vtile.rdr.getMetadataStore()
      2 ome_store.getXMLAnnotationValue(
      3     0
      4 ) == ome_store.getRoot().getStructuredAnnotations().getXMLAnnotation(0).getValue()

NameError: name 'wr_vtile' is not defined
[24]:
# import bioformats

# md = bioformats.get_omexml_metadata(slif)
from xml.etree import ElementTree as ET

# mdroot = ET.fromstring(wr.rdr.getMetadataStore().dumpXML())
java_string = (
    wr_vtile.rdr.getMetadataStoreRoot()
    .getStructuredAnnotations()
    .getXMLAnnotation(0)
    .getValue()
)
python_string = jpype.java.lang.String(java_string).toString()
mdroot = ET.fromstring(python_string.getBytes())

for a in mdroot:
    print((a.tag, a.attrib))
    for aa in a:
        print((" GGSSS ", aa.tag, aa.attrib))
        for aaa in aa:
            print((" GGSSS2 ", aaa.tag, aaa.attrib))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[24], line 8
      4 from xml.etree import ElementTree as ET
      6 # mdroot = ET.fromstring(wr.rdr.getMetadataStore().dumpXML())
      7 java_string = (
----> 8     wr_vtile.rdr.getMetadataStoreRoot()
      9     .getStructuredAnnotations()
     10     .getXMLAnnotation(0)
     11     .getValue()
     12 )
     13 python_string = jpype.java.lang.String(java_string).toString()
     14 mdroot = ET.fromstring(python_string.getBytes())

NameError: name 'wr_vtile' is not defined
[25]:
import xmltodict

m1 = xmltodict.parse(ome_store.dumpXML().getBytes())
list(m1["OME"]), m1["OME"]["Instrument"]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[25], line 3
      1 import xmltodict
----> 3 m1 = xmltodict.parse(ome_store.dumpXML().getBytes())
      4 list(m1["OME"]), m1["OME"]["Instrument"]

NameError: name 'ome_store' is not defined
[26]:
metalist = [
    (child.tag, [[child.attrib]])
    for child in ET.fromstring(ome_store.dumpXML().getBytes()).iter()
]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[26], line 3
      1 metalist = [
      2     (child.tag, [[child.attrib]])
----> 3     for child in ET.fromstring(ome_store.dumpXML().getBytes()).iter()
      4 ]

NameError: name 'ome_store' is not defined
[27]:
m = metalist[10]
m[0], m[1][0][0]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[27], line 1
----> 1 m = metalist[10]
      2 m[0], m[1][0][0]

NameError: name 'metalist' is not defined
[28]:
for child in mdroot:
    if child.tag.endswith(""):
        for grandchild in child:
            print((grandchild.tag, grandchild.attrib))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[28], line 1
----> 1 for child in mdroot:
      2     if child.tag.endswith(""):
      3         for grandchild in child:

NameError: name 'mdroot' is not defined