コード例 #1
0
 def move_itemsAcross(self, source, modifiers):
     """ Create new tree items and populate the target tree. Originally made 
     for moving items from fileDataTree to workingDataTree, but then modified
     to copy items when the move is internal in workingDataTree and Ctrl is 
     pressed.
     """
     if (source==self.ui.workingDataTree) and (modifiers==QtCore.Qt.ControlModifier):
       # Copy internally
       #print 'copying'
       targetItems = []
       for item in self.copyItems:
         i = h5Item([str(item.text(0))])
         i.data = item.data
         targetItems.append(i)             
       parentIndex = self.ui.workingDataTree.indexFromItem(self.dragTargetParent)
       for row in np.arange(0, len(self.copyItems)):
         index = self.ui.workingDataTree.model().index(self.dragTargetRow+row, 0, parentIndex)        
         temp_item = self.ui.workingDataTree.itemFromIndex(QtCore.QModelIndex(index))
         sip.delete(temp_item)        
         if parentIndex.isValid():
             self.make_nameUnique(self.dragTargetParent, targetItems[row], targetItems[row].text(0))
             self.dragTargetParent.insertChild(index.row(), targetItems[row])
             originalParentWidget = self.copyItems[row]
             h5.populate_h5copyItems(self, originalParentWidget, targetItems[row])
         else:
             self.make_nameUnique(self.ui.workingDataTree.invisibleRootItem(), targetItems[row], targetItems[row].text(0))
             self.ui.workingDataTree.insertTopLevelItem(index.row(), targetItems[row])     
             originalParentWidget = self.copyItems[row]
             h5.populate_h5copyItems(self, originalParentWidget, targetItems[row])       
     elif source==self.ui.workingDataTree:
       pass
     else:
       # Move across
       #print 'moving'
       targetItems = []
       for item in self.dragItems:
         i = h5Item([str(item[1])])
         i.path = item[0]
         i.listIndex = item[2]
         i.originalIndex = item[3]
         i.data = item[4]
         i.attrs = item[5]
         #item = i[0]
         #item.originalIndex = i[1]
         targetItems.append(i)             
       parentIndex = self.ui.workingDataTree.indexFromItem(self.dragTargetParent)
       for row in np.arange(0, len(self.dragItems)):
         index = self.ui.workingDataTree.model().index(self.dragTargetRow+row, 0, parentIndex)        
         temp_item = self.ui.workingDataTree.itemFromIndex(QtCore.QModelIndex(index))
         sip.delete(temp_item)        
         if parentIndex.isValid():
             self.make_nameUnique(self.dragTargetParent, targetItems[row], targetItems[row].text(0))
             self.dragTargetParent.insertChild(index.row(), targetItems[row])
             originalParentWidget = self.ui.fileDataTree.itemFromIndex(QtCore.QModelIndex(targetItems[row].originalIndex))
             h5.populate_h5dragItems(self, originalParentWidget, targetItems[row])
         else:
             self.make_nameUnique(self.ui.workingDataTree.invisibleRootItem(), targetItems[row], targetItems[row].text(0))
             self.ui.workingDataTree.insertTopLevelItem(index.row(), targetItems[row])     
             originalParentWidget = self.ui.fileDataTree.itemFromIndex(QtCore.QModelIndex(targetItems[row].originalIndex))
             h5.populate_h5dragItems(self, originalParentWidget, targetItems[row])
コード例 #2
0
def add_treeGroup(browser, tree, level, name):
    if level=='root':
        item = h5Item([name])
        parentWidget = browser.ui.workingDataTree.invisibleRootItem()
        browser.make_nameUnique(parentWidget, item, name)
        tree.addTopLevelItem(item)        
    elif level=='child':
        item = h5Item([name])
        parentWidget = tree.currentItem()
        browser.make_nameUnique(parentWidget, item, name) 
        parentWidget.addChild(item)
コード例 #3
0
ファイル: treefuncs.py プロジェクト: de278/NeuroDAQ-Analysis
def add_treeGroup(browser, tree, level, name):
    if level=='root':
        item = h5Item([name])
        parentWidget = browser.ui.workingDataTree.invisibleRootItem()
        browser.make_nameUnique(parentWidget, item, name)
        tree.addTopLevelItem(item)        
    elif level=='child':
        item = h5Item([name])
        parentWidget = tree.currentItem()
        browser.make_nameUnique(parentWidget, item, name) 
        parentWidget.addChild(item)
コード例 #4
0
ファイル: mainWindow.py プロジェクト: de278/NeuroDAQ-Analysis
 def move_itemsAcross(self):
     """ Create new tree items and populate the target tree
     """
     targetItems = []
     for item in self.dragItems:
         i = h5Item([str(item[1])])
         i.path = item[0]
         i.listIndex = item[2]
         i.originalIndex = item[3]
         targetItems.append(i)             
     parentIndex = self.ui.workingDataTree.indexFromItem(self.dragTargetParent)
     for row in np.arange(0, len(self.dragItems)):
         index = self.ui.workingDataTree.model().index(self.dragTargetRow+row, 0, parentIndex)        
         temp_item = self.ui.workingDataTree.itemFromIndex(QtCore.QModelIndex(index))
         sip.delete(temp_item)        
         if parentIndex.isValid():
             self.make_nameUnique(self.dragTargetParent, targetItems[row], targetItems[row].text(0))
             self.dragTargetParent.insertChild(index.row(), targetItems[row])
             originalParentWidget = self.ui.fileDataTree.itemFromIndex(QtCore.QModelIndex(targetItems[row].originalIndex))
             h5.populate_h5dragItems(self, originalParentWidget, targetItems[row])
         else:
             self.make_nameUnique(self.ui.workingDataTree.invisibleRootItem(), targetItems[row], targetItems[row].text(0))
             self.ui.workingDataTree.insertTopLevelItem(index.row(), targetItems[row])     
             originalParentWidget = self.ui.fileDataTree.itemFromIndex(QtCore.QModelIndex(targetItems[row].originalIndex))
             h5.populate_h5dragItems(self, originalParentWidget, targetItems[row])
コード例 #5
0
ファイル: auxfuncs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def make_h5item(name, data, attrs):
    """ Makes a new h5item for general use 
    """
    item = h5Item([name])
    item.data = data
    item.attrs = attrs
    return item
コード例 #6
0
ファイル: auxfuncs.py プロジェクト: de278/NeuroDAQ-Analysis
def make_h5item(name, data, attrs):
    """ Makes a new h5item for general use 
    """
    item = h5Item([name])
    item.data = data
    item.attrs = attrs
    return item
コード例 #7
0
ファイル: h5funcs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def populate_h5dragItems(browser, originalParentWidget, parentWidget):
    if originalParentWidget.childCount() > 0:
        for c in range(originalParentWidget.childCount()):
            child = originalParentWidget.child(c)
            #itemName = make_nameUnique(parentWidget, child.text(0))
            i = h5Item([str(child.text(0))])
            i.path = child.path
            i.group = child.group
            i.channel = child.channel
            parentWidget.addChild(i)
            if child.childCount() > 0:
                populate_h5dragItems(browser, child, i)
            else:
                set_attrs(child, i)
                i.listIndex = len(browser.ui.workingDataTree.dataItems)
                i.data = get_dataFromFile(browser, i)
                browser.ui.workingDataTree.dataItems.append(i)
    # For transferring datasets directly
    else:
        set_attrs(originalParentWidget, parentWidget)
        parentWidget.path = originalParentWidget.path
        parentWidget.listIndex = len(browser.ui.workingDataTree.dataItems)
        #browser.ui.workingDataTree.data.append(browser.db[originalParentWidget.path][:])
        parentWidget.data = browser.db[originalParentWidget.path][:]
        browser.ui.workingDataTree.dataItems.append(parentWidget)
コード例 #8
0
ファイル: h5funcs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def populate_h5dragItems(browser, originalParentWidget, parentWidget):
    if originalParentWidget.childCount()>0:
        for c in range(originalParentWidget.childCount()):
            child = originalParentWidget.child(c)
            #itemName = make_nameUnique(parentWidget, child.text(0))
            i = h5Item([str(child.text(0))])
            i.path = child.path
            i.group = child.group
            i.channel = child.channel
            parentWidget.addChild(i)
            if child.childCount()>0:
                populate_h5dragItems(browser, child, i)
            else:
                set_attrs(child, i)
                i.listIndex = len(browser.ui.workingDataTree.dataItems)
                i.data = get_dataFromFile(browser, i)
                browser.ui.workingDataTree.dataItems.append(i)
    # For transferring datasets directly
    else:
        set_attrs(originalParentWidget, parentWidget)
        parentWidget.path = originalParentWidget.path
        parentWidget.listIndex = len(browser.ui.workingDataTree.dataItems)
        #browser.ui.workingDataTree.data.append(browser.db[originalParentWidget.path][:])
        parentWidget.data = browser.db[originalParentWidget.path][:]
        browser.ui.workingDataTree.dataItems.append(parentWidget)
コード例 #9
0
ファイル: h5funcs.py プロジェクト: de278/NeuroDAQ-Analysis
def load_h5(browser, tree, push):
    browser.ui.fileDataTree.data = []
    index = browser.ui.dirTree.selectedIndexes()[0]
    currentFile = str(index.model().filePath(index))
    browser.currentFolder = os.path.dirname(currentFile)
    if browser.db: browser.db.close()
    if '.hdf5' in currentFile:
        #print self.currentFile
        browser.db = h5py.File(currentFile, 'r+')
        tree.clear()       
        # Insert groups into the tree and add data to internal data list
        for group in browser.db:
            item = h5Item([str(group)])
            item.path = '/'+str(group)
            tree.addTopLevelItem(item)
            populate_h5tree(browser, browser.db['/'+str(group)], parentWidget=item, push=push) 
        # Select first item of loaded list
        tree.setCurrentItem(tree.itemAt(0,0))

    if push:
        browser.ui.workingDataTree.setSortingEnabled(True)
        browser.ui.workingDataTree.propsDt = ''
        browser.ui.workingDataTree.propsDescription = ''
        for attr in browser.db.attrs:
            #print attr, browser.db.attrs[attr]
            if 'dt' in attr: browser.ui.workingDataTree.propsDt = str(browser.db.attrs[attr])
            if 'description' in attr:  browser.ui.workingDataTree.propsDescription = browser.db.attrs[attr]
        table.update_table(browser)
        browser.currentOpenFile = currentFile
        browser.currentSaveFile = currentFile
        browser.ui.workingDataTree.setHeaderLabels([os.path.split(currentFile)[1]])
        browser.ui.workingDataTree.setSortingEnabled(False)  # Otherwise it screws up drag and drop
コード例 #10
0
    def noProtocolNames(self):
        # Get trigger times (in data points)
        tarray = np.arange(0, len(self.triggers))
        self.tevents = tarray[self.triggers > 0]

        # Iterate names and add entries to data tree
        protocolsItem = h5Item([str('protocols_data')])
        self.parentItem.addChild(protocolsItem)
        if self.eventsBox.isChecked():
            itemPath = aux.selectItem_box(self.browser)
            itemPath = itemPath.split('/')
            root = self.browser.ui.workingDataTree.invisibleRootItem()
            dataSourceItem = aux.getItemFromPath(itemPath, root, level=0)
            if ('video'
                    in dataSourceItem.attrs) and (dataSourceItem.attrs['video']
                                                  == 'True'):
                videoEvents = True
                clip = VideoFileClip(dataSourceItem.attrs['mrl'])
        item_triggers = h5Item([str('triggers')])
        item_nontriggers = h5Item([str('non_triggers')])
        item_manualtriggers = h5Item([str('manual')])
        protocolsItem.addChild(item_triggers)
        protocolsItem.addChild(item_nontriggers)
        protocolsItem.addChild(item_manualtriggers)
        for t in self.tevents:
            triggerFrame = t
            child = h5Item(['frame_' + str(triggerFrame)])

            # Deal with data options
            if self.eventsBox.isChecked():
                if videoEvents:
                    tstart = (triggerFrame - self.baseline) / clip.fps
                    tend = (triggerFrame + self.duration) / clip.fps
                    subclip = clip.subclip(tstart, tend)
                    self.makeVideoStream(subclip, child)
                else:
                    child.data = dataSourceItem.data[triggerFrame - self.
                                                     baseline:triggerFrame +
                                                     self.duration]
                    # todo: check whether there is data
            if self.triggers[triggerFrame] == 1:
                item_nontriggers.addChild(child)
            elif self.triggers[triggerFrame] == 2:
                item_triggers.addChild(child)
            elif self.triggers[triggerFrame] == 3:
                item_manualtriggers.addChild(child)
コード例 #11
0
ファイル: treefuncs.py プロジェクト: de278/NeuroDAQ-Analysis
def clone_item(item):
    """ Clone h5 item. Useful for Drag & Drop
    """
    i = h5Item(item.text(0))
    i.path = item.path
    i.listIndex = item.dataIndex
    i.originalIndex = item.originalIndex
    i.data = item.data
    return i
コード例 #12
0
def clone_item(item):
    """ Clone h5 item. Useful for Drag & Drop
    """
    i = h5Item(item.text(0))
    i.path = item.path
    i.listIndex = item.dataIndex
    i.originalIndex = item.originalIndex
    i.data = item.data
    return i
コード例 #13
0
    def noProtocolNames(self):
        # Get trigger times (in data points)
        tarray = np.arange(0, len(self.triggers))
        self.tevents = tarray[self.triggers>0]

        # Iterate names and add entries to data tree
        protocolsItem = h5Item([str('protocols_data')])
        self.parentItem.addChild(protocolsItem)    
        if self.eventsBox.isChecked():     
            itemPath = aux.selectItem_box(self.browser)
            itemPath = itemPath.split('/')
            root = self.browser.ui.workingDataTree.invisibleRootItem()
            dataSourceItem = aux.getItemFromPath(itemPath, root, level=0)
            if ('video' in dataSourceItem.attrs) and (dataSourceItem.attrs['video']=='True'):
                videoEvents = True
                clip = VideoFileClip(dataSourceItem.attrs['mrl'])
        item_triggers = h5Item([str('triggers')])
        item_nontriggers = h5Item([str('non_triggers')])
        item_manualtriggers = h5Item([str('manual')])
        protocolsItem.addChild(item_triggers)
        protocolsItem.addChild(item_nontriggers)
        protocolsItem.addChild(item_manualtriggers)
        for t in self.tevents:
             triggerFrame = t
             child = h5Item(['frame_'+str(triggerFrame)]) 
                   
             # Deal with data options
             if self.eventsBox.isChecked():     
                 if videoEvents:
                     tstart = (triggerFrame-self.baseline)/clip.fps
                     tend = (triggerFrame+self.duration)/clip.fps
                     subclip = clip.subclip(tstart, tend)
                     self.makeVideoStream(subclip, child)
                 else:
                     child.data = dataSourceItem.data[triggerFrame-self.baseline:triggerFrame+self.duration]
                     # todo: check whether there is data
             if self.triggers[triggerFrame]==1:
                 item_nontriggers.addChild(child)
             elif self.triggers[triggerFrame]==2:
                 item_triggers.addChild(child)
             elif self.triggers[triggerFrame]==3:
                 item_manualtriggers.addChild(child)   
コード例 #14
0
ファイル: auxfuncs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def make_data_copy(browser, plotWidget):
    """ Make a copy of the currently plotted data to work on, 
    in order to keep the original data intact. Add new items
    to the working data tree and plot them. 
    """
    parentText = plotWidget.plotDataItems[0].parent().text(0)
    item = h5Item([parentText + '_OriginalCopy'])
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()
    browser.make_nameUnique(parentWidget, item, item.text(0))
    browser.ui.workingDataTree.addTopLevelItem(item)
    childrenList = []
    for plotItem in plotWidget.plotDataItems:
        # Add items to tree
        child = h5Item([str(plotItem.text(0))])
        browser.make_nameUnique(item, child, child.text(0))
        item.addChild(child)
        child.attrs = plotItem.attrs
        child.data = plotItem.data
        child.listIndex = len(browser.ui.workingDataTree.dataItems)
        browser.ui.workingDataTree.dataItems.append(child)
        childrenList.append(child)
コード例 #15
0
ファイル: auxfuncs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def save_results(browser, parentText, results):
    """ Saves data to workingDataTree.data and adds
    corresponding entry in the tree with a parent at 
    root level and children.
    
    'results' is a list with n items ['label', data, attrs]    
    Returns a list with the list indexes of the stored items
    """
    listIndexes = []
    item = h5Item([parentText])
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()
    browser.make_nameUnique(parentWidget, item, item.text(0))
    browser.ui.workingDataTree.addTopLevelItem(item)
    for result in results:
        child = h5Item([result[0]])
        browser.make_nameUnique(item, child, child.text(0))
        item.addChild(child)
        if len(result) > 2: child.attrs = result[2]
        child.listIndex = len(browser.ui.workingDataTree.dataItems)
        listIndexes.append(child.listIndex)
        browser.ui.workingDataTree.dataItems.append(child)
        child.data = result[1]
    return listIndexes
コード例 #16
0
ファイル: auxfuncs.py プロジェクト: de278/NeuroDAQ-Analysis
def save_results(browser, parentText, results):
    """ Saves data to workingDataTree.data and adds
    corresponding entry in the tree with a parent at 
    root level and children.
    
    'results' is a list with n items ['label', data, attrs]    
    Returns a list with the list indexes of the stored items
    """        
    listIndexes = []
    item = h5Item([parentText])
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()
    browser.make_nameUnique(parentWidget, item, item.text(0))        
    browser.ui.workingDataTree.addTopLevelItem(item)
    for result in results:
        child = h5Item([result[0]])
        browser.make_nameUnique(item, child, child.text(0))
        item.addChild(child)  
        if len(result)>2: child.attrs = result[2]
        child.listIndex =  len(browser.ui.workingDataTree.dataItems)
        listIndexes.append(child.listIndex)
        browser.ui.workingDataTree.dataItems.append(child)
        child.data = result[1]   
    return listIndexes
コード例 #17
0
ファイル: auxfuncs.py プロジェクト: de278/NeuroDAQ-Analysis
def make_data_copy(browser, plotWidget):
    """ Make a copy of the currently plotted data to work on, 
    in order to keep the original data intact. Add new items
    to the working data tree and plot them. 
    """
    plotWidget.clear() 
    parentText = plotWidget.plotDataItems[0].parent().text(0)
    item = h5Item([parentText+'_copy'])
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()
    browser.make_nameUnique(parentWidget, item, item.text(0))
    browser.ui.workingDataTree.addTopLevelItem(item)
    childrenList = []     
    for plotItem in plotWidget.plotDataItems:
        # Add items to tree
        child = h5Item([str(plotItem.text(0))])
        browser.make_nameUnique(item, child, child.text(0))
        item.addChild(child)
        child.attrs = plotItem.attrs
        child.data = plotItem.data
        child.listIndex =  len(browser.ui.workingDataTree.dataItems)
        browser.ui.workingDataTree.dataItems.append(child)  
        childrenList.append(child)      
    pgplot.plot_multipleData(browser, plotWidget, childrenList)    
    if browser.ui.actionShowCursors.isChecked(): pgplot.replot_cursors(browser, plotWidget) 
コード例 #18
0
ファイル: utils.py プロジェクト: de278/NeuroDAQ-Analysis
def store_data(data, name='data', attrs={'dt':1}):
    """ Adds data to the Data Tree

    'data' is a number array of 1 or 2 dimensions
    'name' is sring
    'attrs' is a dictionary {attr1: value1, attr2, value2, ...}
    """
    # Set root as parent
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()

    # Make sure data is numpy array
    data = np.array(data)

    # 1D array - add straight to root with name 'name' 
    if len(data.shape)==1:
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0))    
        item.data = data
        item.attrs = attrs
        item.listIndex = len(browser.ui.workingDataTree.dataItems)
        browser.ui.workingDataTree.dataItems.append(item)
        browser.ui.workingDataTree.addTopLevelItem(item)

    # 2D array - add 'name' group and 'data' datasets
    elif len(data.shape)==2:
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0)) 
        browser.ui.workingDataTree.addTopLevelItem(item)
        for n in np.arange(0, len(data)):
            child = h5Item(['data_'+str(n)])
            browser.make_nameUnique(item, child, child.text(0))
            child.data = data[n,:]
            child.attrs = attrs
            child.listIndex = len(browser.ui.workingDataTree.dataItems)
            browser.ui.workingDataTree.dataItems.append(child)
            item.addChild(child)
