{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Notebook01: Compute Order Parameters\n", "\n", "In this notebook, we'll show you how to do the complete pipeline from downloading a united-atom trajectory file (Berger POPC) from Zenodo, reconstructing hydrogens and calculating the order parameters using **buildH**. In addition, we show how to plot the calculated order parameters using matplotlib.\n", "\n", "\n", "## Foreword\n", "\n", "\n", "### Launching Unix commands within a Jupyter Notebook\n", "\n", "Even though **buildH** can be used as a module (see [Notebook04](Notebook_04_library.ipynb)), it is mainly intended to be used in the Unix command line in a terminal. Thus, many cells in this notebook will run Unix commands instead of Python instructions. All Unix commands are prefixed with the symbol `!`. For example:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "img\n", "Notebook_01_buildH_calc_OP.ipynb\n", "Notebook_02_buildH_calc_OP_outputwH.ipynb\n", "Notebook_03_mixture_POPC_POPE.ipynb\n", "Notebook_04_library.ipynb\n", "Notebook_05_mixture_POPC_cholesterol.ipynb\n" ] } ], "source": [ "!ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking buildH installation\n", "\n", "First, you have to install **buildH**. For that you can follow the instructions on the main [README](https://github.com/patrickfuchs/buildH/blob/master/README.md) of the **buildH** repository or the [installation help page](../installation.md). If you did not install **buildH**, this notebook will not work.\n", "\n", "Before launching this notebook, you should have activated the conda environment from **buildH** (the `$` below corresponds to you prompt) :\n", "\n", "```\n", "$ conda activate buildh\n", "\n", "```\n", "\n", "If this command worked, you should have got the message `(buildh)` \n", "at the beginning of your prompt stating that the buildh environment has been properly activated. \n", "\n", "Once done, you have launched this Jupyter notebook :\n", "\n", "```\n", "$ jupyter lab\n", "```\n", "\n", "At this point, we should be able to launch **buildH** within this notebook:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "usage: buildH [-h] [-v] -c COORD [-t TRAJ] -l LIPID\n", " [-lt LIPID_TOPOLOGY [LIPID_TOPOLOGY ...]] -d DEFOP\n", " [-opx OPDBXTC] [-o OUT] [-b BEGIN] [-e END] [-igch3]\n", "buildH: error: the following arguments are required: -c/--coord, -l/--lipid, -d/--defop\n", "\u001b[0m" ] } ], "source": [ "!buildH" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you do not get this usage message and have some error, you probably did not activate correctly the **buildH** conda environment before launching this notebook. One other possibility is that the installation of the **buildH** environment did not succeed. In such a case, please refer to **buildH** installation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Trajectory download\n", "\n", "Most of the time, you will use **buildH** on trajectories that you have produced. Here, for the sake of learning, let us download a [trajectory](https://doi.org/10.5281/zenodo.13279) of a Berger POPC membrane from Zenodo (taken from NMRlipidsI project). This should take a while for the trr file, so be patient!" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2021-07-06 16:49:43-- https://zenodo.org/record/13279/files/popc0-25ns.trr\n", "Resolving zenodo.org (zenodo.org)... 137.138.76.77\n", "Connecting to zenodo.org (zenodo.org)|137.138.76.77|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 1712544744 (1.6G) [application/octet-stream]\n", "Saving to: ‘popc0-25ns.trr’\n", "\n", "popc0-25ns.trr 100%[===================>] 1.59G 20.5MB/s in 74s \n", "\n", "2021-07-06 16:50:58 (21.9 MB/s) - ‘popc0-25ns.trr’ saved [1712544744/1712544744]\n", "\n", "--2021-07-06 16:50:59-- https://zenodo.org/record/13279/files/endCONF.gro\n", "Resolving zenodo.org (zenodo.org)... 137.138.76.77\n", "Connecting to zenodo.org (zenodo.org)|137.138.76.77|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 1968406 (1.9M) [application/octet-stream]\n", "Saving to: ‘endCONF.gro’\n", "\n", "endCONF.gro 100%[===================>] 1.88M 10.5MB/s in 0.2s \n", "\n", "2021-07-06 16:51:00 (10.5 MB/s) - ‘endCONF.gro’ saved [1968406/1968406]\n", "\n", "endCONF.gro\n", "img\n", "Notebook_01_buildH_calc_OP.ipynb\n", "Notebook_02_buildH_calc_OP_outputwH.ipynb\n", "Notebook_03_mixture_POPC_POPE.ipynb\n", "Notebook_04_library.ipynb\n", "Notebook_05_mixture_POPC_cholesterol.ipynb\n", "popc0-25ns.trr\n" ] } ], "source": [ "!wget https://zenodo.org/record/13279/files/popc0-25ns.trr\n", "!wget https://zenodo.org/record/13279/files/endCONF.gro\n", "!ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OK the 2 files freshly downloaded are here. Now we need one last file. It's a definition file relating generic names for each C-H bond to the atom names in the PDB file. In **buildH**, there is a specific directory [def_files](https://github.com/patrickfuchs/buildH/tree/master/def_files) from which you can download such a def file. (note that you can find some also on the [NMRlipids repo](https://github.com/NMRLipids/MATCH/tree/master/scripts/orderParm_defs)). Here we want to download the `.def` file corresponding to POPC Berger :" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2021-07-06 16:52:18-- https://raw.githubusercontent.com/patrickfuchs/buildH/master/def_files/Berger_POPC.def\n", "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 2135 (2.1K) [text/plain]\n", "Saving to: ‘Berger_POPC.def’\n", "\n", "Berger_POPC.def 100%[===================>] 2.08K --.-KB/s in 0.001s \n", "\n", "2021-07-06 16:52:18 (3.09 MB/s) - ‘Berger_POPC.def’ saved [2135/2135]\n", "\n", "Berger_POPC.def\n", "endCONF.gro\n", "img\n", "Notebook_01_buildH_calc_OP.ipynb\n", "Notebook_02_buildH_calc_OP_outputwH.ipynb\n", "Notebook_03_mixture_POPC_POPE.ipynb\n", "Notebook_04_library.ipynb\n", "Notebook_05_mixture_POPC_cholesterol.ipynb\n", "popc0-25ns.trr\n" ] } ], "source": [ "!wget https://raw.githubusercontent.com/patrickfuchs/buildH/master/def_files/Berger_POPC.def\n", "!ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us have a look to this def file:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gamma1_1 POPC C1 H11\n", "gamma1_2 POPC C1 H12\n", "gamma1_3 POPC C1 H13\n", "gamma2_1 POPC C2 H21\n", "gamma2_2 POPC C2 H22\n", "gamma2_3 POPC C2 H23\n", "gamma3_1 POPC C3 H31\n", "gamma3_2 POPC C3 H32\n", "gamma3_3 POPC C3 H33\n", "beta1 POPC C5 H51\n" ] } ], "source": [ "!head Berger_POPC.def" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first column is the generic C-H name, second is the residue (lipid) name, third column the carbon PDB name, last column the hydrogen PDB name. This file will tell **buildH** which Hs you want to rebuild, and then to calculate the order parameter on the corresponding C-Hs. It means that it is possible to provide only a subset of possible C-Hs if, for example, you only want those from the polar heads. Note that if you request **buildH** to output a trajectory (not done in this notebook), the def file must contain **all** possible C-Hs of the lipid considered. In such a case, the newly built H will have the name written in the 4th column of this def file.\n", "\n", "Now, let's have a quick look to the `.gro` file:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generated by trjconv : 2:1:1 sdpc:SM:CHOL system 256 lipids t= 50000.00000\n", "28526\n", " 1PLA C1 1 5.576 3.681 2.227 -0.0394 0.0935 -0.3339\n", " 1PLA C2 2 5.553 3.886 2.337 0.1128 -0.0058 -0.1560\n", " 1PLA C3 3 5.762 3.834 2.277 -0.6144 0.1201 -0.8703\n", " 1PLA N4 4 5.640 3.768 2.326 -0.1182 -0.1907 -0.0302\n", " 1PLA C5 5 5.658 3.709 2.460 -0.2986 -0.2323 -0.0245\n", " 1PLA C6 6 5.766 3.607 2.495 0.4136 0.5471 0.0677\n", " 1PLA O7 7 5.752 3.488 2.417 0.3142 0.2538 0.5323\n", " 1PLA P8 8 5.893 3.411 2.413 0.2220 0.1104 0.0738\n" ] } ], "source": [ "!head endCONF.gro" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that in this `.gro` file containing POPC lipids, the residue name is called `PLA`. This residue name will be of importance when launching **buildH**.\n", "\n", "Great, all files were successfully downloaded, we can now proceed. Let us launch **buildH**!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Launching **buildH** for order parameter calculation\n", "\n", "Now, we can launch **buildH** on this downloaded trajectory. For that we need a few arguments :\n", "\n", "- the `-c` argument corresponding to the coordinate file. It consists of a pdb or gro file, here `endCONF.gro`, **buildH** infers the topology of the system from it;\n", "- the `-l` argument which tells which lipid we want to analyze, here `Berger_PLA` (`Berger` corresponds to the force field name used for this simulation, `PLA` is the residue name of the lipid we want to analyze in the pdb/gro file); note that if you simulated a mixture of different lipids, you will have to launch **buildH** separately for each lipid (see [Notebook03](Notebook_03_mixture_POPC_POPE.ipynb) and [Notebook05](Notebook_05_mixture_POPC_cholesterol.ipynb));\n", "- the `-d` argument corresponding to the def file we just downloaded, here `Berger_POPC.def` ;\n", "- the `-t` argument which is the trajectory file, here `popc0-25ns.trr`.\n", "- the `-o` argument which tells **buildH** the output file name for storing the calculated order parameters.\n", "\n", "Please be patient, this will take a while since we have 2500 frames. Fortunately, **buildH** geometrical calculations are accelerated using [Numba](https://numba.pydata.org/). On single core Xeon @ 3.60GHz, it took ~ 7'." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Constructing the system...\n", "System has 28526 atoms\n", "Dealing with frame 0 at 0.0 ps.\n", "Dealing with frame 1 at 10.0 ps.\n", "Dealing with frame 2 at 20.0 ps.\n", "Dealing with frame 3 at 30.0 ps.\n", "Dealing with frame 4 at 40.0 ps.\n", "Dealing with frame 5 at 50.0 ps.\n", "Dealing with frame 6 at 60.0 ps.\n", "Dealing with frame 7 at 70.0 ps.\n", "Dealing with frame 8 at 80.0 ps.\n", "Dealing with frame 9 at 90.0 ps.\n", "Dealing with frame 10 at 100.0 ps.\n", "Dealing with frame 11 at 110.0 ps.\n", "Dealing with frame 12 at 120.0 ps.\n", "Dealing with frame 13 at 130.0 ps.\n", "Dealing with frame 14 at 140.0 ps.\n", "Dealing with frame 15 at 150.0 ps.\n", "Dealing with frame 16 at 160.0 ps.\n", "Dealing with frame 17 at 170.0 ps.\n", "Dealing with frame 18 at 180.0 ps.\n", "Dealing with frame 19 at 190.0 ps.\n", "Dealing with frame 20 at 200.0 ps.\n", "Dealing with frame 21 at 210.0 ps.\n", "Dealing with frame 22 at 220.0 ps.\n", "^C\n", "Traceback (most recent call last):\n", " File \"/home/fuchs/software/miniconda3/envs/buildh/bin/buildH\", line 33, in \n", " sys.exit(load_entry_point('buildh', 'console_scripts', 'buildH')())\n", " File \"/home/fuchs/papers/buildH_project/buildH/buildh/UI.py\", line 148, in entry_point\n", " main(args.coord, args.traj, args.defop, args.out, args.opdbxtc, dic_lipid, args.begin, args.end)\n", " File \"/home/fuchs/papers/buildH_project/buildH/buildh/UI.py\", line 341, in main\n", " core.fast_build_all_Hs_calc_OP(universe_woH, begin, end, dic_OP,\n", " File \"/home/fuchs/papers/buildH_project/buildH/buildh/core.py\", line 533, in fast_build_all_Hs_calc_OP\n", " Hs_coor = buildHs_on_1C(Cname_position, typeofH2build,\n", " File \"/home/fuchs/papers/buildH_project/buildH/buildh/core.py\", line 59, in buildHs_on_1C\n", " H1_coor, H2_coor, H3_coor = hydrogens.get_CH3(atom,\n", " File \"/home/fuchs/papers/buildH_project/buildH/buildh/hydrogens.py\", line 114, in get_CH3\n", " coor_He = LENGTH_CH_BOND * unit_vect_He + atom\n", "KeyboardInterrupt\n", "\u001b[0m" ] } ], "source": [ "!buildH -c endCONF.gro -l Berger_PLA -d Berger_POPC.def -t popc0-25ns.trr -o OP_POPC_Berger_25ns.out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On the above cell, we launched **buildH** to show you how it works. For each frame handled by **buildH**, a message `Dealing with frame XXX at YYY ps.` is printed to the output. Because it takes some time and because it should have printed 2500 `Dealing with frame...`, we just pressed Ctrl-C to get this notebook not too much polluted by **buildH** output. This explains why there is a Python `KeyboardInterrupt` message.\n", "\n", "Note that, you can also launch **buildH** in a regular shell that way:\n", "\n", "```\n", "$ buildH -c endCONF.gro -l Berger_PLA -d Berger_POPC.def -t popc0-25ns.trr -o OP_POPC_Berger_25ns.out\n", "```\n", "\n", "Or that way:\n", "\n", "```\n", "$ buildH -c endCONF.gro -l Berger_PLA -d Berger_POPC.def -t popc0-25ns.trr -o OP_POPC_Berger_25ns.out > /dev/null\n", "```\n", "\n", "In this case, all the messages `Dealing with frame...` go to `/dev/null`, thus no more lengthy output ;-)\n", "\n", "Once completed, we should have a new file called `OP_POPC_Berger_25ns.out` containing the order parameters. You can choose any name with the option `-o` when you launch **buildH**. If you did not run **buildH** on the full trajectory, you can find that file [here](data/OP_POPC_Berger_25ns.out)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Berger_POPC.def\n", "endCONF.gro\n", "img\n", "Notebook_01_buildH_calc_OP.ipynb\n", "Notebook_02_buildH_calc_OP_outputwH.ipynb\n", "Notebook_03_mixture_POPC_POPE.ipynb\n", "Notebook_04_library.ipynb\n", "Notebook_05_mixture_POPC_cholesterol.ipynb\n", "OP_POPC_Berger_25ns.out\n", "popc0-25ns.trr\n" ] } ], "source": [ "!ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyzing results\n", "\n", "First, let's have a look to what this output file `OP_POPC_Berger_25ns.out` contains." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# OP_name resname atom1 atom2 OP_mean OP_stddev OP_stem\n", "#--------------------------------------------------------------------\n", "gamma1_1 PLA C1 H11 0.01788 0.09262 0.00819\n", "gamma1_2 PLA C1 H12 -0.00744 0.03963 0.00350\n", "gamma1_3 PLA C1 H13 -0.00855 0.03601 0.00318\n", "gamma2_1 PLA C2 H21 0.01850 0.09283 0.00820\n", "gamma2_2 PLA C2 H22 -0.00666 0.04559 0.00403\n", "gamma2_3 PLA C2 H23 -0.00894 0.04016 0.00355\n", "gamma3_1 PLA C3 H31 0.01854 0.09235 0.00816\n", "gamma3_2 PLA C3 H32 -0.01158 0.03796 0.00335\n" ] } ], "source": [ "!head OP_POPC_Berger_25ns.out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each C-H we get the mean order parameter `OP_mean` (average over frames and over residues), its standard deviation `OP_stddev` (standard deviation over residues), and its standard error of the mean `OP_stem` (`OP_stddev` divided by the square root of the number of residues). More information about how `OP_mean`, `OP_stddev` and `OP_stem` are computed can be found in the documentation: [Order parameters and statistics](../order_parameter.md)\n", "\n", "Now we can make a plot of the order parameter. For that, we can use [Pandas](https://pandas.pydata.org/) and its very convenient [dataframes](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) to load **buildH** output. Pandas dataframes allow the selection of any row or column in a very powerful way. If you are not familiar with pandas dataframes, you can take a look [here](https://realpython.com/pandas-dataframe/). For reading **buildH** output and generate a dataframe, we use the Pandas function [.read_csv()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html) which has a great deal of options to read a file. Here we tell it to use a specific separator (`\\s+` which means any combination of white spaces), to skip 2 lines at the beginning of the files (beginning with a `#`) and to assign specific names to each column." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CH_namerescarbonhydrogenOPSTDSTEM
0gamma1_1PLAC1H110.017880.092620.00819
1gamma1_2PLAC1H12-0.007440.039630.00350
2gamma1_3PLAC1H13-0.008550.036010.00318
3gamma2_1PLAC2H210.018500.092830.00820
4gamma2_2PLAC2H22-0.006660.045590.00403
........................
77oleoyl_C17aPLACA1HA11-0.055000.019990.00177
78oleoyl_C17bPLACA1HA12-0.052250.019500.00172
79oleoyl_C18aPLACA2HA210.039030.026470.00234
80oleoyl_C18bPLACA2HA22-0.052920.020330.00180
81oleoyl_C18cPLACA2HA23-0.050250.019720.00174
\n", "

82 rows × 7 columns

\n", "
" ], "text/plain": [ " CH_name res carbon hydrogen OP STD STEM\n", "0 gamma1_1 PLA C1 H11 0.01788 0.09262 0.00819\n", "1 gamma1_2 PLA C1 H12 -0.00744 0.03963 0.00350\n", "2 gamma1_3 PLA C1 H13 -0.00855 0.03601 0.00318\n", "3 gamma2_1 PLA C2 H21 0.01850 0.09283 0.00820\n", "4 gamma2_2 PLA C2 H22 -0.00666 0.04559 0.00403\n", ".. ... ... ... ... ... ... ...\n", "77 oleoyl_C17a PLA CA1 HA11 -0.05500 0.01999 0.00177\n", "78 oleoyl_C17b PLA CA1 HA12 -0.05225 0.01950 0.00172\n", "79 oleoyl_C18a PLA CA2 HA21 0.03903 0.02647 0.00234\n", "80 oleoyl_C18b PLA CA2 HA22 -0.05292 0.02033 0.00180\n", "81 oleoyl_C18c PLA CA2 HA23 -0.05025 0.01972 0.00174\n", "\n", "[82 rows x 7 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv(\"OP_POPC_Berger_25ns.out\", sep=\"\\s+\", skiprows=2, \n", " names=[\"CH_name\", \"res\", \"carbon\", \"hydrogen\", \"OP\", \"STD\", \"STEM\"])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we want only the order parameter for the polar head we can use the following. Suffixing the dataframe with a list of lists `[[\"CH_name\", \"OP\"]]` allows us to select the columns we are interested in. Then, with the `.iloc()` method we can get the 18 first rows corresponding to the polar head (beware it starts counting at 0 like all sequential objects in Python)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CH_nameOP
0gamma1_10.01788
1gamma1_2-0.00744
2gamma1_3-0.00855
3gamma2_10.01850
4gamma2_2-0.00666
5gamma2_3-0.00894
6gamma3_10.01854
7gamma3_2-0.01158
8gamma3_3-0.00715
9beta10.03634
10beta20.06587
11alpha10.10349
12alpha20.13568
13g3_1-0.28403
14g3_2-0.15962
15g2_1-0.16767
16g1_10.20330
17g1_20.08910
\n", "
" ], "text/plain": [ " CH_name OP\n", "0 gamma1_1 0.01788\n", "1 gamma1_2 -0.00744\n", "2 gamma1_3 -0.00855\n", "3 gamma2_1 0.01850\n", "4 gamma2_2 -0.00666\n", "5 gamma2_3 -0.00894\n", "6 gamma3_1 0.01854\n", "7 gamma3_2 -0.01158\n", "8 gamma3_3 -0.00715\n", "9 beta1 0.03634\n", "10 beta2 0.06587\n", "11 alpha1 0.10349\n", "12 alpha2 0.13568\n", "13 g3_1 -0.28403\n", "14 g3_2 -0.15962\n", "15 g2_1 -0.16767\n", "16 g1_1 0.20330\n", "17 g1_2 0.08910" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[[\"CH_name\", \"OP\"]].iloc[:18]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us do the same for the palmitoyl chain." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CH_nameOP
18palmitoyl_C2a-0.17593
19palmitoyl_C2b-0.16136
20palmitoyl_C3a-0.19742
21palmitoyl_C3b-0.18853
22palmitoyl_C4a-0.19367
23palmitoyl_C4b-0.18011
24palmitoyl_C5a-0.19815
25palmitoyl_C5b-0.19364
26palmitoyl_C6a-0.19251
27palmitoyl_C6b-0.19193
28palmitoyl_C7a-0.18894
29palmitoyl_C7b-0.19106
30palmitoyl_C8a-0.17809
31palmitoyl_C8b-0.17827
32palmitoyl_C9a-0.17190
33palmitoyl_C9b-0.17066
34palmitoyl_C10a-0.15468
35palmitoyl_C10b-0.15328
36palmitoyl_C11a-0.14349
37palmitoyl_C11b-0.14297
38palmitoyl_C12a-0.12392
39palmitoyl_C12b-0.12448
40palmitoyl_C13a-0.11173
41palmitoyl_C13b-0.11094
42palmitoyl_C14a-0.09097
43palmitoyl_C14b-0.09039
44palmitoyl_C15a-0.07367
45palmitoyl_C15b-0.07496
46palmitoyl_C16a0.11169
47palmitoyl_C16b-0.07181
48palmitoyl_C16c-0.07307
\n", "
" ], "text/plain": [ " CH_name OP\n", "18 palmitoyl_C2a -0.17593\n", "19 palmitoyl_C2b -0.16136\n", "20 palmitoyl_C3a -0.19742\n", "21 palmitoyl_C3b -0.18853\n", "22 palmitoyl_C4a -0.19367\n", "23 palmitoyl_C4b -0.18011\n", "24 palmitoyl_C5a -0.19815\n", "25 palmitoyl_C5b -0.19364\n", "26 palmitoyl_C6a -0.19251\n", "27 palmitoyl_C6b -0.19193\n", "28 palmitoyl_C7a -0.18894\n", "29 palmitoyl_C7b -0.19106\n", "30 palmitoyl_C8a -0.17809\n", "31 palmitoyl_C8b -0.17827\n", "32 palmitoyl_C9a -0.17190\n", "33 palmitoyl_C9b -0.17066\n", "34 palmitoyl_C10a -0.15468\n", "35 palmitoyl_C10b -0.15328\n", "36 palmitoyl_C11a -0.14349\n", "37 palmitoyl_C11b -0.14297\n", "38 palmitoyl_C12a -0.12392\n", "39 palmitoyl_C12b -0.12448\n", "40 palmitoyl_C13a -0.11173\n", "41 palmitoyl_C13b -0.11094\n", "42 palmitoyl_C14a -0.09097\n", "43 palmitoyl_C14b -0.09039\n", "44 palmitoyl_C15a -0.07367\n", "45 palmitoyl_C15b -0.07496\n", "46 palmitoyl_C16a 0.11169\n", "47 palmitoyl_C16b -0.07181\n", "48 palmitoyl_C16c -0.07307" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[[\"CH_name\", \"OP\"]].iloc[18:49]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now, for the oleoyl chain." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CH_nameOP
49oleoyl_C2a-0.15474
50oleoyl_C2b-0.17336
51oleoyl_C3a-0.16911
52oleoyl_C3b-0.17847
53oleoyl_C4a-0.17385
54oleoyl_C4b-0.18235
55oleoyl_C5a-0.17504
56oleoyl_C5b-0.17690
57oleoyl_C6a-0.16138
58oleoyl_C6b-0.16692
59oleoyl_C7a-0.15512
60oleoyl_C7b-0.15994
61oleoyl_C8a-0.10190
62oleoyl_C8b-0.10603
63oleoyl_C9a-0.08281
64oleoyl_C10a-0.01791
65oleoyl_C11a-0.05119
66oleoyl_C11b-0.04599
67oleoyl_C12a-0.09275
68oleoyl_C12b-0.08879
69oleoyl_C13a-0.08643
70oleoyl_C13b-0.08259
71oleoyl_C14a-0.09133
72oleoyl_C14b-0.08893
73oleoyl_C15a-0.07729
74oleoyl_C15b-0.07524
75oleoyl_C16a-0.07256
76oleoyl_C16b-0.07041
77oleoyl_C17a-0.05500
78oleoyl_C17b-0.05225
79oleoyl_C18a0.03903
80oleoyl_C18b-0.05292
81oleoyl_C18c-0.05025
\n", "
" ], "text/plain": [ " CH_name OP\n", "49 oleoyl_C2a -0.15474\n", "50 oleoyl_C2b -0.17336\n", "51 oleoyl_C3a -0.16911\n", "52 oleoyl_C3b -0.17847\n", "53 oleoyl_C4a -0.17385\n", "54 oleoyl_C4b -0.18235\n", "55 oleoyl_C5a -0.17504\n", "56 oleoyl_C5b -0.17690\n", "57 oleoyl_C6a -0.16138\n", "58 oleoyl_C6b -0.16692\n", "59 oleoyl_C7a -0.15512\n", "60 oleoyl_C7b -0.15994\n", "61 oleoyl_C8a -0.10190\n", "62 oleoyl_C8b -0.10603\n", "63 oleoyl_C9a -0.08281\n", "64 oleoyl_C10a -0.01791\n", "65 oleoyl_C11a -0.05119\n", "66 oleoyl_C11b -0.04599\n", "67 oleoyl_C12a -0.09275\n", "68 oleoyl_C12b -0.08879\n", "69 oleoyl_C13a -0.08643\n", "70 oleoyl_C13b -0.08259\n", "71 oleoyl_C14a -0.09133\n", "72 oleoyl_C14b -0.08893\n", "73 oleoyl_C15a -0.07729\n", "74 oleoyl_C15b -0.07524\n", "75 oleoyl_C16a -0.07256\n", "76 oleoyl_C16b -0.07041\n", "77 oleoyl_C17a -0.05500\n", "78 oleoyl_C17b -0.05225\n", "79 oleoyl_C18a 0.03903\n", "80 oleoyl_C18b -0.05292\n", "81 oleoyl_C18c -0.05025" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[[\"CH_name\", \"OP\"]].iloc[49:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot of the order parameter\n", "\n", "Now that we have loaded the data with pandas, and that we can select any part of the lipid, we can use the matplotlib module to make a nice plot. For example, we can plot the order parameter of the palmitoyl chain. Note that we select rows 18 to 45 to show only the first 15 carbons, since we do not want the final CH3 of carbon 16." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Order parameter palmitoyl chain, Berger POPC')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "OPs = df[\"OP\"].iloc[18:46]\n", "\n", "x = np.arange(len(OPs))\n", "plt.scatter(x, -OPs)\n", "plt.xticks(x, df[\"CH_name\"].iloc[18:46], rotation='vertical')\n", "plt.xlabel(\"C-H name\")\n", "plt.ylabel(\"-S_CH\")\n", "plt.title(\"Order parameter palmitoyl chain, Berger POPC\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another example with the polar head, on the alpha beta of the choline and glycerol C-Hs." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Order parameter polar head, Berger POPC')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "OPs = df[\"OP\"].iloc[9:18]\n", "STEMs = df[\"STEM\"].iloc[9:18]\n", "\n", "# These 2 avoid plotting a line between the points.\n", "lines = {'linestyle': 'None'}\n", "plt.rc('lines', **lines)\n", "\n", "x = np.arange(len(OPs))\n", "plt.errorbar(x, -OPs, STEMs, fmt='', marker='.')\n", "plt.xticks(x, df[\"CH_name\"].iloc[9:18], rotation='vertical')\n", "plt.xlabel(\"C-H name\")\n", "plt.ylabel(\"-S_CH\")\n", "plt.title(\"Order parameter polar head, Berger POPC\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the error bars are very small, we used `marker='.'` to draw tiny points. If we use the standard `marker='o'`, the error bars are often not seen because they are smaller than the point itself.\n", "\n", "## Conclusion\n", "\n", "In this notebook, we showed you how to use **buildH** to build hydrogens from a united-atom trajectory and calculate the order parameter on it. Then, we showed some convenient use of pandas and matplotlib Python modules to select the data we are interested in and plot the corresponding results." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }