def drift_correct(pipeline): global id_filter import numpy as np import matplotlib.pyplot as plt #pipeline=visgui.pipeline filters = {'error_x': [0, 10]} if 'sig' in pipeline.keys(): dialog = wx.TextEntryDialog(None, 'Diameter (nm): ', 'Enter Fiducial Size', str(pipeline.mdh.getOrDefault('Analysis.FiducialSize', 1000))) sig = [330., 370.] if dialog.ShowModal() == wx.ID_OK: size = float(dialog.GetValue()) sigE = float(np.sqrt((size/(np.sqrt(2)*2.35))**2 + 135.**2)) # Expected std of the bead + expected std of psf sig = [0.95*sigE, 1.05*sigE] filters['sig'] = sig if 'fitError_z0' in pipeline.keys(): filters['fitError_z0'] = [0,30] recipe = pipeline.recipe filt_fiducials = FilterTable(recipe, inputName='Fiducials', outputName='filtered_fiducials', filters=filters) filt_fiducials.configure_traits(kind='modal') #print('Adding fiducial filter module') #recipe.add_module(filt_fiducials) dbs = DBSCANClustering(recipe,inputName='filtered_fiducials', outputName='clumped_fiducials', columns=['x', 'y'], searchRadius=500, minClumpSize=10, clumpColumnName='fiducialID') recipe.add_modules_and_execute([filt_fiducials, dbs]) fids = recipe.namespace['clumped_fiducials'] fid_ids = [int(id) for id in set(fids['fiducialID']) if id > 0] id_filter = FilterTableByIDs(recipe, inputName='clumped_fiducials', outputName='selected_fiducials', idColumnName='fiducialID', ids = fid_ids) #recipe.add_module(id_filter) fc = FiducialCorrection(recipe, inputLocalizations=pipeline.selectedDataSourceKey, inputFiducials='selected_fiducials', outputName='corrected_localizations', outputFiducials='corrected_fiducials') recipe.add_modules_and_execute([id_filter, fc]) pipeline.selectDataSource('corrected_localizations')
def OnSelROIFT(self, event): try: #old glcanvas x0, y0 = self.visFr.glCanvas.selectionStart x1, y1 = self.visFr.glCanvas.selectionFinish except AttributeError: #new glcanvas x0, y0 = self.visFr.glCanvas.selectionSettings.start x1, y1 = self.visFr.glCanvas.selectionSettings.finish filters = {} filters['x'] = [float(min(x0, x1)), float(max(x0, x1))] # must ensure all values are eventually scalars to avoid issue with recipe yaml output filters['y'] = [float(min(y0, y1)), float(max(y0, y1))] # ditto recipe = self.visFr.pipeline.recipe ftable = FilterTable(recipe, inputName=self.visFr.pipeline.selectedDataSourceKey, outputName='selectedROI', filters=filters) if not ftable.configure_traits(kind='modal'): return recipe.add_module(ftable) recipe.execute()