allpy
changeset 231:bc89ae6cb86e
Backed out changeset 684ff5579345
author | boris <bnagaev@gmail.com> |
---|---|
date | Sat, 27 Nov 2010 21:44:26 +0300 |
parents | 684ff5579345 |
children | 30238d84d597 |
files | repeats/repeat_joiner.py repeats/test.py |
diffstat | 2 files changed, 27 insertions(+), 29 deletions(-) [+] |
line diff
1.1 --- a/repeats/repeat_joiner.py Sat Nov 27 21:44:11 2010 +0300 1.2 +++ b/repeats/repeat_joiner.py Sat Nov 27 21:44:26 2010 +0300 1.3 @@ -7,7 +7,7 @@ 1.4 1.5 import Queue 1.6 1.7 -from bx.intervals.intersection import Intersecter 1.8 +from bx.intervals.intersection import Intersecter, Interval 1.9 1.10 import config 1.11 1.12 @@ -33,28 +33,24 @@ 1.13 1.14 chromosome 1.15 ori 1.16 - thick_edges -- set of Repeat objects, that are paired with this 1.17 + repeat_pair 1.18 1.19 in repeat_group (installes in init): 1.20 group_real_start -- position of real_start() of this repeat in group 1.21 group_ori -- if position of real_start() of this repeat in the group < position of real_end() 1.22 """ 1.23 - 1.24 - def __init__(self, chromosome, pos_from, pos_to, ori=True): 1.25 + 1.26 + def __init__(self, repeat_joiner, chromosome_name, pos_from, pos_to, ori=True): 1.27 + repeat_joiner._repeats.append(self) 1.28 self.start = pos_from 1.29 self.end = pos_to 1.30 self.ori = ori 1.31 self.group_real_start = None # for repr 1.32 self.group_ori = None 1.33 - self.chromosome = chromosome 1.34 - self.thick_edges = set() 1.35 - chromosome.insert_interval(self) 1.36 - 1.37 - @staticmethod 1.38 - def pair(repeat1, repeat2): 1.39 - """ add links beetween this repeats """ 1.40 - repeat1.thick_edges.add(repeat2) 1.41 - repeat2.thick_edges.add(repeat1) 1.42 + if chromosome_name not in repeat_joiner: 1.43 + repeat_joiner[chromosome_name] = Chromosome(chromosome_name) 1.44 + self.chromosome = repeat_joiner[chromosome_name] 1.45 + repeat_joiner[chromosome_name].insert_interval(self) 1.46 1.47 def thin_edges(self, min_intersection=config.min_intersection): 1.48 """ return all thin edges (intersected intervals) """ 1.49 @@ -64,9 +60,16 @@ 1.50 return [] 1.51 return filter(lambda r: r != self, self.chromosome.find(pos_start, pos_end)) 1.52 1.53 + def thick_edge(self): 1.54 + """ return thick edge (paired repeat) """ 1.55 + if self == self.repeat_pair[0]: 1.56 + return self.repeat_pair[1] 1.57 + else: 1.58 + return self.repeat_pair[0] 1.59 + 1.60 def edges(self, min_intersection=config.min_intersection): 1.61 """ visit thick edge at first and then all thin edges """ 1.62 - return self.thick_edges + self.thin_edges(min_intersection) 1.63 + return [self.thick_edge()] + self.thin_edges(min_intersection) 1.64 1.65 @property 1.66 def real_start(self): 1.67 @@ -114,7 +117,7 @@ 1.68 1.69 def inherit_from(self, other): 1.70 """ Use other as source repeat to set group_ori and group_real_start of this """ 1.71 - if other in self.thick_edges: 1.72 + if self.thick_edge() == other: 1.73 self.group_real_start = other.group_real_start 1.74 self.group_ori = other.group_ori 1.75 else: 1.76 @@ -144,6 +147,13 @@ 1.77 return "%s %i %i %i" % (self.chromosome, self.start, 1.78 self.end, ori) 1.79 1.80 +class RepeatPair(tuple): 1.81 + """ (repeat, repeat) """ 1.82 + def __init__(self, repeat1_repeat2): 1.83 + repeat1, repeat2 = repeat1_repeat2 1.84 + repeat1.repeat_pair = self 1.85 + repeat2.repeat_pair = self 1.86 + 1.87 class RepeatGroup(list): 1.88 """ list of repeats """ 1.89 1.90 @@ -208,18 +218,6 @@ 1.91 def __init__(self): 1.92 self.repeat_groups = [] 1.93 self._repeats = [] 1.94 - 1.95 - def get_or_create(self, chromosome_name, pos_from, pos_to, ori=True): 1.96 - """ """ 1.97 - if chromosome_name not in self: 1.98 - self[chromosome_name] = Chromosome(chromosome_name) 1.99 - chromosome = self[chromosome_name] 1.100 - for repeat in chromosome.find(pos_from, pos_to): 1.101 - if repeat.start==pos_from and repeat.end==pos_to and repeat.ori==ori: 1.102 - return repeat 1.103 - repeat = Repeat(chromosome, pos_from, pos_to, ori) 1.104 - self._repeats.append(repeat) 1.105 - return repeat 1.106 1.107 def build_groups(self): 1.108 """ build repeat groups """
2.1 --- a/repeats/test.py Sat Nov 27 21:44:11 2010 +0300 2.2 +++ b/repeats/test.py Sat Nov 27 21:44:26 2010 +0300 2.3 @@ -18,8 +18,8 @@ 2.4 from2 = int(from2) 2.5 to2 = int(to2) + 1 2.6 2.7 - r1 = rj.get_or_create(c1, from1, to1, ori1) 2.8 - r2 = rj.get_or_create(c2, from2, to2, ori2) 2.9 + r1 = Repeat(rj, c1, from1, to1, ori1) 2.10 + r2 = Repeat(rj, c2, from2, to2, ori2) 2.11 RepeatPair([r1, r2]) 2.12 2.13 rj.build_groups()