in data/xpdb.py [0:0]
def init_residue(self, resname, field, resseq, icode):
"""Initiate a new Residue object.
Arguments:
resname: string, e.g. "ASN"
field: hetero flag, "W" for waters, "H" for hetero residues, otherwise blanc.
resseq: int, sequence identifier
icode: string, insertion code
Return:
None
"""
if field != " ":
if field == "H":
# The hetero field consists of
# H_ + the residue name (e.g. H_FUC)
field = "H_" + resname
res_id = (field, resseq, icode)
if resseq > self.max_resseq:
self.max_resseq = resseq
if field == " ":
fudged_resseq = False
while self.chain.has_id(res_id) or resseq == 0:
# There already is a residue with the id (field, resseq, icode)
# resseq == 0 catches already wrapped residue numbers which
# do not trigger the has_id() test.
#
# Be sloppy and just increment...
# (This code will not leave gaps in resids... I think)
#
# XXX: shouldn't we also do this for hetero atoms and water??
self.max_resseq += 1
resseq = self.max_resseq
res_id = (field, resseq, icode) # use max_resseq!
fudged_resseq = True
if fudged_resseq and self.verbose:
sys.stderr.write(
"Residues are wrapping (Residue "
+ "('%s', %i, '%s') at line %i)."
% (field, resseq, icode, self.line_counter)
+ ".... assigning new resid %d.\n" % self.max_resseq
)
residue = Residue(res_id, resname, self.segid)
self.chain.add(residue)
self.residue = residue
return None