{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Problem-2\n", "Here we combine what you've learned about ColumnarStructure with skills from previous tutorials. We use ColumnarStructure to calculate the average number of water molecules per amino acid residue (waterRatio) and the average b-factor (temperature factor). We capture the information in a dataset and then plot the waterRatio against the resolution to see if there is a trend in the data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pyspark.sql import Row, SparkSession\n", "from mmtfPyspark.filters import ContainsLProteinChain, ExperimentalMethods\n", "from mmtfPyspark.io import mmtfReader\n", "from mmtfPyspark.ml import pythonRDDToDataset\n", "from mmtfPyspark.utils import ColumnarStructure\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Configure Spark" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "spark = SparkSession.builder.appName(\"Solution-2\").getOrCreate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Read PDB structures" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "path = \"../resources/mmtf_full_sample\"\n", "pdb = mmtfReader.read_sequence_file(path).cache()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TODO-1: filter structures: exclusively protein structures" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "pdb = ... your code here ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TODO-2: filter structures: only structures determined by ExperimentalMethods.X_RAY_DIFFRACTION" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pdb = ... your code here ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Keep only structures with one model" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "pdb = pdb.filter(lambda t: t[1].num_models ==1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def calcProperties(s):\n", " # s[0] pdb id\n", " # s[1] mmtf structure record\n", " arrays = ColumnarStructure(s[1], firstModelOnly=True)\n", " \n", " # we column arrays\n", " atom_names = arrays.get_atom_names()\n", " entity_types = arrays.get_entity_types()\n", " \n", " # TODO-3: get array of b-factors\n", " b_factors = ... your code here ...\n", " \n", " # calculate number of protein residues using boolean indexing\n", " pro_idx = (entity_types == 'PRO') & (atom_names == 'CA')\n", " num_pro = int(np.sum(pro_idx))\n", " \n", " # TODO-4: calculate number of water residues using boolean indexing\n", " wat_idx = ... your code here ...\n", " num_wat = int(np.sum(wat_idx))\n", " \n", " # calculate average B-factor for protein atoms\n", " pro_atom_idx = (entity_types == 'PRO')\n", " pro_b_factors = b_factors[pro_atom_idx]\n", " ave_b = float(np.average(pro_b_factors))\n", " \n", " return Row(s[0], s[1].resolution, ave_b, num_pro, num_wat, num_wat/num_pro)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "rows = pdb.map(lambda s: calcProperties(s))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "col_names = [\"pdbId\", \"resolution\", \"ave_b\", \"numPro\", \"numWat\", \"waterRatio\"]\n", "summary = pythonRDDToDataset.get_dataset(rows, col_names).cache()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "root\n", " |-- pdbId: string (nullable = false)\n", " |-- resolution: float (nullable = false)\n", " |-- ave_b: float (nullable = false)\n", " |-- numPro: integer (nullable = false)\n", " |-- numWat: integer (nullable = false)\n", " |-- waterRatio: float (nullable = false)\n", "\n" ] } ], "source": [ "summary.printSchema()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+-----+----------+---------+------+------+----------+\n", "|pdbId|resolution| ave_b|numPro|numWat|waterRatio|\n", "+-----+----------+---------+------+------+----------+\n", "| 1LBU| 1.8| 15.45025| 214| 229| 1.0700935|\n", "| 1LC0| 1.2|17.563633| 290| 407| 1.4034482|\n", "| 1LC5| 1.46| 16.42075| 355| 271| 0.7633803|\n", "| 1LFP| 1.72| 35.73947| 243| 350| 1.4403292|\n", "| 1LFW| 1.8|13.556223| 468| 570| 1.2179487|\n", "| 1LGH| 2.4| 37.60027| 396| 64|0.16161616|\n", "| 1LH0| 2.0|31.355368| 419| 278| 0.6634845|\n", "| 1LJ8| 1.7| 18.55931| 492| 437|0.88821137|\n", "| 1LKI| 2.0|22.673143| 172| 50|0.29069766|\n", "| 1LMI| 1.5| 19.07365| 131| 172| 1.3129771|\n", "| 1LML| 1.86|23.073887| 465| 212| 0.455914|\n", "| 1LO7| 1.5| 18.83036| 140| 173| 1.2357143|\n", "| 1LQ9| 1.3| 13.54245| 224| 258| 1.1517857|\n", "| 1LQV| 1.6|26.535683| 411| 429| 1.0437956|\n", "| 1LR0| 1.914|26.655485| 126| 122|0.96825397|\n", "| 1LRI| 1.45|21.217518| 98| 99| 1.0102041|\n", "| 1LRZ| 2.1|27.266705| 400| 318| 0.795|\n", "| 1LS1| 1.1|21.858797| 316| 316| 1.0|\n", "| 1LTS| 1.95| 32.31854| 741| 293| 0.3954116|\n", "| 1LU0| 1.03|15.596555| 61| 76| 1.2459016|\n", "+-----+----------+---------+------+------+----------+\n", "only showing top 20 rows\n", "\n" ] } ], "source": [ "summary.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data = summary.toPandas()\n", "data.plot(x='resolution', y='waterRatio', kind='scatter');" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "spark.stop()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }