Package obitools :: Package alignment
[hide private]
[frames] | no frames]

Source Code for Package obitools.alignment

 1  from obitools import BioSequence 
 2   
 3   
4 -class AlignedSequence():
5 pass
6 7
8 -class Alignement(list):
9
10 - def _assertData(self,data):
11 assert isinstance(data, BioSequence),'You must only add bioseq to an alignement' 12 if hasattr(self, '_alignlen'): 13 assert self._alignlen==len(data),'All aligned sequences must have the same length' 14 else: 15 self._alignlen=len(data) 16 return data
17
18 - def append(self,data):
19 data = self._assertData(data) 20 list.append(self,data)
21
22 - def __setitem__(self,index,data):
23 24 data = self._assertData(data) 25 list.__setitem__(self,index,data)
26
27 - def getSite(self,key):
28 if isinstance(key,int): 29 return [x[key] for x in self]
30
31 - def isFullGapSite(self,key):
32 return reduce(lambda x,y: x and y,(z=='-' for z in self.getSite(key)),True)
33
34 - def isGappedSite(self,key):
35 return reduce(lambda x,y: x or y,(z=='-' for z in self.getSite(key)),False)
36
37 -def alignmentReader(file,sequenceIterator):
38 seqs = sequenceIterator(file) 39 alignement = Alignement() 40 for seq in seqs: 41 alignement.append(seq) 42 return alignement
43 44 45 46 47
48 -def columnIterator(alignment):
49 lali = len(alignment[0]) 50 for p in xrange(lali): 51 c = [x[p] for x in alignment] 52 yield c
53