File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11from collections import UserDict
22
3+
34class Alignment (UserDict ):
45 def __init__ (self , data , taxa ):
56 self .data = data
6- self .taxa = taxa
7+ self .taxa = tuple (taxa )
8+ self .sub_alignments = dict ()
9+
10+ def sub_alignment (self , sub_taxa ):
11+ sub_taxa = tuple (sorted (sub_taxa , key = self .taxa .index ))
12+ try :
13+ return self .sub_alignments [sub_taxa ]
14+ except KeyError :
15+ pass
16+ sub_taxa_indexer = {taxon : self .taxa .index (taxon ) for taxon in sub_taxa }
17+ sub_taxa_indices = sorted (sub_taxa_indexer .values ())
18+ if not (set (sub_taxa ) <= set (self .taxa )):
19+ raise ValueError ("Sub taxa must be a subset of the taxa" )
20+ all_patterns = set (self .data .keys ())
21+ sub_alignment_data = {}
22+ while len (all_patterns ) > 0 :
23+ pattern = all_patterns .pop ()
24+ trimmed_pattern = "" .join (pattern [i ] for i in sub_taxa_indices )
25+ try :
26+ sub_alignment_data [trimmed_pattern ] += self .data [pattern ]
27+ except KeyError :
28+ sub_alignment_data [trimmed_pattern ] = self .data [pattern ]
29+ sub_alignment = Alignment (sub_alignment_data , sub_taxa )
30+ self .sub_alignments [sub_taxa ] = sub_alignment
31+ return sub_alignment
You can’t perform that action at this time.
0 commit comments