Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/rev/bc89ae6cb86e
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 00:28:32 2012
Кодировка:
allpy: bc89ae6cb86e

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()