Example #1
0
class Fix_PQR:
    '''
    Add metal atom to PDB2PQR output
    '''
    def __init__(self, original_pdb, pqr_file, metal):
        self.ori_pdb = Read(original_pdb)[0]
        self.pqr = Read(pqr_file)[0]
        self.metal = metal
        self.new_pdb = pqr_file.split('.')[0] + '.pdb'

        if self.metal:
            zn = self.ori_pdb.allAtoms.get(lambda x: x.element == 'Zn')
            # remove hydrogens added to HYS residues near ZN atoms
            close_atoms = self.pqr.closerThan(zn[0].coords, self.pqr.allAtoms,
                                              2.3)
            # FIXME: only take the first atoms in list
            for a in close_atoms:
                if a.element == 'H':
                    # print a.name
                    for b in a.bonds:
                        at2 = b.atom1
                        if at2 == a: at2 = b.atom2
                        at2.bonds.remove(b)
                        a.bonds.remove(b)
                    a.parent.remove(a)
                    del a
            self.pqr.allAtoms = self.pqr.chains.residues.atoms + zn
        writer = PdbWriter()
        writer.write(self.new_pdb,
                     self.pqr.allAtoms,
                     records=['ATOM', 'HETATM'])
Example #2
0
class Fix_PQR:
    '''
    Add metal atom to PDB2PQR output
    '''
    def __init__(self, original_pdb, pqr_file, metals):
        self.ori_pdb = Read(original_pdb)[0]
        self.pqr = Read(pqr_file)[0]
        self.metals = metals
        self.new_pdb = pqr_file.split('.')[0] + '.pdb'

        uniq_list = {}  # to avoid redundancy
        if self.metals:
            for met in self.metals:
                ele = met[1][:3].strip().lower()
                if ele not in uniq_list.keys():
                    uniq_list[ele] = met[2]
                else:
                    continue
            met_atoms = self.ori_pdb.allAtoms.get(
                lambda x: x.element.lower() in uniq_list)
            for atm in met_atoms:
                atm.charge = uniq_list[atm.element.lower()]
                print 'atoms charge', atm.element, uniq_list[
                    atm.element.lower()]
            for met_atm in met_atoms:
                close_atoms = self.pqr.closerThan(met_atm.coords,
                                                  self.pqr.allAtoms, 2.8)
            for a in close_atoms:
                if a.element == 'H':
                    for b in a.bonds:
                        at2 = b.atom1
                        if at2 == a: at2 = b.atom2
                        at2.bonds.remove(b)
                        a.bonds.remove(b)
                    a.parent.remove(a)
                    del a
                self.pqr.allAtoms = self.pqr.chains.residues.atoms
            self.pqr.allAtoms = self.pqr.chains.residues.atoms + met_atoms
        writer = PdbWriter()
        writer.write(self.new_pdb,
                     self.pqr.allAtoms,
                     records=['ATOM', 'HETATM'])