def setModelFromFile(self, modName, md=None): """load the model from file - returns True if the model changed, False if an existing model was reused""" #global IntXVals, IntYVals, IntZVals, interpModel, interpModelName, dx, dy, dz if not modName == self.interpModelName: #special case for theoretical models if modName.startswith('ZMODEL:'): #print modName[7:] params = eval(modName[7:]) mod, voxelsize = self.genTheoreticalModelZernike(md, **params) else: #mf = open(getFullExistingFilename(modName), 'rb') #mod, voxelsize = load(mf) #mf.close() # mf = ImageStack(filename=modName) # mod = mf.data[:,:,:].astype('f') # voxelsize = mf.voxelsize mod, voxelsize_nm = load_psf(modName) self.setModel(modName, mod, voxelsize_nm) #print 'model changed' return True #model changed else: return False #model not changed
def GetPSF(self, vshint = None): import numpy as np from PYME.IO.load_psf import load_psf from scipy import stats PSFMode = self.nb2.GetCurrentPage().PSFMode #get PSF from file if PSFMode == 'File': #psf, vs = np.load(self.GetPSFFilename()) psf, vs = load_psf(self.GetPSFFilename()) psf = np.atleast_3d(psf) return (self.GetPSFFilename(), psf, vs) elif (PSFMode == 'Laplace'): sc = float(self.tLaplaceFWHM.GetValue())/2.0 X, Y = np.mgrid[-30.:31., -30.:31.] R = np.sqrt(X*X + Y*Y) if not vshint is None: vx = vshint*1e3 else: vx = sc/2. vs = type('vs', (object,), dict(x=vx/1e3, y=vx/1e3)) psf = np.atleast_3d(stats.cauchy.pdf(vx*R, scale=sc)) return 'Generated Laplacian, FWHM=%f' % (2*sc), psf/psf.sum(), vs
def setModelFromMetadata(self, md): """load the model from file - returns True if the model changed, False if an existing model was reused""" #global IntXVals, IntYVals, IntZVals, interpModel, interpModelName, dx, dy, dz modName = md.PSFFile if not modName == self.interpModelName: #special case for theoretical models if modName.startswith('ZMODEL:'): params = eval(modName[7:]) mod, voxelsize = self.genTheoreticalModelZernike(md, **params) else: #try and get psf from task queue #if not md.taskQueue == None: try: mod, voxelsize = md.taskQueue.getQueueData( md.dataSourceID, 'PSF') except: #mf = open(getFullExistingFilename(modName), 'rb') #mod, voxelsize = load(mf) #mf.close() #mf = ImageStack(filename=modName) #mod = mf.data[:,:,:].astype('f') #voxelsize = mf.voxelsize mod, voxelsize = load_psf(modName) self.setModel(modName, mod, voxelsize) #print 'model changed' return True #model changed else: return False #model not changed
def preparePSF(md, PSSize): global PSFFileName, cachedPSF, cachedOTF2, cachedOTFH, autocorr PSFFilename = md.PSFFile if (not (PSFFileName == PSFFilename)) or (not (cachedPSF.shape == PSSize)): try: ps, vox = md.taskQueue.getQueueData(md.dataSourceID, 'PSF') except: #fid = open(getFullExistingFilename(PSFFilename), 'rb') #ps, vox = pickle.load(fid) #fid.close() ps, vox = load_psf(PSFFilename) ps = ps.max(2) ps = ps - ps.min() #ps = ps*(ps > 0) ps = ps * scipy.signal.hanning( ps.shape[0])[:, None] * scipy.signal.hanning(ps.shape[1])[None, :] ps = ps / ps.sum() PSFFileName = PSFFilename pw = (numpy.array(PSSize) - ps.shape) / 2. pw1 = numpy.floor(pw) pw2 = numpy.ceil(pw) cachedPSF = pad.with_constant(ps, ((pw2[0], pw1[0]), (pw2[1], pw1[1])), (0, )) cachedOTFH = ifftn(cachedPSF) * cachedPSF.size cachedOTF2 = cachedOTFH * fftn(cachedPSF)
def preparePSF(md, PSSize): global PSFFileName, PSFSize, FTW PSFFilename = md.PSFFile if (not (PSFFileName == PSFFilename)) or (not (PSFSize == PSSize)): try: ps, vox = md.taskQueue.getQueueData(md.dataSourceID, 'PSF') except: #fid = open(getFullExistingFilename(PSFFilename), 'rb') #ps, vox = pickle.load(fid) #fid.close() load_psf(PSFFilename) FTW = fftwWeiner(ps, vox, PSSize) PSFFileName = PSFFilename PSFSize = PSSize
def setModel(modName, md): global IntXVals, IntYVals, IntZVals, dx, dy, dz from PYME.IO import load_psf mod, vs_nm = load_psf.load_psf(modName) mod = resizePSF(mod, interpModel().shape) IntXVals = vs_nm.x * np.mgrid[-(mod.shape[0] / 2.):(mod.shape[0] / 2.)] IntYVals = vs_nm.y * np.mgrid[-(mod.shape[1] / 2.):(mod.shape[1] / 2.)] IntZVals = vs_nm.z * np.mgrid[-(mod.shape[2] / 2.):(mod.shape[2] / 2.)] dx, dy, dz = vs_nm #interpModel = np.maximum(mod/mod.max(), 0) #normalise to 1 interpModel_by_chan[0] = np.maximum( mod / mod[:, :, len(IntZVals) / 2].sum(), 0) #normalise to 1 and clip
def getQueueData(self, fieldName, *args): """Get data, defined by fieldName and potntially additional arguments, ascociated with queue""" if fieldName == 'FitResults': startingAt, = args #with self.fileResultsLock.rlock: # if self.h5ResultsFile.__contains__('/FitResults'): # res = self.h5ResultsFile.root.FitResults[startingAt:] # else: # res = [] with h5rFile.openH5R(self.resultsFilename, 'a') as h5f: res = h5f.getTableData('FitResults', slice(startingAt, None)) return res elif fieldName == 'PSF': #from PYME.ParallelTasks.relativeFiles import getFullExistingFilename from PYME.IO.load_psf import load_psf res = None modName = self.metaData.getEntry('PSFFile') # mf = open(getFullExistingFilename(modName), 'rb') #res = np.load(mf) #mf.close() res = load_psf(getFullExistingFilename(modName)) return res elif fieldName == 'MAP': mapName, = args #from PYME.ParallelTasks.relativeFiles import getFullExistingFilename from PYME.IO.image import ImageStack print('Serving map: %s' % mapName) fn = getFullExistingFilename(mapName) varmap = ImageStack( filename=fn, haveGUI=False).data[:, :, 0].squeeze( ) #this should handle .tif, .h5, and a few others return varmap else: return None