def add_complex_index(self, refseq, index, pregaps=0): if isinstance(self._idx[refseq], list): raise AttributeError('A complex index cannot be modified') if not isinstance(index, list): raise AttributeError( 'A complex index is a list of IndexedNum or integers') if len(index) < len(re.sub('-', '', self._seq[refseq].sequence)): raise AttributeError( 'The given index is not long enought to cover que assigned sequence' ) init_value = self._idx[refseq] part_to_add = index[init_value - 1 - pregaps:] self._idx[refseq] = [] count = 0 for x in range(len(self._seq[refseq])): if self._seq[refseq][x] != '-': self._idx[refseq].append(IndexedNum(part_to_add[count])) count += 1 for x in range(len(self._segment[refseq])): if self._segment[refseq][x] != '-': self._segment[refseq][x] = self._sequence_position_id( refseq, self._segment[refseq][x] - init_value + 1) self._has_complex_index = True
def _alignment_position_from_sequence_position(self, refseq, pos): if not isinstance(self._idx[refseq], list): return super(IndexedSeqAli, self)._alignment_position_from_sequence_position( refseq, pos) pos = IndexedNum(pos) if not self._seq[refseq].is_gapped: try: return self._idx[refseq].index(pos) + 1 except ValueError, e: raise IndexError(e.message)
def process_DBREF_line(line): ''' The line format is such as: COLUMNS DATA TYPE FIELD DEFINITION ---------------------------------------------------------------- 1 - 6 Record name "DBREF " 8 - 11 IDcode idCode ID code of this entry. 13 Character chainID Chain identifier. 15 - 18 Integer seqBegin Initial sequence number of the PDB sequence segment. 19 AChar insertBegin Initial insertion code of the PDB sequence segment. 21 - 24 Integer seqEnd Ending sequence number of the PDB sequence segment. 25 AChar insertEnd Ending insertion code of the PDB sequence segment. 27 - 32 LString database Sequence database name. 34 - 41 LString dbAccession Sequence database accession code. 43 - 54 LString dbIdCode Sequence database identification code. 56 - 60 Integer dbseqBegin Initial sequence number of the database seqment. 61 AChar idbnsBeg Insertion code of initial residue of the segment, if PDB is the reference. 63 - 67 Integer dbseqEnd Ending sequence number of the database segment. 68 AChar dbinsEnd Insertion code of the ending residue of the segment, if PDB is the reference. For example: 1 2 3 4 5 6 7 1234567890123456789012345678901234567890123456789012345678901234567890 DBREF 1ABC B 1B 36 PDB 1ABC 1ABC 1B 36 DBREF 3AKY 3 220 SWS P07170 KAD1_YEAST 5 222 DBREF 1HAN 2 288 GB 397884 X66122 1 287 DBREF 3HSV A 1 92 SWS P22121 HSF_KLULA 193 284 DBREF 3HSV B 1 92 SWS P22121 HSF_KLULA 193 284 DBREF 1ARL 1 307 SWS P00730 CBPA_BOVIN 111 417 DBREF 249D A 1 12 NDB BDL070 BDL070 1 12 DBREF 249D B 13 24 NDB BDL070 BDL070 13 24 DBREF 249D C 26 36 NDB BDL070 BDL070 26 36 DBREF 249D D 37 48 NDB BDL070 BDL070 37 48 Detailed info @ http://www.wwpdb.org/documentation/format23/sect3.html ''' data = [] data.append(line[7:11].strip()) data.append(fix_chain(line[12:13].strip())) data.append(IndexedNum(line[14:19].strip())) data.append(IndexedNum(line[20:25].strip())) data.append(line[25:29].strip()) data.append(line[30:41].strip()) return data
def end(self): return IndexedNum(self.line[32:39].strip())
def init(self): return IndexedNum(self.line[20:27].strip())
def end(self): return IndexedNum(self.line[33:38].strip())
def init(self): return IndexedNum(self.line[22:28].strip())