Beispiel #1
0
    def recordFrame(self, frame, iter, depthIndex):
        # Handle new frame
        dh = self.prot['storageDir']
        name = 'image_%03d' % iter

        if self.prot['zStack']:
            # start or append focus stack
            arrayInfo = [
                {'name': 'Depth', 'values': [self.prot['zStackValues'][depthIndex]]},
                {'name': 'X'},
                {'name': 'Y'}
            ]
            data = MetaArray(frame.getImage()[np.newaxis, ...], info=arrayInfo)
            if depthIndex == 0:
                self.currentDepthStack = dh.writeFile(data, name, info=frame.info(), appendAxis='Depth')
            else:
                data.write(self.currentDepthStack.name(), appendAxis='Depth')

        else:
            # record single-frame image
            arrayInfo = [
                {'name': 'X'},
                {'name': 'Y'}
            ]
            data = MetaArray(frame.getImage(), info=arrayInfo)
            dh.writeFile(data, name, info=frame.info())
Beispiel #2
0
 def saveMA(self, fileName=None):
     if self.imgData is None:
         raise HelpfulException("There is no processed data to save.")
     if fileName is None:
         dh = self.getElement("File Loader").baseDir().name()
         self.fileDialog = FileDialog(None, "Save image data", dh, '*.ma')
         self.fileDialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)
         self.fileDialog.show()
         self.fileDialog.fileSelected.connect(self.saveMA)
         return  
     
     table = self.dbquery.table()
     x = table['xPos'].min()
     y = table['yPos'].min()        
     
     #print "params:", self.imgData.dtype.names
     #print "shape:", self.imgData.shape
     #arr = MetaArray(self.currentData) ### need to format this with axes and info
     arr = MetaArray([self.imgData[p] for p in self.imgData.dtype.names], info=[
         {'name':'vals', 'cols':[{'name':p} for p in self.imgData.dtype.names]},
         {'name':'xPos', 'units':'m', 'values':np.arange(self.imgData.shape[0])*self.spacing+x},
         {'name':'yPos', 'units':'m', 'values':np.arange(self.imgData.shape[1])*self.spacing+y},
         
         {'spacing':self.spacing}
     ]) 
     
     arr.write(fileName)    
Beispiel #3
0
    def writeFrames(self, frames, dh):
        newRec = self.currentStack is None

        if newRec:
            self.startFrameTime = frames[0][1]['time']

        times = [f[1]['time'] for f in frames]
        translations = np.array(
            [f[1]['transform'].getTranslation() for f in frames])
        arrayInfo = [{
            'name': 'Time',
            'values': array(times) - self.startFrameTime,
            'units': 's',
            'translation': translations
        }, {
            'name': 'X'
        }, {
            'name': 'Y'
        }]
        imgs = [f[0][np.newaxis, ...] for f in frames]

        data = MetaArray(np.concatenate(imgs, axis=0), info=arrayInfo)
        if newRec:
            self.currentStack = dh.writeFile(data,
                                             'video',
                                             autoIncrement=True,
                                             info=frames[0][1],
                                             appendAxis='Time',
                                             appendKeys=['translation'])
        else:
            data.write(self.currentStack.name(),
                       appendAxis='Time',
                       appendKeys=['translation'])
Beispiel #4
0
    def saveMA(self, fileName=None):
        if fileName is None:
            dh = self.getElement("File Loader").baseDir().name()
            self.fileDialog = FileDialog(None, "Save traces", dh, '*.ma')
            self.fileDialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)
            self.fileDialog.show()
            self.fileDialog.fileSelected.connect(self.saveMA)
            return

        #arr = MetaArray(self.currentData) ### need to format this with axes and info
        arr = MetaArray([
            self.currentData['Rs'], self.currentData['Rm'],
            self.currentData['Ih']
        ],
                        info=[{
                            'name':
                            'vals',
                            'cols': [{
                                'name': 'Rs',
                                'units': 'Ohms'
                            }, {
                                'name': 'Rm',
                                'units': 'Ohms'
                            }, {
                                'name': 'Ih',
                                'units': 'A'
                            }]
                        }, {
                            'name': 'time',
                            'units': 's',
                            'values': self.currentData['time']
                        }])

        arr.write(fileName)
Beispiel #5
0
 def write(cls, data, dirHandle, fileName, **args):
     """Write data to fileName.
     Return the file name written (this allows the function to modify the requested file name)
     """
     ext = cls.extensions[0]
     if fileName[-len(ext):] != ext:
         fileName = fileName + ext
         
     if not isinstance(data, MA):
         data = MA(data)
     data.write(os.path.join(dirHandle.name(), fileName), **args)
     return fileName
Beispiel #6
0
    def write(cls, data, dirHandle, fileName, **args):
        """Write data to fileName.
        Return the file name written (this allows the function to modify the requested file name)
        """
        ext = cls.extensions[0]
        if fileName[-len(ext):] != ext:
            fileName = fileName + ext

        if not isinstance(data, MA):
            data = MA(data)
        data.write(os.path.join(dirHandle.name(), fileName), **args)
        return fileName
Beispiel #7
0
 def saveMA(self, fileName=None):
     if fileName is None:
         dh = self.getElement("File Loader").baseDir().name()
         self.fileDialog = FileDialog(None, "Save traces", dh, '*.ma')
         self.fileDialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)
         self.fileDialog.show()
         self.fileDialog.fileSelected.connect(self.saveMA)
         return  
     
     #arr = MetaArray(self.currentData) ### need to format this with axes and info
     arr = MetaArray([self.currentData['Rs'], self.currentData['Rm'], self.currentData['Ih']], info=[
         {'name':'vals', 'cols':[
             {'name':'Rs', 'units':'Ohms'},
             {'name':'Rm', 'units':'Ohms'},
             {'name':'Ih', 'units':'A'}]},
         {'name':'time', 'units':'s', 'values':self.currentData['time']}]) 
     
     arr.write(fileName)
Beispiel #8
0
 def writeFrames(self, frames, newRec):
     times = [f[1]['time'] for f in frames]
     arrayInfo = [
         {'name': 'Time', 'values': array(times) - self.startFrameTime, 'units': 's'},
         {'name': 'X'},
         {'name': 'Y'}
     ]
     #import random
     #if random.random() < 0.01:
         #raise Exception("TEST")
     imgs = [f[0][np.newaxis,...] for f in frames]
     
     data = MetaArray(np.concatenate(imgs, axis=0), info=arrayInfo)
     if newRec:
         self.currentRecord = self.m.getCurrentDir().writeFile(data, 'video', autoIncrement=True, info=frames[0][1], appendAxis='Time')
         self.currentFrameNum = 0
     else:
         data.write(self.currentRecord.name(), appendAxis='Time')
         s = 1.0/self.currentFrameNum
         
     #self.showMessage("Recording %s - %d" % (self.currentRecord.name(), self.currentFrameNum))
     
     self.currentFrameNum += len(frames)