Skip to content

Instantly share code, notes, and snippets.

@will-moore
Created August 13, 2014 22:36
Show Gist options
  • Save will-moore/bc9b3e5d87d60067caa7 to your computer and use it in GitHub Desktop.
Save will-moore/bc9b3e5d87d60067caa7 to your computer and use it in GitHub Desktop.
Using the OMERO query service to search for images based on metadata.
# DEMO of how to use code example at https://gist.github.com/will-moore/5782494#file-metadata_search-py-L13
import omero
from omero.rtypes import rint, wrap, rdouble, unwrap
from omero.gateway import BlitzGateway
conn = BlitzGateway('will', 'ome', host='localhost', port=4064)
conn.connect()
def searchImages(conn, scriptParams):
"""
Here we build our hql query and get the results from the queryService
"""
# Script has defaults for some parameters, so we know these are filled
minSizeC = "Min_Channel_Count" in scriptParams and scriptParams["Min_Channel_Count"] or 1
minSizeZ = "Min_Size_Z" in scriptParams and scriptParams["Min_Size_Z"] or 1
minSizeT = "Min_Size_T" in scriptParams and scriptParams["Min_Size_T"] or 1
# For others, we check if specified
channelNames = "Channel_Names" in scriptParams and scriptParams["Channel_Names"] or []
nominalMagnification = "Magnification" in scriptParams and scriptParams["Magnification"] or None
lensNA = "Lens_NA" in scriptParams and scriptParams["Lens_NA"] or None
excitationWave = "Excitation_Wavelength" in scriptParams and scriptParams["Excitation_Wavelength"] or None
objectiveModel = "Objective_Model" in scriptParams and scriptParams["Objective_Model"] or None
qs = conn.getQueryService()
params = omero.sys.Parameters()
params.map = {}
clauses = []
query = "select i from Image i left outer join i.pixels as pixels"
if minSizeZ > 1 or minSizeC > 1 or minSizeT > 1:
# We have already joined pixels
if minSizeZ > 1:
params.map["sizeZ"] = rint(minSizeZ)
clauses.append("pixels.sizeZ>=:sizeZ")
if minSizeC > 1:
params.map["sizeC"] = rint(minSizeC)
clauses.append("pixels.sizeC>=:sizeC")
if minSizeT > 1:
params.map["sizeT"] = rint(minSizeT)
clauses.append("pixels.sizeT>=:sizeT")
if len(channelNames) > 0 or excitationWave is not None:
query = query + " left outer join pixels.channels as c join c.logicalChannel as lc"
if len(channelNames) > 0:
params.map["cNames"] = wrap(channelNames)
clauses.append("lc.name in (:cNames)")
if excitationWave is not None:
params.map["exWave"] = rdouble(excitationWave)
clauses.append("lc.excitationWave=:exWave")
if nominalMagnification is not None or lensNA is not None or objectiveModel is not None:
query += " join i.objectiveSettings as objS join objS.objective as ob"
if nominalMagnification is not None:
params.map["nomMag"] = rdouble(nominalMagnification)
clauses.append("ob.nominalMagnification=:nomMag")
if lensNA is not None:
params.map["lensNA"] = rdouble(lensNA)
clauses.append("ob.lensNA=:lensNA")
if objectiveModel is not None:
params.map["objectiveModel"] = wrap(objectiveModel)
clauses.append("ob.model=:objectiveModel")
query = query + " where " + " and ".join(clauses)
print "Searh parameters map:", unwrap(params.map)
print query
imgs = qs.findAllByQuery(query, params)
return imgs
searchParams = {"Magnification": 100,
"Min_Channel_Count": 3}
for i in searchImages(conn, searchParams):
print i.id.val, i.name.val
searchParams = {"Magnification": 40}
for i in searchImages(conn, searchParams):
print i.id.val, i.name.val
searchParams = {"Excitation_Wavelength": 490, "Lens_NA": 1.4}
for i in searchImages(conn, searchParams):
print i.id.val, i.name.val
searchParams = {"Channel_Names": ["DAPI", "GFP"]}
for i in searchImages(conn, searchParams):
print i.id.val, i.name.val
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment