Changeset 1654:61fbdcb67aab in orange-bioinformatics for _bioinformatics/widgets/OWGeneInfo.py


Ignore:
Timestamp:
05/21/12 10:25:29 (2 years ago)
Author:
mitar
Branch:
default
Children:
1655:9d3ae06d69be, 1657:edc96b23f6ef
Parents:
1653:508c7aa2e03c (diff), 1622:3d2f34a594e5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Tags:
2.5a1
Message:

Merge.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/widgets/OWGeneInfo.py

    r1636 r1654  
    4141        self._roleData[role][row][col] = data 
    4242         
    43     def data(self, index, role): 
     43    def data(self, index, role=Qt.DisplayRole): 
    4444        row, col = index.row(), index.column() 
    4545        return self._roleData[role][row][col] 
     
    5151        return QModelIndex() 
    5252     
    53     def rowCount(self, index): 
     53    def rowCount(self, index=QModelIndex()): 
    5454        if index.isValid(): 
    5555            return 0 
     
    5757            return len(self._data) 
    5858         
    59     def columnCount(self, index): 
     59    def columnCount(self, index=QModelIndex()): 
    6060        return len(self._header) 
    6161 
    62     def headerData(self, section, orientation, role): 
     62    def headerData(self, section, orientation, role=Qt.DisplayRole): 
    6363        if role==Qt.DisplayRole: 
    6464            return QVariant(self._header[section]) 
     
    240240        self.dictyExpressBox = OWGUI.widgetBox(self.controlArea, "Dicty Express") 
    241241        self.linkLabel = OWGUI.widgetLabel(self.dictyExpressBox, "") 
    242         self.linkLabel.setOpenExternalLinks(True) 
     242        self.linkLabel.setOpenExternalLinks(False) 
     243        self.connect(self.linkLabel, SIGNAL("linkActivated(QString)"), 
     244                     self.onDictyExpressLink) 
    243245        self.dictyExpressBox.hide() 
    244246         
     
    404406        if not self.data: 
    405407            return 
    406          
    407         mapToSource = self.treeWidget.model().mapToSource 
     408        model = self.treeWidget.model() 
     409        mapToSource = model.mapToSource 
    408410        selectedIds = [self.cells[mapToSource(index).row()][0] for index in self.treeWidget.selectedIndexes()] 
    409411        selectedRows = self.treeWidget.selectedIndexes() 
    410412        selectedRows = [mapToSource(index).row() for index in selectedRows] 
     413        model = model.sourceModel() 
    411414         
    412415        selectedGeneids = [self.row2geneinfo[row] for row in selectedRows] 
    413416        selectedIds = [self.geneinfo[i][0] for i in selectedGeneids] 
    414417        selectedIds = set(selectedIds) 
     418        gene2row = dict((self.geneinfo[self.row2geneinfo[row]][0], row) \ 
     419                        for row in selectedRows) 
    415420         
    416421        if self.useAttr: 
     
    426431            geneinfo = dict(self.geneinfo) 
    427432            examples = [ex for ex in self.data if str(ex[attr]) in selectedIds] 
     433            if True:  # Add gene info 
     434                domain = orange.Domain(self.data.domain, self.data.domain.classVar) 
     435                domain.addmetas(self.data.domain.getmetas()) 
     436                n_columns = model.columnCount() 
     437 
     438                headers = [str(model.headerData(i, Qt.Horizontal, Qt.DisplayRole).toString()) \ 
     439                           for i in range(n_columns)] 
     440                new_meta_attrs = [(orange.newmetaid(), orange.StringVariable(name)) \ 
     441                                  for name in headers] 
     442                domain.addmetas(dict(new_meta_attrs)) 
     443                examples = [orange.Example(domain, ex) for ex in examples] 
     444                for ex in examples: 
     445                    for i, (_, meta) in enumerate(new_meta_attrs): 
     446                        row = gene2row[str(ex[attr])] 
     447                        ex[meta] = str(model.data(model.index(row, i), Qt.DisplayRole).toString()) 
     448 
    428449            if examples: 
    429450                newdata = orange.ExampleTable(examples) 
     
    479500        if show: 
    480501            genes = [fix(gene) for gene in genes if fix(gene)] 
    481             link1 = '<a href="http://www.ailab.si/dictyexpress/run/index.php?gene=%s">Microarray profile</a>' % (" ".join(genes)) 
    482             link2 = '<a href="http://www.ailab.si/dictyexpress/run/index.php?gene=%s&db=rnaseq">RNA-Seq profile</a>' % (" ".join(genes)) 
     502            link1 = '<a href="http://dictyexpress.biolab.si/run/index.php?gene=%s">Microarray profile</a>' 
     503            link2 = '<a href="http://dictyexpress.biolab.si/run/index.php?gene=%s&db=rnaseq">RNA-Seq profile</a>' 
    483504            self.linkLabel.setText(link1 + "<br/>" + link2) 
    484505             
     
    489510        else: 
    490511            self.dictyExpressBox.hide() 
     512 
     513    def onDictyExpressLink(self, link): 
     514        if not self.data: 
     515            return 
     516 
     517        selectedIndexes = self.treeWidget.selectedIndexes() 
     518        if not len(selectedIndexes): 
     519            QMessageBox.information(self, "No gene ids selected", "Please select some genes and try again.") 
     520            return 
     521        model = self.treeWidget.model() 
     522        mapToSource = model.mapToSource 
     523        selectedIds = [self.cells[mapToSource(index).row()][0] for index in selectedIndexes] 
     524        selectedRows = self.treeWidget.selectedIndexes() 
     525        selectedRows = [mapToSource(index).row() for index in selectedRows] 
     526        model = model.sourceModel() 
     527 
     528        selectedGeneids = [self.row2geneinfo[row] for row in selectedRows] 
     529        selectedIds = [self.geneinfo[i][0] for i in selectedGeneids] 
     530        selectedIds = set(selectedIds) 
     531 
     532        def fix(ddb): 
     533            if ddb.startswith("DDB"): 
     534                if not ddb.startswith("DDB_G"): 
     535                    ddb = ddb.replace("DDB", "DDB_G") 
     536                return ddb 
     537            return None 
     538 
     539        genes = [fix(gene) for gene in selectedIds if fix(gene)] 
     540        url = str(link) % " ".join(genes) 
     541        QDesktopServices.openUrl(QUrl(url)) 
    491542             
    492543    def onAltSourceChange(self): 
     
    515566if __name__ == "__main__": 
    516567    app = QApplication(sys.argv) 
    517     data = orange.ExampleTable("../../orange/doc/datasets/brown-selected.tab") 
     568    data = orange.ExampleTable("brown-selected.tab") 
    518569    w = OWGeneInfo() 
    519570    w.show() 
Note: See TracChangeset for help on using the changeset viewer.