def _finish_molecule(): """ Perform some operations after reading entire PDB chain: - rebuild (infer) bonds - rename molecule to reflect a chain ID - delete protein object if this is not a protein - append the molecule to the molecule list """ if mol == water: # Skip water, to be added explicitly at the end. return if mol.atoms: ###print "READING PDB ", (mol, numconects, chainId) mol.name = pdbid.lower() + chainId ###idzialprint "SEQ = ", mol.protein.get_sequence_string() ###print "SEC = ", mol.protein.get_secondary_structure_string() if mol.protein.count_c_alpha_atoms() == 0: # If there is no C-alpha atoms, consider the chunk # as a non-protein. But! Split it into individual # hetero groups. res_list = mol.protein.get_amino_acids() assy.part.ensure_toplevel_group() hetgroup = Group("Heteroatoms", assy, assy.part.topnode) for res in res_list: hetmol = Chunk(assy, res.get_three_letter_code().replace(" ", "") + \ "[" + str(res.get_id()) + "]") for atom in res.get_atom_list(): newatom = Atom(atom.element.symbol, atom.posn(), hetmol) # New chunk - infer the bonds anyway (this is not # correct, should first check connectivity read from # the PDB file CONECT records). inferBonds(hetmol) hetgroup.addchild(hetmol) mollist.append(hetgroup) else: #if numconects == 0: # msg = orangemsg("PDB file has no bond info; inferring bonds") # env.history.message(msg) # # let user see message right away (bond inference can take significant # # time) [bruce 060620] # env.history.h_update() # For protein - infer the bonds anyway. inferBonds(mol) mol.protein.set_chain_id(chainId) mol.protein.set_pdb_id(pdbid) if mol.atoms: mollist.append(mol) else: env.history.message( redmsg( "Warning: Pdb file contained no atoms")) env.history.h_update()
def read_or_insert_pdb(assy, filename, showProgressDialog = False, chainId = None, isInsert = False): """ Reads (loads) a PDB file, or inserts it into an existing chunk. @param assy: The assembly. @type assy: L{assembly} @param filename: The PDB filename to read. @type filename: string @param showProgressDialog: if True, display a progress dialog while reading a file. Default is False. @type showProgressDialog: boolean """ from protein.model.Protein import enableProteins if enableProteins: molecules, comment_text = _readpdb_new(assy, filename, isInsert = isInsert, showProgressDialog = showProgressDialog, chainId = chainId) if molecules: assy.part.ensure_toplevel_group() dir, name = os.path.split(filename) #name = gensym(nodename, assy) group = Group(name, assy, assy.part.topnode) for mol in molecules: if mol is not None: group.addchild(mol) comment = Comment(assy, "Information", comment_text) group.addchild(comment) assy.addnode(group) else: mol = _readpdb(assy, filename, isInsert = isInsert, showProgressDialog = showProgressDialog, chainId = chainId) if mol is not None: assy.addmol(mol) return