Example #1
0
def testFrames(detThresh = 0.9, offset = 0):
    plt.close('all')
    matplotlib.interactive(False)
    plt.clf()
    sq = min(mdh.getEntry('EstimatedLaserOnFrameNo') + 1000, dataSource.getNumSlices()/4)
    zps = np.array(range(mdh.getEntry('EstimatedLaserOnFrameNo') + 20, mdh.getEntry('EstimatedLaserOnFrameNo') + 24)  + range(sq, sq + 4) + range(dataSource.getNumSlices()/2,dataSource.getNumSlices() /2+4))
    zps += offset
    fitMod = cFitType.GetStringSelection()
    #bgFrames = int(tBackgroundFrames.GetValue())
    bgFrames = [int(v) for v in tBackgroundFrames.GetValue().split(':')]
    for i in range(12):
        #if 'Analysis.NumBGFrames' in md.getEntryNames():
        #bgi = range(max(zps[i] - bgFrames,mdh.getEntry('EstimatedLaserOnFrameNo')), zps[i])
        bgi = range(max(zps[i] + bgFrames[0],mdh.getEntry('EstimatedLaserOnFrameNo')), max(zps[i] + bgFrames[1],mdh.getEntry('EstimatedLaserOnFrameNo')))
        #else:
        #    bgi = range(max(zps[i] - 10,md.EstimatedLaserOnFrameNo), zps[i])
        if 'Splitter' in fitMod:
            ft = remFitBuf.fitTask(seriesName, zps[i], detThresh, MetaDataHandler.NestedClassMDHandler(mdh), 'SplitterObjFindR', bgindices=bgi, SNThreshold=True)
        else:
            ft = remFitBuf.fitTask(seriesName, zps[i], detThresh, MetaDataHandler.NestedClassMDHandler(mdh), 'LatObjFindFR', bgindices=bgi, SNThreshold=True)
        res = ft()
        xp = np.floor(i/4)/3.
        yp = (3 - i%4)/4.
        #print xp, yp
        plt.axes((xp,yp, 1./6,1./4.5))
        #d = ds[zps[i], :,:].squeeze().T
        d = dataSource.getSlice(zps[i]).T
        plt.imshow(d, cmap=cm.hot, interpolation='nearest', hold=False, clim=(np.median(d.ravel()), d.max()))
        plt.title('Frame %d' % zps[i])
        plt.xlim(0, d.shape[1])
        plt.ylim(0, d.shape[0])
        plt.xticks([])
        plt.yticks([])
        #print 'i = %d, ft.index = %d' % (i, ft.index)
        #subplot(4,6,2*i+13)
        xp += 1./6
        plt.axes((xp,yp, 1./6,1./4.5))
        d = ft.ofd.filteredData.T
        #d = ft.data.squeeze().T
        plt.imshow(d, cmap=cm.hot, interpolation='nearest', hold=False, clim=(np.median(d.ravel()), d.max()))
        plt.plot([p.x for p in ft.ofd], [p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
        if ft.driftEst:
             plt.plot([p.x for p in ft.ofdDr], [p.y for p in ft.ofdDr], 'o', mew=2, mec='b', mfc='none', ms=9)
        if ft.fitModule in remFitBuf.splitterFitModules:
                plt.plot([p.x for p in ft.ofd], [d.shape[0] - p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
        #axis('tight')
        plt.xlim(0, d.shape[1])
        plt.ylim(0, d.shape[0])
        plt.xticks([])
        plt.yticks([])
    plt.show()
    matplotlib.interactive(True)
Example #2
0
    def pushImagesDS(self, startingAt=0, detThresh = .9, fitFcn = 'LatGaussFitFR'):
        #global seriesName
        #dataFilename = self.image.seriesName
        resultsFilename = genResultFileName(self.image.seriesName)
        while os.path.exists(resultsFilename):
            di, fn = os.path.split(resultsFilename)
            fdialog = wx.FileDialog(None, 'Analysis file already exists, please select a new filename',
                        wildcard='H5R files|*.h5r', defaultDir=di, defaultFile=os.path.splitext(fn)[0] + '_1.h5r', style=wx.SAVE)
            succ = fdialog.ShowModal()
            if (succ == wx.ID_OK):
                resultsFilename = fdialog.GetPath().encode()
            else:
                raise RuntimeError('Invalid results file - not running')
            #self.image.seriesName = resultsFilename
            
        debugPrint('Results file = %s' % resultsFilename) 

        self.tq.createQueue('HDFResultsTaskQueue', resultsFilename, None)
        
        debugPrint('Queue created')

        mdhQ = MetaDataHandler.QueueMDHandler(self.tq, resultsFilename, self.image.mdh)
        mdhQ.setEntry('Analysis.DetectionThreshold', detThresh)
        mdhQ.setEntry('Analysis.FitModule', fitFcn)
        mdhQ.setEntry('Analysis.DataFileID', fileID.genDataSourceID(self.image.dataSource))
        
        debugPrint('Metadata transferred to queue')

        evts = self.image.dataSource.getEvents()
        if len(evts) > 0:
            self.tq.addQueueEvents(resultsFilename, evts)

        md = MetaDataHandler.NestedClassMDHandler(mdhQ)

        mn = self.image.dataSource.moduleName

        #if it's a buffered source, go back to underlying source
        if mn == 'BufferedDataSource':
            mn = self.image.dataSource.dataSource.moduleName

        for i in range(startingAt, self.image.dataSource.getNumSlices()):
            debugPrint('Posting task %d' %i)
            if 'Analysis.BGRange' in md.getEntryNames():
                bgi = range(max(i + md.Analysis.BGRange[0],md.EstimatedLaserOnFrameNo), max(i + md.Analysis.BGRange[1],md.EstimatedLaserOnFrameNo))
            elif 'Analysis.NumBGFrames' in md.getEntryNames():
                bgi = range(max(i - md.Analysis.NumBGFrames, md.EstimatedLaserOnFrameNo), i)
            else:
                bgi = range(max(i - 10, md.EstimatedLaserOnFrameNo), i)

            #task = fitTask(self.queueID, taskNum, self.metaData.Analysis.DetectionThreshold, self.metaData, self.metaData.Analysis.FitModule, 'TQDataSource', bgindices =bgi, SNThreshold = True)
            
            self.tq.postTask(remFitBuf.fitTask(self.image.seriesName,i, detThresh, md, fitFcn, bgindices=bgi, SNThreshold=True, dataSourceModule=mn), queueName=resultsFilename)

        self.image.seriesName = resultsFilename
Example #3
0
    def getTask(self, workerN=0, NWorkers=1):
        """get task from front of list, blocks"""
        #print 'Task requested'
        #self.getTaskLock.acquire()
        while len(self.openTasks) < 1:
            time.sleep(0.01)

        #if self.metaDataStale:
#            with self.dataFileLock.rlock:
#                self.metaData = MetaDataHandler.NestedClassMDHandler(self.resultsMDH)
#                self.metaDataStale = False

#patch up old data which doesn't have BGRange in metadata
        if not 'Analysis.BGRange' in self.metaData.getEntryNames():
            if 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
                nBGFrames = self.metaData.Analysis.NumBGFrames
            else:
                nBGFrames = 10

            self.metaData.setEntry('Analysis.BGRange', (-nBGFrames, 0))

        taskNum = self.openTasks.pop(
            self.fTaskToPop(workerN, NWorkers, len(self.openTasks)))

        #if 'Analysis.BGRange' in self.metaData.getEntryNames():
        bgi = range(
            max(taskNum + self.metaData.Analysis.BGRange[0],
                self.metaData.EstimatedLaserOnFrameNo),
            max(taskNum + self.metaData.Analysis.BGRange[1],
                self.metaData.EstimatedLaserOnFrameNo))
        #elif 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
        #    bgi = range(max(taskNum - self.metaData.Analysis.NumBGFrames,self.metaData.EstimatedLaserOnFrameNo), taskNum)
        #else:
        #    bgi = range(max(taskNum - 10,self.metaData.EstimatedLaserOnFrameNo), taskNum)

        task = fitTask(self.queueID,
                       taskNum,
                       self.metaData.Analysis.DetectionThreshold,
                       self.metaData,
                       self.metaData.Analysis.FitModule,
                       'TQDataSource',
                       bgindices=bgi,
                       SNThreshold=True)

        task.queueID = self.queueID
        task.initializeWorkerTimeout(time.clock())
        with self.inProgressLock:
            self.tasksInProgress.append(task)
        #self.inProgressLock.release()
        #self.getTaskLock.release()

        self.lastTaskTime = time.time()

        return task
Example #4
0
def testFrame(detThresh=0.9):
    ft = remFitBuf.fitTask(seriesName,
                           vp.zp,
                           detThresh,
                           MetaDataHandler.NestedClassMDHandler(mdh),
                           cFitType.GetString(cFitType.GetSelection()),
                           bgindices=range(
                               max(vp.zp - 10,
                                   mdh.getEntry('EstimatedLaserOnFrameNo')),
                               vp.zp),
                           SNThreshold=True)
    return ft(True)
Example #5
0
def testFrameD(detThresh=0.9):
    ft = remFitBuf.fitTask(
        seriesName,
        vp.zp,
        detThresh,
        MetaDataHandler.NestedClassMDHandler(mdh),
        'LatGaussFitFR',
        bgindices=range(max(vp.zp - 10, md.EstimatedLaserOnFrameNo), vp.zp),
        SNThreshold=True,
        driftEstInd=range(max(vp.zp - 5, md.EstimatedLaserOnFrameNo),
                          min(vp.zp + 5, ds.shape[0])))
    return ft(True)
Example #6
0
def testFrameTQ(detThresh=0.9):
    ft = remFitBuf.fitTask(seriesName,
                           vp.zp,
                           detThresh,
                           MetaDataHandler.NestedClassMDHandler(mdh),
                           'LatGaussFitFR',
                           'TQDataSource',
                           bgindices=range(
                               max(vp.zp - 10,
                                   mdh.getEntry('EstimatedLaserOnFrameNo')),
                               vp.zp),
                           SNThreshold=True)
    return ft(True, tq)
Example #7
0
    def getTask(self, workerN = 0, NWorkers = 1):
        """get task from front of list, blocks"""
        #print 'Task requested'
        #self.getTaskLock.acquire()
        while len(self.openTasks) < 1:
            time.sleep(0.01)

        #if self.metaDataStale:
#            with self.dataFileLock.rlock:
#                self.metaData = MetaDataHandler.NestedClassMDHandler(self.resultsMDH)
#                self.metaDataStale = False
            
            #patch up old data which doesn't have BGRange in metadata
        if not 'Analysis.BGRange' in self.metaData.getEntryNames():
            if 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
                nBGFrames = self.metaData.Analysis.NumBGFrames
            else:
                nBGFrames = 10

            self.metaData.setEntry('Analysis.BGRange', (-nBGFrames, 0))
        
        
        taskNum = self.openTasks.pop(self.fTaskToPop(workerN, NWorkers, len(self.openTasks)))

        #if 'Analysis.BGRange' in self.metaData.getEntryNames():
        bgi = range(max(taskNum + self.metaData.Analysis.BGRange[0],self.metaData.EstimatedLaserOnFrameNo), max(taskNum + self.metaData.Analysis.BGRange[1],self.metaData.EstimatedLaserOnFrameNo))
        #elif 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
        #    bgi = range(max(taskNum - self.metaData.Analysis.NumBGFrames,self.metaData.EstimatedLaserOnFrameNo), taskNum)
        #else:
        #    bgi = range(max(taskNum - 10,self.metaData.EstimatedLaserOnFrameNo), taskNum)
        
        task = fitTask(self.queueID, taskNum, self.metaData.Analysis.DetectionThreshold, self.metaData, self.metaData.Analysis.FitModule, 'TQDataSource', bgindices = bgi, SNThreshold = True)
        
        task.queueID = self.queueID
        task.initializeWorkerTimeout(time.clock())
        with self.inProgressLock:
            self.tasksInProgress.append(task)
        #self.inProgressLock.release()
        #self.getTaskLock.release()

        self.lastTaskTime = time.time()

        return task
Example #8
0
def pushImagesD(startingAt=0, detThresh=.9):
    tq.createQueue('HDFResultsTaskQueue', seriesName, None)
    mdhQ = MetaDataHandler.QueueMDHandler(tq, seriesName, mdh)
    mdhQ.setEntry('Analysis.DetectionThreshold', detThresh)
    for i in range(startingAt, ds.shape[0]):
        tq.postTask(remFitBuf.fitTask(
            seriesName,
            i,
            detThresh,
            MetaDataHandler.NestedClassMDHandler(mdh),
            'LatGaussFitFR',
            bgindices=range(
                max(i - 10, mdh.getEntry('EstimatedLaserOnFrameNo')), i),
            SNThreshold=True,
            driftEstInd=range(
                max(i - 5, mdh.getEntry('EstimatedLaserOnFrameNo')),
                min(i + 5, ds.shape[0])),
            dataSourceModule=dataSource.moduleName),
                    queueName=seriesName)
Example #9
0
    def getTasks(self, workerN = 0, NWorkers = 1):
        """get task from front of list, blocks"""
        print '> HDFTaskQueue: Task requested'
        #self.getTaskLock.acquire()
        while len(self.openTasks) < 1:
            time.sleep(0.01)

        #if self.metaDataStale:
#            with self.dataFileLock.rlock:
#                self.metaData = MetaDataHandler.NestedClassMDHandler(self.resultsMDH)
#                self.metaDataStale = False
            

        if not 'Analysis.BGRange' in self.metaData.getEntryNames():
            if 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
                nBGFrames = self.metaData.Analysis.NumBGFrames
            else:
                nBGFrames = 10

            self.metaData.setEntry('Analysis.BGRange', (-nBGFrames, 0))


        tasks = []
        
        if not 'Analysis.ChunkSize' in self.metaData.getEntryNames():
            cs = min(max(CHUNKSIZE, min(MAXCHUNKSIZE, len(self.openTasks))),len(self.openTasks))
        else:
            cs = min(self.metaData['Analysis.ChunkSize'], len(self.openTasks))

        for i in range(cs):

            taskNum = self.openTasks.pop(self.fTaskToPop(workerN, NWorkers, len(self.openTasks)))

            #if 'Analysis.BGRange' in self.metaData.getEntryNames():
            bgi = range(max(taskNum + self.metaData.Analysis.BGRange[0],
                            self.metaData.EstimatedLaserOnFrameNo),
                        max(taskNum + self.metaData.Analysis.BGRange[1],
                            self.metaData.EstimatedLaserOnFrameNo))
            #elif 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
            #    bgi = range(max(taskNum - self.metaData.Analysis.NumBGFrames,self.metaData.EstimatedLaserOnFrameNo), taskNum)
            #else:
            #    bgi = range(max(taskNum - 10,self.metaData.EstimatedLaserOnFrameNo), taskNum)

            task = fitTask(self.queueID, # .h5 filename
                           taskNum, 
                           self.metaData.Analysis.DetectionThreshold, 
                           self.metaData, 
                           self.metaData.Analysis.FitModule,
                           'TQDataSource', 
                           bgindices =bgi, 
                           SNThreshold = True)

            task.queueID = self.queueID
            task.initializeWorkerTimeout(time.clock())
            with self.inProgressLock:
                self.tasksInProgress.append(task)
            

            tasks.append(task)

        self.lastTaskTime = time.time()

        return tasks
Example #10
0
    def getTasks(self, workerN=0, NWorkers=1):
        """get task from front of list, blocks"""
        print '> HDFTaskQueue: Task requested'
        #self.getTaskLock.acquire()
        while len(self.openTasks) < 1:
            time.sleep(0.01)

        #if self.metaDataStale:
#            with self.dataFileLock.rlock:
#                self.metaData = MetaDataHandler.NestedClassMDHandler(self.resultsMDH)
#                self.metaDataStale = False

        if not 'Analysis.BGRange' in self.metaData.getEntryNames():
            if 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
                nBGFrames = self.metaData.Analysis.NumBGFrames
            else:
                nBGFrames = 10

            self.metaData.setEntry('Analysis.BGRange', (-nBGFrames, 0))

        tasks = []

        if not 'Analysis.ChunkSize' in self.metaData.getEntryNames():
            cs = min(max(CHUNKSIZE, min(MAXCHUNKSIZE, len(self.openTasks))),
                     len(self.openTasks))
        else:
            cs = min(self.metaData['Analysis.ChunkSize'], len(self.openTasks))

        for i in range(cs):

            taskNum = self.openTasks.pop(
                self.fTaskToPop(workerN, NWorkers, len(self.openTasks)))

            #if 'Analysis.BGRange' in self.metaData.getEntryNames():
            bgi = range(
                max(taskNum + self.metaData.Analysis.BGRange[0],
                    self.metaData.EstimatedLaserOnFrameNo),
                max(taskNum + self.metaData.Analysis.BGRange[1],
                    self.metaData.EstimatedLaserOnFrameNo))
            #elif 'Analysis.NumBGFrames' in self.metaData.getEntryNames():
            #    bgi = range(max(taskNum - self.metaData.Analysis.NumBGFrames,self.metaData.EstimatedLaserOnFrameNo), taskNum)
            #else:
            #    bgi = range(max(taskNum - 10,self.metaData.EstimatedLaserOnFrameNo), taskNum)

            task = fitTask(
                self.queueID,  # .h5 filename
                taskNum,
                self.metaData.Analysis.DetectionThreshold,
                self.metaData,
                self.metaData.Analysis.FitModule,
                'TQDataSource',
                bgindices=bgi,
                SNThreshold=True)

            task.queueID = self.queueID
            task.initializeWorkerTimeout(time.clock())
            with self.inProgressLock:
                self.tasksInProgress.append(task)

            tasks.append(task)

        self.lastTaskTime = time.time()

        return tasks
Example #11
0
    def testFrame(self, detThresh = 0.9, offset = 0, gui=True):
        from pylab import *
        #close('all')
        print '> testFrame Begin'
        #print '> Try to print moduleName:'
        #print(self.image.dataSource.moduleName)                 
        if self.image.dataSource.moduleName == 'TQDataSource':    # if .tif is loaded, module name will be buffered sth.
            self.checkTQ()
        if gui:    
            matplotlib.interactive(False)
            figure()
        #sq = min(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 1000, self.image.dataSource.getNumSlices()/4)
        #zps = array(range(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 20, self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 24)  + range(sq, sq + 4) + range(self.image.dataSource.getNumSlices()/2,self.image.dataSource.getNumSlices() /2+4))
        #zps += offset
        
        zp = self.do.zp
        fitMod = self.fitFactories[self.cFitType.GetSelection()]
        self.image.mdh.setEntry('Analysis.FitModule', fitMod)
        #bgFrames = int(tBackgroundFrames.GetValue())
        bgFrames = [int(v) for v in self.tBackgroundFrames.GetValue().split(':')]
        #print zps
        bgi = range(max(zp + bgFrames[0],self.image.mdh.getEntry('EstimatedLaserOnFrameNo')), max(zp + bgFrames[1],self.image.mdh.getEntry('EstimatedLaserOnFrameNo')))
            #else:
            #    bgi = range(max(zps[i] - 10,md.EstimatedLaserOnFrameNo), zps[i])
        mn = self.image.dataSource.moduleName
        if mn == 'BufferedDataSource':
            mn = self.image.dataSource.dataSource.moduleName

        #if 'Splitter' in fitMod:
        #    ft = remFitBuf.fitTask(self.image.seriesName, zp, detThresh, MetaDataHandler.NestedClassMDHandler(self.image.mdh), 'SplitterObjFindR', bgindices=bgi, SNThreshold=True,dataSourceModule=mn)
        #else:
        #    ft = remFitBuf.fitTask(self.image.seriesName, zp, detThresh, MetaDataHandler.NestedClassMDHandler(self.image.mdh), 'LatObjFindFR', bgindices=bgi, SNThreshold=True,dataSourceModule=mn)
        ft = remFitBuf.fitTask(self.image.seriesName, zp, detThresh, MetaDataHandler.NestedClassMDHandler(self.image.mdh), fitMod, bgindices=bgi, SNThreshold=True,dataSourceModule=mn)
        res = ft(gui=gui,taskQueue=self.tq)
        
        if gui:
            figure()
            try:
                d = ft.ofd.filteredData.T
                #d = ft.data.squeeze().T
                imshow(d, cmap=cm.hot, interpolation='nearest', hold=False, clim=(median(d.ravel()), d.max()))
                plot([p.x for p in ft.ofd], [p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
                if ft.driftEst:
                     plot([p.x for p in ft.ofdDr], [p.y for p in ft.ofdDr], 'o', mew=2, mec='b', mfc='none', ms=9)
                #if ft.fitModule in remFitBuf.splitterFitModules:
                #        plot([p.x for p in ft.ofd], [d.shape[0] - p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
                #axis('tight')
                xlim(0, d.shape[1])
                ylim(d.shape[0], 0)
                xticks([])
                yticks([])
                
                
                    
                vx = 1e3*self.image.mdh['voxelsize.x']
                vy = 1e3*self.image.mdh['voxelsize.y']
                plot(res.results['fitResults']['x0']/vx, res.results['fitResults']['y0']/vy, '+b', mew=2)
                
                if 'startParams' in res.results.dtype.names:
                    plot(res.results['startParams']['x0']/vx, res.results['startParams']['y0']/vy, 'xc', mew=2)
                
                if 'tIm' in dir(ft.ofd):
                    figure()
                    imshow(ft.ofd.tIm.T, cmap=cm.hot, interpolation='nearest', hold=False)
                    #axis('tight')
                    xlim(0, d.shape[1])
                    ylim(d.shape[0], 0)
                    xticks([])
                    yticks([])
                    plot(res.results['fitResults']['x0']/vx, res.results['fitResults']['y0']/vy, '+b')
                    
                #figure()
                #imshow()
            except AttributeError:
                #d = self.image.data[:,:,zp].squeeze().T
                d = (ft.data.squeeze() - ft.bg.squeeze()).T
                imshow(d, cmap=cm.jet, interpolation='nearest', clim = [0, d.max()])
                xlim(0, d.shape[1])
                ylim(d.shape[0], 0)
                
                vx = 1e3*self.image.mdh['voxelsize.x']
                vy = 1e3*self.image.mdh['voxelsize.y']
                plot(res.results['fitResults']['x0']/vx, res.results['fitResults']['y0']/vy, 'ow')
                pass
                    
            show()
    
            matplotlib.interactive(True)
        
        return ft, res
Example #12
0
    def testFrames(self, detThresh = 0.9, offset = 0):
        from pylab import *
        close('all')
        if self.image.dataSource.moduleName == 'TQDataSource':
            self.checkTQ()
        matplotlib.interactive(False)
        clf()
        sq = min(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 1000, 
                 self.image.dataSource.getNumSlices()/4)
        # sq = 1000

        zps = array(range(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 20, 
                          self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 24)  + range(sq, sq + 4) + range(self.image.dataSource.getNumSlices()/2,self.image.dataSource.getNumSlices() /2+4))
        # zps = [20 21 22 23 1000 1001 1002 1003 2500 2501 2502 2503]
        zps += offset

        fitMod = self.fitFactories[self.cFitType.GetSelection()]
        # e.g. fitMod = 'LatGaussFitFR'

        #bgFrames = int(tBackgroundFrames.GetValue())
        bgFrames = [int(v) for v in self.tBackgroundFrames.GetValue().split(':')]
        # bgFrames = [-30, 0]

        print(zps)
        for i in range(12):
            print(i)
            #if 'Analysis.NumBGFrames' in md.getEntryNames():
            #bgi = range(max(zps[i] - bgFrames,mdh.getEntry('EstimatedLaserOnFrameNo')), zps[i])
            bgi = range(max(zps[i] + bgFrames[0],self.image.mdh.getEntry('EstimatedLaserOnFrameNo')), 
                        max(zps[i] + bgFrames[1],self.image.mdh.getEntry('EstimatedLaserOnFrameNo')))
            # bgi = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ..., 19]

            #else:
            #    bgi = range(max(zps[i] - 10,md.EstimatedLaserOnFrameNo), zps[i])
            mn = self.image.dataSource.moduleName
            if mn == 'BufferedDataSource':
                mn = self.image.dataSource.dataSource.moduleName

            if 'Splitter' in fitMod:
                ft = remFitBuf.fitTask(self.image.seriesName, 
                                       zps[i], 
                                       detThresh, 
                                       MetaDataHandler.NestedClassMDHandler(self.image.mdh),
                                       'SplitterObjFindR', 
                                       bgindices = bgi, 
                                       SNThreshold = True,
                                       dataSourceModule = mn)
            else:
                ft = remFitBuf.fitTask(self.image.seriesName, 
                                       zps[i], 
                                       detThresh, 
                                       MetaDataHandler.NestedClassMDHandler(self.image.mdh), 
                                       'LatObjFindFR',
                                       bgindices = bgi, 
                                       SNThreshold = True,
                                       dataSourceModule = mn)

            res = ft(taskQueue=self.tq)
            xp = floor(i/4)/3.
            yp = (3 - i%4)/4.
            #print xp, yp
            axes((xp,yp, 1./6,1./4.5))
            #d = ds[zps[i], :,:].squeeze().T
            d = self.image.dataSource.getSlice(zps[i]).T
            imshow(d, cmap=cm.hot, interpolation='nearest', hold=False, clim=(median(d.ravel()), d.max()))
            title('Frame %d' % zps[i])
            xlim(0, d.shape[1])
            ylim(0, d.shape[0])
            xticks([])
            yticks([])
            #print 'i = %d, ft.index = %d' % (i, ft.index)
            #subplot(4,6,2*i+13)
            xp += 1./6
            axes((xp,yp, 1./6,1./4.5))
            d = ft.ofd.filteredData.T
            #d = ft.data.squeeze().T
            imshow(d, cmap=cm.hot, interpolation='nearest', hold=False, clim=(median(d.ravel()), d.max()))
            plot([p.x for p in ft.ofd], [p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
            if ft.driftEst:
                 plot([p.x for p in ft.ofdDr], [p.y for p in ft.ofdDr], 'o', mew=2, mec='b', mfc='none', ms=9)
            if ft.fitModule in remFitBuf.splitterFitModules:
                    plot([p.x for p in ft.ofd], [d.shape[0] - p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
            axis('tight')
            xlim(0, d.shape[1])
            ylim(0, d.shape[0])
            xticks([])
            yticks([])
        show()
        matplotlib.interactive(True)
Example #13
0
    def testFrames(self, detThresh=0.9, offset=0):
        from pylab import *
        close('all')
        if self.image.dataSource.moduleName == 'TQDataSource':
            self.checkTQ()
        matplotlib.interactive(False)
        clf()
        sq = min(
            self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 1000,
            self.image.dataSource.getNumSlices() / 4)
        # sq = 1000

        zps = array(
            range(
                self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 20,
                self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 24) +
            range(sq, sq + 4) +
            range(self.image.dataSource.getNumSlices() / 2,
                  self.image.dataSource.getNumSlices() / 2 + 4))
        # zps = [20 21 22 23 1000 1001 1002 1003 2500 2501 2502 2503]
        zps += offset

        fitMod = self.fitFactories[self.cFitType.GetSelection()]
        # e.g. fitMod = 'LatGaussFitFR'

        #bgFrames = int(tBackgroundFrames.GetValue())
        bgFrames = [
            int(v) for v in self.tBackgroundFrames.GetValue().split(':')
        ]
        # bgFrames = [-30, 0]

        print(zps)
        for i in range(12):
            print(i)
            #if 'Analysis.NumBGFrames' in md.getEntryNames():
            #bgi = range(max(zps[i] - bgFrames,mdh.getEntry('EstimatedLaserOnFrameNo')), zps[i])
            bgi = range(
                max(zps[i] + bgFrames[0],
                    self.image.mdh.getEntry('EstimatedLaserOnFrameNo')),
                max(zps[i] + bgFrames[1],
                    self.image.mdh.getEntry('EstimatedLaserOnFrameNo')))
            # bgi = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ..., 19]

            #else:
            #    bgi = range(max(zps[i] - 10,md.EstimatedLaserOnFrameNo), zps[i])
            mn = self.image.dataSource.moduleName
            if mn == 'BufferedDataSource':
                mn = self.image.dataSource.dataSource.moduleName

            if 'Splitter' in fitMod:
                ft = remFitBuf.fitTask(self.image.seriesName,
                                       zps[i],
                                       detThresh,
                                       MetaDataHandler.NestedClassMDHandler(
                                           self.image.mdh),
                                       'SplitterObjFindR',
                                       bgindices=bgi,
                                       SNThreshold=True,
                                       dataSourceModule=mn)
            else:
                ft = remFitBuf.fitTask(self.image.seriesName,
                                       zps[i],
                                       detThresh,
                                       MetaDataHandler.NestedClassMDHandler(
                                           self.image.mdh),
                                       'LatObjFindFR',
                                       bgindices=bgi,
                                       SNThreshold=True,
                                       dataSourceModule=mn)

            res = ft(taskQueue=self.tq)
            xp = floor(i / 4) / 3.
            yp = (3 - i % 4) / 4.
            #print xp, yp
            axes((xp, yp, 1. / 6, 1. / 4.5))
            #d = ds[zps[i], :,:].squeeze().T
            d = self.image.dataSource.getSlice(zps[i]).T
            imshow(d,
                   cmap=cm.hot,
                   interpolation='nearest',
                   hold=False,
                   clim=(median(d.ravel()), d.max()))
            title('Frame %d' % zps[i])
            xlim(0, d.shape[1])
            ylim(0, d.shape[0])
            xticks([])
            yticks([])
            #print 'i = %d, ft.index = %d' % (i, ft.index)
            #subplot(4,6,2*i+13)
            xp += 1. / 6
            axes((xp, yp, 1. / 6, 1. / 4.5))
            d = ft.ofd.filteredData.T
            #d = ft.data.squeeze().T
            imshow(d,
                   cmap=cm.hot,
                   interpolation='nearest',
                   hold=False,
                   clim=(median(d.ravel()), d.max()))
            plot([p.x for p in ft.ofd], [p.y for p in ft.ofd],
                 'o',
                 mew=2,
                 mec='g',
                 mfc='none',
                 ms=9)
            if ft.driftEst:
                plot([p.x for p in ft.ofdDr], [p.y for p in ft.ofdDr],
                     'o',
                     mew=2,
                     mec='b',
                     mfc='none',
                     ms=9)
            if ft.fitModule in remFitBuf.splitterFitModules:
                plot([p.x for p in ft.ofd], [d.shape[0] - p.y for p in ft.ofd],
                     'o',
                     mew=2,
                     mec='g',
                     mfc='none',
                     ms=9)
            axis('tight')
            xlim(0, d.shape[1])
            ylim(0, d.shape[0])
            xticks([])
            yticks([])
        show()
        matplotlib.interactive(True)
Example #14
0
    def pushImagesDS(self, startingAt=0, detThresh=.9, fitFcn='LatGaussFitFR'):
        #global seriesName
        #dataFilename = self.image.seriesName
        resultsFilename = genResultFileName(self.image.seriesName)
        while os.path.exists(resultsFilename):
            di, fn = os.path.split(resultsFilename)
            fdialog = wx.FileDialog(
                None,
                'Analysis file already exists, please select a new filename',
                wildcard='H5R files|*.h5r',
                defaultDir=di,
                defaultFile=os.path.splitext(fn)[0] + '_1.h5r',
                style=wx.SAVE)
            succ = fdialog.ShowModal()
            if (succ == wx.ID_OK):
                resultsFilename = fdialog.GetPath().encode()
            else:
                raise RuntimeError('Invalid results file - not running')
            #self.image.seriesName = resultsFilename

        debugPrint('Results file = %s' % resultsFilename)

        self.tq.createQueue('HDFResultsTaskQueue', resultsFilename, None)

        debugPrint('Queue created')

        mdhQ = MetaDataHandler.QueueMDHandler(self.tq, resultsFilename,
                                              self.image.mdh)
        mdhQ.setEntry('Analysis.DetectionThreshold', detThresh)
        mdhQ.setEntry('Analysis.FitModule', fitFcn)
        mdhQ.setEntry('Analysis.DataFileID',
                      fileID.genDataSourceID(self.image.dataSource))

        debugPrint('Metadata transferred to queue')

        evts = self.image.dataSource.getEvents()
        if len(evts) > 0:
            self.tq.addQueueEvents(resultsFilename, evts)

        md = MetaDataHandler.NestedClassMDHandler(mdhQ)

        mn = self.image.dataSource.moduleName

        #if it's a buffered source, go back to underlying source
        if mn == 'BufferedDataSource':
            mn = self.image.dataSource.dataSource.moduleName

        for i in range(startingAt, self.image.dataSource.getNumSlices()):
            debugPrint('Posting task %d' % i)
            if 'Analysis.BGRange' in md.getEntryNames():
                bgi = range(
                    max(i + md.Analysis.BGRange[0],
                        md.EstimatedLaserOnFrameNo),
                    max(i + md.Analysis.BGRange[1],
                        md.EstimatedLaserOnFrameNo))
            elif 'Analysis.NumBGFrames' in md.getEntryNames():
                bgi = range(
                    max(i - md.Analysis.NumBGFrames,
                        md.EstimatedLaserOnFrameNo), i)
            else:
                bgi = range(max(i - 10, md.EstimatedLaserOnFrameNo), i)

            #task = fitTask(self.queueID, taskNum, self.metaData.Analysis.DetectionThreshold, self.metaData, self.metaData.Analysis.FitModule, 'TQDataSource', bgindices =bgi, SNThreshold = True)

            self.tq.postTask(remFitBuf.fitTask(self.image.seriesName,
                                               i,
                                               detThresh,
                                               md,
                                               fitFcn,
                                               bgindices=bgi,
                                               SNThreshold=True,
                                               dataSourceModule=mn),
                             queueName=resultsFilename)

        self.image.seriesName = resultsFilename
Example #15
0
    def testFrame(self, detThresh=0.9, offset=0, gui=True):
        from pylab import *
        #close('all')
        print '> testFrame Begin'
        #print '> Try to print moduleName:'
        #print(self.image.dataSource.moduleName)
        if self.image.dataSource.moduleName == 'TQDataSource':  # if .tif is loaded, module name will be buffered sth.
            self.checkTQ()
        if gui:
            matplotlib.interactive(False)
            figure()
        #sq = min(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 1000, self.image.dataSource.getNumSlices()/4)
        #zps = array(range(self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 20, self.image.mdh.getEntry('EstimatedLaserOnFrameNo') + 24)  + range(sq, sq + 4) + range(self.image.dataSource.getNumSlices()/2,self.image.dataSource.getNumSlices() /2+4))
        #zps += offset

        zp = self.do.zp
        fitMod = self.fitFactories[self.cFitType.GetSelection()]
        self.image.mdh.setEntry('Analysis.FitModule', fitMod)
        #bgFrames = int(tBackgroundFrames.GetValue())
        bgFrames = [
            int(v) for v in self.tBackgroundFrames.GetValue().split(':')
        ]
        #print zps
        bgi = range(
            max(zp + bgFrames[0],
                self.image.mdh.getEntry('EstimatedLaserOnFrameNo')),
            max(zp + bgFrames[1],
                self.image.mdh.getEntry('EstimatedLaserOnFrameNo')))
        #else:
        #    bgi = range(max(zps[i] - 10,md.EstimatedLaserOnFrameNo), zps[i])
        mn = self.image.dataSource.moduleName
        if mn == 'BufferedDataSource':
            mn = self.image.dataSource.dataSource.moduleName

        #if 'Splitter' in fitMod:
        #    ft = remFitBuf.fitTask(self.image.seriesName, zp, detThresh, MetaDataHandler.NestedClassMDHandler(self.image.mdh), 'SplitterObjFindR', bgindices=bgi, SNThreshold=True,dataSourceModule=mn)
        #else:
        #    ft = remFitBuf.fitTask(self.image.seriesName, zp, detThresh, MetaDataHandler.NestedClassMDHandler(self.image.mdh), 'LatObjFindFR', bgindices=bgi, SNThreshold=True,dataSourceModule=mn)
        ft = remFitBuf.fitTask(self.image.seriesName,
                               zp,
                               detThresh,
                               MetaDataHandler.NestedClassMDHandler(
                                   self.image.mdh),
                               fitMod,
                               bgindices=bgi,
                               SNThreshold=True,
                               dataSourceModule=mn)
        res = ft(gui=gui, taskQueue=self.tq)

        if gui:
            figure()
            try:
                d = ft.ofd.filteredData.T
                #d = ft.data.squeeze().T
                imshow(d,
                       cmap=cm.hot,
                       interpolation='nearest',
                       hold=False,
                       clim=(median(d.ravel()), d.max()))
                plot([p.x for p in ft.ofd], [p.y for p in ft.ofd],
                     'o',
                     mew=2,
                     mec='g',
                     mfc='none',
                     ms=9)
                if ft.driftEst:
                    plot([p.x for p in ft.ofdDr], [p.y for p in ft.ofdDr],
                         'o',
                         mew=2,
                         mec='b',
                         mfc='none',
                         ms=9)
                #if ft.fitModule in remFitBuf.splitterFitModules:
                #        plot([p.x for p in ft.ofd], [d.shape[0] - p.y for p in ft.ofd], 'o', mew=2, mec='g', mfc='none', ms=9)
                #axis('tight')
                xlim(0, d.shape[1])
                ylim(d.shape[0], 0)
                xticks([])
                yticks([])

                vx = 1e3 * self.image.mdh['voxelsize.x']
                vy = 1e3 * self.image.mdh['voxelsize.y']
                plot(res.results['fitResults']['x0'] / vx,
                     res.results['fitResults']['y0'] / vy,
                     '+b',
                     mew=2)

                if 'startParams' in res.results.dtype.names:
                    plot(res.results['startParams']['x0'] / vx,
                         res.results['startParams']['y0'] / vy,
                         'xc',
                         mew=2)

                if 'tIm' in dir(ft.ofd):
                    figure()
                    imshow(ft.ofd.tIm.T,
                           cmap=cm.hot,
                           interpolation='nearest',
                           hold=False)
                    #axis('tight')
                    xlim(0, d.shape[1])
                    ylim(d.shape[0], 0)
                    xticks([])
                    yticks([])
                    plot(res.results['fitResults']['x0'] / vx,
                         res.results['fitResults']['y0'] / vy, '+b')

                #figure()
                #imshow()
            except AttributeError:
                #d = self.image.data[:,:,zp].squeeze().T
                d = (ft.data.squeeze() - ft.bg.squeeze()).T
                imshow(d,
                       cmap=cm.jet,
                       interpolation='nearest',
                       clim=[0, d.max()])
                xlim(0, d.shape[1])
                ylim(d.shape[0], 0)

                vx = 1e3 * self.image.mdh['voxelsize.x']
                vy = 1e3 * self.image.mdh['voxelsize.y']
                plot(res.results['fitResults']['x0'] / vx,
                     res.results['fitResults']['y0'] / vy, 'ow')
                pass

            show()

            matplotlib.interactive(True)

        return ft, res