{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Similarity scores and representative covers\n", "\n", "Compare ligands and protein interfaces, explore similarity scores, and find representative clusters. {ref}`Similarity scores ` defines the metrics and files." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "from plinder.core import PlinderRelease, query_table\n", "from plinder.core.scores import (\n", " reconstruct_interface_similarity_scores,\n", " reconstruct_similarity_scores,\n", ")\n", "\n", "release = PlinderRelease()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ligand_system_id = \"4agi__1__1.C__1.R\"\n", "ligand_id = \"4agi__1__1.R\"\n", "interface_id = \"7cm8__1__1.A--2.A\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compare ligand similarities\n", "\n", "`reconstruct_similarity_scores()` reads the files needed for the requested query and target IDs. This example uses a one-pair self-comparison to keep execution small." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ligand_scores = reconstruct_similarity_scores(\n", " query_system_ids=[ligand_system_id],\n", " target_system_ids=[ligand_system_id],\n", " query_ligand_ids=[ligand_id],\n", " target_ligand_ids=[ligand_id],\n", ")\n", "ligand_scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For larger neighborhoods, read selected columns and rows from the complete ligand score table." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def read_ligand_neighborhood(system_id, ligand_id):\n", " return pd.read_parquet(\n", " release.fetch(\"ligand_similarity_scores\"),\n", " columns=[\n", " \"query_system\",\n", " \"query_ligand_id\",\n", " \"target_system\",\n", " \"target_ligand_id\",\n", " \"pocket_qcov\",\n", " \"pocket_fident_qcov\",\n", " \"pli_qcov\",\n", " \"sucos_shape\",\n", " ],\n", " filters=[\n", " (\"query_system\", \"==\", system_id),\n", " (\"query_ligand_id\", \"==\", ligand_id),\n", " ],\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compare protein-interface similarities\n", "\n", "The interface API likewise accepts selected query and target IDs." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "interface_scores = reconstruct_interface_similarity_scores(\n", " query_interface_ids=[interface_id],\n", " target_interface_ids=[interface_id],\n", ")\n", "interface_scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Representative covers\n", "\n", "Request cover columns through `query_table()` just like annotation columns. {ref}`Representative covers ` describes their construction and long-form files." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pocket_cover = \"pocket_qcov__70__ligand__directed_set_cover\"\n", "ligand_cover = query_table(\n", " columns=[\n", " \"system_id\",\n", " \"ligand_id\",\n", " pocket_cover,\n", " f\"{pocket_cover}__is_centroid\",\n", " ],\n", " filters=[(\"ligand_id\", \"==\", ligand_id)],\n", ")\n", "ligand_cover.T" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "interface_cover = query_table(\n", " \"interface_annotations\",\n", " columns=[\n", " \"system_id\",\n", " \"interface_qcov__70__directed_set_cover\",\n", " ],\n", " filters=[(\"system_id\", \"==\", interface_id)],\n", ")\n", "interface_cover.T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matched molecular pairs\n", "\n", "Use `ligand_mmp_pairs` to look up transformations involving the selected ligand chemistry." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "smiles_id = query_table(\n", " columns=[\"ligand_smiles_id\"],\n", " filters=[(\"ligand_id\", \"==\", ligand_id)],\n", ").iloc[0, 0]\n", "mmp_neighbors = query_table(\n", " \"ligand_mmp_pairs\",\n", " filters=[[\n", " (\"ligand_smiles_id_1\", \"==\", smiles_id),\n", " (\"ligand_smiles_id_2\", \"==\", smiles_id),\n", " ]],\n", ")\n", "mmp_neighbors.head()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.12" } }, "nbformat": 4, "nbformat_minor": 4 }