コード例 #19
0
ファイル: h5funcs.py プロジェクト: de278/NeuroDAQ-Analysis
def populate_h5tree(browser, parent, parentWidget, push):   
    if isinstance(parent, h5py.Group):
        for child in parent:
            #print parent[child]
            item = h5Item([child])
            item.path = re.findall('"([^"]*)"', str(parent))[0] + '/' + str(child)
            parentWidget.addChild(item)
            populate_h5tree(browser, parent[child], item, push)
    elif isinstance(parent, h5py.Dataset):
        set_attrs(parent, parentWidget)
        if push:
            try:
                parentWidget.data = parent[:]            
                parentWidget.listIndex = len(browser.ui.workingDataTree.dataItems)
                #browser.ui.workingDataTree.data.append(parent[:])            
                browser.ui.workingDataTree.dataItems.append(parentWidget)
            except ValueError:   # No data in the dataset
                sip.delete(parentWidget)
def populate_h5tree(browser, parent, parentWidget, push):
    if isinstance(parent, h5py.Group):
        for child in parent:
            #print parent[child]
            item = h5Item([child])
            item.path = re.findall('"([^"]*)"',
                                   str(parent))[0] + '/' + str(child)
            parentWidget.addChild(item)
            populate_h5tree(browser, parent[child], item, push)
    elif isinstance(parent, h5py.Dataset):
        set_attrs(parent, parentWidget)
        if push:
            try:
                parentWidget.data = get_dataFromFile(browser, parentWidget)
                parentWidget.listIndex = len(
                    browser.ui.workingDataTree.dataItems)
                browser.ui.workingDataTree.dataItems.append(parentWidget)
            except ValueError:  # No data in the dataset
                sip.delete(parentWidget)
コード例 #21
0
    def withProtocolNames(self):
        # Get trigger times (in data points)
        tarray = np.arange(0, len(self.triggers))
        self.tevents = tarray[self.triggers > 0]

        # Iterate names and add entries to data tree
        protocols = list(set(self.names))
        inames = list(enumerate(self.names))
        protocolsItem = h5Item([str('protocols_data')])
        self.parentItem.addChild(protocolsItem)
        if self.eventsBox.isChecked():
            itemPath = aux.selectItem_box(self.browser)
            itemPath = itemPath.split('/')
        for protocol in protocols:
            item = h5Item([str(protocol)])
            item_triggers = h5Item([str('triggers')])
            item_nontriggers = h5Item([str('non_triggers')])
            item_manualtriggers = h5Item([str('manual')])
            item.addChild(item_triggers)
            item.addChild(item_nontriggers)
            item.addChild(item_manualtriggers)
            for i in inames:
                if i[1] == protocol:
                    triggerFrame = self.tevents[i[0]]
                    child = h5Item(['frame_' + str(triggerFrame)])

                    # Deal with data options
                    if self.eventsBox.isChecked():
                        root = self.browser.ui.workingDataTree.invisibleRootItem(
                        )
                        dataSourceItem = aux.getItemFromPath(itemPath,
                                                             root,
                                                             level=0)
                        #print [triggerFrame-self.baseline,triggerFrame+self.baseline]
                        if ('video' in dataSourceItem.attrs) and (
                                dataSourceItem.attrs['video'] == 'True'):
                            print 'this is a video'
                        else:
                            child.data = dataSourceItem.data[
                                triggerFrame - self.baseline:triggerFrame +
                                self.duration]
                            # todo: check whether there is data
                    if self.triggers[triggerFrame] == 1:
                        item_nontriggers.addChild(child)
                    elif self.triggers[triggerFrame] == 2:
                        item_triggers.addChild(child)
                    elif self.triggers[triggerFrame] == 3:
                        item_manualtriggers.addChild(child)
            protocolsItem.addChild(item)
コード例 #22
0
    def func(self, browser):
        """ Convert X-Y coordinates into speed
        
        User selects Real-Time Coordinates item and speed is
        added as a child
        """

        ############################################
        # ANALYSIS FUNCTION

        # Get widgets
        self.plotWidget = browser.ui.dataPlotsWidget
        self.toolsWidget = browser.ui.oneDimToolStackedWidget

        # Get X and Y data from selected coordinates
        x, y = [], []
        parentItem = browser.ui.workingDataTree.selectedItems()[0]
        for i in range(parentItem.childCount()):
            item = parentItem.child(i)
            if 'X' in item.text(0):
                x = item.data
            elif 'Y' in item.text(0):
                y = item.data
        if len(x) == 0 or len(y) == 0:
            aux.error_box('XY coordinates not found')
            return

        # Calculate speed
        d = []
        dt = item.attrs['dt']
        for i in range(1, len(x)):
            xmov = x[i] - x[i - 1]
            ymov = y[i] - y[i - 1]
            d.append(np.sqrt((xmov**2) + (ymov**2)))
        speed = d  # px/frame  > px/s = speed/(1./dt) with dt in seconds

        # Store data
        speedItem = h5Item(['speed'])
        speedItem.data = np.array(speed)
        parentItem.addChild(speedItem)
コード例 #23
0
    def func(self, browser):
        """ Convert X-Y coordinates into speed
        
        User selects Real-Time Coordinates item and speed is
        added as a child
        """

        ############################################
        # ANALYSIS FUNCTION      
    
        # Get widgets
        self.plotWidget = browser.ui.dataPlotsWidget
        self.toolsWidget = browser.ui.oneDimToolStackedWidget
    
        # Get X and Y data from selected coordinates
        x, y = [], []
        parentItem = browser.ui.workingDataTree.selectedItems()[0]
        for i in range(parentItem.childCount()):
            item = parentItem.child(i)
            if 'X' in item.text(0):
                x = item.data
            elif 'Y' in item.text(0):
                y = item.data
        if len(x)==0 or len(y)==0:   
            aux.error_box('XY coordinates not found')
            return

        # Calculate speed
        d = []
        dt = item.attrs['dt']
        for i in range(1, len(x)):
            xmov = x[i] - x[i-1]
            ymov = y[i] - y[i-1]
            d.append(np.sqrt((xmov**2) + (ymov**2)))
        speed = d # px/frame  > px/s = speed/(1./dt) with dt in seconds

        # Store data
        speedItem = h5Item(['speed'])
        speedItem.data = np.array(speed)
        parentItem.addChild(speedItem)
