annotate rois.py @ 4:1a5ea7128b6a draft

Uploaded
author holtgrewe
date Tue, 14 May 2013 04:52:22 -0400
parents 61d9bdb6d519
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
1 #!/usr/bin/env python
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
2
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
3 class RoiRecord(object):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
4 """Represent one record in a ROI file."""
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
5
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
6 def __init__(self, ref, start_pos, end_pos, region_name, region_length,
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
7 strand, max_count, data, points):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
8 """Initialize RoiRecord."""
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
9 self.ref = ref
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
10 self.start_pos = start_pos
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
11 self.end_pos = end_pos
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
12 self.strand = strand
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
13 self.region_length = region_length
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
14 self.region_name = region_name
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
15 self.max_count = max_count
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
16 self.data = data
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
17 self.points = points
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
18
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
19 def __str__(self):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
20 return 'RoiRecord(%s, %s, %s, %s, %s, %s, %s, %s, len([...])==%s)' % \
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
21 (repr(self.ref), self.start_pos, self.end_pos,
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
22 self.region_name, self.region_length, repr(self.strand),
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
23 self.max_count, self.data, len(self.points))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
24 def __repr__(self):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
25 return self.__str__()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
26
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
27
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
28 def loadRoi(path, max_count=0):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
29 """Load ROI file and return it as a list of RoiRecord objects.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
30
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
31 NA values are translated to 0.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
32 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
33 data_keys = []
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
34 result = []
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
35 i = 0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
36 with open(path, 'rb') as f:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
37 for line in f:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
38 if line.startswith('##'):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
39 data_keys = line[2:].split('\t')[7:-1]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
40 if line[0] == '#':
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
41 continue
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
42 if max_count > 0 and i >= max_count:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
43 break
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
44 i += 1
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
45 vals = line.split()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
46 region_length = int(vals[4])
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
47 data = vals[7:-1]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
48 points = [int(x) for x in vals[-1].split(',')]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
49 r = RoiRecord(vals[0], int(vals[1]) - 1, int(vals[2]), vals[3],
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
50 region_length, vals[5], int(vals[6]), data, points)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
51 result.append(r)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
52 #print ' => Loaded %d records.' % len(result)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
53 return data_keys, result