Mercurial > repos > iuc > genetrack
comparison genetrack_util.py @ 4:b41a4bb828a3 draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/genetrack commit 2772547f531819d3f6d892ed041fa39b82e3550f
author | iuc |
---|---|
date | Wed, 05 Jul 2017 11:56:54 -0400 |
parents | 41887967ef14 |
children |
comparison
equal
deleted
inserted
replaced
3:41887967ef14 | 4:b41a4bb828a3 |
---|---|
4 import subprocess | 4 import subprocess |
5 import sys | 5 import sys |
6 import tempfile | 6 import tempfile |
7 | 7 |
8 import numpy | 8 import numpy |
9 from six import Iterator | |
9 | 10 |
10 GFF_EXT = 'gff' | 11 GFF_EXT = 'gff' |
11 SCIDX_EXT = 'scidx' | 12 SCIDX_EXT = 'scidx' |
12 | 13 |
13 | 14 |
39 for fn in conversion_functions(in_fmt, out_fmt): | 40 for fn in conversion_functions(in_fmt, out_fmt): |
40 data = fn(data) | 41 data = fn(data) |
41 return data | 42 return data |
42 | 43 |
43 | 44 |
44 class ChromosomeManager(object): | 45 class ChromosomeManager(Iterator): |
45 """ | 46 """ |
46 Manages a CSV reader of an index file to only load one chrom at a time | 47 Manages a CSV reader of an index file to only load one chrom at a time |
47 """ | 48 """ |
48 | 49 |
49 def __init__(self, reader): | 50 def __init__(self, reader): |
51 self.reader = reader | 52 self.reader = reader |
52 self.processed_chromosomes = [] | 53 self.processed_chromosomes = [] |
53 self.current_index = 0 | 54 self.current_index = 0 |
54 self.next_valid() | 55 self.next_valid() |
55 | 56 |
56 def next(self): | 57 def __next__(self): |
57 self.line = self.reader.next() | 58 self.line = next(self.reader) |
58 | 59 |
59 def is_valid(self, line): | 60 def is_valid(self, line): |
60 if len(line) not in [4, 5, 9]: | 61 if len(line) not in [4, 5, 9]: |
61 return False | 62 return False |
62 try: | 63 try: |
75 | 76 |
76 def next_valid(self): | 77 def next_valid(self): |
77 """ | 78 """ |
78 Advance to the next valid line in the reader | 79 Advance to the next valid line in the reader |
79 """ | 80 """ |
80 self.line = self.reader.next() | 81 self.line = next(self.reader) |
81 s = 0 | 82 s = 0 |
82 while not self.is_valid(self.line): | 83 while not self.is_valid(self.line): |
83 self.line = self.reader.next() | 84 self.line = next(self.reader) |
84 s += 1 | 85 s += 1 |
85 if s > 0: | 86 if s > 0: |
86 # Skip initial line(s) of file | 87 # Skip initial line(s) of file |
87 pass | 88 pass |
88 | 89 |
113 msg = 'Reads in chromosome %s are not sorted by index. (At index %d)' % (cname, self.current_index) | 114 msg = 'Reads in chromosome %s are not sorted by index. (At index %d)' % (cname, self.current_index) |
114 stop_err(msg) | 115 stop_err(msg) |
115 self.current_index = read[0] | 116 self.current_index = read[0] |
116 self.add_read(read) | 117 self.add_read(read) |
117 try: | 118 try: |
118 self.next() | 119 next(self) |
119 except StopIteration: | 120 except StopIteration: |
120 self.done = True | 121 self.done = True |
121 break | 122 break |
122 self.processed_chromosomes.append(cname) | 123 self.processed_chromosomes.append(cname) |
123 self.current_index = 0 | 124 self.current_index = 0 |
269 | 270 |
270 def normal_func(x): | 271 def normal_func(x): |
271 return math.exp(-x * x / (2 * sigma2)) | 272 return math.exp(-x * x / (2 * sigma2)) |
272 | 273 |
273 # width is the half of the distribution | 274 # width is the half of the distribution |
274 values = map(normal_func, range(-width, width)) | 275 values = list(map(normal_func, range(-width, width))) |
275 values = numpy.array(values, numpy.float) | 276 values = numpy.array(values, numpy.float) |
276 # normalization | 277 # normalization |
277 if normalize: | 278 if normalize: |
278 values = 1.0 / math.sqrt(2 * numpy.pi * sigma2) * values | 279 values = 1.0 / math.sqrt(2 * numpy.pi * sigma2) * values |
279 return values | 280 return values |