Exemple #1
0
def _buildResAndMol(pdb2pqr_protein):
    # Here I parse the returned protein object and recreate a Molecule,
    # because I need to access the properties.
    logger.debug("Building Molecule object.")

    name = []
    resid = []
    chain = []
    insertion = []
    coords = []
    resname = []
    segid = []
    element = []
    occupancy = []
    beta = []
    record = []
    charge = []

    prepData = PreparationData()

    for i, residue in enumerate(pdb2pqr_protein.residues):
        # if 'ffname' in residue.__dict__:
        if getattr(residue, 'ffname', None):
            curr_resname = residue.ffname
            if len(curr_resname) >= 4:
                curr_resname = curr_resname[-3:]
                logger.debug("Residue %s has internal name %s, replacing with %s" %
                             (residue, residue.ffname, curr_resname))
        else:
            curr_resname = residue.name

        prepData._setProtonationState(residue, curr_resname)

        # if 'patches' in residue.__dict__:
        if getattr(residue, 'patches', None):
            for patch in residue.patches:
                prepData._appendPatches(residue, patch)
                if patch != "PEPTIDE":
                    logger.debug("Residue %s has patch %s set" % (residue, patch))

        if getattr(residue, 'wasFlipped', 'UNDEF') != 'UNDEF':
            prepData._setFlipped(residue, residue.wasFlipped)

        prepData._set(residue, 'pdb2pqr_idx', i)

        for atom in residue.atoms:
            # Fixup element fields for added H (routines.addHydrogens)
            elt = "H" if atom.added and atom.name.startswith("H") else atom.element
            name.append(atom.name)
            resid.append(residue.resSeq)
            chain.append(residue.chainID)
            insertion.append(residue.iCode)
            coords.append([atom.x, atom.y, atom.z])
            resname.append(curr_resname)
            segid.append(atom.segID)
            element.append(elt)
            occupancy.append(atom.occupancy)
            beta.append(atom.tempFactor)
            charge.append(atom.charge)
            record.append(atom.type)

    mol_out = _fillMolecule(name, resname, chain, resid, insertion, coords, segid, element,
                            occupancy, beta, charge, record)

    prepData._importPKAs(pdb2pqr_protein.pka_protein)

    return mol_out, prepData