Exemplo n.º 1
0
 def imgBounds(self):
     '''Return the bounds (or valid area) of the image in nm as (x0, y0, x1, y1, z0, z1)'''
     try:
         return ImageBounds(self.mdh['ImageBounds.x0'],
                            self.mdh['ImageBounds.y0'],
                            self.mdh['ImageBounds.x1'],
                            self.mdh['ImageBounds.y1'],
                            self.mdh['ImageBounds.z0'],
                            self.mdh['ImageBounds.z1'])
     except:
         return ImageBounds(0, 0, self.pixelSize * self.data.shape[0],
                            self.pixelSize * self.data.shape[1], 0,
                            self.sliceSize * self.data.shape[2])
Exemplo n.º 2
0
    def __init__(self, filename=None):
        self.dataSources = []
        self.selectedDataSource = None
        self.filterKeys = {
            'error_x': (0, 30),
            'A': (5, 2000),
            'sig': (95, 200)
        }

        self.filter = None
        self.mapping = None
        self.colourFilter = None

        self.fluorSpecies = {}
        self.fluorSpeciesDyes = {}
        self.chromaticShifts = {}
        self.t_p_dye = 0.1
        self.t_p_other = 0.1
        self.t_p_background = .01

        self.objThreshold = 30
        self.objMinSize = 10
        self.blobJitter = 0
        self.objects = None

        self.imageBounds = ImageBounds(0, 0, 0, 0)

        self.edb = None
        self.GeneratedMeasures = {}

        if not filename == None:
            #self.glCanvas.OnPaint(None)
            self.OpenFile(filename)
Exemplo n.º 3
0
    def _processEvents(self):
        '''Read data from events table and translate it into variables for, 
        e.g. z position'''

        if not self.events == None:
            evKeyNames = set()
            for e in self.events:
                evKeyNames.add(e['EventName'])

            self.eventCharts = []

            if 'ProtocolFocus' in evKeyNames:
                self.zm = piecewiseMapping.GeneratePMFromEventList(
                    self.events, self.mdh, self.mdh.getEntry('StartTime'),
                    self.mdh.getEntry('Protocol.PiezoStartPos'))
                self.z_focus = 1.e3 * self.zm(self.selectedDataSource['t'])

                self.selectedDataSource.z_focus = self.z_focus
                self.selectedDataSource.setMapping('focus', 'z_focus')

                self.eventCharts.append(
                    ('Focus [um]', self.zm, 'ProtocolFocus'))

            if 'ScannerXPos' in evKeyNames:
                x0 = 0
                if 'Positioning.Stage_X' in self.mdh.getEntryNames():
                    x0 = self.mdh.getEntry('Positioning.Stage_X')
                self.xm = piecewiseMapping.GeneratePMFromEventList(
                    self.elv.eventSource, self.mdh,
                    self.mdh.getEntry('StartTime'), x0, 'ScannerXPos', 0)

                self.selectedDataSource.scan_x = 1.e3 * self.xm(
                    self.selectedDataSource['t'] - .01)
                self.selectedDataSource.setMapping('ScannerX', 'scan_x')
                self.selectedDataSource.setMapping('x', 'x + scan_x')

                self.eventCharts.append(('XPos [um]', self.xm, 'ScannerXPos'))

            if 'ScannerYPos' in evKeyNames:
                y0 = 0
                if 'Positioning.Stage_Y' in self.mdh.getEntryNames():
                    y0 = self.mdh.getEntry('Positioning.Stage_Y')
                self.ym = piecewiseMapping.GeneratePMFromEventList(
                    self.elv.eventSource, self.mdh,
                    self.mdh.getEntry('StartTime'), y0, 'ScannerYPos', 0)

                self.selectedDataSource.scan_y = 1.e3 * self.ym(
                    self.selectedDataSource['t'] - .01)
                self.selectedDataSource.setMapping('ScannerY', 'scan_y')
                self.selectedDataSource.setMapping('y', 'y + scan_y')

                self.eventCharts.append(('YPos [um]', self.ym, 'ScannerYPos'))

            if 'ScannerXPos' in evKeyNames or 'ScannerYPos' in evKeyNames:
                self.imageBounds = ImageBounds.estimateFromSource(
                    self.selectedDataSource)
Exemplo n.º 4
0
    def _getImBounds(self):
        x0 = max(self.visFr.glCanvas.xmin, self.pipeline.imageBounds.x0)
        y0 = max(self.visFr.glCanvas.ymin, self.pipeline.imageBounds.y0)
        x1 = min(self.visFr.glCanvas.xmax, self.pipeline.imageBounds.x1)
        y1 = min(self.visFr.glCanvas.ymax, self.pipeline.imageBounds.y1)

        if 'x' in self.pipeline.filterKeys.keys():
            x0 = max(x0, self.pipeline.filterKeys['x'][0])
            x1 = min(x1, self.pipeline.filterKeys['x'][1])

        if 'y' in self.pipeline.filterKeys.keys():
            y0 = max(y0, self.pipeline.filterKeys['y'][0])
            y1 = min(y1, self.pipeline.filterKeys['y'][1])

        #imb = ImageBounds(self.glCanvas.xmin,self.glCanvas.ymin,self.glCanvas.xmax,self.glCanvas.ymax)
        return ImageBounds(x0, y0, x1, y1)