コード例 #24
0
    def withProtocolNames(self):
        # Get trigger times (in data points)
        tarray = np.arange(0, len(self.triggers))
        self.tevents = tarray[self.triggers>0]

        # Iterate names and add entries to data tree
        protocols = list(set(self.names))
        inames = list(enumerate(self.names))
        protocolsItem = h5Item([str('protocols_data')])
        self.parentItem.addChild(protocolsItem)    
        if self.eventsBox.isChecked():     
            itemPath = aux.selectItem_box(self.browser)
            itemPath = itemPath.split('/')
        for protocol in protocols:
            item = h5Item([str(protocol)])
            item_triggers = h5Item([str('triggers')])
            item_nontriggers = h5Item([str('non_triggers')])
            item_manualtriggers = h5Item([str('manual')])
            item.addChild(item_triggers)
            item.addChild(item_nontriggers)
            item.addChild(item_manualtriggers)
            for i in inames:
                if i[1] == protocol:
                    triggerFrame = self.tevents[i[0]] 
                    child = h5Item(['frame_'+str(triggerFrame)])
                    
                    # Deal with data options
                    if self.eventsBox.isChecked():     
                        root = self.browser.ui.workingDataTree.invisibleRootItem()
                        dataSourceItem = aux.getItemFromPath(itemPath, root, level=0)
                        #print [triggerFrame-self.baseline,triggerFrame+self.baseline]
                        if ('video' in dataSourceItem.attrs) and (dataSourceItem.attrs['video']=='True'):
                            print 'this is a video' 
                        else:
                            child.data = dataSourceItem.data[triggerFrame-self.baseline:triggerFrame+self.duration]
                            # todo: check whether there is data
                    if self.triggers[triggerFrame]==1:
                        item_nontriggers.addChild(child)
                    elif self.triggers[triggerFrame]==2:
                        item_triggers.addChild(child)
                    elif self.triggers[triggerFrame]==3:
                        item_manualtriggers.addChild(child)   
            protocolsItem.addChild(item)    
コード例 #25
0
ファイル: utils.py プロジェクト: ineuron/NeuroDAQ-Analysis
def store_data(data, array2D=False, name='data', attrs={'dt': 1}):
    """ Adds data to the Data Tree

    'data' is a number array of 1 or 2 dimensions
    'name' is sring
    'attrs' is a dictionary {attr1: value1, attr2, value2, ...}
    
    If array2D==True the data are stored as a 2D-array
    """
    # Set root as parent
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()

    # Make sure data is numpy array
    #data = np.array(data)

    # List - add 'name' group and 'data' datasets
    if isinstance(data, list):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0))
        browser.ui.workingDataTree.addTopLevelItem(item)
        for n in np.arange(0, len(data)):
            child = h5Item(['data_' + str(n)])
            browser.make_nameUnique(item, child, child.text(0))
            child.data = data[n]
            child.attrs = attrs
            child.listIndex = len(browser.ui.workingDataTree.dataItems)
            browser.ui.workingDataTree.dataItems.append(child)
            item.addChild(child)

    # Float - add straight to root with name 'name'
    #elif isinstance(data, float):
    #    item = h5Item([name])
    #    browser.make_nameUnique(parentWidget, item, item.text(0))
    #    item.data = data
    #    item.attrs = attrs
    #    item.listIndex = len(browser.ui.workingDataTree.dataItems)
    #    browser.ui.workingDataTree.dataItems.append(item)
    #    browser.ui.workingDataTree.addTopLevelItem(item)

    # 1D array - add straight to root with name 'name'
    elif (len(data.shape) == 1) or ((len(data.shape) == 2) and
                                    (array2D == True)):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0))
        item.data = data
        item.attrs = attrs
        item.listIndex = len(browser.ui.workingDataTree.dataItems)
        browser.ui.workingDataTree.dataItems.append(item)
        browser.ui.workingDataTree.addTopLevelItem(item)

    # 2D array - add 'name' group and 'data' datasets
    elif (len(data.shape) == 2) and (array2D == False):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0))
        browser.ui.workingDataTree.addTopLevelItem(item)
        for n in np.arange(0, len(data)):
            child = h5Item(['data_' + str(n)])
            browser.make_nameUnique(item, child, child.text(0))
            child.data = data[n, :]
            child.attrs = attrs
            child.listIndex = len(browser.ui.workingDataTree.dataItems)
            browser.ui.workingDataTree.dataItems.append(child)
            item.addChild(child)
コード例 #26
0
ファイル: utils.py プロジェクト: ineuron/NeuroDAQ-Analysis
def store_data(data, array2D=False, name='data', attrs={'dt':1}):
    """ Adds data to the Data Tree

    'data' is a number array of 1 or 2 dimensions
    'name' is sring
    'attrs' is a dictionary {attr1: value1, attr2, value2, ...}
    
    If array2D==True the data are stored as a 2D-array
    """
    # Set root as parent
    parentWidget = browser.ui.workingDataTree.invisibleRootItem()

    # Make sure data is numpy array
    #data = np.array(data)

    # List - add 'name' group and 'data' datasets
    if isinstance(data, list):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0)) 
        browser.ui.workingDataTree.addTopLevelItem(item)
        for n in np.arange(0, len(data)):
            child = h5Item(['data_'+str(n)])
            browser.make_nameUnique(item, child, child.text(0))
            child.data = data[n]
            child.attrs = attrs
            child.listIndex = len(browser.ui.workingDataTree.dataItems)
            browser.ui.workingDataTree.dataItems.append(child)
            item.addChild(child)

    # Float - add straight to root with name 'name' 
    #elif isinstance(data, float):
    #    item = h5Item([name])
    #    browser.make_nameUnique(parentWidget, item, item.text(0))    
    #    item.data = data
    #    item.attrs = attrs
    #    item.listIndex = len(browser.ui.workingDataTree.dataItems)
    #    browser.ui.workingDataTree.dataItems.append(item)
    #    browser.ui.workingDataTree.addTopLevelItem(item)

    # 1D array - add straight to root with name 'name' 
    elif (len(data.shape)==1) or ((len(data.shape)==2) and (array2D==True)):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0))    
        item.data = data
        item.attrs = attrs
        item.listIndex = len(browser.ui.workingDataTree.dataItems)
        browser.ui.workingDataTree.dataItems.append(item)
        browser.ui.workingDataTree.addTopLevelItem(item)

    # 2D array - add 'name' group and 'data' datasets
    elif (len(data.shape)==2) and (array2D==False):
        item = h5Item([name])
        browser.make_nameUnique(parentWidget, item, item.text(0)) 
        browser.ui.workingDataTree.addTopLevelItem(item)
        for n in np.arange(0, len(data)):
            child = h5Item(['data_'+str(n)])
            browser.make_nameUnique(item, child, child.text(0))
            child.data = data[n,:]
            child.attrs = attrs
            child.listIndex = len(browser.ui.workingDataTree.dataItems)
            browser.ui.workingDataTree.dataItems.append(child)
            item.addChild(child)
