/usr/share/pyshared/Bio/PDB/Chain.py is in python-biopython 1.58-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | # Copyright (C) 2002, Thomas Hamelryck (thamelry@binf.ku.dk)
# This code is part of the Biopython distribution and governed by its
# license. Please see the LICENSE file that should have been included
# as part of this package.
"""Chain class, used in Structure objects."""
from Bio.PDB.Entity import Entity
class Chain(Entity):
def __init__(self, id):
self.level="C"
Entity.__init__(self, id)
# Private methods
def _sort(self, r1, r2):
"""Sort function for residues in a chain
Residues are first sorted according to their hetatm records.
Protein and nucleic acid residues first, hetatm residues next,
and waters last. Within each group, the residues are sorted according
to their resseq's (sequence identifiers). Finally, residues with the
same resseq's are sorted according to icode.
Arguments:
o r1, r2 - Residue objects
"""
hetflag1, resseq1, icode1=r1.id
hetflag2, resseq2, icode2=r2.id
if hetflag1!=hetflag2:
return cmp(hetflag1[0], hetflag2[0])
elif resseq1!=resseq2:
return cmp(resseq1, resseq2)
return cmp(icode1, icode2)
def _translate_id(self, id):
"""
A residue id is normally a tuple (hetero flag, sequence identifier,
insertion code). Since for most residues the hetero flag and the
insertion code are blank (i.e. " "), you can just use the sequence
identifier to index a residue in a chain. The _translate_id method
translates the sequence identifier to the (" ", sequence identifier,
" ") tuple.
Arguments:
o id - int, residue resseq
"""
if isinstance(id, int):
id=(' ', id, ' ')
return id
# Special methods
def __getitem__(self, id):
"""Return the residue with given id.
The id of a residue is (hetero flag, sequence identifier, insertion code).
If id is an int, it is translated to (" ", id, " ") by the _translate_id
method.
Arguments:
o id - (string, int, string) or int
"""
id=self._translate_id(id)
return Entity.__getitem__(self, id)
def __delitem__(self, id):
"""
Arguments:
o id - (string, int, string) or int
"""
id=self._translate_id(id)
return Entity.__delitem__(self, id)
def __repr__(self):
return "<Chain id=%s>" % self.get_id()
# Public methods
def get_unpacked_list(self):
"""Return a list of undisordered residues.
Some Residue objects hide several disordered residues
(DisorderedResidue objects). This method unpacks them,
ie. it returns a list of simple Residue objects.
"""
unpacked_list=[]
for residue in self.get_list():
if residue.is_disordered()==2:
for dresidue in residue.disordered_get_list():
unpacked_list.append(dresidue)
else:
unpacked_list.append(residue)
return unpacked_list
def has_id(self, id):
"""Return 1 if a residue with given id is present.
The id of a residue is (hetero flag, sequence identifier, insertion code).
If id is an int, it is translated to (" ", id, " ") by the _translate_id
method.
Arguments:
o id - (string, int, string) or int
"""
id=self._translate_id(id)
return Entity.has_id(self, id)
# Public
def get_atoms(self):
for r in self:
for a in r:
yield a
|