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)
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
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
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)
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)
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)
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
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)
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
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
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
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)
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)
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
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