Package omero :: Package util :: Module script_utils
[hide private]
[frames] | no frames]

Source Code for Module omero.util.script_utils

  1  # 
  2  # 
  3  #------------------------------------------------------------------------------ 
  4  #  Copyright (C) 2006-2009 University of Dundee. All rights reserved. 
  5  # 
  6  # 
  7  #       This program is free software; you can redistribute it and/or modify 
  8  #  it under the terms of the GNU General Public License as published by 
  9  #  the Free Software Foundation; either version 2 of the License, or 
 10  #  (at your option) any later version. 
 11  #  This program is distributed in the hope that it will be useful, 
 12  #  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 13  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 14  #  GNU General Public License for more details. 
 15  # 
 16  #  You should have received a copy of the GNU General Public License along 
 17  #  with this program; if not, write to the Free Software Foundation, Inc., 
 18  #  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 
 19  # 
 20  #------------------------------------------------------------------------------ 
 21  ### 
 22  # 
 23  # Utility methods for deal with scripts. 
 24  # 
 25  # @author  Jean-Marie Burel      
 26  #       <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> 
 27  # @author       Donald MacDonald &nbsp;&nbsp;&nbsp;&nbsp; 
 28  #       <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a> 
 29  # @version 3.0 
 30  # <small> 
 31  # (<b>Internal version:</b> $Revision: $Date: $) 
 32  # </small> 
 33  # @since 3.0-Beta4 
 34  # 
 35  import getopt, sys, os, subprocess 
 36  import numpy; 
 37  from struct import * 
 38   
 39  import PIL 
 40  from PIL import Image 
 41  import ImageDraw 
 42   
 43  import omero 
 44  import omero_Constants_ice 
 45  from omero.rtypes import * 
 46  import omero.util.pixelstypetopython as pixelstopython; 
 47   
 48  try:  
 49          import hashlib  
 50          hash_sha1 = hashlib.sha1  
 51  except:  
 52          import sha  
 53          hash_sha1 = sha.new  
 54   
