コード例 #1
0
ファイル: plifinder.py プロジェクト: rhara/plifinder
class Analyze:
    def __init__(self, protein, ligand, within=7.5):
        self.protein = protein
        self.ligand = ligand

        genASite = GenActiveSite(within=within)

        self.asite = genASite(self.protein, self.ligand)
        renumberResidues(self.asite)

        log(f'nAtoms of asite {self.asite.GetNumAtoms()}')

        complex = Chem.CombineMols(self.asite, self.ligand)
        self.pmol = PDBComplex()
        cont = Chem.MolToPDBBlock(complex).replace('UNL     1', 'MOL     1')
        self.pmol.load_pdb(cont, as_string=True)
        self.pmol.analyze()

    def getPLIPComplexToProteinMap(self):
        N = self.protein.GetNumAtoms()
        protein_coords = getCoordinates(self.protein)
        cpmap = {}
        for i in self.pmol.atoms:
            atom = self.pmol.get_atom(i)
            d = np.linalg.norm(np.tile(np.array(atom.coords), N).reshape(
                (N, 3)) - protein_coords,
                               axis=1)
            minidx = d.argmin()
            if d[minidx] < 1e-3:
                cpmap[atom.idx] = minidx.item()
        return cpmap

    def getPLIPComplexToLigandMap(self):
        N = self.ligand.GetNumAtoms()
        ligand_coords = getCoordinates(self.ligand)
        clmap = {}
        for i in self.pmol.atoms:
            atom = self.pmol.get_atom(i)
            d = np.linalg.norm(np.tile(np.array(atom.coords), N).reshape(
                (N, 3)) - ligand_coords,
                               axis=1)
            minidx = d.argmin()
            if d[minidx] < 1e-3:
                clmap[atom.idx] = minidx.item()
        return clmap

    def getPLIPComplexToASiteMap(self):
        N = self.asite.GetNumAtoms()
        asite_coords = getCoordinates(self.asite)
        camap = {}
        for i in self.pmol.atoms:
            atom = self.pmol.get_atom(i)
            d = np.linalg.norm(np.tile(np.array(atom.coords), N).reshape(
                (N, 3)) - asite_coords,
                               axis=1)
            minidx = d.argmin()
            if d[minidx] < 1e-3:
                camap[atom.idx] = minidx.item()
        return camap

    def interactions(self):
        camap = self.getPLIPComplexToASiteMap()
        clmap = self.getPLIPComplexToLigandMap()
        for bsite, iacts in self.pmol.interaction_sets.items():
            for ia in iacts.all_itypes:
                iact = Inter(ia)
                if not iact.isValid():
                    continue
                aidxs = list(map(lambda x: camap[x], iact.P()))
                lidxs = list(map(lambda x: clmap[x], iact.L()))
                yield bsite, iact.name, aidxs, lidxs