def RegenFilter(self): if not self.selectedDataSource == None: self.filter = inpFilt.resultsFilter(self.selectedDataSource, **self.filterKeys) if self.mapping: self.mapping.resultsSource = self.filter else: self.mapping = inpFilt.mappingFilter(self.filter) if not self.colourFilter: self.colourFilter = inpFilt.colourFilter(self.mapping, self) self.edb = None self.objects = None self.GeneratedMeasures = {}
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()
def generateThumbnail(inputFile, thumbSize): f1 = inpFilt.h5rSource(inputFile) threeD = False stack = False split = False # print f1.keys() if "fitResults_Ag" in f1.keys(): # if we used the splitter set up a mapping so we can filter on total amplitude and ratio f1_ = inpFilt.mappingFilter( f1, A="fitResults_Ag + fitResults_Ar", gFrac="fitResults_Ag/(fitResults_Ag + fitResults_Ar)" ) # f2 = inpFilt.resultsFilter(f1_, error_x=[0,30], A=[5, 1e5], sig=[100/2.35, 350/2.35]) split = True else: f1_ = f1 if "fitResults_sigma" in f1.keys(): f2 = inpFilt.resultsFilter(f1_, error_x=[0, 30], A=[5, 1e5], sig=[100 / 2.35, 350 / 2.35]) else: f2 = inpFilt.resultsFilter(f1_, error_x=[0, 30], A=[5, 1e5]) if "fitResults_z0" in f1_.keys(): threeD = True if "Events" in dir(f1.h5f.root): events = f1.h5f.root.Events[:] evKeyNames = set() for e in events: evKeyNames.add(e["EventName"]) if "ProtocolFocus" in evKeyNames: stack = True xmax = f2["x"].max() ymax = f2["y"].max() if xmax > ymax: step = xmax / thumbSize else: step = ymax / thumbSize im, edx, edy = histogram2d(f2["x"], f2["y"], [arange(0, xmax, step), arange(0, ymax, step)]) f1.close() im = minimum(2 * (255 * im) / im.max(), 255).T im = concatenate((im[:, :, newaxis], im[:, :, newaxis], im[:, :, newaxis]), 2) if stack: im[-10:, -10:, 0] = 180 if threeD: im[-10:, -10:, 1] = 180 if split: im[-10:-5, :10, 1] = 210 im[-5:, :10, 0] = 210 return im.astype("uint8")
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()
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()
def generateThumbnail(inputFile, thumbSize): f1 = inpFilt.h5rSource(inputFile) threeD = False stack = False split = False #print f1.keys() if 'fitResults_Ag' in f1.keys(): #if we used the splitter set up a mapping so we can filter on total amplitude and ratio f1_ = inpFilt.mappingFilter( f1, A='fitResults_Ag + fitResults_Ar', gFrac='fitResults_Ag/(fitResults_Ag + fitResults_Ar)') #f2 = inpFilt.resultsFilter(f1_, error_x=[0,30], A=[5, 1e5], sig=[100/2.35, 350/2.35]) split = True else: f1_ = f1 if 'fitResults_sigma' in f1.keys(): f2 = inpFilt.resultsFilter(f1_, error_x=[0, 30], A=[5, 1e5], sig=[100 / 2.35, 350 / 2.35]) else: f2 = inpFilt.resultsFilter(f1_, error_x=[0, 30], A=[5, 1e5]) if 'fitResults_z0' in f1_.keys(): threeD = True if 'Events' in dir(f1.h5f.root): events = f1.h5f.root.Events[:] evKeyNames = set() for e in events: evKeyNames.add(e['EventName']) if 'ProtocolFocus' in evKeyNames: stack = True xmax = f2['x'].max() ymax = f2['y'].max() if xmax > ymax: step = xmax / thumbSize else: step = ymax / thumbSize im, edx, edy = histogram2d( f2['x'], f2['y'], [arange(0, xmax, step), arange(0, ymax, step)]) f1.close() im = minimum(2 * (255 * im) / im.max(), 255).T im = concatenate((im[:, :, newaxis], im[:, :, newaxis], im[:, :, newaxis]), 2) if stack: im[-10:, -10:, 0] = 180 if threeD: im[-10:, -10:, 1] = 180 if split: im[-10:-5, :10, 1] = 210 im[-5:, :10, 0] = 210 return im.astype('uint8')
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()
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()