コード例 #27
0
ファイル: h5funcs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def load_h5(browser, tree, push):
    """ Main loading function. Initially written for .hdf5 files only,
    but now also load .tdms files. 
    
    The whole thing could use with consolidating the code, there
    is redundancy and some of the functionality is not necessary.
    """
    browser.ui.fileDataTree.data = []
    index = browser.ui.dirTree.selectedIndexes()[0]
    currentFile = str(index.model().filePath(index))
    browser.currentFolder = os.path.dirname(currentFile)
    browser.ui.loadFolderInput.setText(browser.currentFolder)

    if '.hdf5' in currentFile:
        if browser.db: browser.db.close()
        browser.db = h5py.File(currentFile, 'r+')
        browser.dbType = 'hdf5'
        tree.clear()
        # Insert groups into the tree and add data to internal data list
        for group in browser.db:
            item = h5Item([str(group)])
            item.path = '/' + str(group)
            set_attrs(browser.db[group], item)
            tree.addTopLevelItem(item)
            populate_h5tree(browser,
                            browser.db['/' + str(group)],
                            parentWidget=item,
                            push=push)
        # Select first item of loaded list
        tree.setCurrentItem(tree.itemAt(0, 0))
        if push:
            browser.saveFolder = browser.currentFolder
            browser.ui.saveFolderInput.setText(browser.saveFolder)
            browser.ui.workingDataTree.setSortingEnabled(True)
            browser.ui.notesWidget.clear()
            for attr in browser.db.attrs:
                browser.ui.workingDataTree.root.attrs[attr] = browser.db.attrs[
                    attr]
                if 'Notes' in attr:
                    browser.ui.notesWidget.setText(browser.db.attrs['Notes'])
                #if 'dt' in attr: browser.ui.workingDataTree.propsDt = str(browser.db.attrs[attr])
                if 'description' in attr:
                    browser.ui.propsTableWidget.setData(
                        {'Description': [browser.db.attrs['description']]})
                #table.update_props(browser)
            browser.currentOpenFile = currentFile
            browser.currentSaveFile = currentFile
            browser.ui.workingDataTree.setHeaderLabels(
                [os.path.split(currentFile)[1]])
            browser.ui.workingDataTree.setSortingEnabled(
                False)  # Otherwise it screws up drag and drop

    if '.abf' in currentFile:
        browser.db = io.AxonIO(filename=currentFile)
        browser.dbType = 'abf'
        tree.clear()
        # read data
        browser.bl = browser.db.read_block(lazy=False, cascade=True)
        nSweeps = len(browser.bl.segments)
        signal = browser.bl.segments[0].analogsignals
        signalItem = signal.pop()
        samplingRate = np.array(signalItem.sampling_rate)  # Hz
        if 'A' in str(signalItem.units):
            groupname = 'current'
        else:
            groupname = 'voltage'
        item = h5Item([groupname])
        tree.addTopLevelItem(item)
        browser.bl = browser.db.read_block(lazy=False, cascade=True)
        browser.saveFolder = browser.currentFolder
        browser.ui.saveFolderInput.setText(browser.saveFolder)
        browser.ui.workingDataTree.setSortingEnabled(True)
        browser.ui.notesWidget.clear()
        browser.currentOpenFile = currentFile
        browser.currentSaveFile = os.path.splitext(currentFile)[0] + '.hdf5'
        browser.ui.workingDataTree.setHeaderLabels(
            [os.path.split(browser.currentSaveFile)[1]])
        browser.ui.workingDataTree.setSortingEnabled(
            False)  # Otherwise it screws up drag and drop
        for sweep in np.arange(1, nSweeps):
            datasetname = 'sweep_' + str(sweep)
            child = h5Item([datasetname])
            child.sweep = sweep
            child.attrs['dt'] = 1. / (samplingRate / 1000.)
            item.addChild(child)
            if push:
                child.data = get_dataFromFile(browser, child)
                # Deal with strings (display in Notes and convert to ASCII)
                text = []
                if (isinstance(child.data[0], basestring)) == True:
                    browser.ui.notesWidget.append(str(channelname))
                    for d in child.data:
                        if bool(d): text.append(d)  # Get rid of empty strings
                    child.data = np.string_(
                        text)  # Convert to fixed length ASCII
                    for t in text:
                        browser.ui.notesWidget.append(t)
                    browser.ui.notesWidget.append('\r')
                child.listIndex = len(browser.ui.workingDataTree.dataItems)
                browser.ui.workingDataTree.dataItems.append(child)

    elif '.tdms' in currentFile:
        browser.db = TdmsFile(currentFile)
        browser.dbType = 'tdms'
        tree.clear()
        # Deal with properties
        for attr in browser.db.object().properties:
            if 'kHz' in attr:
                browser.ui.fileDataTree.root.attrs[
                    'sampling_rate(kHz)'] = browser.db.object(
                    ).properties[attr]
                if push:
                    browser.ui.workingDataTree.root.attrs[
                        'sampling_rate(kHz)'] = browser.db.object(
                        ).properties[attr]
            browser.ui.fileDataTree.root.attrs[attr] = browser.db.object(
            ).properties[attr]
            if push:
                browser.ui.workingDataTree.root.attrs[
                    attr] = browser.db.object().properties[attr]
        # Insert groups into the tree and add data to internal data list
        if push:
            try:
                browser.db.object().properties['imaging']
                imaging = True
            except KeyError:
                imaging = False
            browser.saveFolder = browser.currentFolder
            browser.ui.saveFolderInput.setText(browser.saveFolder)
            browser.ui.workingDataTree.setSortingEnabled(True)
            browser.ui.notesWidget.clear()
            browser.currentOpenFile = currentFile
            browser.currentSaveFile = os.path.splitext(
                currentFile)[0] + '.hdf5'
            browser.ui.workingDataTree.setHeaderLabels(
                [os.path.split(browser.currentSaveFile)[1]])
            browser.ui.workingDataTree.setSortingEnabled(
                False)  # Otherwise it screws up drag and drop
        for group in browser.db.groups():
            item = h5Item([str(group)])
            tree.addTopLevelItem(item)
            for channel in browser.db.group_channels(group):
                channelname = re.findall(r"'(.*?)'", channel.path,
                                         re.DOTALL)[1]
                child = h5Item([str(channelname)])
                child.group = group
                child.channel = channelname
                item.addChild(child)
                if 'kHz' in str(tree.root.attrs):
                    child.attrs[
                        'dt'] = 1. / tree.root.attrs['sampling_rate(kHz)']
                if push:
                    child.data = get_dataFromFile(browser, child)
                    if imaging:
                        pixels = float(
                            browser.db.object().properties['pixels_per_line'])
                        lines = float(
                            browser.db.object().properties['lines_per_frame'])
                        imageArray = imagefun.array2image(
                            child.data, (pixels, lines))
                        child.data = imageArray
                    # Deal with strings (display in Notes and convert to ASCII)
                    text = []
                    if (isinstance(child.data[0], basestring)) == True:
                        browser.ui.notesWidget.append(str(channelname))
                        for d in child.data:
                            if bool(d):
                                text.append(d)  # Get rid of empty strings
                        child.data = np.string_(
                            text)  # Convert to fixed length ASCII
                        for t in text:
                            browser.ui.notesWidget.append(t)
                        browser.ui.notesWidget.append('\r')
                    child.listIndex = len(browser.ui.workingDataTree.dataItems)
                    browser.ui.workingDataTree.dataItems.append(child)
                    #if 'kHz' in str(browser.ui.workingDataTree.root.attrs):
                    #    child.attrs['dt'] = 1./browser.ui.workingDataTree.root.attrs['sampling_rate(kHz)']

    elif '.mp4' in currentFile:
        browser.dbType = 'video'
        tree.clear()
        item = h5Item(['Video stream'])
        item.attrs['mrl'] = currentFile
        item.attrs['video'] = 'True'
        tree.addTopLevelItem(item)
        # Read and show some properties
        clip = VideoFileClip(currentFile)
        resolution = h5Item(
            ['Resolution: ' + str(clip.size[0]) + 'x' + str(clip.size[1])])
        item.addChild(resolution)
        frameRate = h5Item(['Frame rate: ' + str(clip.fps)])
        item.addChild(frameRate)
        duration = h5Item(['Duration: ' + str(clip.duration) + ' sec'])
        item.addChild(duration)