Exemplo n.º 5
0
 def _processEvents(self):
     '''Read data from events table and translate it into variables for, 
     e.g. z position'''
     
     if not self.events == None:
         evKeyNames = set()
         for e in self.events:
             evKeyNames.add(e['EventName'])
             
         self.eventCharts = []
     
         if 'ProtocolFocus' in evKeyNames:
             self.zm = piecewiseMapping.GeneratePMFromEventList(self.events, self.mdh, self.mdh.getEntry('StartTime'), self.mdh.getEntry('Protocol.PiezoStartPos'))
             self.z_focus = 1.e3*self.zm(self.selectedDataSource['t'])
     
             self.selectedDataSource.z_focus = self.z_focus
             self.selectedDataSource.setMapping('focus', 'z_focus')
             
             self.eventCharts.append(('Focus [um]', self.zm, 'ProtocolFocus'))
     
         if 'ScannerXPos' in evKeyNames:
             x0 = 0
             if 'Positioning.Stage_X' in self.mdh.getEntryNames():
                 x0 = self.mdh.getEntry('Positioning.Stage_X')
             self.xm = piecewiseMapping.GeneratePMFromEventList(self.elv.eventSource, self.mdh, self.mdh.getEntry('StartTime'), x0, 'ScannerXPos', 0)
     
             self.selectedDataSource.scan_x = 1.e3*self.xm(self.selectedDataSource['t']-.01)
             self.selectedDataSource.setMapping('ScannerX', 'scan_x')
             self.selectedDataSource.setMapping('x', 'x + scan_x')
             
             self.eventCharts.append(('XPos [um]', self.xm, 'ScannerXPos'))
     
         if 'ScannerYPos' in evKeyNames:
             y0 = 0
             if 'Positioning.Stage_Y' in self.mdh.getEntryNames():
                 y0 = self.mdh.getEntry('Positioning.Stage_Y')
             self.ym = piecewiseMapping.GeneratePMFromEventList(self.elv.eventSource, self.mdh, self.mdh.getEntry('StartTime'), y0, 'ScannerYPos', 0)
     
             self.selectedDataSource.scan_y = 1.e3*self.ym(self.selectedDataSource['t']-.01)
             self.selectedDataSource.setMapping('ScannerY', 'scan_y')
             self.selectedDataSource.setMapping('y', 'y + scan_y')
             
             self.eventCharts.append(('YPos [um]', self.ym, 'ScannerYPos'))
     
         if 'ScannerXPos' in evKeyNames or 'ScannerYPos' in evKeyNames:
             self.imageBounds = ImageBounds.estimateFromSource(self.selectedDataSource)
Exemplo n.º 6
0
    def __init__(self, filename=None, visFr=None):
        self.dataSources = []
        self.selectedDataSource = None
        self.filterKeys = {
            'error_x': (0, 30),
            'error_y': (0, 30),
            'A': (5, 20000),
            'sig': (95, 200)
        }

        self.filter = None
        self.mapping = None
        self.colourFilter = None
        self.events = None

        self.fluorSpecies = {}
        self.fluorSpeciesDyes = {}
        self.chromaticShifts = {}
        self.t_p_dye = 0.1
        self.t_p_other = 0.1
        self.t_p_background = .01

        self.objThreshold = 30
        self.objMinSize = 10
        self.blobJitter = 0
        self.objects = None

        self.imageBounds = ImageBounds(0, 0, 0, 0)

        self.Triangles = None
        self.edb = None
        self.Quads = None
        self.GeneratedMeasures = {}

        self.QTGoalPixelSize = 5

        self.filesToClose = []

        self.ready = False
        self.visFr = visFr

        if not filename == None:
            self.OpenFile(filename)
Exemplo n.º 7
0
    def OnGenEvents(self, event):
        from PYMEnf.Simulation import locify
        #from PYME.Acquire.Hardware.Simulator import wormlike2
        from PYME.Analysis.LMVis import inpFilt
        from PYME.Analysis.LMVis.visHelpers import ImageBounds
        import pylab
        
        #wc = wormlike2.wormlikeChain(100)
        
        pipeline = self.visFr.pipeline
        pipeline.filename='Simulation'

        pylab.figure()
        pylab.plot(self.xp, self.yp, 'x') #, lw=2)
        if isinstance(self.source, WormlikeSource):
            pylab.plot(self.xp, self.yp, lw=2)

        res = locify.eventify(self.xp, self.yp, self.meanIntensity, self.meanDuration, self.backgroundIntensity, self.meanEventNumber, self.scaleFactor, self.meanTime)
        pylab.plot(res['fitResults']['x0'],res['fitResults']['y0'], '+')

        pipeline.selectedDataSource = inpFilt.mappingFilter(inpFilt.fitResultsSource(res))
        pipeline.imageBounds = ImageBounds.estimateFromSource(pipeline.selectedDataSource)
        pipeline.dataSources.append(pipeline.selectedDataSource)

        from PYME.Acquire.MetaDataHandler import NestedClassMDHandler
        pipeline.mdh = NestedClassMDHandler()
        pipeline.mdh['Camera.ElectronsPerCount'] = 1
        pipeline.mdh['Camera.TrueEMGain'] = 1
        pipeline.mdh['Camera.CycleTime'] = 1
        pipeline.mdh['voxelsize.x'] = .110

        try:
            pipeline.filterKeys.pop('sig')
        except:
            pass
        self.visFr.RegenFilter()
        self.visFr.SetFit()
Exemplo n.º 8
0
    def OpenFile(self, filename):
        self.dataSources = []
        if 'zm' in dir(self):
            del self.zm
        self.filter = None
        self.mapping = None
        self.colourFilter = None
        self.filename = filename

        self.selectedDataSource = inpFilt.h5rSource(filename)
        self.dataSources.append(self.selectedDataSource)

        self.mdh = MetaDataHandler.HDFMDHandler(self.selectedDataSource.h5f)

        if 'Camera.ROIWidth' in self.mdh.getEntryNames():
            x0 = 0
            y0 = 0

            x1 = self.mdh.getEntry(
                'Camera.ROIWidth') * 1e3 * self.mdh.getEntry('voxelsize.x')
            y1 = self.mdh.getEntry(
                'Camera.ROIHeight') * 1e3 * self.mdh.getEntry('voxelsize.y')

            if 'Splitter' in self.mdh.getEntry('Analysis.FitModule'):
                y1 = y1 / 2

            self.imageBounds = ImageBounds(x0, y0, x1, y1)
        else:
            self.imageBounds = ImageBounds.estimateFromSource(
                self.selectedDataSource)

        if 'fitResults_Ag' in self.selectedDataSource.keys():
            #if we used the splitter set up a mapping so we can filter on total amplitude and ratio
            #if not 'fitError_Ag' in self.selectedDataSource.keys():

            if 'fitError_Ag' in self.selectedDataSource.keys():
                self.selectedDataSource = inpFilt.mappingFilter(
                    self.selectedDataSource,
                    A='fitResults_Ag + fitResults_Ar',
                    gFrac='fitResults_Ag/(fitResults_Ag + fitResults_Ar)',
                    error_gFrac=
                    'sqrt((fitError_Ag/fitResults_Ag)**2 + (fitError_Ag**2 + fitError_Ar**2)/(fitResults_Ag + fitResults_Ar)**2)*fitResults_Ag/(fitResults_Ag + fitResults_Ar)'
                )
                sg = self.selectedDataSource['fitError_Ag']
                sr = self.selectedDataSource['fitError_Ar']
                g = self.selectedDataSource['fitResults_Ag']
                r = self.selectedDataSource['fitResults_Ar']
                I = self.selectedDataSource['A']
                self.selectedDataSource.colNorm = np.sqrt(
                    2 * np.pi) * sg * sr / (2 * np.sqrt(sg**2 + sr**2) * I) * (
                        scipy.special.erf(
                            (sg**2 * r + sr**2 * (I - g)) /
                            (np.sqrt(2) * sg * sr * np.sqrt(sg**2 + sr**2))) -
                        scipy.special.erf(
                            (sg**2 * (r - I) - sr**2 * g) /
                            (np.sqrt(2) * sg * sr * np.sqrt(sg**2 + sr**2))))
                self.selectedDataSource.setMapping('ColourNorm', '1.0*colNorm')
            else:
                self.selectedDataSource = inpFilt.mappingFilter(
                    self.selectedDataSource,
                    A='fitResults_Ag + fitResults_Ar',
                    gFrac='fitResults_Ag/(fitResults_Ag + fitResults_Ar)',
                    error_gFrac='0*x + 0.01')
                self.selectedDataSource.setMapping('fitError_Ag',
                                                   '1*sqrt(fitResults_Ag/1)')
                self.selectedDataSource.setMapping('fitError_Ar',
                                                   '1*sqrt(fitResults_Ar/1)')
                sg = self.selectedDataSource['fitError_Ag']
                sr = self.selectedDataSource['fitError_Ar']
                g = self.selectedDataSource['fitResults_Ag']
                r = self.selectedDataSource['fitResults_Ar']
                I = self.selectedDataSource['A']
                self.selectedDataSource.colNorm = np.sqrt(
                    2 * np.pi) * sg * sr / (2 * np.sqrt(sg**2 + sr**2) * I) * (
                        scipy.special.erf(
                            (sg**2 * r + sr**2 * (I - g)) /
                            (np.sqrt(2) * sg * sr * np.sqrt(sg**2 + sr**2))) -
                        scipy.special.erf(
                            (sg**2 * (r - I) - sr**2 * g) /
                            (np.sqrt(2) * sg * sr * np.sqrt(sg**2 + sr**2))))
                self.selectedDataSource.setMapping('ColourNorm', '1.0*colNorm')

            self.dataSources.append(self.selectedDataSource)

        elif 'fitResults_sigxl' in self.selectedDataSource.keys():
            self.selectedDataSource = inpFilt.mappingFilter(
                self.selectedDataSource)
            self.dataSources.append(self.selectedDataSource)

            self.selectedDataSource.setMapping(
                'sig', 'fitResults_sigxl + fitResults_sigyu')
            self.selectedDataSource.setMapping(
                'sig_d', 'fitResults_sigxl - fitResults_sigyu')

            self.selectedDataSource.dsigd_dz = -30.
            self.selectedDataSource.setMapping('fitResults_z0',
                                               'dsigd_dz*sig_d')
        else:
            self.selectedDataSource = inpFilt.mappingFilter(
                self.selectedDataSource)
            self.dataSources.append(self.selectedDataSource)

        if 'Events' in self.selectedDataSource.resultsSource.h5f.root:
            self.events = self.selectedDataSource.resultsSource.h5f.root.Events[:]

            evKeyNames = set()
            for e in self.events:
                evKeyNames.add(e['EventName'])

            if 'ProtocolFocus' in evKeyNames:
                self.zm = piecewiseMapping.GeneratePMFromEventList(
                    self.events, self.mdh, self.mdh.getEntry('StartTime'),
                    self.mdh.getEntry('Protocol.PiezoStartPos'))
                self.z_focus = 1.e3 * self.zm(self.selectedDataSource['t'])
                #self.elv.SetCharts([('Focus [um]', self.zm, 'ProtocolFocus'),])

                self.selectedDataSource.z_focus = self.z_focus
                self.selectedDataSource.setMapping('focus', 'z_focus')

            if 'ScannerXPos' in evKeyNames:
                x0 = 0
                if 'Positioning.Stage_X' in self.mdh.getEntryNames():
                    x0 = self.mdh.getEntry('Positioning.Stage_X')
                self.xm = piecewiseMapping.GeneratePMFromEventList(
                    self.elv.eventSource, self.mdh,
                    self.mdh.getEntry('StartTime'), x0, 'ScannerXPos', 0)

                self.selectedDataSource.scan_x = 1.e3 * self.xm(
                    self.selectedDataSource['t'] - .01)
                self.selectedDataSource.setMapping('ScannerX', 'scan_x')
                self.selectedDataSource.setMapping('x', 'x + scan_x')

            if 'ScannerYPos' in evKeyNames:
                y0 = 0
                if 'Positioning.Stage_Y' in self.mdh.getEntryNames():
                    y0 = self.mdh.getEntry('Positioning.Stage_Y')
                self.ym = piecewiseMapping.GeneratePMFromEventList(
                    self.elv.eventSource, self.mdh,
                    self.mdh.getEntry('StartTime'), y0, 'ScannerYPos', 0)

                self.selectedDataSource.scan_y = 1.e3 * self.ym(
                    self.selectedDataSource['t'] - .01)
                self.selectedDataSource.setMapping('ScannerY', 'scan_y')
                self.selectedDataSource.setMapping('y', 'y + scan_y')

            if 'ScannerXPos' in evKeyNames or 'ScannerYPos' in evKeyNames:
                self.imageBounds = ImageBounds.estimateFromSource(
                    self.selectedDataSource)

        if not 'foreShort' in dir(self.selectedDataSource):
            self.selectedDataSource.foreShort = 1.

        if not 'focus' in self.selectedDataSource.mappings.keys():
            self.selectedDataSource.focus = np.zeros(
                self.selectedDataSource['x'].shape)

        if 'fitResults_z0' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping(
                'z', 'fitResults_z0 + foreShort*focus')
        else:
            self.selectedDataSource.setMapping('z', 'foreShort*focus')

        #if we've done a 3d fit
        #print self.selectedDataSource.keys()
        for k in self.filterKeys.keys():
            if not k in self.selectedDataSource.keys():
                self.filterKeys.pop(k)

        #print self.filterKeys
        self.RegenFilter()

        if 'Sample.Labelling' in self.mdh.getEntryNames():
            self.SpecFromMetadata()
