Ejemplo n.º 1
0
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')
Ejemplo n.º 2
0
    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()