Created
August 13, 2014 22:36
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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