source: orange-bioinformatics/orangecontrib/bio/widgets/OWCustomSets.py @ 1874:b3e32cc5cf6f

Revision 1874:b3e32cc5cf6f, 6.8 KB checked in by Ales Erjavec <ales.erjavec@…>, 6 months ago (diff)

Added new style widget meta descriptions.

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