allpy
changeset 590:8a81996f8bda
structure.py: add join parameter to pair_cores_parts()
with join parameter all parts are joined to intersecting parts
author | boris (kodomo) <bnagaev@gmail.com> |
---|---|
date | Sat, 26 Mar 2011 01:24:21 +0300 |
parents | ab37134638b4 |
children | 49582a92418a |
files | allpy/structure.py |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line diff
1.1 --- a/allpy/structure.py Sat Mar 26 01:15:35 2011 +0300 1.2 +++ b/allpy/structure.py Sat Mar 26 01:24:21 2011 +0300 1.3 @@ -376,13 +376,15 @@ 1.4 1.5 def pair_core_parts(self, max_delta=config.delta, 1.6 timeout=config.timeout, min_width=config.min_width, 1.7 - min_core_size=config.min_core_size): 1.8 + min_core_size=config.min_core_size, join=True): 1.9 """ Return list of continuous parts of gc for each sequence pair 1.10 1.11 part is block 1.12 + 1.13 + * join -- join parts from all alternative cores 1.14 """ 1.15 column2pos = self.column2pos() 1.16 - parts = [] 1.17 + result = [] 1.18 for i, seq1 in enumerate(self.sequences): 1.19 for j, seq2 in enumerate(self.sequences): 1.20 if i < j: 1.21 @@ -391,12 +393,23 @@ 1.22 cores = block.geometrical_cores(max_delta=max_delta, 1.23 timeout=timeout, minsize=min_core_size, 1.24 ac_new_atoms=0.0, ac_count=0) 1.25 + parts = [] 1.26 for core in cores: 1.27 core_block = copy(block) 1.28 core_block.columns = sorted(core, 1.29 key=column2pos.get) 1.30 parts += core_block.continuous_blocks(min_width) 1.31 - return parts 1.32 + if join: 1.33 + columns = set() 1.34 + for part in parts: 1.35 + columns |= set(part.columns) 1.36 + join_block = copy(block) 1.37 + join_block.columns = sorted(columns, 1.38 + key=column2pos.get) 1.39 + result += join_block.continuous_blocks() 1.40 + else: 1.41 + result += parts 1.42 + return result 1.43 1.44 def blocks3d(self, max_delta=config.delta, 1.45 timeout=config.timeout, timeout_2=config.timeout_2,