Exemplo n.º 9
0
    def OpenFile(self, filename= '', ds = None, **kwargs):
        '''Open a file - accepts optional keyword arguments for use with files
        saved as .txt and .mat. These are:
            
            FieldNames: a list of names for the fields in the text file or
                        matlab variable.
            VarName:    the name of the variable in the .mat file which 
                        contains the data.
            SkipRows:   Number of header rows to skip for txt file data
            
            PixelSize:  Pixel size if not in nm
            
        '''
        
        #close any files we had open previously
        while len(self.filesToClose) > 0:
            self.filesToClose.pop().close()
        
        #clear our state
        self.dataSources = []
        if 'zm' in dir(self):
            del self.zm
        self.filter = None
        self.mapping = None
        self.colourFilter = None
        self.events = None
        self.mdh = MetaDataHandler.NestedClassMDHandler()
        
        self.filename = filename
        
        if not ds is None:
            self.selectedDataSource = ds
            self.dataSources.append(ds)
        elif os.path.splitext(filename)[1] == '.h5r':
            try:
                self.selectedDataSource = inpFilt.h5rSource(filename)
                self.dataSources.append(self.selectedDataSource)

                self.filesToClose.append(self.selectedDataSource.h5f)

                if 'DriftResults' in self.selectedDataSource.h5f.root:
                    self.dataSources.append(inpFilt.h5rDSource(self.selectedDataSource.h5f))

                    if len(self.selectedDataSource['x']) == 0:
                        self.selectedDataSource = self.dataSources[-1]

            except: #fallback to catch series that only have drift data
                self.selectedDataSource = inpFilt.h5rDSource(filename)
                self.dataSources.append(self.selectedDataSource)
                
                self.filesToClose.append(self.selectedDataSource.h5f)

            #catch really old files which don't have any metadata
            if 'MetaData' in self.selectedDataSource.h5f.root:
                self.mdh = MetaDataHandler.HDFMDHandler(self.selectedDataSource.h5f)

           
            if ('Events' in self.selectedDataSource.h5f.root) and ('StartTime' in self.mdh.keys()):
                self.events = self.selectedDataSource.h5f.root.Events[:]

                        
        elif os.path.splitext(filename)[1] == '.mat': #matlab file
            ds = inpFilt.matfileSource(filename, kwargs['FieldNames'], kwargs['VarName'])
            self.selectedDataSource = ds
            self.dataSources.append(ds)

        elif os.path.splitext(filename)[1] == '.csv': 
            #special case for csv files - tell np.loadtxt to use a comma rather than whitespace as a delimeter
            if 'SkipRows' in kwargs.keys():
                ds = inpFilt.textfileSource(filename, kwargs['FieldNames'], delimiter=',', skiprows=kwargs['SkipRows'])
            else:
                ds = inpFilt.textfileSource(filename, kwargs['FieldNames'], delimiter=',')
            self.selectedDataSource = ds
            self.dataSources.append(ds)
            
        else: #assume it's a tab (or other whitespace) delimited text file
            if 'SkipRows' in kwargs.keys():
                ds = inpFilt.textfileSource(filename, kwargs['FieldNames'], skiprows=kwargs['SkipRows'])
            else:
                ds = inpFilt.textfileSource(filename, kwargs['FieldNames'])
            self.selectedDataSource = ds
            self.dataSources.append(ds)
            
        
            

        
            
            
        #wrap the data source with a mapping so we can fiddle with things
        #e.g. combining z position and focus 
        self.inputMapping = inpFilt.mappingFilter(self.selectedDataSource)
        self.selectedDataSource = self.inputMapping
        self.dataSources.append(self.inputMapping)
        
        if 'PixelSize' in kwargs.keys():
            self.selectedDataSource.pixelSize = kwargs['PixelSize']
            self.selectedDataSource.setMapping('x', 'x*pixelSize')
            self.selectedDataSource.setMapping('y', 'y*pixelSize')
            
        #Retrieve or estimate image bounds
        if 'Camera.ROIWidth' in self.mdh.getEntryNames():
            x0 = 0
            y0 = 0

            x1 = self.mdh.getEntry('Camera.ROIWidth')*1e3*self.mdh.getEntry('voxelsize.x')
            y1 = self.mdh.getEntry('Camera.ROIHeight')*1e3*self.mdh.getEntry('voxelsize.y')

            if 'Splitter' in self.mdh.getEntry('Analysis.FitModule'):
                if 'Splitter.Channel0ROI' in self.mdh.getEntryNames():
                    rx0, ry0, rw, rh = self.mdh['Splitter.Channel0ROI']
                    x1 = rw*1e3*self.mdh.getEntry('voxelsize.x')
                    x1 = rh*1e3*self.mdh.getEntry('voxelsize.x')
                else:
                    y1 = y1/2

            self.imageBounds = ImageBounds(x0, y0, x1, y1)
        else:
            self.imageBounds = ImageBounds.estimateFromSource(self.selectedDataSource)        
            
        #extract information from any events
        self._processEvents()
            
        
        #handle special cases which get detected by looking for the presence or
        #absence of certain variables in the data.        
        if 'fitResults_Ag' in self.selectedDataSource.keys():
            #if we used the splitter set up a number of mappings e.g. total amplitude and ratio
            self._processSplitter()

        if 'fitResults_ratio' in self.selectedDataSource.keys():
            #if we used the splitter set up a number of mappings e.g. total amplitude and ratio
            self._processPriSplit()

        if 'fitResults_sigxl' in self.selectedDataSource.keys():
            #fast, quickpalm like astigmatic fitting 
            self.selectedDataSource.setMapping('sig', 'fitResults_sigxl + fitResults_sigyu')
            self.selectedDataSource.setMapping('sig_d', 'fitResults_sigxl - fitResults_sigyu')

            self.selectedDataSource.dsigd_dz = -30.
            self.selectedDataSource.setMapping('fitResults_z0', 'dsigd_dz*sig_d')
            
        if not 'y' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('y', '10*t')
            
            
            
        #set up correction for foreshortening and z focus stepping
        if not 'foreShort' in dir(self.selectedDataSource):
            self.selectedDataSource.foreShort = 1.

        if not 'focus' in self.selectedDataSource.mappings.keys():
            self.selectedDataSource.focus= np.zeros(self.selectedDataSource['x'].shape)
            
        if 'fitResults_z0' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('z', 'fitResults_z0 + foreShort*focus')
        elif not 'z' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('z', 'foreShort*focus')

        

        #Fit module specific filter settings        
        if 'Analysis.FitModule' in self.mdh.getEntryNames():
            fitModule = self.mdh['Analysis.FitModule']
            
            print 'fitModule = %s' % fitModule
            
            if 'Interp' in fitModule:
                self.filterKeys['A'] = (5, 100000)
                
            
            if 'LatGaussFitFR' in fitModule:
                self.selectedDataSource.nPhot = getPhotonNums(self.selectedDataSource, self.mdh)
                self.selectedDataSource.setMapping('nPhotons', 'nPhot')
                
                
            if fitModule == 'SplitterShiftEstFR':
                self.filterKeys['fitError_dx'] = (0,10)
                self.filterKeys['fitError_dy'] = (0,10)
                
        
        #remove any keys from the filter which are not present in the data
        for k in self.filterKeys.keys():
            if not k in self.selectedDataSource.keys():
                self.filterKeys.pop(k)

        
        self.Rebuild()


        if 'Sample.Labelling' in self.mdh.getEntryNames() and 'gFrac' in self.selectedDataSource.keys():
            self.SpecFromMetadata()
