Package obitools :: Package cns :: Module quality
[hide private]
[frames] | no frames]

Source Code for Module obitools.cns.quality

  1  """ 
  2   
  3   
  4  """ 
  5   
  6  from obitools.fasta import fastaIterator 
  7  from obitools.cns import cnsTag 
  8  from obitools.location import Location 
  9   
10 -class QualitySequence(list):
11
12 - def __init__(self,id,seq,definition=None,**info):
13 ''' 14 15 @param id: 16 @param seq: 17 @param definition: 18 ''' 19 list.__init__(self,seq) 20 self._info = dict(info) 21 self.definition=definition 22 self.id=id
23
24 - def getDefinition(self):
25 ''' 26 Sequence definition getter 27 28 @return: the sequence definition 29 @rtype: str 30 31 ''' 32 return self._definition
33
34 - def setDefinition(self, value):
35 self._definition = value
36
37 - def getId(self):
38 return self._id
39
40 - def setId(self, value):
41 self._id = value
42
43 - def __getitem__(self,key):
44 if isinstance(key,Location): 45 return key.extractSequence(self) 46 elif isinstance(key, str): 47 return self._info[key] 48 elif isinstance(key, int): 49 return list.__getitem__(self,key) 50 elif isinstance(key, slice): 51 subseq=list.__getitem__(self,key) 52 info = dict(self._info) 53 if key.start is not None: 54 start = key.start +1 55 else: 56 start = 1 57 if key.stop is not None: 58 stop = key.stop+1 59 else: 60 stop = len(self) 61 if key.step is not None: 62 step = key.step 63 else: 64 step = 1 65 66 info['cut']='[%d,%d,%s]' % (start,stop,step) 67 return QualitySequence(self.id, subseq, self.definition,**info) 68 69 raise TypeError,'key must be an integer, a str or a slice'
70
71 - def __setitem__(self,key,value):
72 self._info[key]=value
73
74 - def __delitem__(self,key):
75 if isinstance(key, str): 76 del self._info[key] 77 else: 78 raise TypeError,key
79
80 - def __iter__(self):
81 return list.__iter__(self)
82
83 - def __contains__(self,key):
84 return key in self._info
85
86 - def getTags(self):
87 return self._info
88
89 - def complement(self):
90 ''' 91 92 ''' 93 cseq = self[::-1] 94 rep = QualitySequence(self.id,cseq,self.definition,**self._info) 95 rep._info['complemented']=not rep._info.get('complemented',False) 96 return rep
97 98 99 definition = property(getDefinition, setDefinition, None, "Sequence Definition") 100 101 id = property(getId, setId, None, 'Sequence identifier')
102 103
104 -def _qualityJoinSeq(seqarray):
105 text = ' '.join([x.strip() for x in seqarray]) 106 return [int(x) for x in text.split()]
107
108 -def qualityIterator(file):
109 for q in fastaIterator(file, QualitySequence, cnsTag, _qualityJoinSeq): 110 yield q
111