Warning: Can't synchronize with repository "(default)" (/home/git/ome.git does not appear to be a Git repository.). Look in the Trac log for more information.
Notice: In order to edit this ticket you need to be either: a Product Owner, The owner or the reporter of the ticket, or, in case of a Task not yet assigned, a team_member"

User Story #1591 (closed)

Opened 15 years ago

Closed 14 years ago

Add Mask storage to OmeroTables

Reported by: jamoore Owned by: jamoore
Priority: major Milestone: OMERO-Beta4.x-HCSPreview
Component: Services Keywords: n.a.
Cc: bernhard.hollaender@…, cxallan, jburel Story Points: n.a.
Sprint: n.a. Importance: n.a.
Total Remaining Time: n.a. Estimated Remaining Time: n.a.

Description

Rather than store the masks in the database, support should be added to the preview for storing them in OmeroTables. Note: this is the 3rd potential storage location for masks (Mask.pixels and Mask.bytes are the other two).

Change History (5)

comment:1 Changed 15 years ago by jmoore

r5591 has the initial MaskColumn type. Next step is to add support for an VLArray which contains the bytes. Whether or not they are always loaded or must be manually loaded remains to be seen.

comment:2 Changed 15 years ago by jmoore

r5593 includes storage of the byte masks as tables.UInt8Atom arrays in a separate VLArray ("%s_masks" % name). For some reason, Ice is printing "unexpected value" warnings for the byte arrays, but they convert correctly:

In [1]: import omero
In [2]: c = omero.client("localhost")
In [3]: s = c.createSession("root","xxx")
In [4]: r = s.sharedResources()
In [5]: h = r.newTable(1,"/tmp")
...
In [8]: m = omero.grid.MaskColumn("name", "desc", [1], [1], [1], [1.0], [1.0], [1.0], [1.0], [[1,2,3,4,5]])

In [9]: m
Out[9]: 
object #0 (::omero::grid::MaskColumn)
{
    name = name
    description = desc
    imageId = 
    {
        [0] = 1
    }
    theZ = 
    {
        [0] = 1
    }
    theT = 
    {
        [0] = 1
    }
    x = 
    {
        [0] = 1.0
    }
    y = 
    {
        [0] = 1.0
    }
    w = 
    {
        [0] = 1.0
    }
    h = 
    {
        [0] = 1.0
    }
    bytes = 
    {
        [0] = 
        {
            [0] = 1
            [1] = 2
            [2] = 3
            [3] = 4
            [4] = 5
        }
    }
}

In [10]: h.initialize([m])

In [11]: h.addData([m])

In [12]: h.slice(None,None)
Out[12]: 
object #0 (::omero::grid::Data)
{
    lastModification = 1256571786936
    rowNumbers = 
    {
    }
    columns = 
    {
        [0] = object #1 (::omero::grid::MaskColumn)
        {
            name = name
            description = 
            imageId = 
            {
                [0] = 1
            }
            theZ = 
            {
                [0] = 1
            }
            theT = 
            {
                [0] = 1
            }
            x = 
            {
                [0] = 1.0
            }
            y = 
            {
                [0] = 1.0
            }
            w = 
            {
                [0] = 1.0
            }
            h = 
            {
                [0] = 1.0
            }
            bytes = 
            {
                [0] = 
                {
                    [0] = <invalid value - expected byte>
                    [1] = <invalid value - expected byte>
                    [2] = <invalid value - expected byte>
                    [3] = <invalid value - expected byte>
                    [4] = <invalid value - expected byte>
                }
            }
        }
    }
}

In [13]: import numpy

In [14]: rv = h.slice(None,None)

In [17]: import tables


In [19]: rv.columns[0].bytes[0]
Out[19]: '\x01\x02\x03\x04\x05'

In [21]: numpy.fromstring(rv.columns[0].bytes[0], count=len(rv.columns[0].bytes[0]), dtype=tables.UInt8Atom())
)
Out[22]: array([1, 2, 3, 4, 5], dtype=uint8)

comment:3 Changed 15 years ago by jmoore

  • Cc jburel added

comment:4 Changed 14 years ago by cxallan

Initial support within the importer for masks in r5620.

comment:5 Changed 14 years ago by jmoore

  • Resolution set to fixed
  • Status changed from new to closed

Closing with a note to review in #1638

Note: See TracTickets for help on using tickets. You may also have a look at Agilo extensions to the ticket.

1.3.13-PRO © 2008-2011 Agilo Software all rights reserved (this page was served in: 0.72001 sec.)

We're Hiring!