Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
    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