-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathgmt.py
More file actions
132 lines (110 loc) · 3.34 KB
/
Copy pathgmt.py
File metadata and controls
132 lines (110 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import os
from collections import defaultdict
from six import iteritems
class GMT:
"""
Pass the filename of gmt file.
"""
def __init__(self, filename=None):
self._genesets = defaultdict(set)
self._setnames = {}
self._genes = set()
if filename:
gmtfile = open(filename)
for line in gmtfile:
tok = line.strip().split('\t')
(gsid, name, genes) = tok[0], tok[1], tok[2:]
self._genesets[gsid] = set(genes)
self._setnames[gsid] = name
self._genes |= self._genesets[gsid]
def ids(self):
return self.genesets.keys()
@property
def genesets(self):
return self._genesets
@property
def genes(self):
return self._genes
@property
def setnames(self):
return self._setnames
def get_genes(self, gsid):
return self._genesets[gsid]
def add_geneset(self, gsid=None, name=None):
self._setnames[gsid] = name
self._genesets[gsid] = set()
def add_gene(self, gsid, gene):
self._genesets[gsid].add(gene)
def add(self, gmt):
for gsid, genes in iteritems(gmt.genesets):
self._genesets[gsid] |= genes
for gsid, name in iteritems(gmt.setnames):
if gsid not in self._setnames:
self._setnames[gsid] = gmt.setnames[gsid]
def write(self, outfile):
outf = open(outfile, 'w')
for gsid, genes in iteritems(self._genesets):
outf.write(
gsid +
'\t' +
self._setnames[gsid] +
'\t' +
'\t'.join(
list(genes)) +
'\n')
outf.close()
def __repr__(self):
return self._genesets.__repr__()
if __name__ == '__main__':
from optparse import OptionParser
usage = "usage: %prog [options]"
parser = OptionParser(usage, version="%prog dev-unreleased")
parser.add_option(
"-i",
"--gmt-file",
dest="gmt",
help="GMT file",
metavar="FILE")
parser.add_option(
"-d",
"--directory",
dest="dir",
help="directory of gene files",
metavar="FILE")
parser.add_option(
"-c",
"--gmt-comp-file",
dest="gmt2",
help="GMT file to combine",
metavar="FILE")
parser.add_option(
"-o",
"--output-gmt-file",
dest="output",
help="GMT file to output",
metavar="FILE")
parser.add_option(
"-g",
"--gene-file",
dest="genef",
help="gene file for comparision",
metavar="FILE")
(options, args) = parser.parse_args()
if options.dir:
gs = GMT()
for f in os.listdir(options.dir):
lines = open(options.dir + '/' + f).readlines()
for l in lines:
gs.genesets[f].add(l.strip())
gs.setnames[f] = f
gs.write(options.output)
else:
# lines = open(options.genef).readlines()
# genes = set()
# for l in lines:
# genes.add(l.strip())
gs = GMT(options.gmt)
print(gs.setnames)
# for gname, gset in gs.overlap().iteritems():
# for gname2, ovlp in gset.iteritems():
# print(("%s %s %s") % (gname, gname2, ovlp))