source: orange-bioinformatics/_bioinformatics/widgets/OWCustomSets.py @ 1837:3ca19c9e0eb2

Revision 1837:3ca19c9e0eb2, 6.6 KB checked in by Flashpoint <vid.flashpoint@…>, 9 months ago (diff)

Fixed a filename bug in OWCustomSets.py

RevLine 
[1812]1"""
2<name>Custom Gene Sets</name>
3<description>Manage custom geneset files</description>
[1837]4<icon>icons/customSets.svg</icon>
[1812]5<contact>Vid Jelen (vid.jelen1@gmail.com)</contact>
6"""
7import os
8from StringIO import StringIO
9
10import Orange
[1814]11import cPickle as pickle
[1812]12
13from OWWidget import *
14import OWGUI
15
[1814]16from Orange.bio.obiGeneSets import loadGMT, list_local, register, local_path, remove_local, modification_date, getGenesetsStats
[1812]17
18class OWCustomSets(OWWidget):
19
20    def __init__(self, parent=None, signalManager=None,
[1821]21                 title="Custom Gene Set Manager"):
[1812]22        OWWidget.__init__(self, parent, signalManager, title,
23                          wantMainArea=True)
24
25        self.inputs = []
26        self.outputs = []
27        self.new_geneset = set()
[1817]28        self.selected_file = "" 
[1812]29
[1821]30        self.browse_button = OWGUI.button(self.controlArea, self, 'Import Gene Sets ...', callback = self.on_open_dialog)
31        self.browse_button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
[1812]32
[1816]33        # The preview field       
[1820]34        box = OWGUI.widgetBox(self.controlArea, "Imported Gene Sets")
[1819]35        self.preview_view = QTreeWidget()
36        self.preview_view.setAllColumnsShowFocus(1)
37        self.preview_view.setColumnCount(3)
38        self.preview_view.setHeaderLabels(["Name", "# of Genes", "Genes"])
39
40        self.preview_view.header().setStretchLastSection(True)
41        self.preview_view.header().setClickable(True)
42        self.preview_view.header().setSortIndicatorShown(True)
43        self.preview_view.setSortingEnabled(True)
44
[1812]45        # The geneset table
46        ma = self.mainArea
47
48        self.listView = QTreeWidget(ma)
[1818]49
50        # Adding the widgets into separate layouts
51        ma.layout().addWidget(self.preview_view)
52        box.layout().addWidget(self.listView)
53
[1812]54        self.listView.setAllColumnsShowFocus(1)
[1816]55        self.listView.setColumnCount(2)
56        self.listView.setHeaderLabels(["Name", "Import time"])
[1812]57
58        self.listView.header().setStretchLastSection(True)
59
60        self.listView.setSelectionMode(QAbstractItemView.SingleSelection)
61        self.listView.setSelectionBehavior(QAbstractItemView.SelectRows)
62
63        self.populate_table()
64
[1817]65        self.resize(800, 500)
[1812]66
[1816]67        #Data Set info bar
68        info_box = OWGUI.widgetBox(self.controlArea, "Info")
69        self.info = OWGUI.widgetLabel(info_box, "No gene set selected")
70        self.connect(self.listView, SIGNAL("itemSelectionChanged()"), self.selection)
71        self.connect(self.listView, SIGNAL("itemSelectionChanged()"), self.update_preview)
72
73        info_box.layout().addWidget(self.info)       
74       
75        OWGUI.button(self.controlArea, self, "Delete", callback=self.delete_data)
76
77    def selection(self): 
78        if self.listView.selectedItems():
79            self.info.clear()
[1837]80            name = self.listView.selectedItems()[0].text(0).replace(" - ", "_._") 
[1816]81            for geneset in os.listdir(local_path()):
82                if geneset.__contains__(str(name)):
83                    the_file = os.path.join(local_path(), geneset) 
84                    sets = pickle.load(open(the_file, "rb"))
85                    stats = getGenesetsStats(sets)
86                    num_sets, uniq_genes, avg_genes = str(stats[0]), str(stats[1]), str(stats[2])
87                    break
[1821]88            self.info.setText("Gene Sets: %d\nUnique Genes: %d\nAverage Gene Set Size: %d" % (int(num_sets), int(uniq_genes), int(avg_genes)))
[1816]89        else:
90            self.info.setText("No gene set selected")
91
92
[1812]93    def populate_table(self):
94        self.listView.clear()
95        for geneset in os.listdir(local_path()):
96            item = QTreeWidgetItem(self.listView)
[1837]97            name = geneset[geneset.index("_")+1:geneset.rfind("_._")]
[1812]98            the_file = os.path.join(local_path(), geneset)
99            mod_time = str(modification_date(the_file))
[1837]100            item.setText(0, name.replace("_._", " - "))
[1816]101            item.setText(1, mod_time[:mod_time.rfind(".")])
[1812]102
103    def on_select_recent(self, recent):
104        if isinstance(recent, int):
105            recent = self.recent_files[recent]
106
107        self.set_selected_file(recent)
108
109    def on_open_dialog(self):
110        last = os.path.expanduser("~/Documents")
111        path = QFileDialog.getOpenFileName(self, "Open File","" ,"geneset file *.gmt (*.gmt);;All files (*)", last)
112        path = unicode(path)
113        if path:
114            self.set_selected_file(path)
115
116    def set_selected_file(self, filename):
117        basedir, name = os.path.split(filename)
118        self.selected_file = filename
119        self.genesetname = name
[1817]120           
121        self.import_data()
122                                                                   
[1812]123    def update_preview(self):
[1816]124        if self.listView.selectedItems():
125            final_text = ""
126            self.preview_view.clear()
[1837]127            name = self.listView.selectedItems()[0].text(0).replace(" - ", "_._")           
[1816]128            for geneset in os.listdir(local_path()):
129                if geneset.__contains__(str(name)):
130                    the_file = os.path.join(local_path(), geneset) 
131                    sets = pickle.load(open(the_file, "rb"))
[1815]132                    break
[1816]133            for geneset in sets:
[1819]134                item = QTreeWidgetItem(self.preview_view)
135                item.setText(0, geneset.id)
136                item.setData(1, Qt.DisplayRole, len(geneset.genes))
[1820]137                item.setText(2, ", ".join(list(geneset.genes)[:5]) + ", ...")
[1816]138        else:
139            self.preview_view.clear()
140
[1812]141    def import_data(self):   
142        self.error(0)     
143        if self.selected_file:
144            try:
145                self.new_geneset = loadGMT(open(self.selected_file, "rt").read(), self.genesetname)
146                geneset_split = self.new_geneset.split_by_hierarchy()
147                for geneset in geneset_split:
148                    register(geneset)
149                self.populate_table()
150            except Exception, ex:
151                self.error(0, "An error occurred while "
152                              "loading the file:\n\t%r" % self.selected_file
153                              )   
154
155    def delete_data(self):   
156        self.error(0)
157        if self.listView.selectedItems():
158            try:
159                unwantedGeneset = str(self.listView.selectedItems()[0].text(0))
160                remove_local(unwantedGeneset)
161                self.populate_table()
162            except Exception, ex:
163                self.error(0, "An error occurred while "
164                              "deleting the file:\n\t%r" % unwantedGeneset
165                              )   
166       
167if __name__ == "__main__":
168    import sys
169    app = QApplication(sys.argv)
170    w = OWCustomSets()
171    w.show()
172    app.exec_()
173    w.saveSettings()
Note: See TracBrowser for help on using the repository browser.