allpy
changeset 228:0ed41390408f
repeats: rename group_start and group_end to group_real_start and group_real_end
add new methods group_start and group_end similar to start and end (~ min and ~ max)
author | boris <bnagaev@gmail.com> |
---|---|
date | Sat, 27 Nov 2010 19:21:17 +0300 |
parents | 9c7963064511 |
children | f85ca82c4965 |
files | repeats/repeat_joiner.py repeats/test.py |
diffstat | 2 files changed, 50 insertions(+), 23 deletions(-) [+] |
line diff
1.1 --- a/repeats/repeat_joiner.py Sat Nov 27 18:47:13 2010 +0300 1.2 +++ b/repeats/repeat_joiner.py Sat Nov 27 19:21:17 2010 +0300 1.3 @@ -36,7 +36,7 @@ 1.4 repeat_pair 1.5 1.6 in repeat_group (installes in init): 1.7 - group_start -- position of real_start() of this repeat in group 1.8 + group_real_start -- position of real_start() of this repeat in group 1.9 group_ori -- if position of real_start() of this repeat in the group < position of real_end() 1.10 """ 1.11 1.12 @@ -45,7 +45,7 @@ 1.13 self.start = pos_from 1.14 self.end = pos_to 1.15 self.ori = ori 1.16 - self.group_start = None # for repr 1.17 + self.group_real_start = None # for repr 1.18 self.group_ori = None 1.19 if chromosome_name not in repeat_joiner: 1.20 repeat_joiner[chromosome_name] = Chromosome(chromosome_name) 1.21 @@ -92,33 +92,60 @@ 1.22 return self.end - self.start 1.23 1.24 @property 1.25 - def group_end(self): 1.26 + def group_real_end(self): 1.27 """ reletive end of repeat """ 1.28 if self.group_ori: 1.29 - return self.group_start + len(self) 1.30 + return self.group_real_start + len(self) 1.31 else: 1.32 - return self.group_start - len(self) 1.33 - 1.34 + return self.group_real_start - len(self) 1.35 + 1.36 + @property 1.37 + def group_start(self): 1.38 + """ min of repeat positions in group """ 1.39 + if self.group_ori: 1.40 + return self.group_real_start 1.41 + else: 1.42 + return self.group_real_end + 1 1.43 + 1.44 + @property 1.45 + def group_end(self): 1.46 + """ max of repeat positions in group """ 1.47 + if self.group_ori: 1.48 + return self.group_real_end 1.49 + else: 1.50 + return self.group_real_start + 1 1.51 + 1.52 def inherit_from(self, other): 1.53 - """ Use other as source repeat to set group_ori and group_start of this """ 1.54 + """ Use other as source repeat to set group_ori and group_real_start of this """ 1.55 if self.thick_edge() == other: 1.56 - self.group_start = other.group_start 1.57 + self.group_real_start = other.group_real_start 1.58 self.group_ori = other.group_ori 1.59 else: 1.60 chromosome_ori = other.ori == other.group_ori 1.61 self.group_ori = self.ori == chromosome_ori 1.62 delta = self.real_start - other.real_start 1.63 if chromosome_ori: 1.64 - self.group_start = other.group_start + delta 1.65 + self.group_real_start = other.group_real_start + delta 1.66 else: 1.67 - self.group_start = other.group_start - delta 1.68 + self.group_real_start = other.group_real_start - delta 1.69 1.70 def __repr__(self): 1.71 - if self.group_start != None: 1.72 - return "%s: [%i(%i), %i(%i))" % (self.chromosome, self.real_start, self.group_start, self.real_end, self.group_end) 1.73 + if self.group_real_start != None: 1.74 + return "%s: [%i(%i), %i(%i))" % (self.chromosome, self.real_start, 1.75 + self.group_real_start, self.real_end, self.group_real_end) 1.76 else: 1.77 return "%s: [%i, %i)" % (self.chromosome, self.real_start, self.real_end) 1.78 1.79 + def __str__(self): 1.80 + ori = 1 if self.ori else -1 1.81 + if self.group_real_start != None: 1.82 + group_ori = 1 if self.group_ori else -1 1.83 + return "%s %i %i %i %i %i %i" % (self.chromosome, self.start, 1.84 + self.end, self.group_start, self.group_end, ori, group_ori) 1.85 + else: 1.86 + return "%s %i %i %i" % (self.chromosome, self.start, 1.87 + self.end, ori) 1.88 + 1.89 class RepeatPair(tuple): 1.90 """ (repeat, repeat) """ 1.91 def __init__(self, repeat1_repeat2): 1.92 @@ -133,11 +160,11 @@ 1.93 self.start = 0 1.94 1.95 def calc_start(self): 1.96 - """ shift all group_end to make min position zero """ 1.97 - offset = -min(min(repeat.group_start, repeat.group_end) 1.98 + """ shift all grou coordinates to make min position zero """ 1.99 + offset = -min(min(repeat.group_real_start, repeat.group_real_end) 1.100 for repeat in self) 1.101 for repeat in self: 1.102 - repeat.group_start += offset 1.103 + repeat.group_real_start += offset 1.104 1.105 class RepeatJoiner(dict): 1.106 """ dictionary {<chromosome name>: chromosome} 1.107 @@ -197,7 +224,7 @@ 1.108 for repeat in self._repeats: 1.109 if repeat not in used: 1.110 repeat.group_ori = True 1.111 - repeat.group_start = repeat.real_start 1.112 + repeat.group_real_start = repeat.real_start 1.113 repeat_group = RepeatGroup() 1.114 self.repeat_groups.append(repeat_group) 1.115 q = Queue.Queue()
2.1 --- a/repeats/test.py Sat Nov 27 18:47:13 2010 +0300 2.2 +++ b/repeats/test.py Sat Nov 27 19:21:17 2010 +0300 2.3 @@ -18,17 +18,17 @@ 2.4 from2 = int(from2) 2.5 to2 = int(to2) + 1 2.6 2.7 - RepeatPair([Repeat(rj, c1, from1, to1, ori1), Repeat(rj, c2, from2, to2, ori2)]) 2.8 + r1 = Repeat(rj, c1, from1, to1, ori1) 2.9 + r2 = Repeat(rj, c2, from2, to2, ori2) 2.10 + RepeatPair([r1, r2]) 2.11 2.12 rj.build_groups() 2.13 rj.repeat_groups.sort(key=lambda g: len(g), reverse=True) 2.14 + 2.15 + 2.16 print "group\tchr\tchr_from\tchr_to\tgroup_from\tgroup_to\tori\tgroup_ori" 2.17 for i, repeat_group in enumerate(rj.repeat_groups): 2.18 - repeat_group.sort(key=lambda r: min(r.group_start, r.group_end)) 2.19 - # pprint.pprint(repeat_group) 2.20 + repeat_group.sort(key=lambda r: r.group_start) 2.21 for repeat in repeat_group: 2.22 - ori = 1 if repeat.ori else -1 2.23 - group_ori = 1 if repeat.group_ori else -1 2.24 - print "%i\t%s\t%i\t%i\t%i\t%i\t%i\t%i" % (i, repeat.chromosome, repeat.start, 2.25 - repeat.end-1, repeat.group_start, repeat.group_end-1, ori, group_ori) 2.26 + print "%i\t%s" % (i, str(repeat).replace(' ', '\t')) 2.27