コード例 #28
0
 def move_itemsAcross(self, source, modifiers):
     """ Create new tree items and populate the target tree. Originally made 
     for moving items from fileDataTree to workingDataTree, but then modified
     to copy items when the move is internal in workingDataTree and Ctrl is 
     pressed.
     """
     if (source
             == self.ui.workingDataTree) and (modifiers
                                              == QtCore.Qt.ControlModifier):
         # Copy internally
         #print 'copying'
         targetItems = []
         for item in self.copyItems:
             i = h5Item([str(item.text(0))])
             i.data = item.data
             targetItems.append(i)
         parentIndex = self.ui.workingDataTree.indexFromItem(
             self.dragTargetParent)
         for row in np.arange(0, len(self.copyItems)):
             index = self.ui.workingDataTree.model().index(
                 self.dragTargetRow + row, 0, parentIndex)
             temp_item = self.ui.workingDataTree.itemFromIndex(
                 QtCore.QModelIndex(index))
             sip.delete(temp_item)
             if parentIndex.isValid():
                 self.make_nameUnique(self.dragTargetParent,
                                      targetItems[row],
                                      targetItems[row].text(0))
                 self.dragTargetParent.insertChild(index.row(),
                                                   targetItems[row])
                 originalParentWidget = self.copyItems[row]
                 h5.populate_h5copyItems(self, originalParentWidget,
                                         targetItems[row])
             else:
                 self.make_nameUnique(
                     self.ui.workingDataTree.invisibleRootItem(),
                     targetItems[row], targetItems[row].text(0))
                 self.ui.workingDataTree.insertTopLevelItem(
                     index.row(), targetItems[row])
                 originalParentWidget = self.copyItems[row]
                 h5.populate_h5copyItems(self, originalParentWidget,
                                         targetItems[row])
     elif source == self.ui.workingDataTree:
         pass
     else:
         # Move across
         #print 'moving'
         targetItems = []
         for item in self.dragItems:
             i = h5Item([str(item[1])])
             i.path = item[0]
             i.listIndex = item[2]
             i.originalIndex = item[3]
             i.data = item[4]
             i.attrs = item[5]
             #item = i[0]
             #item.originalIndex = i[1]
             targetItems.append(i)
         parentIndex = self.ui.workingDataTree.indexFromItem(
             self.dragTargetParent)
         for row in np.arange(0, len(self.dragItems)):
             index = self.ui.workingDataTree.model().index(
                 self.dragTargetRow + row, 0, parentIndex)
             temp_item = self.ui.workingDataTree.itemFromIndex(
                 QtCore.QModelIndex(index))
             sip.delete(temp_item)
             if parentIndex.isValid():
                 self.make_nameUnique(self.dragTargetParent,
                                      targetItems[row],
                                      targetItems[row].text(0))
                 self.dragTargetParent.insertChild(index.row(),
                                                   targetItems[row])
                 originalParentWidget = self.ui.fileDataTree.itemFromIndex(
                     QtCore.QModelIndex(targetItems[row].originalIndex))
                 h5.populate_h5dragItems(self, originalParentWidget,
                                         targetItems[row])
             else:
                 self.make_nameUnique(
                     self.ui.workingDataTree.invisibleRootItem(),
                     targetItems[row], targetItems[row].text(0))
                 self.ui.workingDataTree.insertTopLevelItem(
                     index.row(), targetItems[row])
                 originalParentWidget = self.ui.fileDataTree.itemFromIndex(
                     QtCore.QModelIndex(targetItems[row].originalIndex))
                 h5.populate_h5dragItems(self, originalParentWidget,
                                         targetItems[row])