Exemplo n.º 10
0
    def OpenFile(self, filename='', ds=None, **kwargs):
        '''Open a file - accepts optional keyword arguments for use with files
        saved as .txt and .mat. These are:
            
            FieldNames: a list of names for the fields in the text file or
                        matlab variable.
            VarName:    the name of the variable in the .mat file which 
                        contains the data.
            SkipRows:   Number of header rows to skip for txt file data
            
            PixelSize:  Pixel size if not in nm
            
        '''

        #close any files we had open previously
        while len(self.filesToClose) > 0:
            self.filesToClose.pop().close()

        #clear our state
        self.dataSources = []
        if 'zm' in dir(self):
            del self.zm
        self.filter = None
        self.mapping = None
        self.colourFilter = None
        self.events = None
        self.mdh = MetaDataHandler.NestedClassMDHandler()

        self.filename = filename

        if not ds is None:
            self.selectedDataSource = ds
            self.dataSources.append(ds)
        elif os.path.splitext(filename)[1] == '.h5r':
            try:
                self.selectedDataSource = inpFilt.h5rSource(filename)
                self.dataSources.append(self.selectedDataSource)

                self.filesToClose.append(self.selectedDataSource.h5f)

                if 'DriftResults' in self.selectedDataSource.h5f.root:
                    self.dataSources.append(
                        inpFilt.h5rDSource(self.selectedDataSource.h5f))

                    if len(self.selectedDataSource['x']) == 0:
                        self.selectedDataSource = self.dataSources[-1]

            except:  #fallback to catch series that only have drift data
                self.selectedDataSource = inpFilt.h5rDSource(filename)
                self.dataSources.append(self.selectedDataSource)

                self.filesToClose.append(self.selectedDataSource.h5f)

            #catch really old files which don't have any metadata
            if 'MetaData' in self.selectedDataSource.h5f.root:
                self.mdh = MetaDataHandler.HDFMDHandler(
                    self.selectedDataSource.h5f)

            if ('Events' in self.selectedDataSource.h5f.root) and (
                    'StartTime' in self.mdh.keys()):
                self.events = self.selectedDataSource.h5f.root.Events[:]

        elif os.path.splitext(filename)[1] == '.mat':  #matlab file
            ds = inpFilt.matfileSource(filename, kwargs['FieldNames'],
                                       kwargs['VarName'])
            self.selectedDataSource = ds
            self.dataSources.append(ds)

        elif os.path.splitext(filename)[1] == '.csv':
            #special case for csv files - tell np.loadtxt to use a comma rather than whitespace as a delimeter
            if 'SkipRows' in kwargs.keys():
                ds = inpFilt.textfileSource(filename,
                                            kwargs['FieldNames'],
                                            delimiter=',',
                                            skiprows=kwargs['SkipRows'])
            else:
                ds = inpFilt.textfileSource(filename,
                                            kwargs['FieldNames'],
                                            delimiter=',')
            self.selectedDataSource = ds
            self.dataSources.append(ds)

        else:  #assume it's a tab (or other whitespace) delimited text file
            if 'SkipRows' in kwargs.keys():
                ds = inpFilt.textfileSource(filename,
                                            kwargs['FieldNames'],
                                            skiprows=kwargs['SkipRows'])
            else:
                ds = inpFilt.textfileSource(filename, kwargs['FieldNames'])
            self.selectedDataSource = ds
            self.dataSources.append(ds)

        #wrap the data source with a mapping so we can fiddle with things
        #e.g. combining z position and focus
        self.inputMapping = inpFilt.mappingFilter(self.selectedDataSource)
        self.selectedDataSource = self.inputMapping
        self.dataSources.append(self.inputMapping)

        if 'PixelSize' in kwargs.keys():
            self.selectedDataSource.pixelSize = kwargs['PixelSize']
            self.selectedDataSource.setMapping('x', 'x*pixelSize')
            self.selectedDataSource.setMapping('y', 'y*pixelSize')

        #Retrieve or estimate image bounds
        if 'Camera.ROIWidth' in self.mdh.getEntryNames():
            x0 = 0
            y0 = 0

            x1 = self.mdh.getEntry(
                'Camera.ROIWidth') * 1e3 * self.mdh.getEntry('voxelsize.x')
            y1 = self.mdh.getEntry(
                'Camera.ROIHeight') * 1e3 * self.mdh.getEntry('voxelsize.y')

            if 'Splitter' in self.mdh.getEntry('Analysis.FitModule'):
                if 'Splitter.Channel0ROI' in self.mdh.getEntryNames():
                    rx0, ry0, rw, rh = self.mdh['Splitter.Channel0ROI']
                    x1 = rw * 1e3 * self.mdh.getEntry('voxelsize.x')
                    x1 = rh * 1e3 * self.mdh.getEntry('voxelsize.x')
                else:
                    y1 = y1 / 2

            self.imageBounds = ImageBounds(x0, y0, x1, y1)
        else:
            self.imageBounds = ImageBounds.estimateFromSource(
                self.selectedDataSource)

        #extract information from any events
        self._processEvents()

        #handle special cases which get detected by looking for the presence or
        #absence of certain variables in the data.
        if 'fitResults_Ag' in self.selectedDataSource.keys():
            #if we used the splitter set up a number of mappings e.g. total amplitude and ratio
            self._processSplitter()

        if 'fitResults_ratio' in self.selectedDataSource.keys():
            #if we used the splitter set up a number of mappings e.g. total amplitude and ratio
            self._processPriSplit()

        if 'fitResults_sigxl' in self.selectedDataSource.keys():
            #fast, quickpalm like astigmatic fitting
            self.selectedDataSource.setMapping(
                'sig', 'fitResults_sigxl + fitResults_sigyu')
            self.selectedDataSource.setMapping(
                'sig_d', 'fitResults_sigxl - fitResults_sigyu')

            self.selectedDataSource.dsigd_dz = -30.
            self.selectedDataSource.setMapping('fitResults_z0',
                                               'dsigd_dz*sig_d')

        if not 'y' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('y', '10*t')

        #set up correction for foreshortening and z focus stepping
        if not 'foreShort' in dir(self.selectedDataSource):
            self.selectedDataSource.foreShort = 1.

        if not 'focus' in self.selectedDataSource.mappings.keys():
            self.selectedDataSource.focus = np.zeros(
                self.selectedDataSource['x'].shape)

        if 'fitResults_z0' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping(
                'z', 'fitResults_z0 + foreShort*focus')
        elif not 'z' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('z', 'foreShort*focus')

        #Fit module specific filter settings
        if 'Analysis.FitModule' in self.mdh.getEntryNames():
            fitModule = self.mdh['Analysis.FitModule']

            print 'fitModule = %s' % fitModule

            if 'Interp' in fitModule:
                self.filterKeys['A'] = (5, 100000)

            if 'LatGaussFitFR' in fitModule:
                self.selectedDataSource.nPhot = getPhotonNums(
                    self.selectedDataSource, self.mdh)
                self.selectedDataSource.setMapping('nPhotons', 'nPhot')

            if fitModule == 'SplitterShiftEstFR':
                self.filterKeys['fitError_dx'] = (0, 10)
                self.filterKeys['fitError_dy'] = (0, 10)

        #remove any keys from the filter which are not present in the data
        for k in self.filterKeys.keys():
            if not k in self.selectedDataSource.keys():
                self.filterKeys.pop(k)

        self.Rebuild()

        if 'Sample.Labelling' in self.mdh.getEntryNames(
        ) and 'gFrac' in self.selectedDataSource.keys():
            self.SpecFromMetadata()