55 -def drawTextOverlay(draw, x, y, text, colour='0xffffff'):
56 draw.text((x, y), text, fill=colour)
57
58 -def drawLineOverlay(draw, x0, y0, text, colour='0xffffff'):
59 draw.text((x, y), text, fill=colour)
60
61 -def rgbToRGBInt(red, green, blue):
62 RGBInt = (red<<16)+(green<<8)+blue; 63 return int(RGBInt);
64
65 -def RGBToPIL(RGB):
66 hexval = hex(int(RGB)); 67 return '#'+(6-len(hexval[2:]))*'0'+hexval[2:];
68
69 -def rangeToStr(range):
70 first = 1; 71 string = ""; 72 for value in range: 73 if(first==1): 74 string = str(value); 75 first = 0; 76 else: 77 string = string + ','+str(value) 78 return string;
79
80 -def rmdir_recursive(dir):
81 for name in os.listdir(dir): 82 full_name = os.path.join(dir, name) 83 # on Windows, if we don't have write permission we can't remove 84 # the file/directory either, so turn that on 85 if not os.access(full_name, os.W_OK): 86 os.chmod(full_name, 0600) 87 if os.path.isdir(full_name): 88 rmdir_recursive(full_name) 89 else: 90 os.remove(full_name) 91 os.rmdir(dir)
92
93 -def calcSha1(filename):
94 fileHandle = open(filename) 95 h = hash_sha1() 96 h.update(fileHandle.read()) 97 hash = h.hexdigest() 98 fileHandle.close() 99 return hash;
100
101 -def getFormat(queryService, format):
102 return queryService.findByQuery("from Format as f where f.value='"+format+"'", None)
103
104 -def createFile(updateService, filename, format):
105 originalFile = omero.model.OriginalFileI(); 106 originalFile.setName(omero.rtypes.rstring(filename)); 107 originalFile.setPath(omero.rtypes.rstring(filename)); 108 originalFile.setFormat(format); 109 originalFile.setSize(omero.rtypes.rlong(os.path.getsize(filename))); 110 originalFile.setSha1(omero.rtypes.rstring(calcSha1(filename))); 111 return updateService.saveAndReturnObject(originalFile);
112
113 -def uploadFile(rawFileStore, file):
114 rawFileStore.setFileId(file.getId().getValue()); 115 fileSize = file.getSize().getValue(); 116 increment = 10000; 117 cnt = 0; 118 fileHandle = open(file.getName().getValue(), filename, 'rb'); 119 done = 0 120 while(done!=1): 121 if(increment+cnt<fileSize): 122 blockSize = increment; 123 else: 124 blockSize = fileSize-cnt; 125 done = 1; 126 fileHandle.seek(cnt); 127 block = fileHandle.read(blockSize); 128 rawFileStore.write(block, cnt, blockSize); 129 cnt = cnt+blockSize; 130 fileHandle.close();
131
132 -def attachFileToImage(updateService, image, file, nameSpace):
133 fa = omero.model.FileAnnotationI(); 134 fa.setFile(file); 135 fa.setNs(omero.rtypes.rstring(nameSpace)) 136 l = omero.model.ImageAnnotationLinkI(); 137 l.setParent(image); 138 l.setChild(fa); 139 return updateService.saveAndReturnObject(l);
140
141 -def addAnnotationToImage(updateService, image, annotation):
142 l = omero.model.ImageAnnotationLinkI(); 143 l.setParent(image); 144 l.setChild(annotation); 145 return updateService.saveAndReturnObject(l);
146
147 -def readFromOriginalFile(fileId):
148 originalFileStore = session.createRawFileStore(); 149 iQuery = session.getQueryService(); 150 fileDetails = iQuery.findByQuery("from OriginalFile as o where o.id = " + str(fileId) , None); 151 originalFileStore.setFileId(fileId); 152 data = ''; 153 cnt = 0; 154 maxBlockSize = 10000; 155 fileSize = fileDetails.getSize().getValue(); 156 while(cnt<fileSize): 157 blockSize = min(maxBlockSize, fileSize); 158 block = originalFileStore.read(cnt, blockSize); 159 data = data + block; 160 cnt = cnt+blockSize; 161 return data;
162
163 -def readImageFile(gateway, pixels, pixelsId, channel, x, y):
164 cRange = range(0,channel); 165 stack = numpy.zeros((channel,x,y),dtype=(pixels.getPixelsType().getValue().getValue())); 166 for c in cRange: 167 plane = downloadPlane(gateway, pixels, pixelsId, x, y, 0, c, 0); 168 stack[c,:,:]=plane; 169 return stack;
170
171 -def readFile(session, fileId, row, col):
172 textBlock = readFromOriginalFile(fileId); 173 arrayFromFile = numpy.fromstring(textBlock,sep=' '); 174 return numpy.reshape(arrayFromFile, (row, col));
175
176 -def calcSha1FromData(data):
177 h = hash_sha1() 178 h.update(data) 179 hash = h.hexdigest() 180 return hash;
181
182 -def createFileFromData(session, filename, data, format):
183 tempFile = omero.model.OriginalFileI(); 184 tempFile.setName(omero.rtypes.rstring(filename)); 185 tempFile.setPath(omero.rtypes.rstring(filename)); 186 tempFile.setFormat(getFormat(session, format)); 187 tempFile.setSize(omero.rtypes.rlong(len(data))); 188 tempFile.setSha1(omero.rtypes.rstring(calcSha1FromData(data))); 189 updateService = session.getUpdateService(); 190 return updateService.saveAndReturnObject(tempFile);
191
192 -def attachArrayToImage(session, image, file, nameSpace):
193 updateService = session.getUpdateService(); 194 fa = omero.model.FileAnnotationI(); 195 fa.setFile(file); 196 fa.setNs(omero.rtypes.rstring(nameSpace)) 197 l = omero.model.ImageAnnotationLinkI(); 198 l.setParent(image); 199 l.setChild(fa); 200 l = updateService.saveAndReturnObject(l);
201
202 -def uploadArray(session, image, filename, data, format):
203 file = createFileFromData(session, filename, data, format); 204 rawFileStore = session.createRawFileStore(); 205 rawFileStore.setFileId(file.getId().getValue()); 206 fileSize = len(data); 207 increment = 10000; 208 cnt = 0; 209 done = 0 210 while(done!=1): 211 if(increment+cnt<fileSize): 212 blockSize = increment; 213 else: 214 blockSize = fileSize-cnt; 215 done = 1; 216 block = data[cnt:cnt+blockSize]; 217 rawFileStore.write(block, cnt, blockSize); 218 cnt = cnt+blockSize; 219 attachArrayToImage(session, image, file, CSV_NS)
220
221 -def arrayToCSV(data):
222 size = data.shape; 223 row = size[0]; 224 col = size[1]; 225 strdata =""; 226 for r in range(0,row): 227 for c in range(0, col): 228 strdata = strdata + str(data[r,c]) 229 if(c<col-1): 230 strdata = strdata+','; 231 strdata = strdata + '\n'; 232 return strdata;
233
234 -def downloadPlane(rawPixelStore, pixels, z, c, t):
235 rawPlane = rawPixelStore.getPlane(z, c, t); 236 sizeX = pixels.getSizeX().getValue(); 237 sizeY = pixels.getSizeY().getValue(); 238 pixelType = pixels.getPixelsType().getValue().getValue(); 239 convertType ='>'+str(sizeX*sizeY)+pixelstypetopython.toPython(pixelType); 240 convertedPlane = unpack(convertType, rawPlane); 241 remappedPlane = numpy.array(convertedPlane, dtype=(pixelType)); 242 remappedPlane.resize(sizeX, sizeY); 243 return remappedPlane;
244
245 -def uploadPlane(rawPixelStore, plane, z, c, t):
246 byteSwappedPlane = plane.byteswap(); 247 convertedPlane = byteSwappedPlane.tostring(); 248 rawPixelStore.setPlane(convertedPlane, z, c, t)
249
250 -def getRenderingEngine(session, pixelsId):
251 renderingEngine = session.createRenderingEngine(); 252 renderingEngine.lookupPixels(pixelsId); 253 if(renderingEngine.lookupRenderingDef(pixelsId)==0): 254 renderingEngine.resetDefaults(); 255 renderingEngine.lookupRenderingDef(pixelsId); 256 renderingEngine.load(); 257 return renderingEngine; 258 259
260 -def createPlaneDef(z,t):
261 planeDef = omero.romio.PlaneDef() 262 planeDef.t = t; 263 planeDef.z = z; 264 planeDef.x = 0; 265 planeDef.y = 0; 266 planeDef.slice = 0; 267 return planeDef;
268
269 -def getPlaneAsPackedInt(renderingEngine, z, t):
270 planeDef = createPlaneDef(z, t); 271 return renderingEngine.renderAsPackedInt(planeDef);
272
273 -def getRawPixelsStore(session, pixelsId):
274 rawPixelsStore = session.createRawPixelsStore(); 275 rawPixelsStore.setPixelsId(pixelsId); 276 return rawPixelsStore;
277
278 -def getRawFileStore(session, fileId):
279 rawFileStore = session.createRawFileStore(); 280 rawFileStore.setFileId(fileId); 281 return rawFileStore;
282
283 -def getPlaneInfo(iQuery, pixelsId, asOrderedList=0):
284 query = "from PlaneInfo as Info where pixels.id='"+str(pixelsId)+"' orderby info.deltaT" 285 infoList = queryService.findAllByQuery(query,None) 286 287 if(asOrderedList==0): 288 map = {} 289 for info in infoList: 290 key = "z:"+str(info.theZ.getValue())+"t:"+str(info.theT.getValue())+"c:"+str(info.theC.getValue()); 291 map[key] = info.deltaT.getValue(); 292 return map; 293 else: 294 return infoList;
295
296 -def IdentityFn(commandArgs):
297 return commandArgs;
298
299 -def parseInputs(client, session, processFn=IdentityFn):
300 inputKeys = client.getInputKeys(); 301 commandArgs = {}; 302 for key in inputKeys: 303 commandArgs[key]=client.getInput(key).getValue(); 304 return processFn(commandArgs);
305