コード例 #29
0
ファイル: h5funcs.py プロジェクト: ineuron/NeuroDAQ-Analysis
def load_h5(browser, tree, push):
    """ Main loading function. Initially written for .hdf5 files only,
    but now also load .tdms files. 
    
    The whole thing could use with consolidating the code, there
    is redundancy and some of the functionality is not necessary.
    """
    browser.ui.fileDataTree.data = []
    index = browser.ui.dirTree.selectedIndexes()[0]
    currentFile = str(index.model().filePath(index))
    browser.currentFolder = os.path.dirname(currentFile)
    browser.ui.loadFolderInput.setText(browser.currentFolder)

    if '.hdf5' in currentFile:
        if browser.db: browser.db.close()
        browser.db = h5py.File(currentFile, 'r+')
        browser.dbType = 'hdf5'
        tree.clear()       
        # Insert groups into the tree and add data to internal data list
        for group in browser.db:
            item = h5Item([str(group)])
            item.path = '/'+str(group)
            set_attrs(browser.db[group], item)
            tree.addTopLevelItem(item)
            populate_h5tree(browser, browser.db['/'+str(group)], parentWidget=item, push=push) 
        # Select first item of loaded list
        tree.setCurrentItem(tree.itemAt(0,0))
        if push:
            browser.saveFolder = browser.currentFolder
            browser.ui.saveFolderInput.setText(browser.saveFolder)
            browser.ui.workingDataTree.setSortingEnabled(True)
            browser.ui.notesWidget.clear()
            for attr in browser.db.attrs:
                browser.ui.workingDataTree.root.attrs[attr] = browser.db.attrs[attr]
                if 'Notes' in attr: browser.ui.notesWidget.setText(browser.db.attrs['Notes'])
                #if 'dt' in attr: browser.ui.workingDataTree.propsDt = str(browser.db.attrs[attr])
                if 'description' in attr: browser.ui.propsTableWidget.setData({'Description':[browser.db.attrs['description']]})
                #table.update_props(browser)
            browser.currentOpenFile = currentFile
            browser.currentSaveFile = currentFile
            browser.ui.workingDataTree.setHeaderLabels([os.path.split(currentFile)[1]])
            browser.ui.workingDataTree.setSortingEnabled(False)  # Otherwise it screws up drag and drop

    if '.abf' in currentFile:
        browser.db = io.AxonIO(filename=currentFile)
        browser.dbType = 'abf'
        tree.clear()
        # read data
        browser.bl = browser.db.read_block(lazy=False, cascade=True) 
        nSweeps = len(browser.bl.segments)
        signal = browser.bl.segments[0].analogsignals
        signalItem = signal.pop()
        samplingRate = np.array(signalItem.sampling_rate) # Hz
        if 'A' in str(signalItem.units):
            groupname = 'current'
        else:
            groupname = 'voltage'
        item = h5Item([groupname])
        tree.addTopLevelItem(item)
        browser.bl = browser.db.read_block(lazy=False, cascade=True) 
        browser.saveFolder = browser.currentFolder      
        browser.ui.saveFolderInput.setText(browser.saveFolder)  
        browser.ui.workingDataTree.setSortingEnabled(True)
        browser.ui.notesWidget.clear()
        browser.currentOpenFile = currentFile
        browser.currentSaveFile = os.path.splitext(currentFile)[0]+'.hdf5'
        browser.ui.workingDataTree.setHeaderLabels([os.path.split(browser.currentSaveFile)[1]])
        browser.ui.workingDataTree.setSortingEnabled(False)  # Otherwise it screws up drag and drop
        for sweep in np.arange(1,nSweeps):
            datasetname = 'sweep_'+str(sweep)
            child = h5Item([datasetname])
            child.sweep = sweep
            child.attrs['dt'] = 1./(samplingRate/1000.)
            item.addChild(child)
            if push:
                child.data = get_dataFromFile(browser, child)
                # Deal with strings (display in Notes and convert to ASCII)
                text = []
                if (isinstance(child.data[0], basestring))==True:
                    browser.ui.notesWidget.append(str(channelname))
                    for d in child.data:
                        if bool(d): text.append(d)         # Get rid of empty strings
                    child.data = np.string_(text)   # Convert to fixed length ASCII
                    for t in text:
                        browser.ui.notesWidget.append(t)
                    browser.ui.notesWidget.append('\r')
                child.listIndex = len(browser.ui.workingDataTree.dataItems)
                browser.ui.workingDataTree.dataItems.append(child) 

    elif '.tdms' in currentFile:
        browser.db = TdmsFile(currentFile)
        browser.dbType = 'tdms'
        tree.clear()       
        # Deal with properties
        for attr in browser.db.object().properties:
            if 'kHz' in attr:
                browser.ui.fileDataTree.root.attrs['sampling_rate(kHz)'] = browser.db.object().properties[attr]
                if push:
                    browser.ui.workingDataTree.root.attrs['sampling_rate(kHz)'] = browser.db.object().properties[attr]         
            browser.ui.fileDataTree.root.attrs[attr] = browser.db.object().properties[attr]   
            if push:
                browser.ui.workingDataTree.root.attrs[attr] = browser.db.object().properties[attr]        
        # Insert groups into the tree and add data to internal data list
        if push:
            try:
                browser.db.object().properties['imaging']
                imaging = True
            except KeyError:
                imaging = False
            browser.saveFolder = browser.currentFolder      
            browser.ui.saveFolderInput.setText(browser.saveFolder)  
            browser.ui.workingDataTree.setSortingEnabled(True)
            browser.ui.notesWidget.clear()
            browser.currentOpenFile = currentFile
            browser.currentSaveFile = os.path.splitext(currentFile)[0]+'.hdf5'
            browser.ui.workingDataTree.setHeaderLabels([os.path.split(browser.currentSaveFile)[1]])
            browser.ui.workingDataTree.setSortingEnabled(False)  # Otherwise it screws up drag and drop
        for group in browser.db.groups():
            item = h5Item([str(group)])
            tree.addTopLevelItem(item)
            for channel in browser.db.group_channels(group):
                channelname = re.findall(r"'(.*?)'", channel.path , re.DOTALL)[1]
                child = h5Item([str(channelname)])
                child.group = group
                child.channel = channelname
                item.addChild(child)    
                if 'kHz' in str(tree.root.attrs): 
                    child.attrs['dt'] = 1./tree.root.attrs['sampling_rate(kHz)']                   
                if push:
                    child.data = get_dataFromFile(browser, child)
                    if imaging: 
                        pixels = float(browser.db.object().properties['pixels_per_line'])
                        lines = float(browser.db.object().properties['lines_per_frame'])
                        imageArray = imagefun.array2image(child.data, (pixels,lines))
                        child.data = imageArray
                    # Deal with strings (display in Notes and convert to ASCII)
                    text = []
                    if (isinstance(child.data[0], basestring))==True:
                        browser.ui.notesWidget.append(str(channelname))
                        for d in child.data:
                            if bool(d): text.append(d)         # Get rid of empty strings
                        child.data = np.string_(text)   # Convert to fixed length ASCII
                        for t in text:
                            browser.ui.notesWidget.append(t)
                        browser.ui.notesWidget.append('\r')
                    child.listIndex = len(browser.ui.workingDataTree.dataItems)
                    browser.ui.workingDataTree.dataItems.append(child)
                    #if 'kHz' in str(browser.ui.workingDataTree.root.attrs): 
                    #    child.attrs['dt'] = 1./browser.ui.workingDataTree.root.attrs['sampling_rate(kHz)']       

    elif '.mp4' in currentFile:
        browser.dbType = 'video'
        tree.clear()
        item = h5Item(['Video stream'])
        item.attrs['mrl'] = currentFile
        item.attrs['video'] = 'True'
        tree.addTopLevelItem(item)        
        # Read and show some properties
        clip = VideoFileClip(currentFile)
        resolution = h5Item(['Resolution: '+str(clip.size[0])+'x'+str(clip.size[1])])
        item.addChild(resolution)
        frameRate = h5Item(['Frame rate: '+str(clip.fps)])
        item.addChild(frameRate)
        duration = h5Item(['Duration: '+str(clip.duration)+' sec'])
        item.addChild(duration)