def testPopulateRoisPlate(self): """ Create a small csv file, use populate_roi.py to parse and attach to Plate. Then query to check table has expected content. """ csvName = self.createCsv(colNames="Well,Field,X,Y,Type", rowData=("A1,0,15,15,Test", )) rowCount = 1 colCount = 1 plate = self.createPlate(rowCount, colCount) # As opposed to the ParsingContext, here we are expected # to link the file ourselves ofile = self.client.upload(csvName).proxy() ann = FileAnnotationI() ann.file = ofile link = PlateAnnotationLinkI() link.parent = plate.proxy() link.child = ann link = self.client.sf.getUpdateService()\ .saveAndReturnObject(link) # End linking factory = PlateAnalysisCtxFactory(self.client.sf) factory.implementations = (MockPlateAnalysisCtx, ) ctx = factory.get_analysis_ctx(plate.id.val) assert 1 == ctx.get_measurement_count() meas = ctx.get_measurement_ctx(0) meas.parse_and_populate() # Get file annotations query = """select p from Plate p left outer join fetch p.annotationLinks links left outer join fetch links.child as ann left outer join fetch ann.file as file where p.id=%s""" % plate.id.val qs = self.client.sf.getQueryService() plate = qs.findByQuery(query, None) anns = plate.linkedAnnotationList() # Only expect a single annotation which is a 'bulk annotation' # the other is the original CSV assert len(anns) == 2 files = dict([(a.ns.val, a.file.id.val) for a in anns if a.ns]) fileid = files[NSMEASUREMENT] # Open table to check contents r = self.client.sf.sharedResources() t = r.openTable(OriginalFileI(fileid), None) cols = t.getHeaders() rows = t.getNumberOfRows() assert rows == 1 data = t.read(range(len(cols)), 0, 1) imag = data.columns[0].values[0] rois = self.client.sf.getRoiService() anns = rois.getRoiMeasurements(imag, RoiOptions()) assert anns
Copyright 2009 Glencoe Software, Inc. All rights reserved. Use is subject to license terms supplied in LICENSE.txt """ import omero.scripts as scripts from omero.util.populate_roi import PlateAnalysisCtxFactory client = scripts.client( 'Populate_ROI.py', scripts.Long( "Plate_ID", optional=False, description="ID of a valid plate with attached results files"), version="4.2.0", contact="*****@*****.**", description="""Generates regions of interest from the measurement files \ associated with a plate This script is executed by the server on initial import, and should typically\ not need to be run by users.""") factory = PlateAnalysisCtxFactory(client.getSession()) analysis_ctx = factory.get_analysis_ctx(client.getInput("Plate_ID").val) n_measurements = analysis_ctx.get_measurement_count() for i in range(n_measurements): measurement_ctx = analysis_ctx.get_measurement_ctx(i) measurement_ctx.parse_and_populate()
Plate_ID: id of the plate which should be parsed. Copyright 2009 Glencoe Software, Inc. All rights reserved. Use is subject to license terms supplied in LICENSE.txt """ import omero.scripts as scripts from omero.util.populate_roi import PlateAnalysisCtxFactory client = scripts.client( 'Populate_ROI.py', scripts.Long( "Plate_ID", optional=False, description="ID of a valid plate with attached results files"), version="4.2.0", contact="*****@*****.**", description="""Generates regions of interest from the measurement files \ associated with a plate This script is executed by the server on initial import, and should typically\ not need to be run by users.""") factory = PlateAnalysisCtxFactory(client.getSession()) analysis_ctx = factory.get_analysis_ctx(client.getInput("Plate_ID").val) n_measurements = analysis_ctx.get_measurement_count() for i in range(n_measurements): measurement_ctx = analysis_ctx.get_measurement_ctx(i) measurement_ctx.parse_and_populate()
def testPopulateRoisPlate(self): """ Create a small csv file, use populate_roi.py to parse and attach to Plate. Then query to check table has expected content. """ csvName = self.createCsv( colNames="Well,Field,X,Y,Type", rowData=("A1,0,15,15,Test",)) rowCount = 1 colCount = 1 plate = self.createPlate(rowCount, colCount) # As opposed to the ParsingContext, here we are expected # to link the file ourselves ofile = self.client.upload(csvName).proxy() ann = FileAnnotationI() ann.file = ofile link = PlateAnnotationLinkI() link.parent = plate.proxy() link.child = ann link = self.client.sf.getUpdateService()\ .saveAndReturnObject(link) # End linking factory = PlateAnalysisCtxFactory(self.client.sf) factory.implementations = (MockPlateAnalysisCtx,) ctx = factory.get_analysis_ctx(plate.id.val) assert 1 == ctx.get_measurement_count() meas = ctx.get_measurement_ctx(0) meas.parse_and_populate() # Get file annotations query = """select p from Plate p left outer join fetch p.annotationLinks links left outer join fetch links.child as ann left outer join fetch ann.file as file where p.id=%s""" % plate.id.val qs = self.client.sf.getQueryService() plate = qs.findByQuery(query, None) anns = plate.linkedAnnotationList() # Only expect a single annotation which is a 'bulk annotation' # the other is the original CSV assert len(anns) == 2 files = dict( [(a.ns.val, a.file.id.val) for a in anns if a.ns]) fileid = files[NSMEASUREMENT] # Open table to check contents r = self.client.sf.sharedResources() t = r.openTable(OriginalFileI(fileid), None) cols = t.getHeaders() rows = t.getNumberOfRows() assert rows == 1 data = t.read(range(len(cols)), 0, 1) imag = data.columns[0].values[0] rois = self.client.sf.getRoiService() anns = rois.getRoiMeasurements(imag, RoiOptions()) assert anns