Exemplo n.º 11
0
    def OpenFile(self, filename):
        self.dataSources = []
        if 'zm' in dir(self):
            del self.zm
        self.filter = None
        self.mapping = None
        self.colourFilter = None
        self.filename = filename

        self.selectedDataSource = inpFilt.h5rSource(filename)
        self.dataSources.append(self.selectedDataSource)



        self.mdh = MetaDataHandler.HDFMDHandler(self.selectedDataSource.h5f)

        if 'Camera.ROIWidth' in self.mdh.getEntryNames():
            x0 = 0
            y0 = 0

            x1 = self.mdh.getEntry('Camera.ROIWidth')*1e3*self.mdh.getEntry('voxelsize.x')
            y1 = self.mdh.getEntry('Camera.ROIHeight')*1e3*self.mdh.getEntry('voxelsize.y')

            if 'Splitter' in self.mdh.getEntry('Analysis.FitModule'):
                y1 = y1/2

            self.imageBounds = ImageBounds(x0, y0, x1, y1)
        else:
            self.imageBounds = ImageBounds.estimateFromSource(self.selectedDataSource)

        if 'fitResults_Ag' in self.selectedDataSource.keys():
            #if we used the splitter set up a mapping so we can filter on total amplitude and ratio
            #if not 'fitError_Ag' in self.selectedDataSource.keys():

            if 'fitError_Ag' in self.selectedDataSource.keys():
                self.selectedDataSource = inpFilt.mappingFilter(self.selectedDataSource, A='fitResults_Ag + fitResults_Ar', gFrac='fitResults_Ag/(fitResults_Ag + fitResults_Ar)', error_gFrac = 'sqrt((fitError_Ag/fitResults_Ag)**2 + (fitError_Ag**2 + fitError_Ar**2)/(fitResults_Ag + fitResults_Ar)**2)*fitResults_Ag/(fitResults_Ag + fitResults_Ar)')
                sg = self.selectedDataSource['fitError_Ag']
                sr = self.selectedDataSource['fitError_Ar']
                g = self.selectedDataSource['fitResults_Ag']
                r = self.selectedDataSource['fitResults_Ar']
                I = self.selectedDataSource['A']
                self.selectedDataSource.colNorm = np.sqrt(2*np.pi)*sg*sr/(2*np.sqrt(sg**2 + sr**2)*I)*(
                    scipy.special.erf((sg**2*r + sr**2*(I-g))/(np.sqrt(2)*sg*sr*np.sqrt(sg**2+sr**2)))
                    - scipy.special.erf((sg**2*(r-I) - sr**2*g)/(np.sqrt(2)*sg*sr*np.sqrt(sg**2+sr**2))))
                self.selectedDataSource.setMapping('ColourNorm', '1.0*colNorm')
            else:
                self.selectedDataSource = inpFilt.mappingFilter(self.selectedDataSource, A='fitResults_Ag + fitResults_Ar', gFrac='fitResults_Ag/(fitResults_Ag + fitResults_Ar)', error_gFrac = '0*x + 0.01')
                self.selectedDataSource.setMapping('fitError_Ag', '1*sqrt(fitResults_Ag/1)')
                self.selectedDataSource.setMapping('fitError_Ar', '1*sqrt(fitResults_Ar/1)')
                sg = self.selectedDataSource['fitError_Ag']
                sr = self.selectedDataSource['fitError_Ar']
                g = self.selectedDataSource['fitResults_Ag']
                r = self.selectedDataSource['fitResults_Ar']
                I = self.selectedDataSource['A']
                self.selectedDataSource.colNorm = np.sqrt(2*np.pi)*sg*sr/(2*np.sqrt(sg**2 + sr**2)*I)*(
                    scipy.special.erf((sg**2*r + sr**2*(I-g))/(np.sqrt(2)*sg*sr*np.sqrt(sg**2+sr**2)))
                    - scipy.special.erf((sg**2*(r-I) - sr**2*g)/(np.sqrt(2)*sg*sr*np.sqrt(sg**2+sr**2))))
                self.selectedDataSource.setMapping('ColourNorm', '1.0*colNorm')

            self.dataSources.append(self.selectedDataSource)


        elif 'fitResults_sigxl' in self.selectedDataSource.keys():
            self.selectedDataSource = inpFilt.mappingFilter(self.selectedDataSource)
            self.dataSources.append(self.selectedDataSource)

            self.selectedDataSource.setMapping('sig', 'fitResults_sigxl + fitResults_sigyu')
            self.selectedDataSource.setMapping('sig_d', 'fitResults_sigxl - fitResults_sigyu')

            self.selectedDataSource.dsigd_dz = -30.
            self.selectedDataSource.setMapping('fitResults_z0', 'dsigd_dz*sig_d')
        else:
            self.selectedDataSource = inpFilt.mappingFilter(self.selectedDataSource)
            self.dataSources.append(self.selectedDataSource)



        if 'Events' in self.selectedDataSource.resultsSource.h5f.root:
            self.events = self.selectedDataSource.resultsSource.h5f.root.Events[:]

            evKeyNames = set()
            for e in self.events:
                evKeyNames.add(e['EventName'])


            if 'ProtocolFocus' in evKeyNames:
                self.zm = piecewiseMapping.GeneratePMFromEventList(self.events, self.mdh, self.mdh.getEntry('StartTime'), self.mdh.getEntry('Protocol.PiezoStartPos'))
                self.z_focus = 1.e3*self.zm(self.selectedDataSource['t'])
                #self.elv.SetCharts([('Focus [um]', self.zm, 'ProtocolFocus'),])


                self.selectedDataSource.z_focus = self.z_focus
                self.selectedDataSource.setMapping('focus', 'z_focus')

            if 'ScannerXPos' in evKeyNames:
                x0 = 0
                if 'Positioning.Stage_X' in self.mdh.getEntryNames():
                    x0 = self.mdh.getEntry('Positioning.Stage_X')
                self.xm = piecewiseMapping.GeneratePMFromEventList(self.elv.eventSource, self.mdh, self.mdh.getEntry('StartTime'), x0, 'ScannerXPos', 0)


                self.selectedDataSource.scan_x = 1.e3*self.xm(self.selectedDataSource['t']-.01)
                self.selectedDataSource.setMapping('ScannerX', 'scan_x')
                self.selectedDataSource.setMapping('x', 'x + scan_x')

            if 'ScannerYPos' in evKeyNames:
                y0 = 0
                if 'Positioning.Stage_Y' in self.mdh.getEntryNames():
                    y0 = self.mdh.getEntry('Positioning.Stage_Y')
                self.ym = piecewiseMapping.GeneratePMFromEventList(self.elv.eventSource, self.mdh, self.mdh.getEntry('StartTime'), y0, 'ScannerYPos', 0)


                self.selectedDataSource.scan_y = 1.e3*self.ym(self.selectedDataSource['t']-.01)
                self.selectedDataSource.setMapping('ScannerY', 'scan_y')
                self.selectedDataSource.setMapping('y', 'y + scan_y')

            if 'ScannerXPos' in evKeyNames or 'ScannerYPos' in evKeyNames:
                self.imageBounds = ImageBounds.estimateFromSource(self.selectedDataSource)



        if not 'foreShort' in dir(self.selectedDataSource):
            self.selectedDataSource.foreShort = 1.

        if not 'focus' in self.selectedDataSource.mappings.keys():
            self.selectedDataSource.focus= np.zeros(self.selectedDataSource['x'].shape)

        if 'fitResults_z0' in self.selectedDataSource.keys():
            self.selectedDataSource.setMapping('z', 'fitResults_z0 + foreShort*focus')
        else:
            self.selectedDataSource.setMapping('z', 'foreShort*focus')

        #if we've done a 3d fit
        #print self.selectedDataSource.keys()
        for k in self.filterKeys.keys():
            if not k in self.selectedDataSource.keys():
                self.filterKeys.pop(k)

        #print self.filterKeys
        self.RegenFilter()


        if 'Sample.Labelling' in self.mdh.getEntryNames():
            self.SpecFromMetadata()