def convert_to_residue(self, modified_residues): residue_3_letter = self.ATOMResidueAA residue_1_letter = residue_type_3to1_map.get(residue_3_letter) or protonated_residue_type_3to1_map.get(residue_3_letter) or non_canonical_amino_acids.get(residue_3_letter) if not residue_1_letter: residue_identifier = self.get_pdb_residue_id() if modified_residues.get(residue_identifier): residue_1_letter = modified_residues[residue_identifier]['original_residue_1'] if not residue_1_letter: '''Too many cases to worry about... we will have to use residue_3_letter to sort those out.''' residue_1_letter = 'X' pdb_residue = IdentifyingPDBResidue(self.PDBChainID, ("%d%s" % (self.ATOMResidueID, self.ATOMResidueiCode)).rjust(5), residue_1_letter, None, residue_3_letter) pdb_residue.add_position(self.x, self.y, self.z) return pdb_residue, self.SEQRESIndex, residue_1_letter, residue_3_letter
def parse_atom_site(t, modified_residues): # Only parse ATOM records if parse_singular_string(t, 'PDBx:group_PDB') == 'HETATM': return None, None, None, None assert(parse_singular_string(t, 'PDBx:group_PDB') == 'ATOM') # NOTE: x, y, z values are per-ATOM but we do not use them yet x, y, z = parse_singular_float(t, "PDBx:Cartn_x"), parse_singular_float(t, "PDBx:Cartn_y"), parse_singular_float(t, "PDBx:Cartn_z") PDB_chain_id = parse_singular_alphabetic_character(t, 'PDBx:auth_asym_id') ATOM_residue_id = parse_singular_int(t, 'PDBx:auth_seq_id') # Parse insertion code. Sometimes this tag exists but is set as nil in its attributes (xsi:nil = "true"). PDB_insertion_code = " " insertion_code_tags = t.getElementsByTagName('PDBx:pdbx_PDB_ins_code') if insertion_code_tags: assert(len(insertion_code_tags) == 1) insertion_code_tag = insertion_code_tags[0] if not(insertion_code_tag.hasAttribute('xsi:nil') and insertion_code_tag.getAttribute('xsi:nil') == 'true'): PDB_insertion_code = parse_singular_alphabetic_character(t, 'PDBx:pdbx_PDB_ins_code') SEQRES_index = parse_singular_int(t, 'PDBx:label_seq_id') residue_a = parse_singular_string(t, 'PDBx:auth_comp_id') residue_b = parse_singular_string(t, 'PDBx:label_comp_id') assert(residue_a == residue_b) residue_3_letter = residue_a residue_1_letter = residue_type_3to1_map.get(residue_3_letter) or protonated_residue_type_3to1_map.get(residue_3_letter) or non_canonical_amino_acids.get(residue_3_letter) if not residue_1_letter: residue_identifier = '%s%s%s' % (PDB_chain_id, str(ATOM_residue_id).rjust(4), PDB_insertion_code) if modified_residues.get(residue_identifier): residue_1_letter = modified_residues[residue_identifier]['original_residue_1'] if not residue_1_letter: '''Too many cases to worry about... we will have to use residue_3_letter to sort those out.''' residue_1_letter = 'X' r = IdentifyingPDBResidue(PDB_chain_id, ("%d%s" % (ATOM_residue_id, PDB_insertion_code)).rjust(5), residue_1_letter, None, residue_3_letter) r.add_position(x, y, z) return r, SEQRES_index, residue_1_letter, residue_3_letter