From 55ed073e238518a068e06a6dc6169bf3577a085d Mon Sep 17 00:00:00 2001 From: Wei-Tse Hsu Date: Mon, 9 Sep 2024 16:52:08 +0800 Subject: [PATCH 1/3] Updated environment.yml and removed markdown markdown cells for the first half of umbrella_sampling.ipynb --- Chapter_1/umbrella_sampling.ipynb | 638 ++++++++---------------------- environment.yml | 5 + 2 files changed, 162 insertions(+), 481 deletions(-) diff --git a/Chapter_1/umbrella_sampling.ipynb b/Chapter_1/umbrella_sampling.ipynb index 50ac5eb..5c478dd 100644 --- a/Chapter_1/umbrella_sampling.ipynb +++ b/Chapter_1/umbrella_sampling.ipynb @@ -22,27 +22,15 @@ "- University of Colorado Boulder\n", "- www.weitsehsu.com\n", "- wehs7661@colorado.edu\n", - "- [@WeiTseHsu](https://twitter.com/WeiTseHsu)\n", - "\n", - "If you're interested, check my website for more future posts/tutorials about advanced sampling methods!" + "- [@WeiTseHsu](https://twitter.com/WeiTseHsu)" ] }, { "cell_type": "markdown", - "id": "d7a63543", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, + "id": "b3be29ba-7d57-46de-8c99-d7d74c90d4d3", + "metadata": {}, "source": [ - "In this exercise, our goal is to perform umbrella sampling for NaCl to compute its free energy as a function of the ion-pair distance, which is an intuitive collective variable (CV) relevant to the dissociation process of NaCl. Umbrella sampling is composed of the following 2 steps that we will elaborate on later:\n", - "\n", - "- **Step 1**: A pulling simulation (a.k.a a steered MD simulation) for generating initial configurations for the production runs.\n", - "- **Step 2**: Production runs that fix the configurations with harmonic potentials.\n", - "\n", - "\n", - "Please visit the [article](https://weitsehsu.com/course/advanced_sampling/us/) accompanying this tutorial if you are interested in more comprehensive discussions about the method. " + "This is a hands-on tutorial that corresponds to Section 2 of [Chapter 1: Umbrella sampling](https://weitsehsu.com/course/enhanced_sampling/us/) in the course of [Hands-on tutorials: Enhanced sampling methods using GROMACS](https://weitsehsu.com/course/enhanced_sampling/). To keep this notebook succinct, here we will not repeat the content of the article but only show the results of code execution. For more comprehensive discussions about the method, please visit the accompanying article linked above. (Or check my website for more future posts/tutorials about enhanced sampling methods!)" ] }, { @@ -50,8 +38,7 @@ "id": "dc01b2fa", "metadata": {}, "source": [ - "## 1. Setting things up\n", - "In the folder `Systems/NaCl` in the course repository, you can find simulation inputs that we need for this tutorial, though some may need some modifications. Files required for this exercise include `NaCl.gro`, `NaCl.top`, and `MD_NVT.mdp`. For more details about these files, please visit the [README file](https://github.com/wehs7661/advanced_sampling_tutorials/tree/master/Systems#nacl-system) for the system. To get started, we remove the output folders/files of the exercise with the following bash commands, if any:" + "## 1. Setting things up" ] }, { @@ -71,9 +58,7 @@ " if ls -d \"$dir\" >/dev/null 2>&1; then\n", " rm -rf \"$dir\"\n", " fi\n", - "done\n", - "\n", - "mkdir results" + "done" ] }, { @@ -85,13 +70,7 @@ } }, "source": [ - "## 2. Pulling simulation\n", - "As a reminder, the purpose of a pulling simulation is to generate configurations with different values of CV (the ion-pair distance in this case). The generated configurations will be used as the initial configurations in the subsequent production simulations. In a pulling simulation, we need to make the following two decisions:\n", - "\n", - "- **Defining the pull groups**: The pull groups are groups of atom(s) we exert the pulling force between. Here, we define the sodium and chloride ions as the pull groups. In GROMACS, this setup can be done by adding **pull codes** to the `.mdp` file, as we will detail later.\n", - "- **Choosing the immobile group**: In umbrella sampling, it is common to apply a position restraint to one of the pull groups to make the pulling process more efficient. In our case, we will choose to fix the position of the sodium ion, but fixing the chloride ion should not make a difference in the resulting free energy profile. As we will see in later, the application of the position restraint can be done by modifying the `.top` file.\n", - "\n", - "Here, we first create a folder `pull` specifically for the pulling simulation, and copy over `NaCl.gro` from the folder `Systems/NaCl`:" + "## 2. Pulling simulation" ] }, { @@ -109,14 +88,6 @@ "mkdir pull" ] }, - { - "cell_type": "markdown", - "id": "9f0c6426", - "metadata": {}, - "source": [ - "In the following subsections, we modify the `.top` file and the `.mdp` file to apply a position restraint and the pull code, respectively." - ] - }, { "cell_type": "markdown", "id": "e62bab00", @@ -126,15 +97,7 @@ } }, "source": [ - "### 2-1. Modification of the `top` file" - ] - }, - { - "cell_type": "markdown", - "id": "4224d95a", - "metadata": {}, - "source": [ - "The `.top` file we have in `Systems/NaCl`, `NaCl.top`, is for standard MD simulations, which has the following content:" + "### 2.1. Modification of the `top` file" ] }, { @@ -142,7 +105,6 @@ "execution_count": 3, "id": "fe705ec7", "metadata": { - "scrolled": true, "slideshow": { "slide_type": "-" } @@ -186,25 +148,6 @@ "cat ../Systems/NaCl/NaCl.top" ] }, - { - "cell_type": "markdown", - "id": "37f9141b", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "To apply a position restraint, one needs to add the following lines before the `[ System ]` directive:\n", - "\n", - "```\n", - "; position restraints for Na\n", - "# ifdef POSRES_NA\n", - "# include \"Na_posres.itp\"\n", - "# endif\n", - "```" - ] - }, { "cell_type": "code", "execution_count": 4, @@ -250,18 +193,6 @@ "CL 1' > pull/NaCl_US.top" ] }, - { - "cell_type": "markdown", - "id": "1f00b928", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "These lines mean that if the variable `POSRES_NA` is defined in the `.mdp` file for the pulling simulation, the position restraint defined in the file `Na_posres.itp` will be activated. The `.itp` file `Na_posres.itp` can be generated and saved in the folder `pull` by the Bash commands below. (For more details about GROMACS `.itp` file and the `ifdef` statements, please refer to the GROMACS [reference manual](https://manual.gromacs.org/current/reference-manual/topologies/topology-file-formats.html#molecule-itp-file).)" - ] - }, { "cell_type": "code", "execution_count": 5, @@ -280,29 +211,6 @@ " 1 1 1000 1000 1000' > pull/Na_posres.itp" ] }, - { - "cell_type": "markdown", - "id": "8b0fd4fb", - "metadata": {}, - "source": [ - "Here are more details about the columns in the `[ position_restraints ]` directive:\n", - "- `i`: The index of the atom (in the `[ moleculetype ]` directive) to which the position restraint is applied. Note that the `[ position_restraint ]` directive is under the `[ moleculetype ]` directive, so even if the index of the sodium ion in `NaCl.gro` is 322, it is the first (and only) atom in the `[ moleculetype ]` that corresponds to `NA`, so we specify the value of `i` as 1 (instead of 322) here.\n", - "- `funct`: The function type of the restraint. Type `1` corresponds to a harmonic potential.\n", - "- `fcx`, `fcy`, and `fcz`: The force constants along $x$, $y$, and $z$ directions, respectively, meausred in $\\mathrm{kJ/mol/nm^2}$. These constants define how strongly the atom is pulled back to its reference position (the initial position) when it moves. The default of $1000$ $\\mathrm{kJ/mol/nm^2}$ should be generally sufficient." - ] - }, - { - "cell_type": "markdown", - "id": "16458e53", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "Notably, in more complicated cases, such as pulling two chains of protein molecules apart, you may need to restrain not just one atom (as in our example here) but multiple ones, in which case the GROMACS `genrestr` command could be useful. For more details, please check the supplementary note in the accompanying article. " - ] - }, { "cell_type": "markdown", "id": "70b21745", @@ -315,20 +223,11 @@ "### 2-2. Modification of the `mdp` file" ] }, - { - "cell_type": "markdown", - "id": "febc82d6", - "metadata": {}, - "source": [ - "Here, we will create the `.mdp` file for the pulling simulation (saved in the folder `pull` as `NaCl_pull.mdp`) by modifying the `.mdp` template for standard molecular dynamics, `MD-NVT.mdp` in `Systems/NaCl`. The `.mdp` template has the following parameters:" - ] - }, { "cell_type": "code", "execution_count": 6, "id": "72d1a827", "metadata": { - "scrolled": false, "slideshow": { "slide_type": "-" } @@ -366,23 +265,6 @@ "cat ../Systems/NaCl/MD-NVT.mdp # the original MDP file" ] }, - { - "cell_type": "markdown", - "id": "469ea527", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "Note that here we adopt smaller cutoffs than usual for the neighbor list (`rlist`) and for the interactions (`rcoulomb` and `rvdw`) just so that we can use a smaller simulation box for the system, which makes this example simulation affordable even on a laptop. We set the simulation length as 250 ps, which should be sufficient for our case. In addition, the simulation will be performed in the NVT ensemble.\n", - "\n", - "To suit the need of running a pulling simulation, we first need to define `POSRES_NA` in the `.mdp` file so the position restraint is activated. This can be done by adding the following line to the `.mdp` file.\n", - "```\n", - "define=-DPOSRES_NA\n", - "```" - ] - }, { "cell_type": "code", "execution_count": 7, @@ -420,18 +302,6 @@ "# Here we create an mdp file starting with `define=-DPOSRES_NA`" ] }, - { - "cell_type": "markdown", - "id": "524a1719", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "Then, to pull the chloride ion away, we need to add the following pull code to the `.mdp` file:" - ] - }, { "cell_type": "code", "execution_count": 8, @@ -459,22 +329,6 @@ "pull-coord1-k = 1000 ; units: kJ/mol/nm^2' >> pull/NaCl_pull.mdp" ] }, - { - "cell_type": "markdown", - "id": "330f9c51", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "As shown above, parameters in the code block come with simple explanations. Below are some additional explanations for some of the parameters:\n", - "- `pull-coord1-rate`: The rate at which the imaginary spring attached between the ions is elongated. Importantly, the pull distance must not exceed 0.7248 nm, which is half of the smallest dimension of the simulation box. (As can be checked in `pull/NaCl.gro`, the simulation box we use is a cubic box with a side length of 1.48561 nm.) This is to prevent the pull group from interacting with the periodic image of the system. Given that the typical ion-pair distance of NaCl is 0.265 nm, a total pull distance of 0.25 nm should be safe.\n", - "- `pull-coord1-k`: The force constant does not really matter in the pulling simulation as long as it is large enough to pull the pull groups apart. \n", - "\n", - "For other possible options/parameters for pulling, please refer to GROMACS [reference manual](https://manual.gromacs.org/documentation/current/user-guide/mdp-options.html#com-pulling)." - ] - }, { "cell_type": "markdown", "id": "2b44a6c3", @@ -487,136 +341,77 @@ "### 2-3. Running a pulling simulation" ] }, - { - "cell_type": "markdown", - "id": "dcd27988", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "With all the input files prepared in the `pull` folder (including `NaCl.gro`, `NaCl.top`, and `NaCl_pull.mdp`), we can finally run the pulling simulation. Note that depending on the version of GROMACS you are using, you might need a different `grompp` command." - ] - }, - { - "cell_type": "markdown", - "id": "5d06afdd", - "metadata": {}, - "source": [ - "#### Versions earlier than 2022\n", - "Simply executing the following command should be fine:\n", - " ```bash\n", - " mpirun -np 1 gmx_mpi grompp -f pull/NaCl_pull.mdp -c pull/NaCl.gro -r pull/NaCl.gro -p pull/NaCl_US.top -o pull/pull.tpr -po pull/mdout.mdp -maxwarn 1\n", - " mpirun -np 1 gmx_mpi mdrun -deffnm pull/pull -pf pull/pullf.xvg -px pull/pullx.xvg -ntomp 1\n", - " ```" - ] - }, - { - "cell_type": "markdown", - "id": "d221f909", - "metadata": {}, - "source": [ - "#### Versions later than 2022\n", - "Here we are using GROMACS 2022.5, in which case the `grompp` command above might fail with the following error:\n", - " ```\n", - " Fatal error:\n", - " Group NA referenced in the .mdp file was not found in the index file.\n", - " Group names must match either [moleculetype] names or custom index group\n", - " names, in which case you must supply an index file to the '-n' option\n", - " of grompp.\n", - " ```\n", - " To resolve this, we need to create an index file where both the groups `NA` and `CL` referenced by `pull-group1-name` and `pull-group2-name` in the `.mdp` file are available, then pass the index file to the `grompp` command. To do this, execute the following command:" - ] - }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "2c23bee5", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", + "\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", + "\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", + "\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi grompp -f pull/NaCl_pull.mdp -c pull/NaCl.gro -r pull/NaCl.gro -p pull/NaCl_US.top -o pull/pull.tpr -po pull/mdout.mdp -maxwarn 1\n", + "\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Going to read 0 old index file(s)\n", - "Analysing residue names:\n", - "There are: 107 Water residues\n", - "There are: 2 Ion residues\n", - "\n", - " 0 System : 323 atoms\n", - " 1 Water : 321 atoms\n", - " 2 SOL : 321 atoms\n", - " 3 non-Water : 2 atoms\n", - " 4 Ion : 2 atoms\n", - " 5 Water_and_ions : 323 atoms\n", - "\n", - " nr : group '!': not 'name' nr name 'splitch' nr Enter: list groups\n", - " 'a': atom '&': and 'del' nr 'splitres' nr 'l': list residues\n", - " 't': atom type '|': or 'keep' nr 'splitat' nr 'h': help\n", - " 'r': residue 'res' nr 'chain' char\n", - " \"name\": group 'case': case sensitive 'q': save and quit\n", - " 'ri': residue index\n", - "\n", - "> \n", + "Setting the LD random seed to -138448998\n", "\n", - " 6 a_322 : 1 atoms\n", - "\n", - "> \n", - "\n", - "> \n", - "\n", - " 7 a_323 : 1 atoms\n", - "\n", - "> \n", - "\n", - "> \n" + "Generated 330891 of the 330891 non-bonded parameter combinations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx make_ndx, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1\n", - "Command line:\n", - " gmx_mpi make_ndx -f pull/NaCl.gro -o pull/NaCl.ndx\n", - "\n", - "\n", - "Reading structure file\n", - "\n", - "GROMACS reminds you: \"May the Force Be With You\" (Star Wars)\n", - "\n" + "Generating 1-4 interactions: fudge = 0.5\n" ] - } - ], - "source": [ - "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", - "echo -e 'a 322\\nname 6 NA\\na323\\nname 7 CL\\nq' | mpirun -np 1 gmx_mpi make_ndx -f pull/NaCl.gro -o pull/NaCl.ndx" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f5c4373f", - "metadata": { - "scrolled": true, - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [ + }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting the LD random seed to -615008262\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -632,11 +427,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -46700809\n", + "Setting gen_seed to 2141896573\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -646,26 +443,13 @@ "\n", "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 5 Mb of data\n" + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1\n", - "Command line:\n", - " gmx_mpi grompp -f pull/NaCl_pull.mdp -c pull/NaCl.gro -r pull/NaCl.gro -p pull/NaCl_US.top -o pull/pull.tpr -po pull/mdout.mdp -n pull/NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -674,21 +458,6 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.280 nm 0.280 nm\n", - "\n", - "NOTE 2 [file pull/NaCl_pull.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "GROMACS reminds you: \"For a research worker the unforgotten moments of his life are those rare ones which come after years of plodding work, when the veil over natures secret seems suddenly to lift & when what was dark & chaotic appears in a clear & beautiful light & pattern.\" (Gerty Cori)\n", "\n" ] }, @@ -696,21 +465,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 3.17 ms, sys: 4.67 ms, total: 7.83 ms\n", - "Wall time: 528 ms\n" + "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", + "\n", + "This run will generate roughly 5 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group natoms pbc atom distance at start reference at t=0\n", + " 1 1 0\n", + " 2 1 0 0.280 nm 0.280 nm\n", + "\n", + "There was 1 note\n", + "\n", + "GROMACS reminds you: \"Though the path of the comet is sure, it's constitution is not\" (Peter Hammill)\n", + "\n" ] } ], "source": [ - "%%time\n", "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", - "mpirun -np 1 gmx_mpi grompp -f pull/NaCl_pull.mdp -c pull/NaCl.gro -r pull/NaCl.gro -p pull/NaCl_US.top -o pull/pull.tpr -po pull/mdout.mdp -n pull/NaCl.ndx -maxwarn 1" + "mpirun -np 1 gmx_mpi grompp -f pull/NaCl_pull.mdp -c pull/NaCl.gro -r pull/NaCl.gro -p pull/NaCl_US.top -o pull/pull.tpr -po pull/mdout.mdp -maxwarn 1" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "8c9d0913", "metadata": { "slideshow": { @@ -722,29 +505,65 @@ "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", + "\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", + "\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", + "\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", "Command line:\n", " gmx_mpi mdrun -deffnm pull/pull -pf pull/pullf.xvg -px pull/pullx.xvg -ntomp 1\n", "\n", - "Reading file pull/pull.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "125000 steps, 250.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 20.140 20.140 100.0\n", + " Time: 42.857 42.857 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1072.509 0.022\n", + "Performance: 504.006 0.048\n", "\n", - "GROMACS reminds you: \"There is no such thing as free energy. Anyone who advocates it does not know what he is talking about.\" (Alireza Haghighat)\n", + "GROMACS reminds you: \"I try to identify myself with the atoms... I ask what I would do If I were a carbon atom or a sodium atom.\" (Linus Pauling)\n", "\n" ] }, @@ -752,30 +571,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 3.72 ms, sys: 5.3 ms, total: 9.02 ms\n", - "Wall time: 20.4 s\n" + "CPU times: user 122 ms, sys: 34 ms, total: 155 ms\n", + "Wall time: 44.2 s\n" ] } ], "source": [ "%%time\n", "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", "mpirun -np 1 gmx_mpi mdrun -deffnm pull/pull -pf pull/pullf.xvg -px pull/pullx.xvg -ntomp 1" ] }, - { - "cell_type": "markdown", - "id": "014e3101", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "Note that in both cases, the `-r` flag is required for the restraint. In addition, compared to a standard MD simulation, a pulling simulation has two additional output files: `pullf.xvg` and `pullx.xvg`, which document the time series of the pulling force and ion-pair distance." - ] - }, { "cell_type": "markdown", "id": "a31d4c68", @@ -788,25 +594,9 @@ "### 2-4. Generation of the initial configurations" ] }, - { - "cell_type": "markdown", - "id": "475a7fec", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "Before generating the initial configurations from the pulling simulation, we first need to decide the number of windows to use for the next step. This requires experience and sometimes trials and errors, but what's generally more important is the overlap in the probability distributions between neighboring windows, as we will explore in the next section when specifying force constants. For NaCl, 8 windows should be sufficient. \n", - "\n", - "To ensure overlap in probability distributions corresponding to neighboring windows, it is common to linearly divide the reaction path when deciding the centers of the windows, which might not always be optimal but should serve as a decent starting point. In our case, we define the equally spaced centers with the ion-pair distance ranging from the minimum value observed in the pulling simulation up to 0.6 nm. Depending on the force constants we want to use in the next section for umbrella localization, the center of the last window, hence its probability distribution, should not be too close to the upper bound (i.e., 0.7248 nm) so that a configuration with a CV value exceeding the upper bound is unlikely. \n", - "\n", - "Below we use a Python script to identify the time frames in the pulling simulation at which the configuration has a CV value close to the desired value, i.e., the predefined center of the window." - ] - }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "8bd16de9", "metadata": { "slideshow": { @@ -815,11 +605,14 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ion-pair distances (in nm) of the chosen configurations are: [0.248848 0.29903 0.349314 0.39936 0.449456 0.499348 0.549502 0.599458]\n", - "The initial configurations will be extracted from the following time frames (in ps): [ 28.8 58.8 128.1 100.2 139.3 156.6 235.6 247.3]\n" + "ename": "ModuleNotFoundError", + "evalue": "No module named 'numpy'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m 2\u001b[0m pullx \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mtranspose(np\u001b[38;5;241m.\u001b[39mloadtxt(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpull/pullx.xvg\u001b[39m\u001b[38;5;124m'\u001b[39m, comments\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m@\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m#\u001b[39m\u001b[38;5;124m'\u001b[39m]))\n\u001b[1;32m 3\u001b[0m t, dist \u001b[38;5;241m=\u001b[39m pullx[\u001b[38;5;241m0\u001b[39m], pullx[\u001b[38;5;241m1\u001b[39m]\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'numpy'" ] } ], @@ -835,24 +628,28 @@ "print(f'The initial configurations will be extracted from the following time frames (in ps): {t_extract}')" ] }, - { - "cell_type": "markdown", - "id": "1e93d9a1", - "metadata": {}, - "source": [ - "Then, to extract the configurations corresponding to the chosen time frames, we run the following Python script:" - ] - }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "7aeb4d14", "metadata": { "slideshow": { "slide_type": "-" } }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 't_extract' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(\u001b[43mt_extract\u001b[49m)):\n\u001b[1;32m 3\u001b[0m os\u001b[38;5;241m.\u001b[39mmkdir(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msim_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 4\u001b[0m os\u001b[38;5;241m.\u001b[39msystem(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC && echo System | mpirun -np 1 gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mt_extract[i]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m -o sim_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/NaCl_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.gro\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 't_extract' is not defined" + ] + } + ], "source": [ "import os\n", "for i in range(len(t_extract)):\n", @@ -860,14 +657,6 @@ " os.system(f'source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC && echo System | mpirun -np 1 gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump {t_extract[i]} -o sim_{i}/NaCl_{i}.gro')" ] }, - { - "cell_type": "markdown", - "id": "9c1ec68c", - "metadata": {}, - "source": [ - "Upon completion of the script, you should have folders named in the form of `sim_*`, with a `.gro` file `NaCl_*.gro` in each of them. These 8 folders correspond to the 8 windows we will use in the production simulations, which are seeded by the `.gro` files in the folders." - ] - }, { "cell_type": "markdown", "id": "5f5b1381", @@ -880,23 +669,6 @@ "## 3. Production runs" ] }, - { - "cell_type": "markdown", - "id": "fc7c7da2", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "In the previous step, we prepared the 8 input `.gro` files for the 8 simulations in the production stage, which will use the same topology file `NaCl_US.top` as we used for the pulling simulation. Still, we need to prepare the `.mdp` file `NaCl_umbrella.mdp` shared by all the 8 simulations. Compared to the `.mdp` file we used for the pulling simulation, `NaCl_umbrella.mdp` has the following 3 differences:\n", - "- The simulation length is 500 ps instead of 250 ps.\n", - "- The pull rate is set as 0, since we need to localize each configuration at a different ion-pair distance.\n", - "- The force constant is set as 8000 instead of 1000 $\\mathrm{kJ/mo/nm^2}$. Again, the determination of the force constant requires experience and sometimes trials and errors. We will discucss how the force constant should be adjusted if the simulation results are not ideal. \n", - "\n", - "We can use the following bash commands to make the changes:" - ] - }, { "cell_type": "code", "execution_count": 14, @@ -958,23 +730,12 @@ "cat NaCl_umbrella.mdp" ] }, - { - "cell_type": "markdown", - "id": "8962f7b3", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "All 8 simulations use the same `.top` file (which requires the `.itp` file `Na_posres.itp`) and `.mdp` file. In the script below, we distribute the input files to different `sim_*` folders, and for each of them, we run the GROMACS `grompp` command to generate the `.tpr` file and the `mdrun` command to run the simulation. " - ] - }, { "cell_type": "code", "execution_count": 15, "id": "146b6456", "metadata": { + "scrolled": true, "slideshow": { "slide_type": "-" } @@ -1761,22 +1522,6 @@ "done" ] }, - { - "cell_type": "markdown", - "id": "879e406b", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "The commands above assume a GROMACS version later than 2022. If you are using an earlier version, you don't need to copy over the `.ndx` file and pass it to the `grompp` command. Notably, if you have more than 8 CPU cores, you can run all 8 simulations in parallel using the `-multidir`, which would be faster but also require MPI-enabled GROMACS.\n", - "\n", - "```\n", - "mpirun -np 8 gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -multidir sim_{0..7}\n", - "```" - ] - }, { "cell_type": "markdown", "id": "4a7a0066", @@ -1793,18 +1538,6 @@ "### 4-1. Distributions of the pulling distance " ] }, - { - "cell_type": "markdown", - "id": "c71e7030", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "One indicator for assessing the quality of the production simulations and whether we need to adjust the parameters (e.g., the number of windows and force constants) is the overlap between neighboring replicas. Using the `pullx.xvg` file from each simulation in each folder, we can use the following code to visualize the distribution of the pulling distance for each simulation." - ] - }, { "cell_type": "code", "execution_count": 16, @@ -1841,22 +1574,6 @@ "plt.grid()" ] }, - { - "cell_type": "markdown", - "id": "f082107d", - "metadata": {}, - "source": [ - "As shown in the figure above, there is an overlap between every pair of neighboring windows, indicating that a force constant of 8000 $\\mathrm{kJ/mol/nm^2}$ is reasonable." - ] - }, - { - "cell_type": "markdown", - "id": "f3bdb75e", - "metadata": {}, - "source": [ - "Below are the codes I used to generate the figure in the article if you are interested." - ] - }, { "cell_type": "code", "execution_count": 17, @@ -1940,28 +1657,11 @@ "### 4-2. Free energy calculations" ] }, - { - "cell_type": "markdown", - "id": "18d736d1", - "metadata": {}, - "source": [ - "Once we have confirmed comprehensive coverage for the entire CV range of interest, we can proceed with free energy calculations. For umbrella sampling, various free energy estimators could be used, including WHAM, TI, BAR, MBAR, and others like UWHAM, SWHAM, and FastMBAR. Since MBAR is provably the lowest variance unbiased estimator, we will use it here to perform free energy calculations." - ] - }, - { - "cell_type": "markdown", - "id": "36aa8794", - "metadata": {}, - "source": [ - "To perform free energy calculations and plot the free energy profile, run the following script:" - ] - }, { "cell_type": "code", "execution_count": 20, "id": "2991ac13", "metadata": { - "scrolled": false, "slideshow": { "slide_type": "-" } @@ -2063,14 +1763,6 @@ "plt.grid()" ] }, - { - "cell_type": "markdown", - "id": "58350da5", - "metadata": {}, - "source": [ - "Also, to plot the histograms of the number of uncorrelated samples for different CV values, one can use the following script:" - ] - }, { "cell_type": "code", "execution_count": 21, @@ -2099,22 +1791,6 @@ "plt.grid()" ] }, - { - "cell_type": "markdown", - "id": "572e91c0", - "metadata": {}, - "source": [ - "Notably, varying levels of uncertainty can arise at different CV values, which stem from different numbers of uncorrelated samples. For example, in the region characterized by an ion-pair distance of around 0.25 nm, the uncertainty is minimal. In contrast, in regions corresponding to an ion-pair distance exceeding 0.6 nm, we observe a significant increase in uncertainty. This increased uncertainty is mainly attributable to the paucity of uncorrelated samples in these regions." - ] - }, - { - "cell_type": "markdown", - "id": "c18078e8", - "metadata": {}, - "source": [ - "Below is the code that I used to generate the figure in the article." - ] - }, { "cell_type": "code", "execution_count": 22, @@ -4241,7 +3917,7 @@ "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -4255,7 +3931,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/environment.yml b/environment.yml index 01a61bb..67b551f 100644 --- a/environment.yml +++ b/environment.yml @@ -5,3 +5,8 @@ channels: dependencies: - plumed_mpi - gromacs_mpi + - pip + - pip: + - pymbar + - matplotlib + - scipy From 66d081a0baed39d92effb53a23d401c012b6d9c2 Mon Sep 17 00:00:00 2001 From: Wei-Tse Hsu Date: Mon, 9 Sep 2024 18:35:37 +0800 Subject: [PATCH 2/3] Updated the README file and the notebook for Chapter 1 --- Chapter_1/umbrella_sampling.ipynb | 5191 ++++++++++++++++------------- README.md | 22 +- 2 files changed, 2888 insertions(+), 2325 deletions(-) diff --git a/Chapter_1/umbrella_sampling.ipynb b/Chapter_1/umbrella_sampling.ipynb index 5c478dd..0e85846 100644 --- a/Chapter_1/umbrella_sampling.ipynb +++ b/Chapter_1/umbrella_sampling.ipynb @@ -343,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "2c23bee5", "metadata": {}, "outputs": [ @@ -396,7 +396,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Setting the LD random seed to -138448998\n", + "Setting the LD random seed to -73413633\n", "\n", "Generated 330891 of the 330891 non-bonded parameter combinations\n" ] @@ -427,23 +427,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to 2141896573\n", + "Setting gen_seed to -411140237\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", "Analysing residue names:\n", "There are: 107 Water residues\n", "There are: 2 Ion residues\n", - "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n" ] }, { @@ -465,6 +455,16 @@ "name": "stdout", "output_type": "stream", "text": [ + "\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", + "\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + "\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", "\n", "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", @@ -481,7 +481,7 @@ "\n", "There was 1 note\n", "\n", - "GROMACS reminds you: \"Though the path of the comet is sure, it's constitution is not\" (Peter Hammill)\n", + "GROMACS reminds you: \"We can make it into a friend class. But I don't like having friends.\" (Joe Jordan)\n", "\n" ] } @@ -493,7 +493,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "8c9d0913", "metadata": { "slideshow": { @@ -559,11 +559,11 @@ "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 42.857 42.857 100.0\n", + " Time: 42.435 42.435 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 504.006 0.048\n", + "Performance: 509.012 0.047\n", "\n", - "GROMACS reminds you: \"I try to identify myself with the atoms... I ask what I would do If I were a carbon atom or a sodium atom.\" (Linus Pauling)\n", + "GROMACS reminds you: \"But I always say, one's company, two's a crowd, and three's a party.\" (Andy Warhol)\n", "\n" ] }, @@ -571,8 +571,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 122 ms, sys: 34 ms, total: 155 ms\n", - "Wall time: 44.2 s\n" + "CPU times: user 83 ms, sys: 11.5 ms, total: 94.5 ms\n", + "Wall time: 43.6 s\n" ] } ], @@ -596,7 +596,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "8bd16de9", "metadata": { "slideshow": { @@ -605,14 +605,11 @@ }, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'numpy'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m 2\u001b[0m pullx \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mtranspose(np\u001b[38;5;241m.\u001b[39mloadtxt(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpull/pullx.xvg\u001b[39m\u001b[38;5;124m'\u001b[39m, comments\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m@\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m#\u001b[39m\u001b[38;5;124m'\u001b[39m]))\n\u001b[1;32m 3\u001b[0m t, dist \u001b[38;5;241m=\u001b[39m pullx[\u001b[38;5;241m0\u001b[39m], pullx[\u001b[38;5;241m1\u001b[39m]\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'numpy'" + "name": "stdout", + "output_type": "stream", + "text": [ + "The ion-pair distances (in nm) of the chosen configurations are: [0.251031 0.300954 0.35087 0.400397 0.450359 0.50036 0.550197 0.598224]\n", + "The initial configurations will be extracted from the following time frames (in ps): [ 94. 95. 52.2 114.2 204.2 202.1 165.4 190.7]\n" ] } ], @@ -630,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "7aeb4d14", "metadata": { "slideshow": { @@ -639,226 +636,740 @@ }, "outputs": [ { - "ename": "NameError", - "evalue": "name 't_extract' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[14], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(\u001b[43mt_extract\u001b[49m)):\n\u001b[1;32m 3\u001b[0m os\u001b[38;5;241m.\u001b[39mmkdir(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msim_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 4\u001b[0m os\u001b[38;5;241m.\u001b[39msystem(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC && echo System | mpirun -np 1 gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mt_extract[i]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m -o sim_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/NaCl_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.gro\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "\u001b[0;31mNameError\u001b[0m: name 't_extract' is not defined" + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", + "\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", + "\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", + "\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 94.0 -o sim_0/NaCl_0.gro\n", + "\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 900 time 90.000 \n", + "Dumping frame at t= 94 ps\n", + " -> frame 0 time 94.000 \n", + "\n", + "GROMACS reminds you: \"XML is not a language in the sense of a programming language any more than sketches on a napkin are a language.\" (Charles Simonyi)\n", + "\n" ] - } - ], - "source": [ - "import os\n", - "for i in range(len(t_extract)):\n", - " os.mkdir(f'sim_{i}')\n", - " os.system(f'source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC && echo System | mpirun -np 1 gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump {t_extract[i]} -o sim_{i}/NaCl_{i}.gro')" - ] - }, - { - "cell_type": "markdown", - "id": "5f5b1381", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "## 3. Production runs" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "4c3d4556", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [ + }, { "name": "stdout", "output_type": "stream", "text": [ - "define=-DPOSRES_NA\n", - "integrator = md \n", - "dt = 0.002\n", - "nsteps = 250000\n", - "cutoff-scheme = Verlet\n", - "coulombtype = PME\n", - "rlist = 0.6\n", - "rcoulomb = 0.6\n", - "rvdw = 0.6\n", - "constraints = h-bonds\n", - "tcoupl = V-rescale\n", - "ref_t = 300\n", - "tau-t = 1.0\n", - "tc-grps = System\n", - "gen-vel = yes\n", - "gen-temp = 300\n", - "gen-seed = -1 \n", - "compressibility = 4.5e-5\n", - "nstxout-compressed = 50\n", - "nstxout = 50000\n", - "nstvout = 50000\n", - "\n", - "; Pull code\n", - "pull = yes ; Activate the pull code\n", - "pull-ncoords = 1 ; Here we only have 1 CV.\n", - "pull-ngroups = 2 ; We have 2 pull groups\n", - "pull-group1-name = NA ; index 1\n", - "pull-group2-name = CL ; index 2\n", - "pull-coord1-groups = 1 2 ; groups with indices 1 (NA) and 2 (CL) are involved\n", - "pull-coord1-type = umbrella ; The umbrella potential (i.e., harmonic potential) is used.\n", - "pull-coord1-geometry = distance ; Increase the distance between the pull groups\n", - "pull-coord1-dim = Y Y Y ; We allow pulling from any directions.\n", - "pull-coord1-start = yes ; The harmonic potential is centered at the initial COM distance. \n", - "pull-coord1-rate = 0\n", - "pull-coord1-k = 8000\n" + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" ] - } - ], - "source": [ - "%%bash\n", - "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", - "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", - "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", - "sed -i -e \"s/pull-coord1-k = 1000 ; units: kJ\\/mol\\/nm^2/pull-coord1-k = 8000/g\" NaCl_umbrella.mdp\n", - "cat NaCl_umbrella.mdp" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "146b6456", - "metadata": { - "scrolled": true, - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [ + }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Setting the LD random seed to -1290797089\n", + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 95.0 -o sim_1/NaCl_1.gro\n", "\n", - "turning H bonds into constraints...\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 900 time 90.000 \n", + "Dumping frame at t= 95 ps\n", + " -> frame 0 time 95.000 \n", + "\n", + "GROMACS reminds you: \"Check Your Input\" (D. Van Der Spoel)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "turning H bonds into constraints...\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Setting gen_seed to -1246792711\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 52.2 -o sim_2/NaCl_2.gro\n", "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 500 time 50.000 \n", + "Dumping frame at t= 52.2 ps\n", + " -> frame 0 time 52.200 \n", + "\n", + "GROMACS reminds you: \"Check Your Input\" (D. Van Der Spoel)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to 1997535231\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 114.2 -o sim_3/NaCl_3.gro\n", "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 1100 time 110.000 \n", + "Dumping frame at t= 114.2 ps\n", + " -> frame 0 time 114.200 \n", + "\n", + "GROMACS reminds you: \"Don't Grumble, Give a Whistle !\" (Monty Python)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "turning H bonds into constraints...\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 204.2 -o sim_4/NaCl_4.gro\n", "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 2000 time 200.000 \n", + "Dumping frame at t= 204.2 ps\n", + " -> frame 0 time 204.200 \n", + "\n", + "GROMACS reminds you: \"Occams Razor is the scientific principle that, all things being equal, the simplest explanation is always the dog ate my homework.\" (Greg Tamblyn)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "turning H bonds into constraints...\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Setting gen_seed to -230688587\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 202.1 -o sim_5/NaCl_5.gro\n", "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 2000 time 200.000 \n", + "Dumping frame at t= 202.1 ps\n", + " -> frame 0 time 202.100 \n", + "\n", + "GROMACS reminds you: \"Everybody has a plan until they get punched in the mouth\" (Mike Tyson)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 165.4 -o sim_6/NaCl_6.gro\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -571519604\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 1600 time 160.000 \n", + "Dumping frame at t= 165.4 ps\n", + " -> frame 0 time 165.400 \n", + "\n", + "GROMACS reminds you: \"Way to Go Dude\" (Beavis and Butthead)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n", + "Note that major changes are planned in future for trjconv, to improve usability and utility.\n", + "Select group for output\n", + "Selected 0: 'System'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx trjconv, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS: gmx trjconv, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump 190.7 -o sim_7/NaCl_7.gro\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to 2008079862\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", + "Will write gro: Coordinate file in Gromos-87 format\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file pull/pull.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Group 0 ( System) has 323 elements\n", + "Group 1 ( Water) has 321 elements\n", + "Group 2 ( SOL) has 321 elements\n", + "Group 3 ( non-Water) has 2 elements\n", + "Group 4 ( Ion) has 2 elements\n", + "Group 5 ( NA) has 1 elements\n", + "Group 6 ( CL) has 1 elements\n", + "Group 7 ( Water_and_ions) has 323 elements\n", + "Reading frame 0 time 0.000 \n", + "Precision of pull/pull.xtc is 0.001 (nm)\n", + "Reading frame 1900 time 190.000 \n", + "Dumping frame at t= 190.7 ps\n", + " -> frame 0 time 190.700 \n", + "\n", + "GROMACS reminds you: \"A Man Needs a Maid\" (N. Young)\n", + "\n" + ] + } + ], + "source": [ + "import os\n", + "for i in range(len(t_extract)):\n", + " os.mkdir(f'sim_{i}')\n", + " os.system(f'echo System | mpirun -np 1 gmx_mpi trjconv -s pull/pull.tpr -f pull/pull.xtc -dump {t_extract[i]} -o sim_{i}/NaCl_{i}.gro')" + ] + }, + { + "cell_type": "markdown", + "id": "5f5b1381", + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "source": [ + "## 3. Production runs" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4c3d4556", + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "define=-DPOSRES_NA\n", + "integrator = md \n", + "dt = 0.002\n", + "nsteps = 250000\n", + "cutoff-scheme = Verlet\n", + "coulombtype = PME\n", + "rlist = 0.6\n", + "rcoulomb = 0.6\n", + "rvdw = 0.6\n", + "constraints = h-bonds\n", + "tcoupl = V-rescale\n", + "ref_t = 300\n", + "tau-t = 1.0\n", + "tc-grps = System\n", + "gen-vel = yes\n", + "gen-temp = 300\n", + "gen-seed = -1 \n", + "compressibility = 4.5e-5\n", + "nstxout-compressed = 50\n", + "nstxout = 50000\n", + "nstvout = 50000\n", "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "; Pull code\n", + "pull = yes ; Activate the pull code\n", + "pull-ncoords = 1 ; Here we only have 1 CV.\n", + "pull-ngroups = 2 ; We have 2 pull groups\n", + "pull-group1-name = NA ; index 1\n", + "pull-group2-name = CL ; index 2\n", + "pull-coord1-groups = 1 2 ; groups with indices 1 (NA) and 2 (CL) are involved\n", + "pull-coord1-type = umbrella ; The umbrella potential (i.e., harmonic potential) is used.\n", + "pull-coord1-geometry = distance ; Increase the distance between the pull groups\n", + "pull-coord1-dim = Y Y Y ; We allow pulling from any directions.\n", + "pull-coord1-start = yes ; The harmonic potential is centered at the initial COM distance. \n", + "pull-coord1-rate = 0\n", + "pull-coord1-k = 8000\n" + ] + } + ], + "source": [ + "%%bash\n", + "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", + "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", + "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", + "sed -i -e \"s/pull-coord1-k = 1000 ; units: kJ\\/mol\\/nm^2/pull-coord1-k = 8000/g\" NaCl_umbrella.mdp\n", + "cat NaCl_umbrella.mdp" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "146b6456", + "metadata": { + "scrolled": true, + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -155856897\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_0\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_0.gro -r NaCl_0.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -590390609\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -874,11 +1385,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -1358988355\n", + "Setting gen_seed to -1073784977\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -888,51 +1401,167 @@ "\n", "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group 1 'NA' has 1 atoms\n", + "Pull group 2 'CL' has 1 atoms\n", + "Number of degrees of freedom in T-Coupling group System is 645.00\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to 2088763099\n", + "NOTE 1 [file NaCl_umbrella.mdp]:\n", + " Removing center of mass motion in the presence of position restraints\n", + " might cause artifacts. When you are using position restraints to\n", + " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group natoms pbc atom distance at start reference at t=0\n", + " 1 1 0\n", + " 2 1 0 0.251 nm 0.251 nm\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + "There was 1 note\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS reminds you: \"The Lord of the Rings can be confusing to follow because many of the bad minions look and sound familiar; that's why Tolkien gave them each an ORCid.\" (Caroline Bartman)\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "turning H bonds into constraints...\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Setting gen_seed to 1878783497\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_0\n", + "Command line:\n", + " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "NOTE: Thread affinity was not set.\n", + "starting mdrun 'NaCl in water'\n", + "250000 steps, 500.0 ps.\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + "Writing final coordinates.\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + " Core t (s) Wall t (s) (%)\n", + " Time: 84.328 84.328 100.0\n", + " (ns/day) (hour/ns)\n", + "Performance: 512.289 0.047\n", + "\n", + "GROMACS reminds you: \"The researcher's art is first of all to find himself a good boss.\" (Andre Lwoff)\n", + "\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", + "\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -167838914\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_1\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_1.gro -r NaCl_1.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to 2146414433\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -948,11 +1577,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -1175490741\n", + "Setting gen_seed to -648586371\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -962,51 +1593,167 @@ "\n", "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group 1 'NA' has 1 atoms\n", + "Pull group 2 'CL' has 1 atoms\n", + "Number of degrees of freedom in T-Coupling group System is 645.00\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "NOTE 1 [file NaCl_umbrella.mdp]:\n", + " Removing center of mass motion in the presence of position restraints\n", + " might cause artifacts. When you are using position restraints to\n", + " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -311970243\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group natoms pbc atom distance at start reference at t=0\n", + " 1 1 0\n", + " 2 1 0 0.301 nm 0.301 nm\n", "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + "There was 1 note\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + "GROMACS reminds you: \"Screw a Lightbulb in your Head\" (Gogol Bordello)\n", "\n", - "turning H bonds into constraints...\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "turning H bonds into constraints...\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_1\n", + "Command line:\n", + " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Setting gen_seed to -92282947\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", + "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", "\n", - "The largest distance between excluded atoms is 0.152 nm\n", "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", + "NOTE: Thread affinity was not set.\n", + "starting mdrun 'NaCl in water'\n", + "250000 steps, 500.0 ps.\n", "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "Writing final coordinates.\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + " Core t (s) Wall t (s) (%)\n", + " Time: 85.194 85.195 100.0\n", + " (ns/day) (hour/ns)\n", + "Performance: 507.076 0.047\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "GROMACS reminds you: \"It is Lunchtime\" (A.R. Van Buuren)\n", + "\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", + "\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -6587169\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_2\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_2.gro -r NaCl_2.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to 1609547197\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -1022,11 +1769,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -1157\n", + "Setting gen_seed to -134250770\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -1036,26 +1785,13 @@ "\n", "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n" + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_0.gro -r NaCl_0.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -1064,169 +1800,190 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.249 nm 0.249 nm\n", + " 2 1 0 0.350 nm 0.350 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "GROMACS reminds you: \"I ought to warn you, I have no faith\" (Jane Eyre in Jane Eyre by Charlotte Bronte)\n", + "There was 1 note\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS reminds you: \"There is an infinite set A that is not too big.\" (John von Neumann)\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 35.517 35.517 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1216.313 0.020\n", - "\n", - "GROMACS reminds you: \"Do you have mole problems? If so, call Avogadro at 602-1023.\" (Jay Leno)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_1.gro -r NaCl_1.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.299 nm 0.299 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"Do you have mole problems? If so, call Avogadro at 602-1023.\" (Jay Leno)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_2\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "250000 steps, 500.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 35.188 35.189 100.0\n", + " Time: 86.032 86.033 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1227.675 0.020\n", - "\n", - "GROMACS reminds you: \"If you want to save your child from polio, you can pray or you can inoculate... choose science.\" (Carl Sagan)\n", + "Performance: 502.137 0.048\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS reminds you: \"Scientists do not join hands every Sunday and sing \"Yes gravity is real! I know gravity is real! I will have faith! I believe in my heart that what goes up, up, up must come down, down, down. Amen!\" If they did, we would think they were pretty insecure about the concept.\" (Dan Barker)\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_2.gro -r NaCl_2.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.349 nm 0.349 nm\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_3\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_3.gro -r NaCl_3.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -541246995\n", "\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", - "There were 2 notes\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", "\n", - "GROMACS reminds you: \"If you want to save your child from polio, you can pray or you can inoculate... choose science.\" (Carl Sagan)\n", + "turning H bonds into constraints...\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + "turning H bonds into constraints...\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", "\n", - "Using 1 MPI process\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "turning H bonds into constraints...\n", "\n", - "Writing final coordinates.\n", + "Setting gen_seed to -411304323\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 34.686 34.686 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1245.469 0.019\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", - "GROMACS reminds you: \"It's Not Your Fault\" (Pulp Fiction)\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_3.gro -r NaCl_3.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -1235,112 +1992,190 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.399 nm 0.399 nm\n", + " 2 1 0 0.400 nm 0.400 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "There was 1 note\n", "\n", + "GROMACS reminds you: \"Everybody Lie Down On the Floor and Keep Calm\" (KLF)\n", "\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "There were 2 notes\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"I Am a Poor Lonesome Cowboy\" (Lucky Luke)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_3\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "250000 steps, 500.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 37.141 37.141 100.0\n", + " Time: 86.070 86.071 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1163.137 0.021\n", + "Performance: 501.916 0.048\n", "\n", - "GROMACS reminds you: \"All I Ever Wanted Was Your Life\" (Red Hot Chili Peppers)\n", + "GROMACS reminds you: \"A method is more important than a discovery, since the right method will lead to new and even more important discoveries.\" (Lev Landau)\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_4.gro -r NaCl_4.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.450 nm 0.450 nm\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_4\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_4.gro -r NaCl_4.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -18894849\n", "\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "There were 2 notes\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", - "GROMACS reminds you: \"Put Me Inside SSC, Let's Test Superstring Theory, Oh Yoi Yoi Accelerate the Protons\" (Gogol Bordello)\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "turning H bonds into constraints...\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + "turning H bonds into constraints...\n", "\n", - "Using 1 MPI process\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", "\n", - "Writing final coordinates.\n", + "turning H bonds into constraints...\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 37.633 37.633 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1147.927 0.021\n", + "Setting gen_seed to -226608129\n", "\n", - "GROMACS reminds you: \"Strength is just an accident arising from the weakness of others\" (Joseph Conrad)\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_5.gro -r NaCl_5.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -1349,112 +2184,190 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.500 nm 0.500 nm\n", + " 2 1 0 0.451 nm 0.451 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "There was 1 note\n", "\n", + "GROMACS reminds you: \"A cop pulls Heisenberg over and asks him 'Do you know how fast you were going?' Heisenberg replies 'No, but I know exactly where I am'. The cop says 'You were doing 55 in a 35 zone'. Heisenberg: 'Great! Now I'm lost!\" (Anonymous)\n", "\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "There were 2 notes\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"Strength is just an accident arising from the weakness of others\" (Joseph Conrad)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_4\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "250000 steps, 500.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 39.998 39.998 100.0\n", + " Time: 85.986 85.986 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1080.060 0.022\n", + "Performance: 502.409 0.048\n", "\n", - "GROMACS reminds you: \"Weaseling out of things is important to learn. It's what separates us from the animals... except the weasels.\" (Homer Simpson)\n", + "GROMACS reminds you: \"Teemu [Murtola] keeps beating our code, but that's fine because he's always right.\" (Berk Hess)\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_6\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_6.gro -r NaCl_6.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.549 nm 0.549 nm\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_5\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_5.gro -r NaCl_5.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to 1056763382\n", "\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", - "There were 2 notes\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", "\n", - "GROMACS reminds you: \"Weaseling out of things is important to learn. It's what separates us from the animals... except the weasels.\" (Homer Simpson)\n", + "turning H bonds into constraints...\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_6\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + "turning H bonds into constraints...\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", "\n", - "Using 1 MPI process\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "turning H bonds into constraints...\n", "\n", - "Writing final coordinates.\n", + "Setting gen_seed to -54530099\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 43.263 43.263 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 998.538 0.024\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", - "GROMACS reminds you: \"The Lord of the Rings can be confusing to follow because many of the bad minions look and sound familiar; that's why Tolkien gave them each an ORCid.\" (Caroline Bartman)\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_7\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_7.gro -r NaCl_7.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -1463,449 +2376,195 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", + "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.600 nm 0.600 nm\n", + " 2 1 0 0.500 nm 0.500 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "There was 1 note\n", "\n", + "GROMACS reminds you: \"Humans are allergic to change. They love to say, 'We've always done it this way.' I try to fight that. That's why I have a clock on my wall that runs counter-clockwise.\" (Grace Hopper)\n", "\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "There were 2 notes\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"The Lord of the Rings can be confusing to follow because many of the bad minions look and sound familiar; that's why Tolkien gave them each an ORCid.\" (Caroline Bartman)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_7\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_5\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "250000 steps, 500.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 39.833 39.834 100.0\n", + " Time: 87.044 87.044 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1084.514 0.022\n", + "Performance: 496.302 0.048\n", + "\n", + "GROMACS reminds you: \"There are two major products that come out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence.\" (Jeremy Anderson)\n", + "\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", + "\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "GROMACS reminds you: \"With four parameters I can fit an elephant, and with five I can make him wiggle his trunk.\" (John von Neumann)\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", + "\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_6\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_6.gro -r NaCl_6.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", "\n" ] - } - ], - "source": [ - "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", - "for i in {0..7}\n", - "do\n", - " cp pull/NaCl_US.top sim_${i}/. # Use the same top file as in the pulling simulation\n", - " cp pull/Na_posres.itp sim_${i}/. # Copy over the itp file for position restraint\n", - " cp pull/NaCl.ndx sim_${i}/. # This line is only needed for GROMACS with a version later than 2022\n", - " cp NaCl_umbrella.mdp sim_${i}/. # All simulations use the same .mdp file, NaCl_umbrella.mdp\n", - " cd sim_${i}\n", - " mpirun -np 1 gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_${i}.gro -r NaCl_${i}.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1 # Generate the tpr\n", - " mpirun -np 1 gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - " cd ../\n", - "done" - ] - }, - { - "cell_type": "markdown", - "id": "4a7a0066", - "metadata": {}, - "source": [ - "## 4. Data analysis" - ] - }, - { - "cell_type": "markdown", - "id": "4f337a5b", - "metadata": {}, - "source": [ - "### 4-1. Distributions of the pulling distance " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "2a74d0d0", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [ + }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAADQCAYAAADxnJMeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcZklEQVR4nO3dfbRV9X3n8fcH8IEA4gN4RXAJJppU02qTK/Wp7aXGjHVsMdOgtJnEmTrDTGJ0kk7a6MyszmpnOXFWZyXpJLUpY7JimkwImhg1mli0XM0DEVBBBWNqURBFQIPIRcQA3/lj7wOHe8+999x7zz774Xxea5119/mdffb+3n04fO/vt38PigjMzMys3MblHYCZmZmNnRO6mZlZBTihm5mZVYATupmZWQU4oZuZmVWAE7qZmVkFTMj6BJLGA6uBFyPicknHA98CZgPPA1dGxI503xuBa4D9wPURcf9Qx542bVrMnj07u+BLbvfu3UyaNCnvMDqaP4N8+frnz59B6z366KOvRMT0/uWZJ3TgPwFPA8ekz28AHoyImyXdkD7/tKQzgYXAWcDJwAOSzoiI/YMdePbs2axevTrb6Eust7eXnp6evMPoaP4M8uXrnz9/Bq0naWOj8kyb3CXNAv4lcGtd8XzgtnT7NuCKuvIlEbE3Ip4DngXmZhmfmZlZVWR9D/3zwJ8BB+rKuiJiC0D688S0fCbwQt1+m9MyMzMzG0ZmTe6SLge2RcSjknqaeUuDsgHz0kpaBCwC6Orqore3dwxRVltfX5+vT878GeTL1z9//gzaJ8t76BcCvy/pMuBo4BhJXwe2SpoREVskzQC2pftvBk6pe/8s4KX+B42IxcBigO7u7vC9mcH53lX+/Bnky9c/f/4M2iezJveIuDEiZkXEbJLObv8YEf8auBu4Ot3tauCudPtuYKGkoyTNAU4HVmYVn5mZWZW0o5d7fzcDSyVdA2wCFgBExDpJS4H1wD7g2qF6uJfN55b9HIBPXnJGzpGYmVkVtSWhR0Qv0JtuvwpcPMh+NwE3tSMmMzOzKvFMcWZmZhXghG5mZlYBTuhmZmYV4IRuZmZWAU7oZmZmFeCEbmZmVgFO6GZmZhXghG5mZlYBTuhmZmYV4IRuZmZWAU7oZmZmFeCEbmZmVgFO6BmrrbJmZmaWJSd0MzOzCnBCL4Lln0keZmZmo+SEbmZmVgFO6GZmZhXghF5EboI3M7MRckI3MzOrACd0MzOzCpiQdwBWx83sZmY2Sq6hl4HvqZuZ2TCc0DPkWeKsylbes4GV92zIOwwzSzmhm5mZVYATupmZWQW4U1yR+b65mZk1yTV0MzOzCnBCNzPL2c5lG9m5bGPeYVjJOaGbmZlVgO+hm1nTPEzNrLic0DPQf/y5x6ObmVnWMmtyl3S0pJWS1kpaJ+kv0vLjJS2T9E/pz+Pq3nOjpGclPSPpX2QVm5mZWdVkeQ99L/A7EXE2cA5wqaTzgBuAByPidODB9DmSzgQWAmcBlwK3SBqfYXxmZmaVkVlCj0Rf+vSI9BHAfOC2tPw24Ip0ez6wJCL2RsRzwLPA3KziMzMzq5JMe7lLGi9pDbANWBYRjwBdEbEFIP15Yrr7TOCFurdvTsvMzMxsGIqI7E8iHQvcCVwH/Cgijq17bUdEHCfpb4AVEfH1tPzLwH0R8e1+x1oELALo6up675IlSzKPf6S27do76GsnTjlqYOGul5s78JSTRhRHX18fkydPHtF7rLWq9hm8sfOtQV9729Qj2xhJc+qv/+4dvwBg0nHH5xlSQ/t3Jdd1/JTiXcPR2rVrFwCSKvUdKIJ58+Y9GhHd/cvb0ss9Il6T1Etyb3yrpBkRsUXSDJLaOyQ18lPq3jYLeKnBsRYDiwG6u7ujp6cny9BHZahe7Vf2nDGwsNkpXnsWjiiO3t5einh9OknVPoOhhq3N7TmtjZE05947v8OR218EoJYqLyjg51GbVGZqz6k5R9I6y5cvB5KEXqXvQJFl2ct9elozR9JE4H3Az4C7gavT3a4G7kq37wYWSjpK0hzgdGBlVvGZWWvVllP1WHWzfGRZQ58B3Jb2VB8HLI2I70laASyVdA2wCVgAEBHrJC0F1gP7gGsjYn+G8ZVXrUY/78Z84zAzs8LILKFHxBPArzcofxW4eJD33ATclFVMlq1b1txycPtj53wsx0jMyqnRfO5TLyl2M3ytad3y55ni2uxzy37OJy9pcB/dzFrmJ7d/I9mYMDHfQMzayAndzDpWLfFfsOBDbT93p6yutmvXroO1+Hnz5uUcTbU5obeY5223KnJHN7Pic0I3K6jtX/jiwe3p1308x0jK4WAzu1mHckLPU7Pjz62j1Cdys5r6Jvqid5SzfDihl4n/ALA2c1O7WXlkOpe7Neb77GZm1mquoZvlqKr3yWs1+7m/V7zpYH2v3arKNXSzEtj+hS/63rqZDck1dLOCcMLOT32tPY8x6Wat4IRuZqWU56Qwo3FwRbUO7qHeaJpYTzbTOk7oljnP8T6Qa+Nm1mq+h152yz/j4WxmZuYauplZkXXKnO82dq6h58Rj0c06085lG52kLROuoZvZAJ4hzqx8XEM3MzOrANfQbUzqe7Db0Frds712vCrNMGdmo+eEXmYF7t3uRJ8ND3cz8Jh2a6yphC7pwoj48XBlnW6kHd1WbHgVgPNPOyGLcMxGxPfNzcqt2Rr6F4D3NFFmZnZQkRdpGUwrZ6CrWm/2+pnePMNb8QyZ0CWdD1wATJf0J3UvHQOMzzIwMzMza95wNfQjgcnpflPqyl8HPphVUFZMvi9uZlZcQyb0iHgIeEjSVyOiWm1HLTaS++fnbVqcYSSt1eok7nndrdW8vnm51Zrx3YQ/ds3eQz9K0mJgdv17IuJ3sgjK8uWauJlZ+TSb0G8HvgTcCuzPLhzrJK6tm5m1TrMJfV9E/G2mkZhVlMeOm1k7NJvQ75H0MeBOYG+tMCJ+kUlU1nZuZjezkagfwmbF0GxCvzr9+ad1ZQGUZ3CpmZWeO8CZDa6phB4Rc7IOxMxGp75J3/O6m3WuZqd+/Uij8oj4WmvDMTOzTuRZ6Mau2Sb3c+u2jwYuBh4DBk3okk5JXz8JOAAsjoi/lnQ88C2SIXDPA1dGxI70PTcC15D0pL8+Iu4fyS9jZmat4QRbPs02uV9X/1zSVODvh3nbPuA/R8RjkqYAj0paBvwb4MGIuFnSDcANwKclnQksBM4CTgYekHRGRFRmmFymE8rUVl6bd2N25zAbpTLO6V4GXnXN6o0b5fveAE4faoeI2BIRj6Xbu4CngZnAfOC2dLfbgCvS7fnAkojYGxHPAc8Cc0cZn5mZWUdRRAy/k3QPSa92SBZl+RVgaUTc0NRJpNnAw8C7gU0RcWzdazsi4jhJXwR+GhFfT8u/DHw/Iu7od6xFwCKArq6u9y5ZsqSZEDK3bdfeYfeZtHd74/KjWrgs/ZSTDm729fUxefLkQXfdvqdxPHmYPnF63iFkoq+vj6Pf2NO28004cfTX8Y2db7UwksbeNvXIMb1/946RjZTdp3FMiANjOifApOOOH9X79u/K/poCjJ8ytuvayK5duw5uT5kyZUBZsw4cOMC4cSOrO9bOZ43Nmzfv0Yjo7l/ebCb533Xb+4CNEbG5mTdKmgx8G/hERLwuadBdG5QN+GsjIhYDiwG6u7ujp6enmTAy18xc7udtW9awvKXrofcsPLjZ29vLUNenSGPPF5yzIO8QMtHb28tZzz3ftvNNv3L017Ed66HP7Rlbk/tIh63tmDCR4/aN/Q+qC0b4/8zBZVOPHvOpmzK1p/VN7vX30GsVv6EqCIMZrmLRSFH+Xy+bZu+hPySpi0Od4/6pmfdJOoIkmX8jIr6TFm+VNCMitkiaAWxLyzcDp9S9fRbwUjPnsfKryjSw/WeF29fVlVMkZtZpmmoHkXQlsBJYAFwJPCJpyOVTlVTFvww8HRGfrXvpbg5NVHM1cFdd+UJJR0maQ3KPfmWzv4iZJX9QeKrZzrNz2caDD+tczTa5/1fg3IjYBiBpOvAAcMcQ77kQ+DDwpKQ1adl/AW4Glkq6BthE8kcCEbFO0lJgPUmz/rVV6uHeNu7tbmbWkZpN6ONqyTz1KsPU7iPiRzS+Lw7JOPZG77kJuKnJmGwUinTf3MzMWqfZhP4DSfcD30yfXwXcl01I5dJMZzgzS9R3vPOYdLPWGjKhS3oH0BURfyrpXwEXkdS6VwBeJcHMzKwghquhf57kvjdpL/XvAEjqTl/7vQxjMzMDyrHKWlU6pHlZ1PIaLqHPjogn+hdGxOp0shgzKylPx2pF5XnkR2e4hD7UtAgTWxmIWU1VxqSXRTsmlDGz7A03Dn2VpH/fvzAdcvZoNiF1nhUbXs07BKsYj0dvrZ/c/o1SNPtbZxuuhv4J4E5JH+JQAu8GjgQ+kGFcZmZmNgJDJvSI2ApcIGkeycIqAPdGxD9mHpmZdTTXiM1Gptm53JcD7vpoZmZWUKNdD93MrOOU4V561eZ0X758uYfSNamFC3GbWRm4V7tZNbmGXhDu6W5mZmPhGnobnLdpcd4hmJlZxbmGbma5WHnPBjf/m7WQa+hWaJ41zsysOU7oZmYVVN/Tfeolp+YYibWLE7qZWYfzsLBqcEK30qg1vxel6b1+rvTp1308x0jMRs5JvHrcKc7McuXOcWat4Rp6VS3/DPTNyTuKjlHUlc3cipC9Ks3KVmReI314rqGPweeW/TzvEMzMzADX0DtC/dAvMzOrJid0Kx2PTa+2oi9+YlZUTuhWak7ulof6PzrOOvaiHCPpTLX76b6Xfjgn9Ax5DnczM2sXJ3SzDvDUtulM8tAws0pzL/cC8RKqlqXdK1exe+WqvMOonM3rn2Tz+ifzDsPMCb3yln8Gnvth3lGYmVnG3ORuVmFPbZuedwiVNfWlqXmHYHYYJ3Qzsw5SpTncPXvc4dzkbmZmVgGZ1dAlfQW4HNgWEe9Oy44HvgXMBp4HroyIHelrNwLXAPuB6yPi/qxiMxuLos7bXmYb197HxrWHns9853H5BVNhO5dtZO+mnRx1mm8XVFGWTe5fBb4IfK2u7AbgwYi4WdIN6fNPSzoTWAicBZwMPCDpjIjYn2F8Y+J53M2sLH7w5e/mHYK1QWZN7hHxMPCLfsXzgdvS7duAK+rKl0TE3oh4DngWmJtVbJ3glteeYPv+Pdzy2hN5h2JmZm3Q7k5xXRGxBSAitkg6MS2fCfy0br/NadkAkhYBiwC6urro7e3NLtohzHxz77D7/GLqOSM+bm/f6D+S7fv3HNyerpOYwDFM1/uTgi2TR33csuh9rbct59nX1dX0vnuOmMDaEezfantOGPjvqW/Xobbt8ZMmtTOcQU14++HXaMeE8S057j6NY8eEiS05FsD4Xx6K6/UZhzcgvvzmMy07T6u91a+F/Zd9fW0794EDB+hrw/nyygVFUpRe7mpQFo12jIjFwGKA7u7u6OnpyTCswTXT5H7etmUjPu75p50wmnAABtTGp+v9bI9/SJ7M+M1RH7csFpyzoC3nGck99LVdXZy9dWuG0QxtuGFrk+ae3aZIhrbxn+877HlXi+6h75gwkeP27Rl+xyZN3TL4vedZZ76zZedptRXbHj/s+VGnte8P/L6+PiZPzv58eeWCIml3Qt8qaUZaO58BbEvLNwOn1O03C3ipzbFVW21ymTnVT+xmeaifLW7Wmb+aYyTWqdqd0O8GrgZuTn/eVVf+/yR9lqRT3OnAyjbHZiXnldfKZ+Pa+4bfycyakuWwtW8CPcA0SZuB/06SyJdKugbYBCwAiIh1kpYC64F9wLVF7uGepdp87mNperdseLha+7z4zA7Aw9fMRiKzhB4RfzjISxcPsv9NwE1ZxVM2Kza86qRuleRaef72bth5cNtj0qvDM8WZmZlVgBO6mZlZBRRl2JqZ5aC2PvqkuefmHEmxlXVltRWbHh9+J6sM19Azct6mxXmHYGZmHcQJ3czMSm/58uWVWhp2NNzk3mKumZuZWR6c0EeoaKusjXjxlQ6ZMa5Vk8yUdez5cFO+WrZqs8aVYca42hA2D18rPze5m5mZVYBr6FZ59bX1ep4e9hD3dh+orD3brXM5oZeU1zm3TlCbArbGU8GaDc5N7mZmZhXghG5mZlYBTugFVlt5zcwSLz6z4+DDzA7ne+hmqbIOUSuLsqyy5s5w5VY/ucy8efNyjKT9nNALzsuo2nA85rwcyjQ2vSo6Lbk7obeIZ4izKqgNXwMPYTMrGyf0TtUhM8Y165Y1tzD75SSZnXuSE5m1Rq1WXga1GePAs8aVlTvFjUBe076u2PCqO8iZmY1BJyze4hp6k4o2h3vLuKZuVlpe79zqOaFbogMT+2BTwpqZlZETesHdPe7ZQ9vPP8spx07MMZrqmH37Iwe3n1/wG4e9turlQx3DfD99dGpD1E49+7KcIzE7XJV7vjuhW8erT+52SCsWbCnL2PN2qu8oV9QhbPUd5MCd5MrCCd2sZGrjzt994vacI6mWskwo4/vmNhgndOsoVaqNe0IZM6vnYWsl88Jre9pzolonObOCG83c7lNfmlqaGrlZs1xDt8NVKJG3sjaed0c518aHV0vqXjO99ao66Uytg1xVOsc5oZtZy7gTXHZ87zw7Ven57oTehHZMKlM/PO33D7xjyH1rze4ewpa9+pq5FUsrllDNu9m9jAu21GrrVaqpV4UT+hjluSjLC6/tcVLPWdZN8UVoaq9fsKWmfiiba+VjN9hQNtfKbSSc0Auovraeq/730ztoFjkbnhO5WbEULqFLuhT4a2A8cGtE3JxzSFYCQ838Zq23e+Uq3nrlpcPKjpx5ck7RDC3vZvVWeH37VgCOmd6VcySNuRm+GAqV0CWNB/4GuATYDKySdHdErM8jnqzvnbeiJp7L/fQCzfveqCd7XmPNW9n8XoSm9pF668Ukweed2Gv31mft7YJfEa+/cmio5zHTin+LavP6J1m358XCJu+hVCGxN1qRrb6jXJF7xhcqoQNzgWcjYgOApCXAfCCXhD6UPO+dN9KWxN6/CT7HJvk8J4gZaUe5/om+/0xvRUveL72yFoCTp509oGyk2p3kZ+0tVxJct+fFQV+r1cqLqv/0sJ2miD3ji5bQZwIv1D3fDLS1/bR/rXy0iTuv++D1E89MPeYAL7w+fMe5lv0xMNwY9v4J/7kfDig7mKhf25j8PPbUscWUk1oS33fCvMO+ZKteXsWON2qJcubB8pf6Bv7HfvLkmQPKstIoYY81iQ9WNtbkPpakXV9bH4lazX40tf1a0j5r4swBZSPVqOl9qMTfaL921PwPS/Ynjh9YNoQi1u6HW0e9Ua09j5p80RK6GpTFYTtIi4BF6dM+Sc9kHlVp3TUNeCXvKA5Z0mRZlXytYJ9Bx/H1z58/g9ZrWNMpWkLfDJxS93wWcNif+xGxGChWe3dBSVodEd15x9HJ/Bnky9c/f/4M2qdoc7mvAk6XNEfSkcBC4O6cYzIzMyu8QtXQI2KfpI8D95MMW/tKRKzLOSwzM7PCK1RCB4iI+wDPWNEavjWRP38G+fL1z58/gzZRRAy/l5mZmRVa0e6hm5mZ2Sg4oVeApEslPSPpWUk3NHh9vqQnJK2RtFrSRXnEWVXDXf+6/c6VtF/SB9sZXydo4jvQI2ln+h1YI+nP84izypr5HqSfwxpJ6yQ91O4Yq85N7iWXTpf7c+qmywX+sH66XEmTgd0REZJ+DVgaEe/KJeCKaeb61+23DHiTpLPnHe2Otaqa/A70AJ+KiMvziLHqmvwMjgV+AlwaEZsknRgR2/KIt6pcQy+/g9PlRsRbJDO1zK/fISL64tBfbpPoN1mPjcmw1z91HfBtwP+BtV6zn4Flp5nP4I+A70TEJgAn89ZzQi+/RtPlDpgzVNIHJP0MuBf44zbF1gmGvf6SZgIfAL7Uxrg6SVPfAeB8SWslfV/SWe0JrWM08xmcARwnqVfSo5I+0rboOkThhq3ZiA07XS5ARNwJ3Cnpt4D/Abwv68A6RDPX//PApyNiv9RodxujZj6Dx4BTI6JP0mXAd4HTsw6sgzTzGUwA3gtcDEwEVkj6aURku6xlB3FCL79hp8utFxEPS3q7pGkR4fmVx66Z698NLEmT+TTgMkn7IuK7bYmw+pqZMvr1uu37JN3i70BLNfM92Ay8EhG7gd2SHgbOJrn3bi3gJvfyG3a6XEnvUJpNJL0HOBJ4te2RVtOw1z8i5kTE7IiYDdwBfMzJvKWa+Q6cVPcdmEvyf5+/A63TzLTddwG/KWmCpLeRrKT5dJvjrDTX0EtusOlyJf3H9PUvAX8AfETSL4E9wFV1neRsDJq8/pahJj+DDwIflbSP5Duw0N+B1mnmM4iIpyX9AHgCOADcGhFP5Rd19XjYmpmZWQW4yd3MzKwCnNDNzMwqwAndzMysApzQzczMKsAJ3czMrAKc0M0yJKkvx3PfKunMEb5ntqSn0u1uSf9nmH3/aKxxjpakiZIeShcGGeuxpqdDqsxKywndrKIi4t/1X/UNDq6M1cz7V0fE9UPsMptkwY28/DHJYh/7x3qgiNgObJF04djDMsuHE7pZGyjxV5KekvSkpKvS8p50sYo7JP1M0jdqM5r1e3+PpIcl3SlpvaQvSRqXvva3Sta5XyfpL+re0yupO93uk/SXkh4Bzu937Pemi5asAK7td87vpdu/rUNriT8uaQpwM8nMX2skfTKtsf9Q0mPp44Lhfkcla8T/JD3/SklTJI1Pr9UqSU9I+g+DXNYPkcw+Ntw5npf0PyWtSK/TeyTdL+mfaxOfpL6bHtOsnCLCDz/8yOgB9KU//4BkPfTxQBewCZgB9AA7Sea+HgesAC5qcJwekrXUT0uPsQz4YPra8enP8UAv8Gvp816gO90O4MpBYnwC+O10+6+Ap+rO+b10+x7gwnR7MskskwdfT8vfBhydbp8OrK47zoDfkWQK4g3Auel+x6THXQT8t7TsKGA1MKdfzEcCL/e7Pg2vI/A88NF0+3Pp7zsFmA5sqzvGTODJvP/N+OHHaB+uoZu1x0XANyNif0RsBR4Czk1fWxkRmyPiALCGpCm7kZWRrDe9H/hmekyAKyU9BjwOnAU0um++n2Q99sNImgocGxEPpUV/P8i5fwx8VtL16f77GuxzBPB/JT0J3N4vjka/4zuBLRGxCpIFVNLjvp9kquI1wCPACQxcGW0a8Fq/sqGuY21e8SeBRyJiVyTN7G9KOjZ9bRtw8iC/v1nheS53s/YYat3UvXXb+4EJkn4D+Lu07M+B1xm4HGVImgN8iqSWu0PSV4GjG5zjzWh8r1kNjjtARNws6V7gMuCnkhotv/tJYCvJClrjSFoUagb8jkOcW8B1EXH/ECHtYeDv2egc/V870G+/A3X7HZ0e16yUXEM3a4+HgavS+8PTgd8CVg62c0Q8EhHnpI9a7XJuuprVOOAq4EckzdS7gZ2SuoDfHUlQEfFa+t5abb/hPWRJb4+IJyPif5E0gb8L2EXSdF0zlaTGfQD4MMktgKH8DDhZ0rnpOaZImkCywMdHJR2Rlp8haVK/uHcA4yU1+uNltM4AvFiIlZZr6GbtcSdJZ7S1JLXSP4uIlyW9awTHWEHSEe1XSf5AuDMiDkh6HFhHcj/6x6OI7d8CX5H0BkkybeQTkuaR1HzXA98nqd3uk7QW+CpwC/BtSQuA5SR/aAwqIt5KOwd+QdJEktrx+4BbSZrLH0s7tm0HrmhwiH8gue3wQNO/6dDmAfe26FhmbefV1sxKQFIP8KmIuDznUApD0q8DfxIRH27R8R4G5qe1f7PScZO7mZVSRDwOLG/VxDLAZ53MrcxcQzczM6sA19DNzMwqwAndzMysApzQzczMKsAJ3czMrAKc0M3MzCrACd3MzKwC/j/rCtwLZaRCGQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "pullx_data = [np.transpose(np.loadtxt(f'sim_{i}/pullx.xvg', comments=['@', '#'])) for i in range(8)]\n", - "dist_list = [data[1] for data in pullx_data]\n", - "\n", - "plt.figure(figsize=(8, 3))\n", - "for i in range(8):\n", - " plt.hist(dist_list[i], bins=50, alpha=0.5)\n", - "plt.xlabel('Ion-pair distance (nm)')\n", - "plt.ylabel('Count')\n", - "plt.grid()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "60ec4527", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "from matplotlib import rc\n", - "rc('font', **{\n", - " 'family': 'sans-serif',\n", - " 'sans-serif': ['DejaVu Sans'],\n", - " 'size': 10,\n", - "})\n", - "# Set the font used for MathJax - more on thiprint(images)\n", - "rc('mathtext', **{'default': 'regular'})\n", - "plt.rc('font', family='serif')" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "9cba6b04", - "metadata": {}, - "outputs": [], - "source": [ - "def setup_coordinates(ax, color):\n", - " ax.spines['top'].set_color(color)\n", - " ax.spines['bottom'].set_color(color)\n", - " ax.spines['left'].set_color(color)\n", - " ax.spines['right'].set_color(color)\n", - " ax.tick_params(color=color, labelcolor=color)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "0b0928bf", - "metadata": { - "scrolled": true - }, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -1333796243\n", + "\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "dark" - }, - "output_type": "display_data" - } - ], - "source": [ - "pullx_data = [np.transpose(np.loadtxt(f'sim_{i}/pullx.xvg', comments=['@', '#'])) for i in range(8)]\n", - "dist_list = [data[1] for data in pullx_data]\n", - "\n", - "fig = plt.figure(figsize=(9, 3))\n", - "ax = fig.add_subplot(111)\n", - "setup_coordinates(ax, color='white')\n", - "for i in range(8):\n", - " plt.hist(dist_list[i], bins=50, alpha=0.5)\n", - "plt.xlabel('Ion-pair distance (nm)', color='white')\n", - "plt.ylabel('Count', color='white')\n", - "plt.grid()\n", - "plt.tight_layout()\n", - "plt.savefig('results/pullx_distribution.png', transparent=True, dpi=600)" - ] - }, - { - "cell_type": "markdown", - "id": "171fcf10", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "source": [ - "### 4-2. Free energy calculations" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "2991ac13", - "metadata": { - "slideshow": { - "slide_type": "-" - } - }, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", + "\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", + "\n", + "turning H bonds into constraints...\n", + "\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", + "\n", + "turning H bonds into constraints...\n", + "\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", + "\n", + "turning H bonds into constraints...\n", + "\n", + "Setting gen_seed to 1677713403\n", + "\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "Warning on use of the timeseries module: If the inherent timescales of the system are long compared to those being analyzed, this statistical inefficiency may be an underestimate. The estimate presumes the use of many statistically independent samples. Tests should be performed to assess whether this condition is satisfied. Be cautious in the interpretation of the data.\n" + "Pull group 1 'NA' has 1 atoms\n", + "Pull group 2 'CL' has 1 atoms\n", + "Number of degrees of freedom in T-Coupling group System is 645.00\n", + "\n", + "NOTE 1 [file NaCl_umbrella.mdp]:\n", + " Removing center of mass motion in the presence of position restraints\n", + " might cause artifacts. When you are using position restraints to\n", + " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" ] }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import time\n", - "import pymbar\n", - "from pymbar import timeseries\n", - "import random\n", - "import scipy.stats\n", - "\n", - "# Step 1: Setting up\n", - "K = 8 # number of umbrellas\n", - "N_max = 5001 # number of data points in each timeseries of ion-pair distance\n", - "kT = 1.381e-23 * 6.022e23 / 1000 * 300 # 1 kT converted to kJ/mol at 300 K\n", - "beta_k = np.ones(K) / kT # inverse temperature of simulations (in 1/(kJ/mol)) \n", - "d_min, d_max = 0.25, 0.65 # minimum and maximum of the CV for plotting the FES\n", - "nbins = 50 # number of bins for FES\n", - "K_k = np.ones(K) * 8000 # spring constant (in kJ/mol/nm**2) for different simulations\n", - "N_k, g_k = np.zeros(K, int), np.zeros(K) # number of samples and statistical inefficiency of different simulations\n", - "d_kn = np.zeros([K, N_max]) # d_kn[k,n] is the ion-pair distance (in nm) for snapshot n from umbrella simulation k\n", - "u_kn = np.zeros([K, N_max]) # u_kn[k,n] is the reduced potential energy without umbrella restraints of snapshot n of umbrella simulation k\n", - "uncorrelated_samples = [] # Uncorrelated samples of different simulations\n", - "\n", - "# Step 2: Read in and subsample the timeseries\n", - "for k in range(K):\n", - " d_kn[k] = np.transpose(np.loadtxt(f'sim_{k}/pullx.xvg', comments=['@', '#']))[1]\n", - " N_k[k] = len(d_kn[k])\n", - " d_temp = d_kn[k, 0:N_k[k]]\n", - " g_k[k] = timeseries.statistical_inefficiency(d_temp) \n", - " indices = timeseries.subsample_correlated_data(d_temp, g=g_k[k]) # indices of the uncorrelated samples\n", - " \n", - " # Update u_kn and d_kn with uncorrelated samples\n", - " N_k[k] = len(indices) # At this point, N_k contains the number of uncorrelated samples for each state k \n", - " u_kn[k, 0:N_k[k]] = u_kn[k, indices]\n", - " d_kn[k, 0:N_k[k]] = d_kn[k, indices]\n", - " uncorrelated_samples.append(d_kn[k, indices])\n", - "\n", - "d0_k = np.array([d_kn[i][0] for i in range(K)]) \n", - "N_max = np.max(N_k) # shorten the array size\n", - "u_kln = np.zeros([K, K, N_max]) # u_kln[k,l,n] is the reduced potential energy of snapshot n from umbrella simulation k evaluated at umbrella l\n", - "u_kn -= u_kn.min() # shift the minimum of the FES to 0\n", - "\n", - "# Step 3: Bin the data\n", - "bin_center_i = np.zeros([nbins])\n", - "bin_edges = np.linspace(d_min, d_max, nbins + 1)\n", - "for i in range(nbins):\n", - " bin_center_i[i] = 0.5 * (bin_edges[i] + bin_edges[i + 1])\n", - " \n", - "# Step 4: Evaluate reduced energies in all umbrellas\n", - "for k in range(K):\n", - " for n in range(N_k[k]):\n", - " # Compute minimum-image ion-pair distance deviation from umbrella center l\n", - " dd = d_kn[k,n] - d0_k # delta d\n", - " # Compute energy of snapshot n from simulation k in umbrella potential l\n", - " u_kln[k,:,n] = u_kn[k,n] + beta_k[k] * (K_k / 2) * dd ** 2\n", - "\n", - "# Step 5: Compute, output, and plot the FES\n", - "fes = pymbar.FES(u_kln, N_k, verbose=False)\n", - "histo_params = {'bin_edges': bin_edges}\n", - "d_n = pymbar.utils.kn_to_n(d_kn, N_k=N_k)\n", - "fes.generate_fes(u_kn, d_n, fes_type='histogram', histogram_parameters=histo_params)\n", - "results = fes.get_fes(bin_center_i, reference_point=\"from-lowest\", uncertainty_method=\"analytical\")\n", - "f_i = results[\"f_i\"]\n", - "df_i = results[\"df_i\"]\n", - "\n", - "with open('results/fes.dat', 'w') as f:\n", - " f.write(\"# free energy profile (in units of kT), from histogramming\\n\")\n", - " f.write(f\"# {'bin':>8s} {'f':>8s} {'df':>8s} \\n\")\n", - " for i in range(nbins):\n", - " f.write(f\"{bin_center_i[i]:>8.3f} {f_i[i]:>8.3f} {df_i[i]:>8.3f} \\n\")\n", - "\n", - "plt.figure()\n", - "plt.plot(bin_center_i, f_i)\n", - "plt.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", - "plt.xlabel('Ion-pair distance (nm)')\n", - "plt.ylabel('Free energy (kT)')\n", - "plt.grid()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "540896bc", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(8, 3))\n", - "for i in range(8):\n", - " plt.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", - "plt.xlabel('Ion-pair distance (nm)')\n", - "plt.ylabel('Count')\n", - "plt.grid()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "df172b79", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "dark" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import matplotlib.gridspec as gridspec\n", - "\n", - "# Create a 3-row x 9-column grid\n", - "gs = gridspec.GridSpec(nrows=3, ncols=9)\n", - "\n", - "# Create the first subplot of size 4:3 \n", - "plt.figure(figsize=(9, 3))\n", - "ax1 = plt.subplot(gs[:, 0:4])\n", - "ax1.plot(bin_center_i, f_i)\n", - "ax1.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", - "ax1.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax1.set_ylabel('Free energy (kT)', color='white')\n", - "ax1.grid()\n", - "plt.text(-0.1, 1.15, 'A', transform=ax1.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", - "\n", - "# Create the second subplot of size 8:3\n", - "ax2 = plt.subplot(gs[:, 4:9])\n", - "for i in range(8):\n", - " ax2.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", - "ax2.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax2.set_ylabel('Number of \\nuncorrelated samples', color='white')\n", - "ax2.grid()\n", - "plt.text(-0.1, 1.15, 'B', transform=ax2.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", - "\n", - "setup_coordinates(ax1, color='white')\n", - "setup_coordinates(ax2, color='white')\n", - "plt.tight_layout(w_pad=2)\n", - "plt.savefig('results/f_profile.png', transparent=True, dpi=600)" - ] - }, - { - "cell_type": "markdown", - "id": "a1f35e97", - "metadata": {}, - "source": [ - "## 5. Additional exercises\n", - "In this section, we explore umbrella sampling simulations with different force constants to see how force constants change the spread of the CV distributions and the resulting free energy profile. For a more detailed description of the exercise, please refer to Exercise 3 in the article. " - ] - }, - { - "cell_type": "markdown", - "id": "c8cd1947", - "metadata": {}, - "source": [ - "### 5-1. Setting $k$ to $1000$ $\\mathrm{kJ/mol/nm^2}$" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "eeeb3661", - "metadata": {}, - "outputs": [], - "source": [ - "%%bash\n", - "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", - "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", - "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", - "# no need to modify k since k=1000 was also used in the pulling simulation" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "fdb06134", - "metadata": {}, - "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Setting the LD random seed to -539541251\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -268829079\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -1917,160 +2576,144 @@ "Calculating fourier grid dimensions for X Y Z\n", "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -1459961861\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group natoms pbc atom distance at start reference at t=0\n", + " 1 1 0\n", + " 2 1 0 0.551 nm 0.551 nm\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "There was 1 note\n", "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", + "GROMACS reminds you: \"These Gromacs Guys Really Rock\" (P.J. Meulenhoff)\n", "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "turning H bonds into constraints...\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "turning H bonds into constraints...\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_6\n", + "Command line:\n", + " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "turning H bonds into constraints...\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", - "Setting gen_seed to 1610076077\n", + "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "NOTE: Thread affinity was not set.\n", + "starting mdrun 'NaCl in water'\n", + "250000 steps, 500.0 ps.\n", "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", + "Writing final coordinates.\n", "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + " Core t (s) Wall t (s) (%)\n", + " Time: 100.638 100.638 100.0\n", + " (ns/day) (hour/ns)\n", + "Performance: 429.261 0.056\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + "GROMACS reminds you: \"A cop pulls Heisenberg over and asks him 'Do you know how fast you were going?' Heisenberg replies 'No, but I know exactly where I am'. The cop says 'You were doing 55 in a 35 zone'. Heisenberg: 'Great! Now I'm lost!\" (Anonymous)\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -270075425\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to 2079194559\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to 395828991\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -16796837\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -872563203\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -285616193\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -537743877\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_7\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_7.gro -r NaCl_7.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -810562569\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -2086,11 +2729,13 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -402686984\n", + "Setting gen_seed to 1778293437\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -2100,26 +2745,13 @@ "\n", "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n" + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_0.gro -r NaCl_0.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -2131,438 +2763,100 @@ "\n", "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.249 nm 0.249 nm\n", + " 2 1 0 0.598 nm 0.598 nm\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", + "There was 1 note\n", "\n", - "There were 2 notes\n", + "GROMACS reminds you: \"The Lord of the Rings can be confusing to follow because many of the bad minions look and sound familiar; that's why Tolkien gave them each an ORCid.\" (Caroline Bartman)\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", + "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"The road to openness is paved with git commits\" (Vedran Miletic)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_7\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", + "NOTE: Thread affinity was not set.\n", "starting mdrun 'NaCl in water'\n", "250000 steps, 500.0 ps.\n", "\n", "Writing final coordinates.\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 38.430 38.431 100.0\n", + " Time: 89.361 89.362 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1124.109 0.021\n", - "\n", - "GROMACS reminds you: \"Mendeleev's first attempt, the perfluoric table, was a total disaster, and his subsequent attempts, the perchloric and perbromic tables, were not favorably received. Only his fourth attempt, the periodic table, gained general acceptance.\" (Anonymous)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_1.gro -r NaCl_1.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.299 nm 0.299 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", - "\n", - "GROMACS reminds you: \"You Can Be Too Early, You Can Be Too Late and You Can Be On Time\" (J. Cruijff)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "Performance: 483.431 0.050\n", "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 40.337 40.337 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1070.976 0.022\n", - "\n", - "GROMACS reminds you: \"I spent a lot of money on booze, birds and fast cars. The rest I just squandered.\" (George Best)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_2.gro -r NaCl_2.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.349 nm 0.349 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", - "\n", - "GROMACS reminds you: \"Time is the best appraiser of scientific work, and I am aware that an industrial discovery rarely produces all its fruit in the hands of its first inventor.\" (Louis Pasteur)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 38.348 38.349 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1126.510 0.021\n", - "\n", - "GROMACS reminds you: \"I always think there is something foreign about jolly phrases at breakfast.\" (Mr. Carson in Downtown Abbey)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_3.gro -r NaCl_3.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.399 nm 0.399 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", - "\n", - "GROMACS reminds you: \"I always think there is something foreign about jolly phrases at breakfast.\" (Mr. Carson in Downtown Abbey)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 38.259 38.260 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1129.135 0.021\n", - "\n", - "GROMACS reminds you: \"With four parameters I can fit an elephant, and with five I can make him wiggle his trunk.\" (John von Neumann)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_4.gro -r NaCl_4.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.450 nm 0.450 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", - "\n", - "GROMACS reminds you: \"With four parameters I can fit an elephant, and with five I can make him wiggle his trunk.\" (John von Neumann)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 39.598 39.598 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1090.969 0.022\n", - "\n", - "GROMACS reminds you: \"Shoot them in the back now\" (The Ramones)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_5.gro -r NaCl_5.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.500 nm 0.500 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", - "\n", - "GROMACS reminds you: \"If mathematical analysis should ever hold a prominent place in chemistry - an aberration which is happily almost impossible - it would occasion a rapid and widespread degeneration of that science.\" (Aguste Comte, 1830)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 40.683 40.683 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1061.873 0.023\n", - "\n", - "GROMACS reminds you: \"Highly organized research is guaranteed to produce nothing new.\" (Frank Herbert)\n", + "GROMACS reminds you: \"Life need not be easy, provided only that it is not empty.\" (Lise Meitner)\n", "\n" ] } ], "source": [ "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", - "for i in {0..5} # We only run simulations for 6 windows here, since the centers of the last two windows are too close to the upper bound. \n", + "for i in {0..7}\n", "do\n", " cp pull/NaCl_US.top sim_${i}/. # Use the same top file as in the pulling simulation\n", " cp pull/Na_posres.itp sim_${i}/. # Copy over the itp file for position restraint\n", - " cp pull/NaCl.ndx sim_${i}/. # This line is only needed for GROMACS with a version later than 2022\n", " cp NaCl_umbrella.mdp sim_${i}/. # All simulations use the same .mdp file, NaCl_umbrella.mdp\n", " cd sim_${i}\n", - " mpirun -np 1 gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_${i}.gro -r NaCl_${i}.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1 # Generate the tpr\n", + " mpirun -np 1 gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_${i}.gro -r NaCl_${i}.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1 # Generate the tpr\n", " mpirun -np 1 gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", " cd ../\n", "done" @@ -2570,67 +2864,205 @@ }, { "cell_type": "markdown", - "id": "4d6e5512", + "id": "4a7a0066", "metadata": {}, "source": [ - "Notably, since the spread of the distributions will be wider given smaller force constants, here we only consider 6 windows centered from 0.25 up to 0.55 nm so that it is less likely to have configurations with an ion-pair distance exceeding half of the box length. \n", - "\n", - "In the code below, we will need to change the following parameters:\n", - "- The value of `K` (line 8)\n", - "- The value of `d_max` (line 12)\n", - "- The value of `nbins` (line 13)\n", - "- The values of `K_k` (line 14)\n", - "\n", - "Note that we use a smaller number of bins because some regions may have very few samples. Using too many bins will possibly lead to bins with 0 samples. " + "## 4. Data analysis" ] }, { - "cell_type": "code", - "execution_count": 25, - "id": "3f291e6f", + "cell_type": "markdown", + "id": "4f337a5b", "metadata": {}, + "source": [ + "### 4-1. Distributions of the pulling distance " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2a74d0d0", + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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W4sVK1bgn//8J/bt24fi4uIWx2X37t24dOkS9u3bh7fffhuLFy/GQw89hK5du+LQoUN45pln8PTTT7foYxsdHY39+/e3eoyJyIUIREQuIjExUXjkkUcEQRCE6upqQaVSCZs2bRKX19XVCaGhocKbb74pCIIg5ObmCgCEXbt2iWW+/vprAYDw66+/tlqPv7+/UFNTI85bs2aN4OPjIzQ0NBhd5/LlywIA4dixY4IgCMLZs2cFAMIPP/xgEMvWrVtb3cf3339fCAgIMIhvzZo1Rrd1/fp1QRAEYciQIcKSJUuMbq95WVNMxf/hhx+KZU6cOCEAEE6dOiUIgiBMmzZNuOeee4xu7+bNm4KXl5dw4MABg/mzZs0Spk2bZjKOYcOGCUuXLjWYt379egGAUFRUJM5LT08XgoKCxOnExEQhPDzc4PwMHDhQGDt2rDhdX18veHt7C5988onB9hcsWCCMGzfOZExE5FrYcktELun06dPQ6XS45557xHkqlQrR0dE4deqUQdmmLaQhISEAgPLychQXF8PHx0d8LV++XCw3bNgweHl5idMajQbV1dU4f/48AOC///0vpk2bhr59+0KtVqN3794AbvUZbY2xVsmmGlt0O3XqZFB3a5577jm8+uqruOeee7B48WIcPXq01fKWxG/q2AG3W26NKSoqQm1tLWJjYw2O8T/+8Q+D7g/N/frrrwb73sjLywv9+vUziKUxjkaDBw+GUnn7z1pQUBCGDBkiTru5uSEgIKDFep07d0Ztba3JmIjItRi/04GISEZUKpX4vvEmLL1ej549exoM1eXv72/2NidPnozw8HB88MEHCA0NhV6vx5133mnQL9cYb29vy4I3w1NPPYX4+Hh8/fXX2LlzJ9LS0vDXv/4V8+fPN7mOufGbOnbAraTQlOrqagDA119/bdB/FgA8PT1NrtetWzexz66pOBpjEQShzTLG5jXvenHt2jV0797dZExE5FrYcktELqlfv37w8PDAf/7zH3GeTqfDkSNHEBkZadY23N3d0b9/f/HVNLn98ccf8euvv4rTBw8eFPuxXr16FYWFhVi0aBHGjx+PiIgIowmZNSIiInD06FHcvHnToO62hIWF4ZlnnsGWLVvwf//3f/jggw8A3BpZAYDYDxaAzeIfOnQocnJyjC6LjIyEp6cniouLDY5x//79ERYWZnKbI0aMwMmTJy2OpT2OHz+OESNGOLROIrIfJrdE5JK8vb0xd+5cvPDCC9ixYwdOnjyJ2bNno7a2FrNmzWr39uvq6jBr1iycPHkSmZmZWLx4MebNmwelUomuXbsiICAA69atQ1FREXbv3o3k5GQb7BUwffp0KBQKzJ49W6x7xYoVra7zpz/9CVlZWTh79iy+//575ObmIiIiAgAQHh4OhUKB7du34/Lly6iurrZZ/CkpKThy5AieffZZHD16FD/99BPWrFmDK1euoEuXLnj++eexYMECbNy4EadPn8b333+PVatWYePGjSa3GR8fj7y8PINk3J5qa2uRn5+PuLg4h9RHRPbH5JaIXNbrr7+OhIQEzJgxA3fddReKioqQlZWFrl27tnvb48ePxx133IH77rsPjz32GB5++GEsWbIEAKBUKvHpp58iPz8fd955JxYsWIC33nqr3XUCgI+PD7Zt24Zjx45hxIgReOmll/DGG2+0uk5DQwOSkpIQERGBBx54AAMGDMDq1asBAD169EBqaipefPFFBAUFiQm6LeIfMGAAdu7ciR9//BHR0dHQaDT48ssvxbF9ly1bhpdffhlpaWlibF9//TX69OljcpsTJ06Eu7s7du3aZXE81vjyyy/Rq1cvjB071iH1EZH9KYTmnZaIiDq4J598EhUVFdi6davUoXRI6enp+Oqrr5CVlWX3ukaPHo3nnnsO06dPt3tdROQYvKGMiIicytNPP42KigrcuHHDro/gvXLlCh599FFMmzbNbnUQkeOx5ZaIqBm23BIRuS4mt0REREQkG7yhjIiIiIhkg8ktEREREckGk1siIiIikg0mt0REREQkG0xuiYiIiEg2mNwSERERkWwwuSUiIiIi2WByS0RERESyweSWiIiIiGTj/wHjGUGtBOLvbQAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "import time\n", - "import pymbar\n", - "from pymbar import timeseries\n", - "import random\n", - "import scipy.stats\n", - "\n", - "# Step 1: Setting up\n", - "K = 6 # number of umbrellas\n", - "N_max = 5001 # number of data points in each timeseries of ion-pair distance\n", - "kT = 1.381e-23 * 6.022e23 / 1000 * 300 # 1 kT converted to kJ/mol at 300 K\n", - "beta_k = np.ones(K) / kT # inverse temperature of simulations (in 1/(kJ/mol)) \n", - "d_min, d_max = 0.25, 0.55 # minimum and maximum of the CV for plotting the FES\n", - "nbins = 15 # number of bins for FES\n", - "K_k = np.ones(K) * 1000 # spring constant (in kJ/mol/nm**2) for different simulations\n", - "N_k, g_k = np.zeros(K, int), np.zeros(K) # number of samples and statistical inefficiency of different simulations\n", - "d_kn = np.zeros([K, N_max]) # d_kn[k,n] is the ion-pair distance (in nm) for snapshot n from umbrella simulation k\n", - "u_kn = np.zeros([K, N_max]) # u_kn[k,n] is the reduced potential energy without umbrella restraints of snapshot n of umbrella simulation k\n", - "uncorrelated_samples = [] # Uncorrelated samples of different simulations\n", + "import matplotlib.pyplot as plt\n", + "pullx_data = [np.transpose(np.loadtxt(f'sim_{i}/pullx.xvg', comments=['@', '#'])) for i in range(8)]\n", + "dist_list = [data[1] for data in pullx_data]\n", "\n", - "# Step 2: Read in and subsample the timeseries\n", - "for k in range(K):\n", - " d_kn[k] = np.transpose(np.loadtxt(f'sim_{k}/pullx.xvg', comments=['@', '#']))[1]\n", - " N_k[k] = len(d_kn[k])\n", - " d_temp = d_kn[k, 0:N_k[k]]\n", - " g_k[k] = timeseries.statistical_inefficiency(d_temp) \n", - " indices = timeseries.subsample_correlated_data(d_temp, g=g_k[k]) # indices of the uncorrelated samples\n", - " \n", + "plt.figure(figsize=(8, 3))\n", + "for i in range(8):\n", + " plt.hist(dist_list[i], bins=50, alpha=0.5)\n", + "plt.xlabel('Ion-pair distance (nm)')\n", + "plt.ylabel('Count')\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "60ec4527", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from matplotlib import rc\n", + "rc('font', **{\n", + " 'family': 'sans-serif',\n", + " 'sans-serif': ['DejaVu Sans'],\n", + " 'size': 10,\n", + "})\n", + "# Set the font used for MathJax - more on thiprint(images)\n", + "rc('mathtext', **{'default': 'regular'})\n", + "plt.rc('font', family='serif')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9cba6b04", + "metadata": {}, + "outputs": [], + "source": [ + "def setup_coordinates(ax, color):\n", + " \"\"\"\n", + " A function for setting the colors of axes and ticks for a plot. \n", + " This is just for producing figures for the article accompanying this tutorial.\n", + " \"\"\"\n", + " ax.spines['top'].set_color(color)\n", + " ax.spines['bottom'].set_color(color)\n", + " ax.spines['left'].set_color(color)\n", + " ax.spines['right'].set_color(color)\n", + " ax.tick_params(color=color, labelcolor=color)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "0b0928bf", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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z1dCQoLT/qZNm+ro0aNVnvvoo48qPj5emzdv1oYNGxQbG+vPUAEXNWm/58+f19NPP6358+cHIkTAo5p+/v7hD39Qenq60tLS9MADD+irr77yd6iAC2/b7/nz53X06FGVlJTovvvuU1pamgYOHKj3338/UCEDJHmoOwoLCyVJNpvNab/NZnMc8+TFF1/Ud9995/hl49SpU36LE3CnJu33mWee0ciRI3XVVVf5PT6gKjVpvy1atNCNN96ozZs3a9u2bbrmmmuUkpKikydP+j1eoCJv2+8PP/wgqewz+Mknn9THH3+sJ598UoMHD9amTZv8Hi8gkeShDomJiZEkFRUVOe0vKipyHKtKZGSkpk+frtLSUs2bN88vMQKeeNt+9+zZox07dmjkyJEBiQ+oSk0+fx966CGNGzdOkZGRslqteuaZZ1SvXj0tXbrU7/ECFXnbfiMiIiRJgwcP1vXXXy9J6tevn/r27auFCxf6OVqgTKTZAQCB0qRJEzVs2FA5OTlO+0+fPq3k5GS35xQXFys6OtqxbbVa1aZNGx04cMCvsQKVedt+33vvPV24cEF9+/aVJP3444+SpN/85jdq1KiRVqxYoVatWvk/cEA1+/ytLCIiQklJSQzZRMB5237j4+Nls9l09dVXO+1v2bKlPvnkE7/GCpSjJw91St++fbV7927HtmEY2rNnj8eJVLp06eKy79SpUzw4DVN4036feeYZ7dmzR1u3btXWrVv15ptvSpIWLFigrVu3kuAh4Lz9/B07dqzLvm+++UYtWrTwW4yAJ96034iICLePduTk5NB+ETAkeahTJk2apPfee09HjhyRJK1Zs0YRERF64IEHJEk333yznn76aUf5AwcO6L333nNsr169WocOHXKUBwLJ2/YLBBNv2++6deu0bt06x/aKFSuUm5urhx56KLCBA/K+/U6cOFHvvvuuvv76a0llv09s3LhRjz76aOCDR53EcE3UKampqVq5cqXuvfde1a9fX1arVRs2bFCDBg0klT1cXXHM/cKFCzVjxgzNnDlTpaWlslgsWrdunW6++WazbgF1mLftt9xvfvMbbd++3fF9u3btHD17QKB4235nzJihBQsWaN68eSouLpbNZtPmzZvVrl07s24BdZi37XfAgAFatGiRhgwZotjYWF28eFGvvfaabr/9drNuAXWMxTAMw+wgAAAAAAC+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pullx_data = [np.transpose(np.loadtxt(f'sim_{i}/pullx.xvg', comments=['@', '#'])) for i in range(8)]\n", + "dist_list = [data[1] for data in pullx_data]\n", + "os.makedirs('results')\n", + "\n", + "fig = plt.figure(figsize=(9, 3))\n", + "ax = fig.add_subplot(111)\n", + "# setup_coordinates(ax, color='white')\n", + "for i in range(8):\n", + " plt.hist(dist_list[i], bins=50, alpha=0.5)\n", + "plt.xlabel('Ion-pair distance (nm)')\n", + "plt.ylabel('Count')\n", + "plt.grid()\n", + "plt.tight_layout()\n", + "plt.savefig('results/pullx_distribution.png', transparent=True, dpi=600)" + ] + }, + { + "cell_type": "markdown", + "id": "171fcf10", + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "source": [ + "### 4-2. Free energy calculations" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2991ac13", + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning on use of the timeseries module: If the inherent timescales of the system are long compared to those being analyzed, this statistical inefficiency may be an underestimate. The estimate presumes the use of many statistically independent samples. Tests should be performed to assess whether this condition is satisfied. Be cautious in the interpretation of the data.\n", + "\n", + "********* JAX NOT FOUND *********\n", + " PyMBAR can run faster with JAX \n", + " But will work fine without it \n", + "Either install with pip or conda:\n", + " pip install pybar[jax] \n", + " OR \n", + " conda install pymbar \n", + "*********************************\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import time\n", + "import pymbar\n", + "from pymbar import timeseries\n", + "import random\n", + "import scipy.stats\n", + "\n", + "# Step 1: Setting up\n", + "K = 8 # number of umbrellas\n", + "N_max = 5001 # number of data points in each timeseries of ion-pair distance\n", + "kT = 1.381e-23 * 6.022e23 / 1000 * 300 # 1 kT converted to kJ/mol at 300 K\n", + "beta_k = np.ones(K) / kT # inverse temperature of simulations (in 1/(kJ/mol)) \n", + "d_min, d_max = 0.25, 0.65 # minimum and maximum of the CV for plotting the FES\n", + "nbins = 50 # number of bins for FES\n", + "K_k = np.ones(K) * 8000 # spring constant (in kJ/mol/nm**2) for different simulations\n", + "N_k, g_k = np.zeros(K, int), np.zeros(K) # number of samples and statistical inefficiency of different simulations\n", + "d_kn = np.zeros([K, N_max]) # d_kn[k,n] is the ion-pair distance (in nm) for snapshot n from umbrella simulation k\n", + "u_kn = np.zeros([K, N_max]) # u_kn[k,n] is the reduced potential energy without umbrella restraints of snapshot n of umbrella simulation k\n", + "uncorrelated_samples = [] # Uncorrelated samples of different simulations\n", + "\n", + "# Step 2: Read in and subsample the timeseries\n", + "for k in range(K):\n", + " d_kn[k] = np.transpose(np.loadtxt(f'sim_{k}/pullx.xvg', comments=['@', '#']))[1]\n", + " N_k[k] = len(d_kn[k])\n", + " d_temp = d_kn[k, 0:N_k[k]]\n", + " g_k[k] = timeseries.statistical_inefficiency(d_temp) \n", + " indices = timeseries.subsample_correlated_data(d_temp, g=g_k[k]) # indices of the uncorrelated samples\n", + " \n", " # Update u_kn and d_kn with uncorrelated samples\n", " N_k[k] = len(indices) # At this point, N_k contains the number of uncorrelated samples for each state k \n", " u_kn[k, 0:N_k[k]] = u_kn[k, indices]\n", @@ -2665,7 +3097,7 @@ "f_i = results[\"f_i\"]\n", "df_i = results[\"df_i\"]\n", "\n", - "with open('results/fes_1000.dat', 'w') as f:\n", + "with open('results/fes.dat', 'w') as f:\n", " f.write(\"# free energy profile (in units of kT), from histogramming\\n\")\n", " f.write(f\"# {'bin':>8s} {'f':>8s} {'df':>8s} \\n\")\n", " for i in range(nbins):\n", @@ -2681,354 +3113,200 @@ }, { "cell_type": "code", - "execution_count": 26, - "id": "ada806bf", + "execution_count": 25, + "id": "540896bc", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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rVplLUtMTFSXLl3UpEkTv46xatUqrVq1Kmo+v7///e96+umnlZubG9LzxMfH65lnnlFmZqY++eQTtWjRIqTnAxB69NwCQAjMnj1bo0ePDtnxW7VqpTVr1qhly5YhO4edJkyYoLvvvluxsbEhP9eZZ56pzMxMPfbYYyE/F4DQI9wCiFrvv/++MjIy1K9fP/Xq1Uvz5s2z1nn/KX/GjBm66KKL1LFjRy1ZssTn8YqKipSZmanExERNnjxZV1xxhTIyMtStWzd98MEH1na7du3Stddeq/79+2vIkCEaNmyYvvrqK2v9vffeW2UYwY4dO6yhFU8//bSuueYanX322WrevLnPWp588kmlp6frwgsv1K9+9SsdOXLEWrd//36rTu+hBnPmzFGfPn00dOhQDRgwQHPmzJEkzZo1S4sXL9Znn32mzMxMZWZm6scff9SBAwf0y1/+UhkZGRoyZIgGDRqkjz76yDrevHnz1LVrV6WlpWnx4sUaOXKkOnbsqOnTp1ep9fDhw/r1r3+ts88+W0OGDNGAAQP0wgsvWOv37duna6+9Vn369NGgQYN00003af/+/T7f+549e7RhwwZddNFF1jJ/vk/vbf74xz8qKytLnTp10rvvvqvPP/9c1113nbp06aI777yzxjmHDh2qv/zlLz5rAhBFDABEAUnm2WeftV5v2bLFJCQkmLVr1xpjjNm9e7dJTU01L730krXNgw8+aJo2bWpWrFhhjDHmrbfeMqeccoopLi6u81zt27c36enppqCgwBhjzOLFi01SUpLJz883xhizbNkyc+2115qKigpjjDFLliwxnTt3Nh6Pp8q5hwwZUuM9jBgxwhw9etSUl5ebjIyMWs+/bt06Exsba3Jzc40xxuzYscO0adOmxvHat29vfSa5ubmmadOmpqioyBhjzLZt20yHDh3qrOeLL74w/fv3t+pes2aNadWqlTlw4IC1zbPPPmsSExPN4sWLjTHGfP7558blcpkdO3ZY24wePdpcdtll1nFeeOEFc84551jrBwwYYO677z7r9a233mqGDx9e63s3xpilS5eaJk2a1Fjuz/dZuc3q1auNMcYsWrTItG7d2vzxj380xhjzww8/mKSkJLNq1aoqx16/fr2RZAoLC33WBSA60HMLICo9+uijysjI0IUXXijp+J+Wx4wZo6lTp1bZ7rTTTrN6ADMzM3XkyBHt2LHjpMcfM2aMTj31VEnSjTfeqKSkJD311FOSpCFDhmjhwoVyuVySpOuuu07bt2/XN998c9Ljjh49Wm63WzExMT7Hkz7++OMaOHCgMjIyJEkdOnTQxRdfXOdx9+7dK4/HY11g1rlzZ7344ot17tOpUye98cYbios7fvnFoEGDFB8fX6MuY4xuuOEGSVKvXr3UvHlzbd68WZKUl5enl19+WdnZ2dZxRo8erauvvlqStHLlSq1bt04TJkywjnfLLbdo+fLlPj+v/Px8n2Nf/fk+W7durcGDB0uSBg4cqPz8fPXv31/S8eEc3bt31z/+8Y8q+1T2oufn5/v6uABECS4oAxCVvvzyS/Xq1avKso4dO2r+/PnyeDyKj4+XJJ1++unW+mbNmkmSiouLJUnTp0/X+++/L0lq06aNXnnlFWvb9u3bW89jYmKUlpamrVu3SpLi4uI0c+ZM/e1vf1NMTIwVcvft26cuXbrUWfeZZ5550ve2detWnXvuuVWWtWvXTrt37/a5z8iRIzVo0CD16tVLl1xyiUaPHq1rr722zvPEx8frxRdf1Jtvvinp+Ps8cOCA9u3bV2W71NRUK7hKxz/Hys9wy5Ytko5/9pViYmL0wAMPSDr+PcXExOiaa66x1h87dkzt27fX999/rw4dOtSoq6ioqMr5vNX1fVb6yU9+Yj1PSkqqseyUU05RUVFRjc9Ckg4cOFDreQFED8ItAEfzviCpMoQaYyRJEydO1MSJE+t9zAkTJui9997T+vXrddppp1nHrjyuv/XUR2XtviQmJionJ0e5ublavHixbr31Vj3++ONau3atz6D42GOPaerUqdq4caMVTtPS0mq8j+o1+/tevX344Yd+v/fmzZvL4/HUuq6u77O2bXwtq75P5fmceoEe0JgwLAFAVOrZs2eNP0d/88036tKli9UL1xDffvut9byiokK7du1St27dJElr1qxRVlaWFWzLysoafD5v3bp1U15ens96avP111/ryy+/VL9+/fTEE09o/fr1Wr9+vT7//HNJx3tTKx09elQej0dr1qxR7969q/S61ve99OjRQ5Kq1OvxeKyLznr27KmKigr985//rLLfbbfdpsLCwlqP2aZNm7D3oFZe4Na6deuwnhdA8BFuAUSl++67Txs2bLAm39+7d69eeukl3X///UE5/uuvv26Fr+eff14lJSX6n//5H0lS9+7d9fHHH6ukpESS9NprrwXlnJXGjRunjz76SBs2bJAk7dy5U++8806d+6xfv16PPPKI1SPp8XjkdrvVrl07SceHFlQGxvHjx2v58uXq3r27Nm/ebN2ha926dfr+++/rVWt6erpGjx6tOXPmqLy8XJL09NNP64svvpAkZWVlacCAAZo6daoqKiokSUuXLtXXX3+tVq1a1XrM/v37q7S0VHv27KlXLQ2xY8cO9ejRg3luASew71o2ADi53NxcM2TIECPJdOnSxUyZMsVa9+6775o+ffqYjIwM07NnT/P4449b66ZNm2bat29vUlJSzI033mgOHjxoHeecc84xy5cv93nO9u3bm2nTppnrrrvOZGRkmC5dupj333/fWr9nzx4zcuRIk56ebn7605+aBx98sMpx77nnHuvcl112mfn++++rnPv+++8/6ft+8sknzVlnnWUGDBhgxowZY+68807reIWFhWbIkCHG7XabLl26mMcff9xs27bNXHPNNSYjI8NkZmaafv36mWXLllnHy8/PN3379jUDBw40l156qTl69KgpKioy119/vWnXrp25/PLLzd13323atGljunTpYpYsWWKeffZZ06VLF+N2u82wYcOMMcZccskl1nmXLFlijDHm0KFD5le/+pXp2bOnGTx4sBk9enSVGRf27dtnrr/+etOtWzeTmZlprr/+emvmCV8GDhxYZXYMf77P6tts2bLF9OvXz0gy/fr1M1u2bDE33nijSUlJsb7jSv/93/9tHnzwwZN+LwAin8uYeg6cAgCHS0tL00MPPRQ1d/Nyok8++US33HKLNmzYoISEhJCeKy8vTyNHjtTGjRuti9QARC+GJQAAIk7fvn01YcIEZWdnh/Q8ZWVluv322/XKK68QbAGHoOcWAP6jqKhIV1xxhdavX6+0tDTddddduu222+wuq1ErLCz0OTY3GI4dO6aSkhIlJyeH7BwAwotwCwAAAMdgWAIAAAAcg3ALAAAAxyDcAgAAwDEItwAAAHAMwi0AAAAcg3ALAAAAxyDcAgAAwDEItwAAAHCM/wfP07rqLwkVvwAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "plt.figure(figsize=(8, 3))\n", - "for i in range(6):\n", - " plt.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", - "plt.xlabel('Ion-pair distance (nm)')\n", - "plt.ylabel('Count')\n", - "plt.grid()" - ] - }, - { - "cell_type": "markdown", - "id": "daa04673", - "metadata": {}, - "source": [ - "Here we calculate the standard deviation of each distribution:" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "d99d85a2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The standard deviation of all 8 distributions are: 0.005 nm, 0.007 nm, 0.008 nm, 0.007 nm, 0.007 nm, 0.007 nm, 0.007 nm, 0.007 nm.\n" - ] - } - ], - "source": [ - "samples_small = uncorrelated_samples # for plotting later\n", - "std_list = [f'{np.std(i):.3f}' for i in samples_small]\n", - "print(f'The standard deviation of all {len(std_list)} distributions are: {\" nm, \".join(std_list)} nm.')" - ] - }, - { - "cell_type": "markdown", - "id": "33f4bcc9", - "metadata": {}, - "source": [ - "### 5-2. Setting $k$ to $50000$ $\\mathrm{kJ/mol/nm^2}$" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "068a9c5f", - "metadata": {}, - "outputs": [], - "source": [ - "%%bash\n", - "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", - "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", - "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", - "sed -i -e \"s/pull-coord1-k = 1000 ; units: kJ\\/mol\\/nm^2/pull-coord1-k = 50000/g\" NaCl_umbrella.mdp" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "979132df", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Setting the LD random seed to -1107564614\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -136329218\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to 1070329784\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -134775863\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -309117347\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -606404865\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -638063137\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -950014017\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -68157458\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -1648395657\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -1380483491\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -306222337\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", - "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", - "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", - "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", - "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -570461260\n", - "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", - "\n", - "Generated 330891 of the 330891 1-4 parameter combinations\n", - "\n", - "Excluding 2 bonded neighbours molecule type 'SOL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'NA'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Excluding 1 bonded neighbours molecule type 'CL'\n", - "\n", - "turning H bonds into constraints...\n", - "\n", - "Setting gen_seed to -19730962\n", - "\n", - "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", - "\n", - "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", - "\n", - "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", + "plt.figure(figsize=(8, 3))\n", + "for i in range(8):\n", + " plt.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", + "plt.xlabel('Ion-pair distance (nm)')\n", + "plt.ylabel('Count')\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "df172b79", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3oAAAEcCAYAAACRYcYWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSv0lEQVR4nOzdd3xUVdrA8d+dnt4IoaUQepFQQycUAVlFVl0VC6KsbYsFV1ddy4plYdfGqousuooFG6+ioihF6b2LdEgIIbSQXqfe94+QkZBJMklmMpnk+fLJB+beO/c+c0hy55lzznMUVVVVhBBCCCGEEEI0GxpfByCEEEIIIYQQwrMk0RNCCCGEEEKIZkYSPSGEEEIIIYRoZiTRE0IIIYQQQohmRhI9IYQQQgghhGhmJNETQgghhBBCiGZGEj0hhBBCCCGEaGYk0RNCCCGEEEKIZkYSPSGEEEIIIYRoZiTRE0IIIYQQQohmxiOJnqqqdOnSBUVR0Gg0HD582BOnFUII4efCw8NRFKXWr6CgIDp16sSNN97Id9995+uwhRBCCL/nkURv2bJlHD16FChP+t58801PnFYIIYSf++GHH1i3bh1t2rSptP21115j3bp1fP/998yePZvIyEhSU1P5/PPPueqqq5gxY4aPIhZCCCGaB0VVVbWhJ7n66qtZsmSJ83F4eDiZmZkEBgY29NRCCCGagYSEBNLT052PV61axejRo52PU1NTSUpKoqioyLnt22+/5corr2zMMIUQQohmo8E9eidOnKgyzCYvL4+PP/64oacWQgjRQiQmJjJ06NBK21auXOmjaIQQQgj/1+BEb/78+QQFBfGHP/yh0vZ58+Y19NRCCCFaEKPRWOmxxWLxUSRCCCGE/2tQomexWPjf//7H9OnTeeSRR9Bofj3drl272LRpU4MDFEII0fzl5OSwefPmStsmTZrko2iEEEII/9egRG/RokVkZWXxpz/9iY4dO3LFFVdU2i+9ekIIIVyx2+1YrVZOnTrFd999x8SJEzl//jwAgYGBzJkzh6uuusrHUQohhBD+q0HFWIYPH05gYCArVqwA4Lvvvqt0YzYajWRkZBAdHd3wSIUQQvitS4uxuBIQEMCUKVN44okn6N27dyNFJoQQQjRP9e7R27NnDxs3buTPf/6zc9ukSZPo2LGj87HZbOZ///tfwyIUQgjR7MyfP59t27axZs0a3n77bUaOHElpaSmffvopSUlJXHvttWRkZPg6TCGEEMJv1TvRmzdvHu3atWPkyJHk5eWRl5dHQUEBt956a6Xj5s+fj8PhaHCgQgghmo9u3boxcOBARo0axZ133snatWuZPn06AA6Hg8WLFzNs2DBycnJ8HKkQQgjhn+qV6OXn57Nw4UJOnTpFVFQUERERzq/nnnuu0rHp6elVll8QQgghLvXkk09Wenzy5EneeecdH0UjhBBC+DddfZ70/vvvYzabWbp0KQEBAVX2v/TSS5WSu//85z9Mnjy5/lEKIYRo9uLj46tsO3bsmA8iEUIIIfxfvRK9N998k8mTJ1db+tpisVRK9JYvX87Ro0fp3Llz/aIUQgjR7Lmak9e+fXsfRCKEEEL4vzoP3fzpp584ePAgd955Z7XHXH755cTFxTkfq6rKm2++Wb8IhRBCtAjPP/98pccGg4Ebb7zRR9EIIYQQ/s3tHj2z2cy2bdt46aWXCAkJITg4mL1793LZZZdVOXbjxo0MHTqUEydOOLctWLCA3/72t7Rp04YuXbp4JnohhBBN2ubNm7HZbJjN5krb9+7di06no6ysjKNHj7Jw4ULWr1/v3B8UFMS7775Lt27dGjtkIYQQollwex2948ePV1o6ASAlJYXVq1dXPamiVHue6dOns2DBgjoFKYQQwj+Fh4eTn59f4zFarZbAwEBiYmLo1q0bY8eOZdq0abIGqxBCCNEADVowXQghhBBCCCFE01PvdfSEEEIIIYQQQjRNkugJIYQQQgghRDMjiZ4QQgghhBBCNDOS6AkhhBBCCCFEMyOJnhBCCCGEEEI0M5LoCSGEEEIIIUQzI4meEEIIIYQQQjQzkugJIYQQQgghRDMjiZ4QQgghhBBCNDOS6AkhhBBCCCFEM6PzdQCNweFwcOrUKUJCQlAUxdfhCCGER6iqSmFhIe3atUOjkc/tfEnuM0IIIRqLu/f/FpHonTp1itjYWF+HIYQQXpGRkUGHDh18HUaLJvcZIYQQja22+3+LSPRCQkKA8sYIDQ31cTR1Z7VaWb58ORMmTECv1/s6nCZF2qZm0j418/f2KSgoIDY21vk7TviOv99nPMnff678gbSx90kbe5+0cf25e/9vEYlexTCa0NBQv7wBW61WAgMDCQ0NlR+ES0jb1Ezap2bNpX1kqKDv+ft9xpOay89VUyZt7H3Sxt4nbdxwtd3/ZVKHEEIIIYQQQjQzkugJIYQQQgghRDMjiZ4QQgghhBBCNDOS6AkhhBBCCCFEMyOJnhBCCL/2+eefM2HCBMaNG8egQYO4/vrrOX78uHO/qqo8++yz9O/fn+TkZG699Vby8/MrnSM/P59p06aRnJxM//79mTVrFqqqNvIrEUIIITynRVTdFI1jn3kfZ2xnsKgWrKoVCxYsqgWAwabBdDJ08nGEQojm6NZbb2XJkiVMnDgRh8PB7bffzhVXXMGePXswGo28+uqrfPHFF2zevJmAgABmzJjBtGnT+Oabb5znmDZtGjExMWzdupWSkhKSk5MJCQnhoYce8uErE0IIIepPevSER6Rb01lZspJ9ln0csR4hzZZGpi2TLHsWWfYsvi3+lpXFK7GqVl+HKoRoZqZMmcLEiRMB0Gg03H///Rw6dIidO3dit9uZM2cOf/zjHwkICADg4YcfZsmSJezduxeAn3/+mSVLlvDwww8DEBgYyB//+EfmzJmD3W73zYtqKlbNLv8SQgjhdyTREw1mVa38WPwjCgrqhT+u7Lfs56OCjzhjO9PIEQohmrNFixZVemwymQAwm838/PPPZGVlMXDgQOf+Hj16EBQUxMqVKwH48ccfCQ4Oplu3bs5jBg0aRFZWFj///HMjvAIhhBDC82TopmiwLaVbKFQLaz1ORaXQUcjnhZ8zxDSEgabyN165jlzO289z3n6eLFsW7XTtSA5I9nbYQohmatOmTbRr147hw4c7h2fGxMQ49yuKQkxMDGlpaQCkpqZW2g/Qpk0bANLS0ujXr1+Va5jNZsxms/NxQUEBUL4AsNXajEYuqBc+D67Da6p4/c2qHZoYaWPvkzb2Pmnj+nO3zSTREw2SZctip3mn28dX9PZtKtvEHvMeytQyHDgA0KDBgYN0WzohmhB6GHt4JWYhRPNlNpt58cUXeeONN9Dr9ZSUlABgNBorHWc0Gp37SkpKXO6v2OfK7NmzmTVrVpXty5cvJzAwsMGvo+noXv7X0qV1fuaKFSs8HIu4lLSx90kbe5+0cd1Vd2+6lCR6ot4cqoOVJSvr/fwStfI3aUXCB/BjyY/E6GKI1EbW+/xCiJbnnnvu4cYbb+Saa64BcCZdF/e+VTyu2BcYGOhy/8XPv9Tjjz9eqVBLQUEBsbGxTJgwgdDQUM+8mKZg3Svlf490vyiN1WplxYoVjB8/Hr1e76XAWjZpY++TNvY+aeP6qxhFUhtJ9ES9/Wz+mXP2c145twMH3xZ9y02hN6FX5IdfCFG7xx57jMDAQJ577jnntsTERADOnj1Lhw4dnNvPnj3r3JeYmMjZs2crnevMmTOVnn8po9FYpRcQQK/XN683LMqFD+Dq8ZqaXVs0QdLG3idt7H3SxnXnbntJMRZRL4WOQjaUbvDa+VVU8hx5rC5Z7bVrCCGajzlz5pCRkcEbb7wBwI4dO9ixYwd9+vQhOjqaHTt2OI89cOAAxcXFXH755QCMGzeOoqIiDh8+7Dxm+/bttG7dmj59+jTuCxFCCCE8RBI9UWeqqrKqeBV2vFt2XEVlv2U/+837vXodIYR/mz9/Ph999BH33XcfO3fuZPv27c7lE7RaLY899hjz5s2jtLQUgJdffpnJkyfTu3dvAPr06cPkyZN5+eWXASgtLeXNN9/k0UcfRaOR26QQQgj/JEM3RZ2oqsovll9Is6U12jV/KvmJGF0MUdqoRrumEMI/FBYW8qc//QmHw8HQoUMr7XvvvfcAmDlzJkVFRQwfPhydTkeXLl344IMPKh37wQcf8Oc//5nBgwdjsVi47rrrmDlzZqO9DiGEEMLTJNETbilzlLHfsp/dZbspVAuda+Y1hor5ejeH3izz9YQQlYSEhNS6qLmiKDz99NM8/fTT1R4THh7ORx995OnwhBBCCJ/xq0QvNTWVRx55hJycHM6dO0dISAhvvPFGpYVwhWdl2bLYY97DQcvBSkM1GyvJq7hWviOfzaWbGRk4stGuK4QQQgghhL/ym8kHWVlZjBs3jgceeIBVq1axZ88eAgMDOXr0qK9Da7Z+Nv/Mx4Ufs9+y3+vz8WqjorLbvJtCR+0Lswshmr4jR47wwQcfcPr0aQC++eYbpkyZwiOPPOL2+kBCCCGEqJ7fJHr//Oc/GTp0KKNGjQJAp9Px1ltvOR8LzypyFLGuZB3QuL13NVFR2Vq61ddhCCE84Mknn2TVqlWoqsqRI0e4/vrrMZlMHDt2jPvvv9/X4QkhhBB+z2+Gbn755Zf89a9/rbStc+fOPoqm+VtXss7nvXiXUlHZZ9nHANMAwrXhvg5HCNEAp0+fZu3atUD54uNJSUl89tlnAFWKqgghhBCi7vyiR6+4uJi0tDTsdju33HILw4cPZ+LEiXz//fe+Dq1ZOmE9wWHr4SbTk3epzaWbfR2CEKKBKpYtcDgcfPrpp9x1113OfQEBAb4KSwghhGg2/KJHLy8vD4CnnnqKVatWkZSUxI8//uhM9saPH1/peLPZjNlsdj4uKCgAwGq1YrVaGy1uT6mIuTFit6k2fir8CY1D02QTvcO2w/TT9SNSG9mobeOPpH1q5u/t469xQ3ky98wzz5CRkUFOTg5Tp04FYN++fRQXF/s4OiGEEML/+UWip9VqAZg8eTJJSUkAjBs3jrFjx/Lvf/+7SqI3e/ZsZs2aVeU8y5cvJzAw0PsBe8mKFSsa5ToRF/40ZZup3KvXWG3jr6R9auav7ePPRUvmzZvHn//8ZzIzM/nggw8ICQnhiy++4NFHH+WBBx7wdXhCCCGE3/OLRC86Ohqj0Uj79u0rbY+Pj2fjxo1Vjn/88cd56KGHnI8LCgqIjY1lwoQJhIaGej1eT7NaraxYsYLx48ej13tvHblCeyGfFH7S5ObmVefa4GuJVCMbpW38VWN97/grf2+fitEK/qhjx4589913lbZdd911XHfddT6KSAghhGhe/CLR02q1DB8+3FmGu8LZs2eJi4urcrzRaMRoNFbZrtfr/fLNXAVvx7++bD12nb3JDtm8mILCVttWJpsmA/7/f+tt0j4189f28ceYL5aRkcE777xDUVERL7/8MosXL+ayyy6TQltCCCGEB/hFMRaARx99lK+//poTJ04AsH//fpYvX86f/vQnH0fWPKRaUkmzpTUoybPbobhYS/Z5PZknTRw7Esi+n0M4mWHyYKTlVFQybBmcsp7y+LmFEN63fv16unXrxuLFi52FtaxWK1OmTOHHH3/0cXSiRqtml38JIYRo0vyiRw9gwoQJvPbaa0yZMoXg4GBsNhvvv/8+V111la9D83s21caqklUoKPVO9Datj2DLxkhUVXG5v2v3QsZcfp7AIM8NC1VQ2Fy2GROeTySFEN711FNP8eOPPzJ06FDGjBkDwA033MCYMWO48cYbGTdunI8jFEIIIfyb3yR6ALfeeiu33nqrr8NodvaZ91GkFtX7+SdPmNi8IerCIxWjyUFAgB2TyYHB4CDjRACHD4aQkR7ImMuz6NqjCMV1PlgnKipn7WeJJx5VbfrDTYUQv1JV1blennLRL4To6Gjsdv+YJyyEEEI0ZX6V6AnPc6gOtpdtr/fzbTaFlctaA9A7KZ9xE7LQXDIg+NxZA8uXxpB1zsjSJW04dLCIsROyCA62Y7MpZJ0zcPa0iTNnjOTl6hk6PIf4jqV1imN16WrG6cehVbT1fi1CiMaTn59PYWEhISEhlbZnZGRw/vx5H0UlhBBCNB+S6LVwhy2HG9Sbt2VjBLk5BoKCbYwcnV0lyQNoHWPhptsy2La5fHjnsSPBnDwRQFi4lfNZRhyOyt17333dhpunZxAeYXM7joOWgxQXFXNl8JUYFEO9X48QonHcfPPNDB48mDvvvJOsrCw++OADDh48yPvvv88jjzzi6/CEEEIIvyeJXgumqipby7bW+/nnswxs31K+3t6Yy7MwmRzVHqvVwpDhuXTuWszypa05e8bEubPlvW8BAXZi2pYR08bMieOBnD5l4tuv2jL11pPo9O4PycywZfB5wedcE3INQZqger8uIYT3PfLII4SFhfGPf/yDEydOcPvttxMXF8czzzzDXXfd5evwhBBCCL8niV4Ldtx2nFxHbr2e63DAiu9b43AodOpSRJduxW49r1W0hanTTnLsSBCqCjFtzYSG2pxz9vr0zWfhgliyzhn5aUU0E35zzu2YVFRyHDl8UvAJ14ZcS6Q2sj4vTQjRSO6++27uvvtuiorKRxUEBwf7OCJRiVTWFEIIv+Y3yysIz9tauhWF+lVF2bMzjDOnTRgMdsaOz6rTczUa6NKtmK7diwkLs1UqzBIcYmfS1WdRFJV9e0P55eeQ6k/kgopKiVrC54WfY1EtdXquEMI3goODKyV5s2bN8mE0QgghRPMgPXotVKYtkzP2M/V6bkGBjg1ry6tsjhidTXCIZyvkxcWXMmxkDhvWRvHTimhax5hpHeN+0qaiYlbNHDAfIMmU5NHYhBD19+yzz7p13Pvvv8/f//53L0cjhBBCNG9eT/TMZjO5ublERkZiMEiRjKZiW+m2eq2bp6rw07JorFYN7dqX0qdvgVfiGzQkl1OZJtKOBfHtV225eXpGjXMAXdlp3kkfY59KpduFEL7z6quv0rdv31qPy8vL83osQgghRHPn8UTPZrPxwQcf8H//939s3LiRwsJC577Q0FBGjhzJ7373O2699VY0rko0Cq/LsmWRbkuv8/POnjGyc1s4aalBaLUql19xziPr4bmiKHDFlWdZ+H4s+Xl6li9tzeRrztTpegWOAtJt6SToE7wTpBCiToYOHcrSpUtrPe43v/lNI0QjhBBCNG8eTfSOHDnCjTfeSFRUFGPHjuX2228nPDwcvV6P1WolJyeHo0eP8u677/Lmm2/y+eefExsb68kQhBu2l213uzfPboejh4LZtTOM05kBzu1DR2YT1crqzTAxBTi4csoZPl/YgWNHgtn/Swi9Lius/YkXKCjsKtsliZ4QTYQ7SV5djhNeIkVYhBCiWfBYoldSUsK9997L22+/zYABA2o89sknn2T9+vXcfffdLFmyBJ1Opgo2lnx7Poeth2s9TlVhx9Zwdm4Pp7io/P9Ho1Hp2r2Ivv3zaNve7O1QAWjT1szQEdmsX9OKzesj6dajEHe/XVRUTthOkGvPJUIb4d1AhRB1tnTpUl577TUOHDgAQI8ePXjggQeYNGmSjyMTQggh/J/Hxk7abDY+//zzWpO8CiNGjOCDDz7AYpHKiI1pp3mnW5U2d+8MY93qVhQX6QgMsjFkeDa//8NxJk0+22hJXoV+A/IJCrZRUKBn756wOj1XQWGPeY+XIhNC1NdLL73E7373O4KCgrjxxhu58cYbCQoK4rrrruPll1/2dXjiUqtmS0+fEEL4GY91pYWGhjJ27FgAbr/9dm677bZanxMdHe2pyws32FU7+8z7ah2yWVSkZePa8jXohgzPJnloLlptY0Tomk6vMnhYDj8tb83WjRH0vqwAvcG9IjIqKvvM+xgaMBSjYvRypEIId82bN49du3bRrVu3StsPHjzIpEmT+Mtf/uKjyIQQQojmwaPVUEpLS3nvvfeYMmWKJ08rPCTLnoWd2pdCWLeqFRaLlpi2ZQwe5tskr0LvPgWEhVsoKdGxa0d4nZ5rw8YB8wHvBCaEqJfY2NgqSR5A9+7dSUhIaPyAWirppRNCiGbLo4meyWQiPj6esLCah9elpqZ68rLCTadsp2odtnkiPYCD+0MAlXETsmgqhVG1Whg2MgeA7VvCKSutW2C7zLtQ1botJSGE8J7u3buzffv2Ktt37NhB//79nY//8Ic/NGZYLZMMyxRCiGbJo2/j3V2v7M477/TkZYWbMm2ZNe632+Gn5eXDaZP65xPTpnHn4tWmW48iWkWbMZu1bN9at+IqFUstCCGahoKCAkaMGEFKSgq33XYbt912G6NHj2bs2LGcP3+eGTNmMGPGDL7++mtfhyqEEEL4JY+Wu9y0aROJiYm1HnfmzBlPXla4QVVVMm2ZNc7P27E1gtwcA4FBNmfvWVOiKDBsVDbffNGOXdvD6DsgjxA3F1GXpRaEaFpWr17NTTfdVGlbx44d6dixI4D0wPuC9OoJIUSz4tFEr02bNkyfPr3GY1RV5YMPPvDkZYUbch25mNXqe+jy83Vs2VjeSzZqzHlMbiZQjS2xUwlt25Vy+lQAWzdGMG5stlvPk6UWhGhaJk2axLvvvlvrcTNmzGiEaIQQQojmx6OJXkJCAn//+99rPS4/P9+TlxVuOGU7VeP+1Sujsdk0dIgroXvPokaKqu4UBYan5PB/n7Rn754wBvTPJ97d56Kwy7yLsYFjvRqjEKJ2NSV5y5cvZ8KECbUeJ4QQQojqeTTRc3eO3quvvurJywo3ZNoyUVBcDt08diSQ1KNBaDQqY8dn4eZ/o8/ExpUSn1BC+vFANm2KJMnNpfVUVH4x/0IvQy9idDHeDVIIUauSkhKOHj1Kfn5+paGajz32mDPRE0IIIUT9eDTRO3DgADNmzOC3v/0tV199tSdPLRropPWkyyTPbofVP5YXYBmQnEdUK2tjh1Yvw1OyST8eyIH9ISyPtdO1DtN5lhcv5+bQm9EqTWDdCCFaqA8//JA//elPFBVVHUHg7oeGQgghhKieR6tufvrpp0yfPp2kpCR27dpV7XHPP/+8Jy8ralHoKKRIdT0c8+C+EAry9QQF2xg8tOEFWDQX/lyqtmUd6iqmjZnkC/F+l6Fl5YpoHG5MK1RRyXHksLVsq0fjEULUzXPPPceiRYsoKirC4XBU+ho1apSvwxNCCCH8nkd79FJSUpz/vuOOO/jpp5+qHHPgwAHeeecdnnzySU9eWtSguvl5Dgds21JemKT/wDz0hoZXuetu6E6oJpQgTVD5lxKEDRtrStZwzn6uwee/2PBROQQF2Fn9Uyv27g2lqFjLb6acweDG69hWto3O+s5E66I9GpMQwj2dO3dm4sSJLvd9+eWXdT6fxWLh6aef5qWXXuLo0aOVFl2//fbbOXjwICaTybmtZ8+ezJs3r9LzH3nkETZs2ICqqgwfPpyXXnoJg8FQ51iEEEKIpsBry2Fv2LCBr776yvnYZrPx7LPP0q9fP06dqrkwiPCsU7ZTLnvZjh0JIjfHgNFop0/fhhXIUVDooe/B+KDxDA4YTG9jbzrqO9Ja15p2unZMDZnKuMBxGDBU27tXEWNdev/69Svg990c6HQO0lKDWPRxe4qL3BuSuax4GXbV7va1hBCeM2PGDBYtWoTDRVf8pcsu1Ob48eOkpKRw+vRp7HbXP9Offvopq1evdn5dnOQBPPzwwxw6dIgtW7awdetWDhw4wMMPP1ynOIQQQoimxGuJ3sCBA/nss8/4+OOP2bJlC3379mXevHm8//77/Pa3v/XWZYULGdYMHFR+M6WqsG1zeW9e3/75GIwN680zKkZGBVY/3EpRFHobe3N72O30NPQs33ZRQheqCaW7oTujA0ajq2NH82WRKtffcIqAQBvnzpr49MMOZJ/X1/gcFZVsRzbby7bX6VpCCM/o378/c+fOJTg4mPj4eBITE51fa9eurdO5ioqK+PDDD7njjjvqFUt2djbz589n5syZaLVatFotM2fOZP78+eTkNL01RYUQQgh3eHTo5sU2bNiAw+Hg9ttv55NPPuGWW27hlVdeITIykjFjxnjrsuISZY4ych25VbZnpAdw9owJnc5B34F5Db7OmMAxmDSmWo8L0ARwedDl9DL24rj1OK21rWmra0ugJtB5TIgmhCXFS+p0/bZtzUy99SSLF7UjL9fAksVtmX7niVoriG4p20InQydaaVvV6XpCiIa56aab6NKlC7feeiuBgb/+/Kuqyj//+c86nat3794AnDx5sl6xrF27FqvVysCBA53bBg0ahNVqZc2aNVxzzTX1Oq8QQgjhS15L9AA0Gg3vv/8+AQEB9O3bl8jISACmTp3qcv6e8LzT9tMut2+90JvXO6mAwMD6L46uoJCgS6CLvkudntdW15a2urYu9yUaEkm2J9e5YEp4hI2pt57kvbfiyc0xkJYaSGKnklqft6x4GTeF3IRG8VoHtxDiEoqi8NFHH7ncZzQaPX692bNnc+jQIWw2G0lJSTz99NPExJQvs5KamopOpyMqKsp5fHR0NFqtlrS0NJfnM5vNmM1m5+OCggIArFYrVqsfVC9e98qFf9Tx957VCqrm13+7PMRa6W/hedLG3idt7H3SxvXnbpt5NNHTaDQuy2JXrI/05z//2ZOXE27ItGaiQVNp6OaZ00Yy0gPRaFQGDMpr0Pm1aBkbNNbj5dCHmIZwxnaGDFuGy2UhqhMQ6KB3nwJ2bItg9/bwWhM9FZXz9vPsNu+mv6l/Q8MWQripX79+5OTkOD8AvNjZs2c9eq2uXbsSHx/Pm2++id1u5w9/+ANDhgxh7969BAcHU1JS4rLoisFgoKTE9e+Q2bNnM2vWrCrbly9fXqmHsunqXr+nLV3663OXLq3x0BUrVtTvGsJt0sbeJ23sfdLGdVfdvelSHk30kpKSmDt3bo3HqKrKzJkzPXlZUYOTtpNV5udVzM3r1rOQ0DBbg84/KnAUwZrgBp3DFUVRmBQ0iY8LP6bIUVSnZC9pQD47t4eTfjyQ7PN6t9YG3FK2hd7G3hgUqbAnRGMIDQ1l8ODBjBkzhrZt26LV/lpEacGCBTz44IMeu9bf/vY35781Gg2vvPIKERERfPLJJ9x1110EBgZisViqPM9isVSbtD3++OM89NBDzscFBQXExsYyYcIEQkNDPRa71zh79Opo5ENVnzvyoUoPrVYrK1asYPz48ej1Nc+XFvUjbex90sbeJ21cfxWjSGrj0UTv8ccfr7TEQnXmzJnjycuKathUW5UlDXKy9Rw9HATAoMFV5+65S0GhjbYNvQ29GxRjTUwaE5ODJvNZ4WfYcb86ZliYjcTOxRw7EszuneGMm5BV63MsqoXdZbtJDkhuSMhCCDe99dZb9O3blyNHjnDkyJFK+/Ly8rx67dDQUKKjozl27BgAiYmJ2Gw2srOzncM3s7KysNvtJCYmujyH0Wh0OcRUr9f7xxsWpZ5D9vX6qs+t5vX6TVv4MWlj75M29j5p47pzt708NimpoKCAyy+/3K1jK9ZOOn/+vNtdj6LuztrOVukJ274lAlDo1KXIrZ6u6igojA8a7/Ehm5eK1kVzeaB731cX6zegfLmI/b+EUFbm3rf5jrIdmFVz7QcK0QINHz6cV1991WPnGzFiBKtWrXL5Vd36evX1wAMPVHpsNpvJzs4mLi4OgFGjRqHX69mxY4fzmO3bt6PX62Xx9kutmu3rCIQQQrjJY4meTqfjhhtuYNeuXW4dv2nTJqZNmyaL0XpRpi2z0hIGhQU6DuwLAWDQkLr35lWcK1gJ5oqgK4jQRngm0Fp0N3anq75rndbX6xBXSlQrMzarhn0/uzeMykJ5r54QoqqKJQcAxo4dW+1xr7/+ulvnW7Kk+sq6b7zxRt2Cq8X8+fPZvv3XpVSef/55IiIiuP766wGIiori3nvvZe7cuTgcDhwOB3PnzuXee+91OYdQCCGE8AceG7oZGBjIG2+8wdSpU2ndujXjxo0jMTGRyMhIdDodVquVnJwcjh49ysqVKykuLuazzz5Dp/Nq4c8WLdOWWalHb+e2cBwOhdi4Etq2c7/nSkFBRaWtti39TP1I1Cc2eoXKYQHDOGI9UvuBFyhKea/eymWt2b0zjH4D89C4EfKOsh0kGZPcWipCiJaksLCQjIwMYmNjazxu8eLF3HfffQ261vXXX1+nyswWi4UJEyY4h3xOnTqV2NhYFi1aBMBLL73EzJkz0el0lJSUEB0dzapVq4iOjnae48UXX+SRRx5h0KBBAAwbNowXX3yxQa9DCCGE8CWPZlndu3dn69atvPfee3zxxRc8//zzFBcXO/eHhIQwfPhwbrnlFqZPny5Jnhc5VAenbKcqbTtyYW5evzpU2lRQ6GHoQV9jX6J10bU/wUvCtGH0MfbhZ/PPbhdm6d6rkPVroijI15N2LIhOXYprfY4NG7vMuxgaMLShIQvRrEybNo34+HjncO2Li6fUR35+Pg899BA//PADZ86cadC5DAYDq1evrnb/fffdV2vyaTQaee211xoUhxBCCNGUeDzTMhgM3HPPPdxzzz1AefnP/Px8wsPDCQgI8PTlRDXO289j49eKmgX5OgoL9CiKSmxcqdvnSQlIIcmU5I0Q62yQaRC/mH9xuzCLXq/SO6mA7Vsi2LUjzK1ET0VlZ9lO+hr7EqCR71chKjz00ENcd911HD9+nAcffNBlheW6VFWu6GF77733ePTRR5k7dy5ms5kvv/wSk0l61IUQQoiG8nqXWmBgoJ+sKdS8XNqbl3my/I1T6zZmDIbae8QUFFppW3GZ8TKvxFcfQZogBpgGsK1sm9u9ekn989mxNZyM9EDOZxloFV21hPql7NjZad7J8IDhDQ1ZiGYlPj6e+Ph4nnzyyWorLD/55JNunevgwYNs3LgRKK/EXHG+CRMmcM0113gmYCGEEKIFa9yJVqLRHLMeq1S8JDOjvHeqfQf3evNUVMYFjmv0uXi16W/qjx73S/CGhtqcPXm7d4S59RwVlV1luyhxSEVYIVy57rrrgPIlCNasWcOaNWvIysqqtK82F/famc1mrNZfqwAfP37cc8EKIYQQLVTTehcvPCLNmsZJ28lKvV6ZJysSvbJan6+g0MfQhxhdjNdirC+jYqzzWnf9BuYBcGBfCGWl7n3LO3Cwo2xH7QcK0QJZLBbuvfde2rdvz5gxYxgzZgzt27fnj3/8I2az+4We5s+fj8VioWfPntx8880sXLiQ3//+92jcqZwkhBBCiBr53d30jTfeQFGUGifet2R21c6akjWVevNKSzTkZJcvY+FOj55RMTIsYJjXYmyoJGMSgYr7w4HbdygjurUZm03Dnl3u9+rtMe/hpPVkfcMUotn6y1/+wqFDh1i0aBF79+5l7969LFq0iEOHDvHII4+4dY6nnnqKY8eOkZeXx9NPP83+/fuZNm0aS5cudXuJBiGEEEJUz2tz9H788UfGjRvn0XOeOnVKyl3XYo95D/mO/ErbKnrzIqMsBAQ6aj1HSkAKRo3RK/F5gk7RMTRgKD+W/OjW8YoCA5Jz+eHbNmzZFEHX7kVERNa+WLwDB18UfUEbbRsGmQbRUd/R6wvEC+EP1q5dy44dOypVTu7Vqxe/+c1vGDhwoFvnqOgJrLBv3z5ycnJk3TohhBDCQ7zWo3f33XezZs0aj57zvvvu429/+5tHz9mclDhK2Fy6ucr2ikIstfXmKSi017Wnm6GbV+LzpJ6GnoRp3OudA+jes4i4+BLsNg3Ll7bGUXu+6xz6etZ+liXFS/io4CMOWg7iUN14shDNmMFgcLk8jl6vx2Aw1OucBQUFrFmzhn379jU0PCGEEELgxUQvICCAxYsXk5yczLPPPkt6enqDzrdkyRL0ej0TJ070UITNz6bSTZWWVKjgnJ8XW/uwzbGBY/2i10qjaOpUFVNRYPykc+gNDk5lBrB7p/tJYkXCl+vIZVnxMj4q+AibWrWdhWgpoqOj+ec//0lZ2a9zfsvKyvjXv/5Fq1at3DrH3/72N6Kjo9m2bRslJSUMHDiQadOmMXjwYD744ANvhS6EEEK0GF4buvn6668zZswYbDYbS5Ys4f7778disXDbbbdxzTXX1GmdpOLiYp544gmWLVtWp4n+LUmWLYtfLL9U2W6xKJw7Uz4Ms31szYVYBpoGEqn1n2FTnfWd6WPsQz75tR8MhIbZGDn6PD8tb82GNVEkdiohPKL2IZwVLk74DloO0tvYu15xC+HvXnvtNSZOnMisWbNo27YtAKdPn6Zdu3YsW7bMrXOsXr2aAwcO0KpVK95++23y8vI4fvw4NpuNKVOmcNttt3nzJQghhBDNntcSvYq5FzqdjmuuuYbk5GT++c9/cssttxAWFsaNN97IXXfdxYABA2o911NPPcW9995L27Zt3Sq7bTabKyWEBQUFAFit1kolvP1FRczVxa6qKquLVqOxa6qsL3cmIwBVVQgJsRIWaAeb6946g2Kgr7av37VPsi6ZFaxAqeZ1XSqpdyFHDoSQkRHA8qWtueGGU9SnA3Nn0U66Kl2bfO9nbd87LZ2/t4+v4u7cuTMHDhxg4cKFzqGWvXv35uabb3Z76GZAQICz9+/TTz/ljjvucD6WtVeFEEKIhvNaovf73/+e+fPn8/XXX/Puu++yYsUK4uLimDVrFrfddhunTp3i9ddfJzIykldeeaXa8+zcuZMtW7bw0ksvuX3t2bNnM2vWrCrbly9f7tdvIFasWFHtPgMG4oirsn1fRvno3K5GLfEb42s+P9Wfv6mL21r1tVfnjlYwJ1Ml82QAGYsTGNnGvcXXL/U939freb5Q0/eO8N/2KSnx3VqPBoOBO+64o97PLywsJD09ndTUVNasWcMbb7wBgM1mo7i42FNhikutmu3rCIQQQjQSryV6X331Fd988w2lpaX87ne/Y+XKlaSkpDj3x8fHM3To0Fp79L777jtKS0sZO3YsgHNOyIMPPkh4eDjvvPMOnTt3rvScxx9/nIceesj5uKCggNjYWCZMmEBoaKinXmKjsVqtrFixgvHjx6PXV14s3Kba+KTgE4rUIpfP3fd5OyCAiL7ZpCcVuDxGh47bQm9r0pU2q3Nx2+QoOXxX/B0W1VKlZ/NSwyNCWfVTNF+fVAgbd5KwsLrNuVNQ6KDrwFXBVzUkfK+r6XtH+H/7VIxW8EcPPvggnTt3xuFwMG3aNHr06MHmzZt55JFHuOyyy3wdnhBCCOH3vJboGQwGXnjhBW644QaCg4NdHjN79mzOnTtX43meeuopnnrqKefj48eP07FjR+bOncvo0aNdPsdoNGI0Vk1a9Hq9X76Zq+Aq/v1l+ynUFro83m6H06fL26FdfAmqrmryo6BwmfEygo2u/4/8hV6vp4O+AzcabmRx0WIKHYU1JntJA/M5fCSYzIwAlq+I5rob6zaEU0XlBCco1BT6xbxGf//e9zZ/bR9/jLnCzTffzJgxYzh79ix9+/YFIC4ujueff57u3bv7NjghhBCiGfBa1c0XX3yRGTNmVJvkQXnPW0ZGhrdCaBFSramVFke/2NkzJuw2DaYAO5FRrufyKCj0M/XzZoiNKlwbznXB19Xao6coMGHSOXQ6BxnpgRzYF1Lnayko7C7bXc9IhRBt27Z1JnkA7dq1IyUlhZiYGN8FJYQQQjQTXkv03n33XY+f88EHH2Tq1KlV/t1SWVUrJ20nq01qLl4/z1VvlYJCT0NPgjX+3Zt3qVBtKIn6xGoT4ArhEVYGD8sFYPOGCOz2ul1HRWW/ZT9ljpqrmQrR3Pz888+y3p0QQgjRxHlt6OamTZtITEx0uU+v15OQkMC0adO49dZb3T7n3LlzPRRd83DSdhIH1S/enZlxYf28Dq4TERWVAabaq576o/7G/qRaU2s9ru+APHZuDyM/z8CBfSH07uN6GGx17NjZa9nLINOg+oYqhN/p27cvM2bM4J133vF1KEIIIYSohtcSvUcffZSPPvqIm2++mbi4OBRFIT09ncWLF3PrrbficDiYM2cOOTk53H///d4Ko8GOW4+joBCvr7lipS8ctx5Hg8ZlsqeqcCrz1x69SykodNZ3Jlwb7u0wfaKdrh2RmkhyHDk1HmcwqAwanMfaVa3YsiGSHr0K0Wrrdq3dZbvpb+yPVqnjE0WLs6dsD6dsp5gUPMnXoTTIiBEjJMkTQgghmjivDd38+eef2bJlC88++yx33nknv//973n22WdZvXo1e/bs4fHHH2f9+vV88skn3grBI/aU7WFr6VZfh1GFqqqkWlKr7dHLPm/AXKZFr3cQHVN1kXkVtVn3QimKQn9Tf7eO7dMvn8AgGwUFevbtrXtV1hK1hKPWo3V+nmhZMq2ZrC5dzWHrYQrs/lstE8rXzDt16pTLfVdffXWDz5+aWntvvBBCtGT5K9LJX5Fe532iZfFaj97p06eJioqqsj0qKsq56Hl4eDgBAQHeCsEjVFTyHHm+DqOKPEdetUsqAGRmlPfmtW1XVqWHSkEhThdHtC7amyH6XDdDN9aVrsOsVk10L6bXqyQPyWX1j9Fs2RhBz96F6FxUKK2OgsKOsh101Tf9BdSFb5Q6SllavBQFBRWVNGsaSdokX4dVbyEhIQwbNoxx48bRoUMHtBf9kvnll18afP4777yTn376qcHnEUIIIVoyryV6ubm5fPXVV/z2t7+ttH3x4sXk5JQPpysrK6OwsG5zonyhRC3BptrQKV5rrjo7bj1e4/7Mkxfm58VWHbapojIooPn25lXQKTr6GPuwvWx7rVU4L+tbwPat4RQV6vllTyh9B+S7fR0VlSx7Fqftp2mna9fQsEUzo6oqy4uXU6qWoqKioJBqTSXJ5L+J3ltvvUXfvn1JTU2t0vuWl5dX7fM0Go18GCKEEA0gPXWiLryWufzrX//ihhtuoG3bts6iLKmpqZw5c4ZFixaRk5PDyJEjGTZsmLdC8Kh8Rz5R2qo9lL6SZk1z9g5cSlWrL8SioBCjjaG9rn2jxOlrFYlebXQ6leShufy0vDVbN0fQu08BOn3devU2lm7kt8G/bVIfCAjf223ezXHbcedjFZWTtpNYVAsGxeC7wBpgxIgRLFmyxOW+m266qdrnJSUlOYtqHT58mI8//php06ZVmsf97rvvcsMNN3gjbCGEEKJF8do70quvvprDhw8zf/58Dh48CJQvkHvPPfcQFxcHwNatW10ubN4U5dubTqJnVa1k2jKr7aXKz9dRVKRDo1Fp065yoqei0sfYpzHCbBKCNcF01nfmqPVorb16vfsUsH1zBAUFen7eHUr/QXXr1TtlO8XnhZ8zJXgKQZqghoYumoGztrOsK11XZbsDBxnWDDoZOvkgqoarLskDapx3/eSTT5KSkgKUV1H+/vvvMZlMlY656aabuP7665t0kS4hhBDCH3gt0XvttdcwGAz84x//qPaYoCD/eTPclObpZVgz3FpWIaaNGb2LXqn2+pbRm1ehn6kfR6xHaj1Oq4XBw3JY8UMM2zZHcFlSAXqD+716Kirn7ef5uOBjfhv822Y/B9LfOVQHufZcr53frJr5rvg7l/s0aEizpvltogewZcsW5s2bR1lZGZ999hnz58+nR48ezkTOleuuu87575MnT1ZJ8gACAgI4c+aMV2IWQgghWhKvVd3829/+1uQLrdRFvsP93h1vS7elo6nmv87hgN07wgCIjS+psj9ICSJUU/fKkv6sjbYN0droWhdQB+jRu5CwcCslJTp27wqr87VUVErVUj4r/IxjlmP1CVd4mVk1s6tsF+/lv8enhZ8C8EXhF6wtWcsRyxEKHQ2fN6yqKj8W/0iRo8hlT7IDB8esx1BV9z9IaEq++uorLr/8cnJzczlw4AAA3bt35/HHH+fTTz916xxWq5W5c+diNv9aLMlsNvPqq69it9u9ErcQQgjRknitR2/EiBFMnz7d5b7U1NRqF1NvqvLseb4OAah9WYX9e0M4d9aEwWCn3yUFRRQUOug6NEaYTYqiKPQ39mdZybJaj9VqYcjwHJZ9F8PWjREoQJ+++RiMdevZs2Pn2+JvGe4YzgDjAClA0QQU2AvYbd7NXvNebNgAnMn/Ofs5ssxZ7DLvAkCHDqXij+L8Fx10HRgWMKzG9Sfz7fmsKVlDmi2txnjK1DLO2c8Ro4vxzAtsRC+//DJ79uwhMTGRMWPGADB69GhWrFjBpEmTmDp1aq3nePPNN7n66qv529/+Rtu2bYHyas3BwcE1Dg0VQgghhHu8luiNHz+e77//nkmTqi4M7I+ls3Md3hviVRe5jtxql1UwmxU2rC2fRzhkeC6BQZU/FVdRW9ywzQqdDZ1ZU7qGMrWs1mO79yzk511hnD5lYt3qVmzdFEFS/3z6DcwjMLD6IbOubCjdwAnrCYYFDKONrk19wxcNUGAvYH3peo5Yj1RbwAio9OFJRSIIcPHhR61HOWo9Sl9jX5JNyZg0vw49tKk2tpdtZ1vZtlrngwLO6pv+mOhptVrnh3UXf4gRFBSEw+Hez8jQoUM5fvw4CxcudM7j7tGjBzfffLNfDesXF1k1G8Y87usohBBCXOC1RO/bb7/l2WefpVWrVlXWWdq9e7e3Lus1RY4iHKoDjeK10a5uqWlZha2bIikp0RERaaHvgDyXx7SUapuX0ik6BpoGsr50fa3HajRw/c0nObgvhG1bIsjNMbB1UyQ7t4XTu08Bg4bmEhzs/tCyk7aTfFb4GfG6eIYEDJGEr5E4VAe7zbvZWLrRmcS5k4DVpOL5u827+cX8C0MChtDH2Id0azqrS1bXuLalq3OlWlIZGjC0QTH5QmFhIadPn3b2xFXYu3dvnZbMCQoK4u677/Z0eEIIIai6FEPY+HgfRSJ8xWuJ3vHjx3nooYeq3edvVFQKHYWEaes+b8uT0qyuh4Pl5erZuS0cgFFjzldZJB3AqBiJ0ER4MbqmrZ+xH4cshzhvP1/rG36tFnr1KaTnZYUcOxLE1s0RnD1tYvfOcE6kB3Db7zNwdzRmxbVO2E6QXpguCV8jOGs7y8rilZx3nPfK+VVUrFhZV7qOzaWbsWKt13nOO85T5CgiWBPs4Qi964EHHiApKYmpU6eSkZHBrFmzOHToEN988w1vvfWW2+f57LPPmDdvHjabjQ0bNvDcc8+RkJDAtGnTvBi98LhVs30dgRBCCBe8lujdeuut/P3vf3e5z1WlNX+Q58jzaaJnUS2csp1yuW/tqigcDoX4jsV07FS1CIuCQntd+xY9V0yjaJgQNIGPCz52+zmKAp27FtOpSzEZJwL4dnEbcrKNpB4NpFOXqu1ck0sTvjhdHMkByS22l9UbLKqFTaWb2G3e7VbxHU+ob5JXIc2axmXGyzwUTeO47bbbiImJYfbs2eTm5vL666/Tu3dvFi9ezPjx4906x3//+1+ef/55rrnmGtavL+9pv/baa3nqqafIycnhgQce8OZLEEI0AVuXpAKQPNm/6jY0horeOOmFEw3htUTvueeec/7bbrdXGrr56KOPeuuyXuXrypunrKdcFmFJPx7AsSPBKIpKytjz1fY0SUIBrbStGGIawqayTXV6nqJAXHwpl/UtYPuWCHZuD69zolehIuHLsGVwovAEbbVtGRwwmDhdXItOxOvDoTo4Zz/HSdtJTlhPcMp2ymPDNBuDgkKqJdXvEj2AiRMnMnHixHo//8MPP2TPnj1ERkY6C7r06tWLzz77jHHjxkmiJ4QQQjSQ1xI9VVX517/+xX/+8x+MRiNHjhzhvvvuo3Xr1jz55JN+94ZWg4Z8u28TvRO2E2jQVEr2HA5Y82MrAJL65xPVynXvgooqid4FA0wDOGI5QrYju87JQN/++ezYGs7JE4GcO2ugdYyl3nFUXPuM/QxfFX1FtDaaIaYhJBrkk80Kp22n+bH4RwAMisH5pVf0lDhKyLRlYsVaY5GVpkxFJcOWgU21oVO89uvYK6xWK1988YVzeYWePXty7bXXotfr3Xq+RqMhMjISqFzQRa/XY7HU/+dKVEOGVwohRIvjtcoiL7zwAp9//jkPPvggERHl88KefvppsrKyeOqpp7x1Wa9x4PD5EgvHrcer9Ojt3R1K9nkjJpOdocNzqn2uDh3RWlnAG0CraJkQNKFezw0JtdG1e3nBjZ3bwz0ST0WCct5+niXFS1hZvBKbaqvlWc2f2WHmu6LvyHHkkO3I5rT9NOm2dI5Yj3DAcoB0W7pz2KQ/JnkV7NjJsGX4Oow62blzJ4mJidxyyy28+eabvPnmm9x888106tSJXbt2uXUOs9nML7/8UmX7ypUrZR09IYQQwgO8luj98MMPrF+/noceeojg4PJCA9HR0fz73/9m3bp13rqsV+U4qk+kGkOxWlzpcVmZho3ry5dTGDYyG1NA9WXN2+na+bxiaFMSrYtmsGlwvZ7bf2AeAIf2h1BU5KLqTT1VJCv7Lfv5tOBTn/cg+5KqqvxY8iMlaonLJE698Kc50KAhzVLzmntNzV133cVdd91Fbm4u586d49y5c+Tk5PD73/+eO++8061zPPPMMwwZMoSrr76aI0eOcMcddzBs2DCuuuoq/vGPf9Q5JovFwmOPPYZOp3NZ8Ou///0vAwYMYPjw4Vx55ZVkZmZWef4DDzzAwIEDGTBgAPfff7/0LAoh/Eb+inTnlxAVvPrOPyAgoMo2RVEoLi52cXTTV+goRFV99+by0uISRw8FUVaqJTLSwmV9C2p8ngzbrGqgaSBRmqg6F+1o085M2/alOBwKP+/0fHEeFZUcRw4LCxaSakn1+Pn9wQHLAY5YjzSbZK4mDhwcsx7z6e+W+nj66acJDQ11Pg4LC6u2AJcrkyZNYsuWLURGRhITE8PevXvp2rUru3btcrugS4Xjx4+TkpLC6dOnXfYGfvnll8yaNYtly5axYcMGBg8ezFVXXVVpzb+HH36YQ4cOsWXLFrZu3cqBAwd4+OGH6xSHEEII0ZR4LdHTarUsX768yvZ33nmHwMBAb13Wq+zYq/SqNaZL3/SmpZYvKty1RyGaGv4nZX6ea1pFy8Sg+hWTqOjV+3l3GDar5+ebVpTvX1K8hPUl63GodVuo3Z/l2fP4qeQnX4fRqErUEs7bvbMUhDd06NDBZW9XWVkZMTHuLwDfq1cvFixYwPbt29m+fTvvvvtuveIpKiriww8/5I477nC5//nnn2f69Om0alU+n/mBBx7gl19+4bvvvgMgOzub+fPnM3PmTLRaLVqtlpkzZzJ//nxycnw7kkMIIYSoL6/N/n/xxReZOHEisbGxnD59mjFjxnD06FGKi4tZsWKFty7rdfn2/EZf86rMUVZlm90OJ46X95h2TKy5+qMGDTE69998tSTRumiSjEnsMe+pU+9R567FhIZaKSjQc2BfSI09qg21w7yDw9bDdNB1IEYbQ2tda1ppW6FX3Ct64U/sqp2lxUtdVpdtzhQU0qxpROua7jzatWvXOv995ZVXcsUVV3DbbbcRFxcHwIkTJ/jf//7Hdddd59b5rrnmGhYvXlxpm9ls5uGHH6Z169a89957bsfWu3dvAE6ePFllX05ODrt27eKJJ55wbgsLC6Nr166sXLmSyZMns3btWqxWKwMHDnQeM2jQIKxWK2vWrOGaa65xOxYhhBCiqfBaopecnMyRI0d4/fXX2bdvHwApKSn8+c9/dn6q2tTll1g5nqlQYNIRFlZeHCPPkUd7Grd3LN1Wdbz16UwTFouWgAA7MW3NNT6/tba131X0a0wDTQPZa96LHfcLQGg00HdAPmtXtWLn9jB6JxW4vYB6fRQ6CjloOcgByiscKiiEa8LpqO9ID2MPWmn942eqNpvLNpNlz/J1GF5zPstAWLgVvb7qhwp5jrzGD6gORo8eXWXb6tWrq2zbuHEjDz74YK3ny8+vOgc1ICCA7777jpSUlHpE6FpaWvn8x0t7Gtu0aePcl5qaik6nIyoqyrk/OjoarVbrPEYIIZoimZMnauLVd/+tWrVi1qxZVbZnZ2dXuqE2VS8s3c/n23UMHRHCkOG55Uss+GAtvePW41W2VQzbjE8srjHBUFCI1cd6KbLmIUgTRJIxiV3mXXXq1eudVMCmDZHkZBtJTwskoZae1Ya6ODYVlVxHLnnmPHaadxKliaKXsRddDV0J0gR5NQ5vOWk9yfay7b4Ow2u2bQln/epWdO9VwKSrzvk6nDpLSUlh1apVtR5XsSaeK19//TVff/01AAcPHmTGjBlVjsnNzSUvL6/ecV6qpKT859JoNFbabjQanftKSkowGAxVnmswGJzHXMpsNmM2//ohW0FBea++1WrFanW9zI1PqY1UjOui198k26GZaC5t7FDLP2Btiq/D121sq6ZtKrbXR1NrZ1+3sT9zt8180s1z/fXX89NPTX8OTnxU+RvmvLzyIXIqaqNXQrSpNk5YT1TpRTyeWj7PsbZhmyoq7XTtvBZfczHANIA95j116tUzGh30vqyAXTvC2bk9zOuJnisVyV+2I5u1pWtZV7qOeF08wwOHN8levmx7NjvLdpJrz8WBAxUVBw4cqoNCR6HfrodXm6OHg1i/uvz/49iRYGy2c+j8rJP9v//9r1vHvfXWWzXuryg6o6pqlQI0Go2Gbt26MWfOnPoF6ULFnPCLk7KKx0FBQc5jXM05tFgs1c4pnz17tssPMpcvX95E56F3b5zLLF3q/Kc/T9PwF82ljZcu3e/rEKrl8zZeurdpnsuDfN7Gfqi6DyEv5bW3Grt372bmzJns3r3b+Umnv4mPKr9Z5+f+mug19hILmbZMbFReU62wQMv5LCOgEt+x9v/otrq2Xoqu+QjUBNLf1J/tZdvrlGj0HZjHrh1hpKcFkX1eX+2C9Y1FRSXdls6JghOMChhFD00Pn8ZT4YztDNvKtpFqTW22yVx1zp4x8v23vw4btFo0nDoZQFxCqQ+jqruuXbu6ddw999xT7Qd5U6ZMYcqUKQA8+uij/POf//RYfNVJTEwE4OzZs5W2nzlzxlndMzExEZvNVmm0SVZWFna73fn8Sz3++OM89NBDzscFBQXExsYyYcKEStVIm4x1rzTOdUY+hNVqZcWKFYwfPx69vvnNJW4K/L2Nd3x/vNLjAZMSKm2veOxLvm7jglXl66uGjol1ub0+Lj2Xr/m6jf2Zu7mV1xK96dOnc/nll/PQQw8REhKCcmF8oaqqzJw501uX9aj4yMo9ekCj9+ilWdPQXFIc9fiFYZtt25kJqGHtPIBWmlYYFWONx4hy/Y392V2227kItzvCw2106lLMsSPBLFsaw5RrTxMU7NvFnivWmFtdupo00mpcPqKiR0XxwgRDVVXJtGWytWwrGbYMZxwtKckrKtTy9RdtsVk1xHcsJjDQzoF9oaSlBvpdonexEydOMGvWLHbt2kV+fn6lnrkzZ864dY6akryFCxdyyy23NDhOgIiICPr168eOHTuchWIKCgo4fPiwM4ZRo0ah1+vZsWMHEyZMAGD79u3o9XpGjRrl8rxGo7HKcFAAvV7fNN+wKI1U4Oii195k26IZ8dc21iiV16CteA0V25vSa/JVG+uqaQudUv/1e5tSu17MX7+Pfcnd9vJaohcSEsLLL7/sct+///1vb13Wo+Iu9OiVFOuwWBQMhvKS92WOMkwak9evr6oqRy1Hq1QgPJ5WHldCYs1LPWjQ0EHfwWvxNTcmjYn+pv5sKdtSp+cNG5lDZkYAZ0+b+OSDDkz53WmiWzeNhZYzbBnEEccJ6wk66TsBUOQoIsOaQbo1nXRbOlq0DA8YTndD93olfJm2TPaU7aFULcWsmjGrZiyqBatqxY69RSZ4AFarwtdftqW4SEdklJkrp5wlPS2AA/tCOX4siJSx2b4Osd5uvPFGEhISuPPOO53DH6H8d1ZdeukKCgrYsmULZ86cqZQszpkzx2OJHsCTTz7Jfffdx1/+8heioqJ47bXX6N27N7/5zW8AiIqK4t5772Xu3LlcfvnlAMydO5d7772XyMhIj8XRmF5dcZiZ47s6/96Ums3QxKY/N14IIYTneC3R69OnD+fPn3dZYXPnzp3VfkralIQF6AkKUCkuVcjP0zvfvOc58mijaeP162c7silWiyv1yNjtkH68ItGredimA4esn1dH/Uz92FW2CwvuJ2qtoi1MnXaSr79oS26Ogc8+6sCkyWfo1KXx5+xdqiK5+q74Ozo6OpJjz3FWd7x4COXykuXsMu8iJSCF9nr3vmcsqoWNpRvZY95T43DMppbg2e1w+GAwe/eE4bApdENDUFQQbWPLCAm11X4CN6gq/PBtDOfOmAgIsDPld6cxGh3EdyxFUVRycgzk5ekID/fM9Rqboih88sknLve56uVyZePGjUyZMgW9Xk9eXh4xMTFYLBZOnz5N27Z1G25usViYMGGCs4jL1KlTiY2NZdGiRQBce+21nDt3jvHjx2MymYiIiGDJkiVoLlqA9MUXX+SRRx5h0KBBAAwbNowXX3yxTnE0Na+uOOzrEIQQQviQV3v0Bg8ezNixY2nXrh1a7a9dzQsWLHCr/HZT0CqiPNHLy/010ct35NMG7yd6qZbUKsPuTp0MwGrREBhoI6ZNzcsqAFKIpY6MipGBpoFsLNtYp+dFRFqZOu0k333VhhPpgXzzZVtGjs5mQHKeV5ddqIs0a1qVyp0XO28/z/8V/R+d9J0YGTCSMG1Ytec6YT3BiuIVFKvFLs/VFJWWati7O4zdO8MoLvr1V99pgG/Lf56Dg220aVdGQIAdjVZFo4BGo6JowGiy07NXIcEhNQ/NVVVYtzqKo4eD0WpVJl972pnQGY0O2nco42RGAMdTg+jbv/Gr+HrC4MGDq62efOlcuOo8/vjjLF68mBEjRjBmzBhnRc+NGzfyxRdf1Ckeg8HgcqmHi917773ce++91e43Go289tprdbquEEI0FllGQdSH1xK9t956i759+3L06FGOHj1aaZ8nS2d7W6sISD/16zw9BaXR5umlWlNRUSsle2kXqm3GJ5bUmkCEacII1DTF6m9NW5IpiR3mHZjV2hPpi5lMDn57/SlW/xjNz7vCWLe6FTnZBkaPy8Jg9H0iVFsyVrE/1ZpKmjWNWF0sUdooIrQRRGojidREoigK60vW84vlF78pqpKXq2f71nAO/BKCzVbegxMUbCOpXz6hwTaKdkZzWLWSlWWgqEjH0cPB1Z5ry8ZIBg3OZcCgPPSGqq89/XgA61a1Iutcea/W5Veco32HskrHJHQqLk/0jgX6baI3Z84cbr/9dkJCQmjbtm29PshTFIURI0YAVBq2OWzYsEYp0iKEaHxbl6T6OgQhWhSvJXojRoxgyZIlLvfddNNN3rqsx7WKKH8Dkpf766THxljYuNhRzFl71U/GncsquFFts7uhkcppNzMGxUCyKZl1pevq/FytFsaOzyIyysKaH1uxb28ox44EMSA5j77985pEwlebimIu6bZ0MmwZleaIatA4k7umnuTZbLB9SwRbN0Vit5d/KtI6pox+A/Pp1qMQrRYUm0J8XhTpw05icZRXyDx7xoTVquBwKDgc4HAoqA6F06dMnD5lYtP6KPbuDmN4SjY9ehWiKOULoa9bHeUslGQw2BkxOpuevQurxNUxsYT1q+HEiQBsVgWdi8XTm7pHHnmEb7/9lp49e3LkyJFK+9z9IK+0tBRVVVEUBVVVSUtLo2PHjpw/f56ff/7ZC1ELIRpLRUKXPNl11VrhGxW9gmHj430ciWgsXkv0qkvygGrndjRFURcSvfyL1tLLted6/bquFkkvKNCRfd6IotS+rEKgEsgA0wAvRdf89TH24aTtJGnWtDr3XCkK9BuQT2SkhVUro8nNMbBhbRQ7toUzIDmXvv3zMbjoDWqKLi0EdOnjpupkhokff2hNTk75IthxCSUMHppD+9iyanvC9QaVDnFldIgrc7lfVeHIoSDWrW5FQb6eZd/FsGt7GK2iLRzYF4KqKmg0Kn365TNkWA4Bga7bKqqVhZAQK4WFejJOBNCxk+/nctbV999/T0ZGBuHh4VX2TZ8+3a1z9OzZk5EjR7J48WKmTJnCgAEDGDBgAD///DPjxo3zcMRCCCFEy+PVJXu3bNnCvHnzKCsr47PPPmP+/Pn06NGDlJQUb17Wo6IvFFxr7B49V+uNVVTbbNOuDFMtyyqMDBiJXpFStfWlU3RcHXw15+3n2VG6g0PWQ0DderHiO5Zy2+9PcOhAMJs3RJKXa2DDmlbs2BrBgORckvrlY/SDHj5/UlaqYd3qKH75uXx+YWCQjdFjz9O1R1GD50oqCnTtXkxi5xJ27Qhj68YIzp01ce5seQXezl2LGJGSTURkzctzKAokdCph7+4wjqcG+mWid9lll7lM8qB87p07Xn31VTIzMwkPD2fmzJnY7XbWrVvHHXfcwRNPPOHBaEWFTanllV6l+qZo6qRH8FcyN080hNcSva+++opp06YxZswYjh8/DkD37t15/PHHuf/++5k6daq3Lu1RrcLL34gXFuiw2UCngzK1DKtq9VoiZVNtpFvTqyQVaRcSvY41VNtUUGitbU03QzevxNbStNK2YmLwRIbah7LLvIu95r04cLid8Gk00KNXEd16FHFwfwhbNkY4E77tmyPoOyCffgPzal0PUVTPalU4ddLEifRA9u8NoaSk/NfaZUn5jBidjcnk2bbV6VQGDc6jV+9CtmyKID9PT/KQXNp1cN0T6ErHxPJELy01iNHq+SZTsMddN954Iw8++CA33HBDlTl6M2bMYOPG2osZhYeHV0oWH3nkER555BEAzOa6zY8VQgghRFVeS/Refvll9uzZQ2JiImPGjAFg9OjRrFixgkmTJvlNohccBHqDA6tFQ0G+nsio8k/r8+x5ROuivXLNk7aT2Klc2c/mKJ/TAzUvq6CiMjpwtFcWwG7JQrWhpASm0N/UnwX5C+o8P02jgZ69C+nes5CD+0PYuimC3BwDWzZGsnNbOH365dN/UB7BPl5svak5dCCY/Hwder2KQe9Ab3Cg16soCpw5bSQjPZDTp0zOOXgAkVEWl0VQPC0wyM6Yy8/X67mx8SVoNCr5eXpyc/RERfnXMgsV86xfe+21Sr9rKubcNdSkSZP46aefGnweUT1ZV08IIZo/ryV6Wq2WxMTyLveLb/xBQUE4HP7Te6EoEB5uJeuckby8XxO9fEc+0Xgn0XM1bPNYoYLVqiEwyEbrGNefdisodNN3o43O+0s/tFQhmhC6G7pzwHKgXsVILk74jh4OYuumSLLOGdmxNYLdO8LoNzCfYSOzuaiDpMU6sC+YH75173s5OMRKXHwpcQkldOlWhM6rg9IbzmBQ6RBbyon0QI6nBhIVVeDrkOpk8ODBfPrpp1W2q6paY7GtintCbc6cOVPv2IQQQghRzmtvhwoLC10ufLt3714KC6tWomvKwioSvdyLllhweKcsukN1cMxyrEoScSC3PFlO6Fj9sgoaNAwPHO6VuMSv+pn6sd+yv0Hn0GjK53t16VbM8dRAtmyK4HRmANu3RJB50sSVV58hJLTl9u7l5en4aXlrAOLiSzCa7FitmvIvi4LNpiGqlYXY+BLi4ksJj7D63fDHjp2KOZEeSFpqEAMG+Vei99JLLxEf77pq2/z586t9ntFo5LHHHqvx3KqqyvIKHvbqisMM8XUQQgghGp3XEr0HHniApKQkpk6dSkZGBrNmzeLQoUN88803vPXWW966rFeER1zoxbtoLb08e55XrpVuS6dErTo0c3/ehUSvhmGbyaZkgjXVrwEmPKOVthUddB3ItGU2eIkBRYGOnUpISCzh6OEgli9tzenMABYuiGPS5DPEdyz1UNT+w+GAH5a0wWLR0K59KdfccAqNxtdReV5CYglrfoLMjAAsFgUMvo7IfcOHV/+B0oYNG0hKSnK57w9/+INbVTkLCvwr8RVCCCGaIq8lerfddhsxMTHMnj2b3NxcXn/9dXr37s3ixYsZP358nc/3+eef884772C32ykoKCAhIYEXX3yRhIQEzwd/ifDwC/PyLvToOXB4rfLmnrI9VYZt5ufrOFuq1LisQpASRH9Tf6/EJKrqb+rPyaKTHjufokCXbsVEt87g26/aknXOyJeft2PI8BwGD8ttlolOdTZviOT0KRNGo51Jk88229ceEWklLNxKfp6ejPQA+vTydUTu++CDD6rd98Ybb/DHP/7R5b7777+/yra0tDROnz7NsGHDyM3NJSIiwuVxQgghhKgbr85kmThxIhMnTvTIuW699VaWLFnCxIkTcTgc3H777VxxxRXs2bMHo9HokWtUJ+ySHj3AK2vpFdgLSLdVLaN77Fj5Iszt25dVW0EwJTAFndLEJyY1Iwm6BMI0YR4fwhseYWPqrSdZ9WMrftkTxuYNUZzODGDw8Bxatzaj95P19+rrZIaJrZsiABg3IYvQMP8qUlIXigIdE4vZvTOctNRA8KNE75577qFNm1/nT9rtds6dO4dGo6m0vSa5ubncdNNNLF++nI4dO3Ls2DGeeOIJDh06xGeffUarVq28Fb4Qws/IcgueJQuntxx+kxlMmTLFmTRqNBruv/9+Bg0axM6dOxk6dKhXr33x0E2Ho3x+VbFajF21o1U8VzVjr2Wvy8W5U4+VL6uQ2KnY5fPCNGF01nf2WByidoqiMMA0gJ9KPF8ZUKdXGX9FFu07lPHjsmjSjweSfjwQRVGJiLQQ08ZM6zZm2rQx07Z99QuA+5uyMg0/fBuDqir07F1At55Fvg7J6xISS8oTvWOBqKr/JPFjxoxh6dKllbbZbDY++ugjt1/HzJkz6dixI9u2bePBBx8EYN68eSxatIj777+fjz/+2NNhCyGEEC2K3wyKWrRoUaXHJlP5IsWNsd5ScLANrVbF4VAoLPg1Ny5weG4eiV2184v5lypJntms4eTJ8mUVOrmYn6eg0EnfSZZT8IHuhu4YvDixqmfvQm667SSduhQRFGxDVRVyso0c2BfKmh+j+WxhB/73Zjzr10SSfd47azo2FlWFH5dFU1igJyzcwpjLs3wdUqOIjStFq3NQWKjnlB+95EuTPACdTsftt9/O559/7tY50tLSePPNNxkwYAB6/a/fv9dffz1nz571WKwtyasrDlf6WwghRMvmNz16l9q0aRPt2rWrsSiAp2g0EBZmJSfHQF6enrDw8uFk+Y58IrQRHrnGMesxytSq634dTw3E4VBobVKJiLRWKf2hopKgT/BIDKJu9IqeJFMS28u2N7goS3VaRVu4+tryUvNFRVrOnTFy7qyRs2eMZGYEUFioZ9vmSLZtjiSmTRk9ehfSvUchAYFNcwmToiItJ44HYrcpOFRwOBRUB+Tn6zl8MASNRuU3k89iMPpP71ZD6PQqcXGlpKUGsfeoAzr6OqKGOXLkCMeOHXPr2NLSXwsNXdwLqKqqJHpCCCGEB/hlomc2m3nxxRd54403Kn0SfPH+i3v6Kiq4Wa1WrFZr3S5mA8WmEBZenujlZxtQLizEfN58nva0r/8Lucieoj1o7JoqCUPakfL5eb0jVBRb1V47HTqi1ei6v65mouJ1++r199T0ZIdtR6NcK8TkICShlE4J5W+QbTaF1NRA9u8L4fjxQM6eMXH2jIkNa6IYM+Y8vXoXolxYSNzV905jys/XsW1bOPt+Ca20uPmlhg3LoW1rCzRSvBXt4sv26ZRYgtWiITI4qM7fx776vne1Hl5hYSG5ubk899xzbp0jISGBJ554gr/85S/OEQmHDx/mhRdeoE+fPh6NVzSiVbNB1QDdfR2JaEIq5tgJIRqX1xM9q9XK6dOniYuLw+FwoPFACb177rmHG2+8kWuuucbl/tmzZzNr1qwq25cvX05gYGCdrqWgEE88cSUa0gB1XxTxxeW9eJkX/niCAQNxxFXaZlch/Uj5HMBekQ7itsa5eirLWOaRGPzZihUrfHbtS//fGlMnYHwMFEba2XleYfM5DadKNCxf3ppz21txQ6ID9FT7veNtZ0pgZaaGHecVHJS/me8QpBJuUNEooFVAc+GrQ5DKKFsYmo1hjR6nr9oHIB6YHAucs7gcElmTkpLql1vxpkvXw1MUhZCQEJKSktxeFP3111/n2muvZc6cOSiKgl6vx+FwMGzYML788ktvhS6EEEK0GF5L9MxmMw888ADvvvsusbGxHDt2jBkzZqDVannjjTcICAio13kfe+wxAgMDa/zU+PHHH+ehhx5yPi4oKCA2NpYJEyYQGhpap+utKVnDQctBNKZgOBNNelAJ6cN+HVZ0R+gdmDSmur+Qi6wvXe9yft7JkyZKNrfHZLTTMQROJJ9A1VU+ZnTgaHoYejTo+v7MarWyYsUKxo8f77J3tzFk2bL4v6L/88m1L5YAxDlg+7ZwNm6MZHeOhqMWB7fHKRjHp1f63ikr03DiRABZWQbi40vp0KHqsGF3ZWfryc42YDFrMFd8WTTk5elJSw1yHhcfX0Ly4Fw6dKi+gExGvaOoH8WmELc1zuXPVqPGgUJXQ1fGBo6t0/N8td7cY4895tZ6eDWJiYlhw4YNrFq1in379gHQu3dvRo8e7YEIhRDNgfQENj+rVq0Cyot6Ce/zWqL32GOPkZmZyaeffsqLL74IwDvvvMPcuXN56KGHePPNN+t8zjlz5pCRkcGHH34IwI4d5UPmBgwYUOk4o9HocskFvV5f52QgwhiBw+EgLOpC5c18faU3hCc4QS99/euiW1UrB+wHcOiqzqk6llbe+5iQWIJWCUDVqVXejHYM6Ihe49+FODyhPv+3ntJO34621ractp/22lw9dynAoOG5xCaW8P2SGPJyDfxnv8qAoAgSOpdw4ngA6ccDOXfGiKqWZ1tbNkPnrkWMSMkmItL9oYAWs8K6Na34eVfNPXCduxYxaEgubdr+Opy6qc3Ac/Wz5Q1DTEPYXLbZ5T5Fp9T5e7gxv+cXLlzILbfcAtDgJA/g2muvJSAggIULF8oN34OkEIsQQogKXkv0tm/fzpo1a9BoNLzxxhvlF9PpePjhh+t1U58/fz4fffQR77zzDjt37gTg22+/JSEhoUqi50lhmjBUVOcSC3l5elS1fA0sBYWjlqP0MtY/0TtkOYQV12+uU4+W94Z06lQM2VV7QCM0EYRoQup9beE544PGs7hoMYWOQp8newBt2pq59fYM1qyMZu/eULZvi2D7tsqFgyKjLERGWTh2JIijh4NJPRpEn375DBmeQ0BAzcVc0tMCWPlDawoK9BeuV0ZAgB2D0YHR6MBgdGAy2enYqYRW0RavvU5/MjJgJP1N/UmzpnHW7n/FRv7zn/8watQot5ZPiIurfSjsli1bWLdunSdCE0L4Oem5E8I7vJbo2e1253y8S98Y5OTk1OlchYWF/OlPf8LhcFRZM++9995rWKC1CNOU91aEhllRFBWbVUNxsZbgYDsqKidsJ7CoFgxK3cvsq6rKnrI9Lvfl5ujJzTGg0agkJJRCduX9CgqJelk4tKkI14ZzU8hNfFv8LZk2z8zbbCi9QWX8hCwGmYNYdNqB3aEQF19KXEIJ8QklBIfYAcg+r2fd6lakHQti945wDvwSwqAhucTGlRIRZcVo/DXpM5s1rP0pil9+/vXnYvwV54hLKHUZQ1On0DhFWIYHDKe/qT8ACfoEztnPNYkPBOriwIEDTJ8+3WWipygKJ06cIC0tjeDgYPLz82s934ABA6qdz/fll19y7bXXNjhmIYQQoiXzWqIXFhbG22+/zV133eWsqFZcXMzs2bNp375ulSpDQkKw2+3eCLNW4dpwALRaCAm1UZCvJy9XT3BweTwOHKRb0+li6FLnc5+1n+W847zLfRW9ee1jSyu90a4gyyo0PSaNiWuCr2F1yWp+sfzi63CckqJUwiefwKFVXc6Ni2pl5be/O0368QDW/tSK81lG1q9p5dwfGGQjMtJKeKSF46mBFBWW9+L17Z/H8JRsDAb/Slgq6NDRUd8RK1YUFFRUZ+LnySRsqGkoA00DnY8T9AlsKdvisfM3lr59+/LTTz+53Pef//yHRx99lMGDB/PRRx+5db4//OEPPPfcc9xxxx20b9++0lqgb7zxhiR6jWRTajZDE6N8HYYQLVr+inTnv8PGx/swEtHceC3Re+2115g4cSKPPPIIdrudjh07cvr0aTp06MCyZf5TJVKv6DEpJsrUMsLDrRTk68nP09Mhtrx4hYLCMcuxeiV6e8r2ON9gXir1WPn8vMTOxS6fq0NHW13bOl9TeJdW0TI2cCyR2kjWlq71dTiVVFcApUJ8Qim33J7BgV9C2L8vhJxsAyXFOufXyYzy4cNh4RYm/Oac82fAX1T8rAUrwfQz9aOXsRcam4alLOX3Yb8nV8nltP00p6ynyHXk4sCBQ3Vgx44DB3bVjg1bna6ZbEomOSC50rbW2tYYMGDBv4a0fv3111W2nTp1ihkzZrBq1SqefPJJnnjiCbcrK1955ZUAPPPMM54MUwghhB9YtWqVW1MBRMN4LdHr0qULBw8eZOHChZUqqt18880YDHUf5uhL4ZpwztjPEB5h5UQ65OX+WgBBRSXVmopdtaNVtG6fM8eew0HrQZf7yso0ZF54U+0q0VNQiNfH1+l6ovEoikI/Uz/CteEsLVqKHbvfDNPTaKBXn0J69SkEyodqlg8j1pOTbcBkctCnXz56vX+8novFaGMYYBpAoj4RjVKejFTMj9Uretrr29Ne3x6qKaLrUB0csBxgfel6zKq5xv/TME0YQwOG0lXftco+jaIhXh/PUetRv/m+AKpULP7444+57777iIqKYt26dSQnJ1fzTNeSkpKYO3dule2qqjJz5syGhCpqsSk1u/aDhBDCA6TKpm95dR09g8HAHXfc4c1LNIoIbQRn7WcJC79QkCW3cqU7K1ZO2k4Sr3e/u31D6YZqe/OOpwaiqgpRrcyEh9uqLB6totJR37Eer0Q0po76jkwLm8a20m3ss5R/2OFPb+wBjEYHbdqaK1XM9CcKCoFKIOOCxjX4Z0ajaOhl7EUXQxe2lW1jZ9lO1At/KoQoIQwNGEo3QzdnMulKgj6BI9YjDYrHV3JycvjDH/7AokWL+P3vf8/cuXMJCgqq/YmXeOqpp0hJSXG5b86cOQ0NUzQF616BsY/6OgohRBO3bt06FEWRZNALGr56eQ0+++wzUlJSGD58OADPPfecc2kEfxKuCS//+0Llzfy8yolexfBNd52xnSHVmlrtm/6K+XmJnatfDLkuSaXwnVBNKOOCxnF76O30MvRCufBHeFdFG/c19uW2sNs8+sGIQTEwPGA4t4Xe5iyIFKwEc3ng5UwPm04PY48akzzw35/fpUuX0rt3b1atWsXixYt5++23qyR5Bw+6Hqlwqd///vdVimtVmDhxYoNjFUIIIVo6ryV6//3vf3n44YdJSkqitLS8It+1117L4sWL+fe//+2ty3pFmPaSJRYu6dFTUcuHYbkx1lhVVdaXrq/2zb7dXt6jB5DYyfX8vChNFMGa4Lq8BOFjodpfE76ehp6S8HlZlDaKm0JuYlTgqHpVxHVHmDaMq4Kv4o7QO7g97HZ6GXu5PZw6SBNEpCbSK3F5y913383kyZPp168fv/zyC1OmTHF53B//+Ee3zhcbG8vGjRs9GaIQQohmYNWqVc4v0TBeG7r54YcfsmfPHiIjI51dsb169eKzzz5j3LhxPPDAA966tMdVLLEQFlae6JnNWspKNZguWmusVC3ljP1MrQVSTthO1Fh+/9TJAMxmLQEBdtq0q1rsQkGho0GGbfqrUG0olwddTrIpmR3mHfxi/qXK8D9RNxcPgY7QRNDH2Ic+xj619qp5Sqg2tPaDXOio70iuOddv/u/feecdAPbv38+QIUNcHqOqKmfPurdGYLdu3bDb7eh0VW9DTz/9NM8++2z9gxVC1Cjr9fL1jaPv+7OPI2mZKqpsNpUKm56KR+bjNT1eS/Q0Gg2RkeWfWF9cNluv12Ox+Fe1uYqhm3qDSlCwjeIiHXm5etoE/DpvqWL4Zk2J3sW9ebUN2+zYqRhXxetkWYXmIVQbypjAMSSbktlVtos95j1+VbSlqQhWgonXxxOrjyVWF0ugJtDXIbktXh/PDvMOX4fhtpSUFLc+XXX3Bj9p0iSuvvpqbr75Ztq3b49W+2tv6LfffiuJnhDNgKcXQq84X/Lkxl1HeOOihQAMu/4Wj5734mUVhPAGryV6ZrOZX375hd69e1favnLlSp+tiVdfJo3JWQ49PNxanujl6WnT7tdET0XlsPUww9XhlRLbix21HuW83fW6eQAOBxw+WD4ks7plFfToaauVZRWaiyBNECMCRzDQNJDd5t1sL9uOA4ckfBeZGDiRboZu2LBhVa1YVSs2bOjR17s3rSlop2uHFi12/OP34RNPPOHR4+68804Afvjhhyr7qvsdKoSoH+nB8x+S/AlP8trYpmeeeYYhQ4Zw9dVXc+TIEe644w6GDRvGVVddxT/+8Q9vXdZrwrQXhm9WU3kToNBRSLbDddlqu2pnfen6Gq+RejSIoiIdAYE2OrqYn6egkKBPaLQhaaLxmDQmhgQM4abQmwjVhMr8Pcq/37vpu9Hd2B1FUdAregI1gYRpw4jSRvl1kgflay7G6mL95v/68ssv9+hxKSkpOBwOl1+jRo1qSKhCCCGEwIuJ3qRJk9i6dSuRkZHExMSwd+9eunbtyq5duxg/fry3Lus1EZoIFJRqK29CzdU3D1gOUOAoqPEaP+8qTyZ7XVaIi2krMmyzBYjSRnFz6M100XfxdSg+paAQpAQxJqh5j/NP0Ce02N7bijl/rnz66aeNGIkQwlO2Lkn1+HBNIUT9eW3o5jfffINOp2PBggXeukSjCteGo1gVwmvo0VNROWI5wuCAwb9uU1WsWNlYWnN1ubxcPenHAwGVPn3zqz3OX8uyC/cZFANXBF1Be0t71pSsabHFWn4T/BuMitHXYXhVvD4eSv1vfUVP6NSpE6qqsnjxYvbu3QtAnz59mDJlCjExMT6OrnkZcuItl9tl4fSWp2IIp6vHlw7rlOGeNfPWvD0hPMlrid7vfvc7nnrqKX7zm9946xKNKkwThgMHYRVLLLjo0QPIdmTz37z/YlftOHC4Pf/m593lw9ASEksIC7e5PCZaG02Qpu4LEwv/oygKfYx9iNHG8G3RtxSpRTUW8WluBpsG11rBtjkI14YTogmh0FHo61AaXXp6OldeeSUHDhxwFu7KycmhZ8+efPfdd8TFxfk4QiGEEMK/eS3RGzVqFE899ZTLfSUlJQQG+k91PCh/Qwa/LppeUqzDYlEwGKq+8S5Tqy6LUBObTWHf3vJEr0+/6nvzPLnos/APMboYpoVNI9OWyTnbOc7aznLWfpYStQSg2SV/Cgox2hgGmQb5OpRGk6hPZI95j6/DaHT3338/U6ZMYf369YSHhwOQm5vLyy+/zJ///Ge++eYbj13rmWee4auvvnJeByAyMpIvv/wSKB958dxzz/HVV1+h0+no2rUr//nPfwgLC/NYDEII0VLI+ndNh9cSvUGDBrF3714uu+yyKvuuuuoqfvrpJ29d2isq1tIzmRyYTHbKyrTk5+mJbt3wpSKOHAqirFRLSKiVjokl1R4n8/NaJoNioKO+Y6VEv8RRwjn7OY5YjnDYchgbtmaR9OnQMSloUosqOBSvj2+RiV5mZiZff/11pW0RERE8//zzDBw40OPXmzt3LqNHj3a579VXX+WLL75g8+bNBAQEMGPGDKZNm+bRZNMXqhuyKYQQIBU+WwKvJXqnTp1i9OjR9O3blw4dOlRaI+ngwYPeuqzXBCqBzlLokVEWTmUGcPqUySOJ3p4LRVguSypwuXZehUhNZIOvJZqHQE0gCZoEEvQJjAkcQ6o1lf3m/ZywnWjSyV5NyagOHeODxvt9Nc266qDrgMZ7dbGaLIvFgqqqVZZScDgcjbrWqt1uZ86cOTz33HMEBAQA8PDDD9OrV69qP6wUwh9cOh9P1M+Wrz5vgb+hRXPhtURv+fLlXH311c7Hqtp033y6Q1EUwjRh5Dhy6NiphFOZARw7HESfvjVX0qxN1jkDpzMD0GhUevdxfa6K8uuytpRwRafo6GroSldDV4odxc71+JpS2f6KBC9CE8HggMHE6eLQKBoq/igoLfb7W6/o6aLvQrgm3NehNKqhQ4cyefJkHn74YTp16gTA0aNHefXVVxk2bFijxfHzzz+TlZVVqRexR48eBAUFsXLlSkn0hBCiGhVDNMeMad4Vsv2Z1xK9q666irffftvlvpkzZ3rrsl4VoY0g15FLpy5FbFgbxYn0QMxmDUajo97nrFhSoVOXIoKCXRduaco9NKJpCdIEMTxgOAn6BL4v+p5SSn0aT0WC11rbmsEBg0nQJbTYhK4mVwRf4esQGt0rr7zCXXfdxbhx4yptv+mmm3jllVc8fr13332XZ555BqvVSufOnXn66afp1KkTqanlpeAvrvSpKAoxMTGkpaV5PA4hvE168hpu46KFOAAMwb4OpUWRuX2e57VEr7okD8rnQ/ijcE04CgpRraxERFrIzTGQdiyQ7j2L6nU+i1nhwP4QAJL6Vd8zqPPef5Noptrr2jMtbBo/5f+EharD4C4dQtmQ+X2unqtHj0Ex0ErbioGmgbTXtZcET1QSFBTExx9/zAsvvMC+ffsA6NWrFx07er7oVFxcHGFhYbz77rtoNBqeffZZBgwYwL59+ygpKZ8XbTRWXsrDaDQ697liNpsxm83OxwUF5b/DrVYrVqvV46/BHYpa+cNCh6Kt5sjKrKpnB6ZVnM+qasBHbdHcVXyPufpes9Xzd+2l56o4T12+nx2qe5XGG2rzN0cAGDApwSvnd1z44qK/oXJbOFxsc5etkdqprtx5LevWrav2eTWN3nNVm6Pi+Jqe56vfp02du+3i0QwiICCAtm3b8v777zNy5EhPnrpJCNeG47jwo925azHbNhs4ejio3onegf0hWC0aIiMtdIhz3fOioBCnj3N7mQYhKhgVI5cHXc5SlqJH70z4dOiI1cUSr48nTh9HgaOAtSVryXHk1PkaCgrBmmDGBo4lShuFUTGiRy9JnXBbx44dncldWVndKha7a8aMGZUeP/XUU8yfP5958+bRv39/gEpJW8XjmqpDz549m1mzZlXZvnz5cp9Vlb40RT4f5d4Q2KVeWt1jRVFXWLrUOycXAKxYsaLqxtgO9TvZpf9XFedpwv+HS5fu986JL+rJy73o30svbosL25c24faps6V76/e0BrZBUVH176ObVft6UE0fRF7Mo4nekCFDnN2ud9xxR6U3e++++64nL+UTFZU3ATp3KWLb5giOpwVhsynodHXrDVHVX4dtXtYvn+reF6uoJOgTOMaxesctxI0hN3KCE7TWtaaNtk2lqpYR2ghuCb2FA5YDbCjdQKla+3DPil68JGMSwwKGoVdcryspRHX+/e9/89xzz3H//ffz9NNPA/Cf//yHr776ik8//ZT27dt77dparZaEhASOHTvG7373OwDOnj1Lhw6/vkE+e/YsiYmJ1Z7j8ccf56GHHnI+LigoIDY2lgkTJhAa2vgFhf6z6miVbYNOLnDruckJni30ZVU1rCjqyvjgw+hHPejRc4tyVquVFStWMH78ePT68t+/5//rmSqrre65u9L5Kh67Y8f3xz0Sg7sqevQuva47PX1bvvrc5fbBv72BLV99joPyJC/CUlSlGEvFMRX/rquCVRl1fk5jCB0TW+sxrnr0Kjp3XO2riaqqFBUVERwcXO0HxNV1HF18rebYuVSbilEktfFoonfxf9Ltt98OwIMPPsi///1vT17GZ8K0vyZ6MW3NBAfbKCrSceJ4AImd3cusK5zKNHE+y4hO56Bn75o/To3XxUuiJxokRBtCX33favdrFA29jL3oaujKrrJdbCvbhg1b+T40zp5s5/k0IUwImkB7nffejIvmbeHChXz99dcMHz7cue0vf/kLvXr14k9/+hNfffWVx671wAMPVLkPnTp1ilGjRtGnTx+io6PZsWMHAwYMAODAgQMUFxdz+eWXV3tOo9FYZbgngF6vd77xbkyqi2GaGjeHh+mV+s8zr+28+vUv/bphzONeuU5LdvH3m85DRe8uPV9dvp81bg4X9pSK2C69bm0xb1y0sNpKmnq9vtI+zYWv6o6pz8+7rpHbyV3uvBZXCdn69eur3ecORam+IFvFuS8t+HLx8b74netr7r5mr1WMTUlJISUlhfDwcEaNGuWtyzSqYCXYWQZdUaBT1/Ku5qOH6z5Zd/uWCAC69SjCZKr+JttG2waTxlSPaIWoO72iJzkgmTvD7uR3wb9jXOA4+hn7kahPJFwTjh49/Yz9uDX0VknyRIMEBQVVSvIqXHHFFeTn53v0Wt98802lNfHeeecdsrKymDFjBlqtlscee4x58+ZRWlrem/3yyy8zefJkevfu7dE4hBAtW/6KdFm7TjQqr1f5cJWhX3nllXz33XfevrTHaRQNIZoQ8h3lb0I6dylmz85wUo8G4XBQ4xp4F8s8aSL1aBCKojJwcG61xykodDJ08kToQtSJUWOkvaY97ZFkTnhHdnY2ZWVlmEyVP8gqLS3l/PnzHr3WCy+8wNy5c3nllVewWCwYjUZWrlxJ9+7dgfJK0EVFRQwfPhydTkeXLl344IMPPBqDEKJ52rhoIQDDrr/Fx5EIUZVHE73Tp0/z4YcfVqqec+bMmSrb/LlkdYQmwpnotY8txWiyU1qq5dRJEx3iai8koKqwfk0UAL36FBAZVX3VHBWVRH0ieGdUjRBC+MxvfvMbRo4cyZ/+9CfnOnqpqam8+eabXHXVVR691s0338zNN99c7X5FUXj66aedcwWFEHWzdUmqr0MQQrjg0UTv0KFDTJ8+vcr2S7f5c0W+cG04Glv5nCWtFhI7F3Pgl1COHg52K9E7nhrIqZMBaHUOhgyrucphiBJChCYCm8PmqfCFEKJJeOGFF9BoNPzxj3/EbDajqiomk4mZM2fy7LPP+jo8IcQFF6/LF33fn30YSVXVJZgXb0+eXH1RJW/YuGih9O6JJsOjc/RSUlJwOBy1fvnznL1wTXilwhSduxQDcPRIELXNg764N69v/3xCQqufKF8xbNOfk2IhhKiOVqvlH//4Bzk5OezZs4eff/6ZnJwcXnjhBbTaplmoQAghhPAnHk30/vWvf3n0uKbo4sqbAPEdS9DpHRQW6Dl3tmoFtosdOhDM+SwjRqOd5CHVz82Di4ZtCiFEM2Yymejduze9e/d2ztd7+eWXfRxVy7UpNdvXIQjh9zYuWuicuyeEL3l06OagQYM8elxTdPFaegB6vUpCxxKOHg7m2OEgYtqYXT7PboeN68p78wYOzsMUUPPEOz162unaeSZoIYRogtasWcPu3bspKCioNI97wYIF/OUvf/FhZC1LoyV3q2aX/y3LLDRpFw/VvFTFkMjGHg7Z1DTXJK6iImjY+HgfR1I3FWt4X7oEg2iEqpvNTagm1LlYdIXOXYs4ejiYo0eCGDbK9by7X/aEkp+nJzDIRr8BeTVeQ0Gho74j2ia6zooQQjTU/fffz9tvv03Pnj0JCQmpNEw9Ly/Pd4EJ75OEr8HO//ctiO3g6zCEaHQVSZ1wjyR6daRVtAQpQRSpRc5tHTuVoNGoZJ83kpujJyKyciVNq0Vh88ZIAIYMy0FvqHkyn4pKZ0NnzwcvhBBNxA8//MCJEyeIjo6usm/GjBk+iEgIUVdSbVOIps1rC6Y3ZxHaiEqPTSYHHeLKF9o9ejioyvG7doRTUqwjLNxK76SCWs9vUkwyP08I0az16NHDZZIH8MorrzRyNP7t1RWHfR2C8LKs19+ocUilaNpkoXThK9KjVw/h2nAybZmVq292LeLE8UB+3hVGbo4Bm03Bblew2xROngwAYNjIbGorJqeg0MfYR4ZtCiGatbvvvpuXXnqJm266iXbt2lUaunnttdfy008/+TA6IYQQ0HTm7cmQzfqRRK8ewjXhleboAXTqXMyqFSoFBXr27dVXeU7rmDK69Siqsv1SKiq9jb09FqsQQjRFkydPBuDRRx/1cSRCCNFwzalAi/Q+Nh+S6NVDmCasSqIXHGJnynWnOXPahE7nQKtV0epUdDoVnVYlNr6U2pbEU1BI0CUQognxYvRCCOF7SUlJzJ07t8p2VVWZOXNm4wckRBPTFIdqFm/dVv6PZlx1szklbJ4kPWr+SRK9egjXhrvc3rFTCR07ldT7vCoqfUx96v18IYTwF08++SQpKSku982ZM6eRoxFCCOHKphO7ADAmhtVypGiKJNGrh0vX0vOUECWEeJ1/rV0ihBD1cd1111W7r7i4uBEj8U+vrjjMzPFdXe4bcuKtRo5GtDTO3saE3/g2EDdV9NINu/4WH0fiv8yp+YAkfP5GEr160Ck6IjQR5DpyPXrePqY+lQoSCCFEc7V27dpq9z3//PNce+21jRiNEP7BmWDJe4Vqpe9ZWumxrSyimiOFaP78KtFbvHgx//jHPzCZTGg0GubNm0evXr18EksXQxe2lW2rMlevvjRo6Gno6ZFzCSFEUzd69Ohq98kHXu6pqVdPCG/65Vz50ihBCb6No6mr6EnsFT7Cx5GIlspvEr2tW7cyffp0duzYQZcuXfjggw+YOHEiBw4cICSk8YuXdNJ3YmvZVo+cS0Ghi74LgZpAj5xPCCGaupSUlEqT+x0OBydPnuTTTz+lZ0/50EsIIYRoKL9ZMH3OnDlceeWVdOnSBYBbb70Vm83GggULfBJPtDaaYCXYI+eSIixCiJbm66+/rvRYo9EQFxfHX//6V956S+aYuUsWS2/Zzv/3LVlM3c+c3L+Xk/v3+joM0UL4TY/ejz/+yNNPP+18rNFoGDBgACtXruS+++5r9HgURaGLoQu7zbsbPHwzQhNBW21bD0UmhBBNX2hoqMvt+fn5HD4syUt9SBEWIWomSye4p6LSpvB/fpHoZWdnU1BQQExMTKXtbdq0Ydu2bT6Kqnz45i5zw38YkoxJMidFCNGijB07tsq2wsJCDh48yO233974AYkqNqVmMzQxytdhCOH3KnrwOvS8zMeRNG8V0wHGjBnj40iaDr9I9EpKytemMxqNlbYbjUbnvouZzWbMZrPzcUFBAQBWqxWr1eqxuFqprTDZTZhVc+0HV0OLls6azjXGVbHPk7E3F9I2NZP2qZm/t4+/xg2QlpZWKaFTFIWQkBD69u0rN+kmYFNqtq9DEEII0UB+kegFBpYXKbk4eat4XLHvYrNnz2bWrFlVti9fvtzl8Q3RhjYNPsdKVrp13IoVKxp8reZK2qZm0j4189f2cfVBl7+49957efTRR30dhnBBkjxRH8Vby0dYBSUP8nEkoq4qhmoOjevn40iEp/lFohcVFUVYWBhnz56ttP3MmTMkJiZWOf7xxx/noYcecj4uKCggNjaWCRMmVDsvpL7SreksLV5a+4EuaNFya+ittVbbtFqtrFixgvHjx6PX6+t1reZK2qZm0j418/f2qRit4I8kyROsml3+95jHK//7IvN2zwPgj33/2JiRiQsqllHwZ5mHytc8bt+t8dbTCzvlelHx5lCERRZO9y9+kehB+XyOHTt2OB+rqsrOnTt54oknqhxrNBqrDPME0Ov1Hn8zl6BLQGvWYsNWp+cpKPQz9SPM6P4Pijfiby6kbWom7VMzf20ff4xZCCFE8yGJX9PmN4neY489xvjx4zl69CidO3dm4cKFaLVapk+f7tO4dIqORH0iR6xH6lR9U4+eAcYBXoxMCCGEEP5GlkrwLl/08InGdfEarS19zrffJHrJycksWLCAqVOnEhAQgEajYdmyZT5ZLP1SnQydOGytWznw5IBkjJqqvY5CCCFESzQv72eQoZpC+IWKnjzRtPlNogdwzTXXcM011/g6jCoS9Alo0ODA4dbxAUoAScYkL0clhBBCNEyjLLFQMT+vharowYu+788+jqTuKgqw+IOKnrxLH/uqZ+/S+XpNYekFWT+v+fGrRK+pMigGYnWxnLCdcGv45rCAYegUaXohhBCiMVQUdQHpLXRHQ4qwNHb1zfQ95QXx4pN+0yjXE8KfSLbhIZ0NnUm3pdd6XJgmjJ6Gno0QkRBCCCH8hczNE0J4miR6HpKoT+RHfqz1uOEBw9EomkaISAghhGi4Rhm+WSFtXfnfuRfm/0RUX8nPH5de8Odhmk1RRW/epf/2leqWVRC+U1GYpaIoy6WPmztJ9DwkUBNIO207TtlPudyvoBCljaKzvnMjRyaEEKK5G3LiLV+H4NK8vJ8B+GN4n1qPcbktYmTt13AxLNOdJNBTxwj31XdYZ1MfnikJXtN3cSXOlkQSPQ/qbOjMqVLXiZ6KyoiAESiK0shRCSGEaC5eXXGYmeO7+joMv3FxEljTtsbWVIdp+ssC6d7ovWsKxVm8WZClotDK0Lh+XruGaHok0fOgroauHLYcxoEDLVr0ih6dokOLlta61sTp4nwdohBCCD/36oq6LefjCd4YvumqJ6/aY90splKfJK4lF2rxl8TOmy6txtncXVxZU5K+5k8SPQ8K0gRxY+iNvg5DCCGEaFIuTupqGsbZVDSFXj9/19jVNxtLxTDN/HbeW0euYumFprDkgrsq1tUzJsow1qZEEj0hhBBC1MpTvXp16ckjbR10rDxPz5tJmKd6BOftnkfCoi0MalOe5DSF4isVvXe9W2f5OBLX3JmH1xQKrlRoDvPyZN285k8SPSGEEOKCxYsX849//AOTyYRGo2HevHn06tXL12G1bBWVOCsSvksfN4KWPLzTG2rq7bs44WtKiZ0vNMVF1WsjPXtNiyR6QgghBLB161amT5/Ojh076NKlCx988AETJ07kwIEDhISE+CyuigIsvpibVxcVPXUKOtppuvs4msaXsGgLWesc5f8+s83H0TQdFUmdv/PXHjzptWvZJNETQgghgDlz5nDllVfSpUsXAG699Vb++te/smDBAu677z4fR9e0bErNBqhxKOc7+b80VjiN2stX0/DObdUkeE21yqaoqqI4S1sfVd+szcXz9/y1kmZFr5+hY2j54+MFKGrj9gJevNxCc15jTxI9IYQQAvjxxx95+umnnY81Gg0DBgxg5cqVTTbR88X6eY8f3wIauNrR2a2ET1ROACvm7fmKVNp0j/KLAfrD6SN54FBRzAYAQlsF+Cymk/v3sq80E4CME7Zqj2uqvXgVCV5T484ae5ce4y/JYItI9FRVBaCgoMDHkdSP1WqlpKSEgoIC9Hq9r8NpUqRtaibtUzN/b5+K32kVv+NE/WVnZ1NQUEBMTEyl7W3atGHbtqq9NGazGbPZ7Hycn1/+BiYnJwer1drgeN5em8pdoxJ5e20q/U8tZPlhMLe7hf6nFlY6rrDBV4IVynEAxqsJVbZVqNi3fP9ZbBeWg/2So879m05lAHA634wGPeERJRzPLcOBlbZhRg9ECexbU/lxQdmv/y5xVN2WsaX879jBVc9Vw77Yb8vfJGdcVbWXpGKfK8Uutq2uuM5FcsvKKj3ek7Wn2nMmRSe5PE7V6LBHRbLu5HYUh63S8Yeyy5PublHZlc5VZC2p9jredibnAABtIntUesySHdU+J+/EfAAMbVrX6VqWM+eqPK+tpTy5PW2ovhDNpccUWksoKbERURiMRoVCLrSfufx7rTCn/P8xJNJUYzzuHgewf9fmavcdKjtT6XFJZvqvz8s207ZLd3ac2lfrNRpL8f7av98sRRpKSkqwlqkoKliLtI0QWe2WLFlS6zHZ2b/+fG3cuBGAYcOGVXu8O8fURWFh+W//2u7/itoC3iGcPHmS2NhYX4chhBBekZGRQYcOHXwdhl/LyMggLi6Ozz//nOuvv965/Y9//CPLly/n6NGjlY5/5plnmDVrVmOHKYQQQjjVdv9vET167dq1IyMjg5CQEBRF8XU4dVZQUEBsbCwZGRmEhob6OpwmRdqmZtI+NfP39lFVlcLCQtq1a+frUPxeYGAgQKVeuorHFfsu9vjjj/PQQw85HzscDnJycoiKivLL+4wn+fvPlT+QNvY+aWPvkzauP3fv/y0i0dNoNM3i0+7Q0FD5QaiGtE3NpH1q5s/tExbmn5XgmpqoqCjCwsI4e/Zspe1nzpwhMTGxyvFGoxGjsfKQxPDwcG+G6Hf8+efKX0gbe5+0sfdJG9ePO/d/TSPEIYQQQjR5Y8eOZceOX+cMqarKzp07ufzyy30YlRBCCFE/kugJIYQQwGOPPcZ3333nnI+3cOFCtFot06dP93FkQgghRN21iKGb/s5oNPL3v/+9yjAhIW1TG2mfmkn7iIslJyezYMECpk6dSkBAABqNhmXLlvl0sXR/JD9X3idt7H3Sxt4nbex9LaLqphBCCCGEEEK0JDJ0UwghhBBCCCGaGUn0hBBCCCGEEKKZkURPCCGEEEIIIZoZSfSaiMWLFzNo0CBGjhxJSkoK+/btq/bYr7/+mkmTJjFu3DhGjBhB//79+eSTTxox2sZVl7a52BtvvIGiKKxevdq7AfpYXdrnmWeeoW/fvowePdr5de211zZitI2vrt8/qampXHfddYwZM4ZevXoxZMgQtm/f3kjRCuEf5J7lfXLv8z65f3qf3IN9TBU+t2XLFjUkJEQ9fPiwqqqq+v7776vt27dXCwoKXB4/ceJE9f3333c+/uabb1RFUdQ9e/Y0SryNqa5tUyEzM1ONi4tTAXXVqlWNEKlv1LV9/v73vzfr9rhUXdvn3LlzakJCgrpmzRpVVVXVarWqY8aMUT/55JNGi1mIpk7uWd4n9z7vk/un98k92Pck0WsCrrnmGnXq1KnOx3a7XY2JiVFfe+01l8dv375dtVqtzscFBQUqoC5evNjboTa6urZNhWuvvVadP39+s7/Z1bV9WtqNqq7t85e//EW96aabKm07cuSImpmZ6dU4hfAncs/yPrn3eZ/cP71P7sG+J0M3m4Aff/yRgQMHOh9rNBoGDBjAypUrXR4/YMAAdLryJRCtVisvvfQSPXv25PLLL2+UeBtTXdsGYMmSJej1eiZOnNgYIfpUfdqnJalr+3z55ZeMGjWq0rbOnTvTrl07r8YphD+Re5b3yb3P++T+6X1yD/Y9SfR8LDs7m4KCAmJiYiptb9OmDWlpaTU+909/+hPR0dGsXLmSZcuWERwc7M1QG1192qa4uJgnnniCV199tTFC9Kn6fu+8++67jB49muHDhzN9+nSOHTvm7VB9oq7tU1xcTFpaGna7nVtuuYXhw4czceJEvv/++8YKWYgmT+5Z3if3Pu+T+6f3yT24aZBEz8dKSkoAMBqNlbYbjUbnvur85z//4fz5885fOqdPn/ZanL5Qn7Z56qmnuPfee2nbtq3X4/O1+rRPXFwc/fr1Y+XKlaxbt46OHTsyYMAAMjMzvR5vY6tr++Tl5QHl30N//etf2bBhA3/961+ZPHkyK1as8Hq8QvgDuWd5n9z7vE/un94n9+CmQRI9HwsMDATAbDZX2m42m537aqLT6XjuuedwOBy88sorXonRV+raNjt37mTLli3ce++9jRKfr9Xne2fGjBnMnDkTnU6HRqPhqaeewmQyMW/ePK/H29jq2j5arRaAyZMnk5SUBMC4ceMYO3Ys//73v70crRD+Qe5Z3if3Pu+T+6f3yT24adD5OoCWLioqirCwMM6ePVtp+5kzZ0hMTHT5HIvFgsFgcD7WaDR07dqV/fv3ezXWxlbXtvnuu+8oLS1l7NixAJSVlQHw4IMPEh4ezjvvvEPnzp29H3gjqc/3zqW0Wi0JCQnNcvhJXdsnOjoao9FI+/btK22Pj49n48aNXo1VCH8h9yzvk3uf98n90/vkHtw0SI9eEzB27Fh27NjhfKyqKjt37qx2onr//v2rbDt9+nSznKxal7Z56qmn2LlzJ6tXr2b16tV8+umnAMydO5fVq1c3yxtdXb93HnjggSrbTp06RVxcnNdi9KW6tI9Wq3U5nOzs2bPNtn2EqA+5Z3mf3Pu8T+6f3if34CbAdwU/RYUtW7aooaGh6pEjR1RVVdUPP/yw0jojw4cPV//2t785j1cURf3222+djz/88ENVo9Go69ata9zAG0Fd2+ZiaWlpzb7EdF3bJyEhQf3666+dj99++23VZDKpBw4caNzAG0ld22fZsmVqRESEmp6erqqqqu7bt081Go3qkiVLGj94IZoouWd5n9z7vE/un94n92Dfk6GbTUBycjILFixg6tSpBAQEoNFoWLZsGSEhIUD5hNaLxzj/+9//5oUXXmD27Nk4HA4UReGbb75hxIgRvnoJXlPXtqnw4IMPsnnzZue/u3fv7vyUszmpa/u88MILzJ07l1deeQWLxYLRaGTlypV0797dVy/Bq+raPhMmTOC1115jypQpBAcHY7PZeP/997nqqqt89RKEaHLknuV9cu/zPrl/ep/cg31PUVVV9XUQQgghhBBCCCE8R+boCSGEEEIIIUQzI4meEEIIIYQQQjQzkugJIYQQQgghRDMjiZ4QQgghhBBCNDOS6AkhhBBCCCFEMyOJnhBCCCGEEEI0M5LoCSGEEEIIIUQzI4meEMKlzMxMr57farWSlZXl1WsIIYQQjUHumaIpkkRPVGvr1q2MHj0aRVHo3r07zz77rK9Dcstvf/tbXn31VY+c68knnyQhIYHRo0c7t2VmZhITE+P2L/XVq1ezYMECj8TTWN58803++c9/ev06t9xyCxs3bvT6dYQQwtvknin3TG+Te6aoK52vAxBNV3JyMqtXr0ZRFB577DFuv/12X4fklo4dO9KmTRuPnOv5559Hp9OxevVq5zaTyUS3bt0ICAhw6xyrV69m9erVftN+69ev53//+x9btmzx6nX0ej3vvvsuo0ePZtu2bURERHj1ekII4U1yz5R7pjfJPVPUh/ToiWbn1Vdf5aabbvLa+aOioli7di2RkZFeu4YvPfzwwzz44INotVqvX6tDhw6MHj2al19+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gridspec\n", + "\n", + "# Create a 3-row x 9-column grid\n", + "gs = gridspec.GridSpec(nrows=3, ncols=9)\n", + "\n", + "# Create the first subplot of size 4:3 \n", + "plt.figure(figsize=(9, 3))\n", + "ax1 = plt.subplot(gs[:, 0:4])\n", + "ax1.plot(bin_center_i, f_i)\n", + "ax1.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", + "ax1.set_xlabel('Ion-pair distance (nm)')\n", + "ax1.set_ylabel('Free energy (kT)')\n", + "ax1.grid()\n", + "plt.text(-0.1, 1.15, 'A', transform=ax1.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", + "\n", + "# Create the second subplot of size 8:3\n", + "ax2 = plt.subplot(gs[:, 4:9])\n", + "for i in range(8):\n", + " ax2.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", + "ax2.set_xlabel('Ion-pair distance (nm)')\n", + "ax2.set_ylabel('Number of \\nuncorrelated samples')\n", + "ax2.grid()\n", + "plt.text(-0.1, 1.15, 'B', transform=ax2.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", + "\n", + "# setup_coordinates(ax1, color='white')\n", + "# setup_coordinates(ax2, color='white')\n", + "plt.tight_layout(w_pad=2)\n", + "plt.savefig('results/f_profile.png', transparent=True, dpi=600)" + ] + }, + { + "cell_type": "markdown", + "id": "a1f35e97", + "metadata": {}, + "source": [ + "## 5. Additional exercises\n", + "In this section, we explore umbrella sampling simulations with different force constants to see how force constants change the spread of the CV distributions and the resulting free energy profile. For a more detailed description of the exercise, please refer to Exercise 3 in the article. " + ] + }, + { + "cell_type": "markdown", + "id": "c8cd1947", + "metadata": {}, + "source": [ + "### 5-1. Setting $k$ to $1000$ $\\mathrm{kJ/mol/nm^2}$" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "eeeb3661", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", + "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", + "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", + "# no need to modify k since k=1000 was also used in the pulling simulation" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "dc27a600-86c5-451d-b121-33e01fd3ee1a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "72\n" + ] + } + ], + "source": [ + "%%bash\n", + "nproc" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "fdb06134", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", - "Calculating fourier grid dimensions for X Y Z\n", - "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "This run will generate roughly 9 Mb of data\n", - "Setting the LD random seed to -1140998174\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_0\n", + "Command line:\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_0.gro -r NaCl_0.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -136126657\n", "\n", - "Generated 330891 of the 330891 non-bonded parameter combinations\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", @@ -3044,11 +3322,28 @@ "\n", "turning H bonds into constraints...\n", "\n", - "Setting gen_seed to -151765053\n", + "Setting gen_seed to -566272289\n", "\n", "Velocities were taken from a Maxwell distribution at 300 K\n", - "\n", - "The largest distance between excluded atoms is 0.152 nm\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pull group 1 'NA' has 1 atoms\n", + "Pull group 2 'CL' has 1 atoms\n", + "Number of degrees of freedom in T-Coupling group System is 645.00\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", @@ -3060,7 +3355,7 @@ "Calculating fourier grid dimensions for X Y Z\n", "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n", "\n", - "Estimate for the relative computational load of the PME mesh part: 0.51\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", "This run will generate roughly 9 Mb of data\n" ] @@ -3069,91 +3364,6 @@ "name": "stderr", "output_type": "stream", "text": [ - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_0.gro -r NaCl_0.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.249 nm 0.249 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", - "\n", - "GROMACS reminds you: \"You Dirty Switch, You're On Again\" (The Breeders)\n", - "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_0\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", - "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", - "\n", - "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.2#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.2#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.2#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.2#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 38.362 38.363 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1126.102 0.021\n", - "\n", - "GROMACS reminds you: \"Step On the Brakes\" (2 Unlimited)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_1.gro -r NaCl_1.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", "\n", "NOTE 1 [file NaCl_umbrella.mdp]:\n", " Removing center of mass motion in the presence of position restraints\n", @@ -3162,35 +3372,64 @@ "\n", "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.299 nm 0.299 nm\n", + " 2 1 0 0.251 nm 0.251 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "There was 1 note\n", "\n", + "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", "\n", + "GROMACS reminds you: \"Since the mathematicians have invaded the theory of relativity I do not understand it myself any more.\" (Albert Einstein)\n", "\n", - "There were 2 notes\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"Step On the Brakes\" (2 Unlimited)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_1\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_0\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", "\n", "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "\n", "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", "\n", @@ -3206,97 +3445,114 @@ "\n", "Writing final coordinates.\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", + "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 38.528 38.528 100.0\n", + " Time: 228.297 228.297 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1121.262 0.021\n", - "\n", - "GROMACS reminds you: \"Years of calculations and the stress, My science is waiting, nearly complete\" (Midlake)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_2.gro -r NaCl_2.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.349 nm 0.349 nm\n", + "Performance: 189.228 0.127\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "GROMACS reminds you: \"Science and everyday life cannot and should not be separated.\" (Rosalind Franklin)\n", "\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", - "\n", - "GROMACS reminds you: \"You Can Always Go On Ricky Lake\" (Offspring)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_2\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_1\n", "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_1.gro -r NaCl_1.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to 2071198463\n", "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "Using 1 MPI process\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.2#\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.2#\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.2#\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.2#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", "\n", - "Writing final coordinates.\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", + "Setting gen_seed to -1904345091\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 39.161 39.161 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1103.144 0.022\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", - "GROMACS reminds you: \"Everybody is Smashing Things Down\" (Offspring)\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_3.gro -r NaCl_3.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -3305,38 +3561,83 @@ " Removing center of mass motion in the presence of position restraints\n", " might cause artifacts. When you are using position restraints to\n", " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.399 nm 0.399 nm\n", + " 2 1 0 0.301 nm 0.301 nm\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "There was 1 note\n", "\n", + "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", "\n", + "GROMACS reminds you: \"Schrödinger's backup: The condition of any backup is unknown until a restore is attempted.\" (Anonymous)\n", "\n", - "There were 2 notes\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"But I always say, one's company, two's a crowd, and three's a party.\" (Andy Warhol)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_3\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_1\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", "\n", "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "\n", "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", "\n", @@ -3348,101 +3649,145 @@ "\n", "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.2#\n", "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "250000 steps, 500.0 ps.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Sending Ctrl-C to processes as requested\n", + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Press Ctrl-C again to force abort\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", - "Writing final coordinates.\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", + "Received the INT signal, stopping within 25 steps\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error while terminating subprocess (pid=7385): \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 35.217 35.217 100.0\n", + " Time: 183.851 183.851 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1226.685 0.020\n", - "\n", - "GROMACS reminds you: \"Nobody ever complained a seminar was too easy to understand.\" (Ken Dill)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_4.gro -r NaCl_4.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.450 nm 0.450 nm\n", + "Performance: 185.324 0.130\n", "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "GROMACS reminds you: \"I know poetry is not dead, nor genius lost; nor has Mammon gained power over either, to bind or slay; they will both assert their existence, their presence, their liberty and strength again one day.\" (Jane Eyre in Jane Eyre by Charlotte Bronte)\n", "\n", + " :-) GROMACS - gmx grompp, 2021.4-plumed-2.8.0 (-:\n", "\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "There were 2 notes\n", - "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", - "\n", - "GROMACS reminds you: \"Martin [Karplus] had a green laser, Arieh [Warshel] had a red laser, I have a *blue* laser\" (Michael Levitt, Nobel lecture 2013)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_4\n", + "GROMACS: gmx grompp, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_2\n", "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", - "\n", + " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_2.gro -r NaCl_2.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting the LD random seed to -1074380931\n", "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + "Generated 330891 of the 330891 non-bonded parameter combinations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating 1-4 interactions: fudge = 0.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "Using 1 MPI process\n", + "Generated 330891 of the 330891 1-4 parameter combinations\n", "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", + "Excluding 2 bonded neighbours molecule type 'SOL'\n", "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.2#\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.2#\n", + "Excluding 1 bonded neighbours molecule type 'NA'\n", "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.2#\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.2#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "Excluding 1 bonded neighbours molecule type 'CL'\n", "\n", - "Writing final coordinates.\n", + "turning H bonds into constraints...\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", + "Setting gen_seed to 2120888317\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 39.000 39.000 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1107.691 0.022\n", + "Velocities were taken from a Maxwell distribution at 300 K\n", + "Analysing residue names:\n", + "There are: 107 Water residues\n", + "There are: 2 Ion residues\n", + "Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...\n", "\n", - "GROMACS reminds you: \"Computer dating is fine, if you are a computer.\" (Rita May Brown)\n", + "Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 300 K\n", "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Calculated rlist for 1x1 atom pair-list as 0.638 nm, buffer size 0.038 nm\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_5.gro -r NaCl_5.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", + "Set rlist, assuming 4x4 atom pair-list, to 0.607 nm, buffer size 0.007 nm\n", "\n", - "Generating 1-4 interactions: fudge = 0.5\n", + "Note that mdrun will redetermine rlist based on the actual pair-list setup\n", + "Calculating fourier grid dimensions for X Y Z\n", + "Using a fourier grid of 14x14x14, spacing 0.106 0.106 0.106\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Pull group 1 'NA' has 1 atoms\n", "Pull group 2 'CL' has 1 atoms\n", "Number of degrees of freedom in T-Coupling group System is 645.00\n", @@ -3454,35 +3799,80 @@ "\n", "Pull group natoms pbc atom distance at start reference at t=0\n", " 1 1 0\n", - " 2 1 0 0.500 nm 0.500 nm\n", + " 2 1 0 0.350 nm 0.350 nm\n", + "\n", + "There was 1 note\n", + "\n", + "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", + "Estimate for the relative computational load of the PME mesh part: 0.42\n", "\n", + "This run will generate roughly 9 Mb of data\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", + "GROMACS reminds you: \"I'm Looking for a New Simulation\" (Stone Temple Pilots)\n", "\n", - "There were 2 notes\n", + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.2#\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"I think it's very important to get more women into computing. My slogan is: Computing is too important to be left to men.\" (Karen Jones)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_5\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_2\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", "\n", "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", + "Using 1 OpenMP thread \n", + "\n", + "\n", + "NOTE: Thread affinity was not set.\n", "\n", "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.2#\n", "\n", @@ -3494,171 +3884,389 @@ "\n", "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.2#\n", "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "250000 steps, 500.0 ps.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Sending Ctrl-C to processes as requested\n", + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Press Ctrl-C again to force abort\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", - "Writing final coordinates.\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.2#\n", + "Received the INT signal, stopping within 25 steps\n", + "\n", "\n", " Core t (s) Wall t (s) (%)\n", - " Time: 37.460 37.460 100.0\n", + " Time: 418.393 418.393 100.0\n", " (ns/day) (hour/ns)\n", - "Performance: 1153.234 0.021\n", - "\n", - "GROMACS reminds you: \"There are three kinds of men. The one that learns by reading. The few who learn by observation. The rest of them have to pee on the electric fence for themselves.\" (Will Rogers)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_6\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_6.gro -r NaCl_6.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", + "Performance: 71.007 0.338\n", "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.549 nm 0.549 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", - "\n", - "\n", - "There were 2 notes\n", + "GROMACS reminds you: \"The time for theory is over\" (J. Hajdu)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Sending Ctrl-C to processes as requested\n", + "[mpiexec@jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9] Press Ctrl-C again to force abort\n", + "\n", + "===================================================================================\n", + "= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES\n", + "= PID 10523 RUNNING AT jupyter-wehs7661-2denhanc-2dpling-5ftutorials-2dgvzh0cc9\n", + "= EXIT CODE: 2\n", + "= CLEANING UP REMAINING PROCESSES\n", + "= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES\n", + "===================================================================================\n", + "YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Interrupt (signal 2)\n", + "This typically refers to a problem with your application.\n", + "Please see the FAQ page for debugging suggestions\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "GROMACS reminds you: \"There are three kinds of men. The one that learns by reading. The few who learn by observation. The rest of them have to pee on the electric fence for themselves.\" (Will Rogers)\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_6\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1/sim_3\n", "Command line:\n", " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", "\n", "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.3#\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", "\n", "Using 1 MPI process\n", - "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", - "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", - "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", - "\n", - "Writing final coordinates.\n", - "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", - "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 35.647 35.648 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1211.866 0.020\n", - "\n", - "GROMACS reminds you: \"Input, output, electricity\" (Joni Mitchell)\n", - "\n", - " :-) GROMACS - gmx grompp, 2022.5-dev-20230428-fdf57150ad (-:\n", - "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_7\n", - "Command line:\n", - " gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_7.gro -r NaCl_7.gro -p NaCl_US.top -o NaCl_US.tpr -n NaCl.ndx -maxwarn 1\n", - "\n", - "Generating 1-4 interactions: fudge = 0.5\n", - "Pull group 1 'NA' has 1 atoms\n", - "Pull group 2 'CL' has 1 atoms\n", - "Number of degrees of freedom in T-Coupling group System is 645.00\n", - "\n", - "NOTE 1 [file NaCl_umbrella.mdp]:\n", - " Removing center of mass motion in the presence of position restraints\n", - " might cause artifacts. When you are using position restraints to\n", - " equilibrate a macro-molecule, the artifacts are usually negligible.\n", - "\n", - "Pull group natoms pbc atom distance at start reference at t=0\n", - " 1 1 0\n", - " 2 1 0 0.600 nm 0.600 nm\n", - "\n", - "NOTE 2 [file NaCl_umbrella.mdp]:\n", - " The optimal PME mesh load for parallel simulations is below 0.5\n", - " and for highly parallel simulations between 0.25 and 0.33,\n", - " for higher performance, increase the cut-off and the PME grid spacing.\n", - "\n", + "Using 1 OpenMP thread \n", "\n", "\n", - "There were 2 notes\n", + "NOTE: Thread affinity was not set.\n", "\n", - "Back Off! I just backed up NaCl_US.tpr to ./#NaCl_US.tpr.1#\n", + "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.3#\n", "\n", - "GROMACS reminds you: \"Input, output, electricity\" (Joni Mitchell)\n", + "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.3#\n", "\n", - " :-) GROMACS - gmx mdrun, 2022.5-dev-20230428-fdf57150ad (-:\n", + "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.3#\n", "\n", - "Executable: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/gmx_mpi\n", - "Data prefix: /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi\n", - "Working dir: /Users/Wei-TseHsu/Documents/Life_in_CU_Bouler/Research_in_Shirts_Lab/advanced_sampling_tutorials/Chapter_1/sim_7\n", - "Command line:\n", - " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.3#\n", "\n", + "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.3#\n", + "starting mdrun 'NaCl in water'\n", + "250000 steps, 500.0 ps.\n" + ] + } + ], + "source": [ + "%%bash\n", + "for i in {0..5} # We only run simulations for 6 windows here, since the centers of the last two windows are too close to the upper bound. \n", + "do\n", + " cp pull/NaCl_US.top sim_${i}/. # Use the same top file as in the pulling simulation\n", + " cp pull/Na_posres.itp sim_${i}/. # Copy over the itp file for position restraint\n", + " cp NaCl_umbrella.mdp sim_${i}/. # All simulations use the same .mdp file, NaCl_umbrella.mdp\n", + " cd sim_${i}\n", + " mpirun -np 1 gmx_mpi grompp -f NaCl_umbrella.mdp -c NaCl_${i}.gro -r NaCl_${i}.gro -p NaCl_US.top -o NaCl_US.tpr -maxwarn 1 # Generate the tpr\n", + " # mpirun -np 1 gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -ntomp 1\n", + " cd ../\n", + "done" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a816b23-c7d2-46da-b9c8-c6baa3638fef", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " :-) GROMACS - gmx mdrun, 2021.4-plumed-2.8.0 (-:\n", "\n", - "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.1#\n", - "Reading file NaCl_US.tpr, VERSION 2022.5-dev-20230428-fdf57150ad (single precision)\n", - "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n", + " GROMACS is written by:\n", + " Andrey Alekseenko Emile Apol Rossen Apostolov \n", + " Paul Bauer Herman J.C. Berendsen Par Bjelkmar \n", + " Christian Blau Viacheslav Bolnykh Kevin Boyd \n", + " Aldert van Buuren Rudi van Drunen Anton Feenstra \n", + " Gilles Gouaillardet Alan Gray Gerrit Groenhof \n", + " Anca Hamuraru Vincent Hindriksen M. Eric Irrgang \n", + " Aleksei Iupinov Christoph Junghans Joe Jordan \n", + " Dimitrios Karkoulis Peter Kasson Jiri Kraus \n", + " Carsten Kutzner Per Larsson Justin A. Lemkul \n", + " Viveca Lindahl Magnus Lundborg Erik Marklund \n", + " Pascal Merz Pieter Meulenhoff Teemu Murtola \n", + " Szilard Pall Sander Pronk Roland Schulz \n", + " Michael Shirts Alexey Shvetsov Alfons Sijbers \n", + " Peter Tieleman Jon Vincent Teemu Virolainen \n", + " Christian Wennberg Maarten Wolf Artem Zhmurov \n", + " and the project leaders:\n", + " Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel\n", "\n", - "Using 1 MPI process\n", + "Copyright (c) 1991-2000, University of Groningen, The Netherlands.\n", + "Copyright (c) 2001-2019, The GROMACS development team at\n", + "Uppsala University, Stockholm University and\n", + "the Royal Institute of Technology, Sweden.\n", + "check out http://www.gromacs.org for more information.\n", "\n", - "Back Off! I just backed up pullx.xvg to ./#pullx.xvg.1#\n", + "GROMACS is free software; you can redistribute it and/or modify it\n", + "under the terms of the GNU Lesser General Public License\n", + "as published by the Free Software Foundation; either version 2.1\n", + "of the License, or (at your option) any later version.\n", "\n", - "Back Off! I just backed up pullf.xvg to ./#pullf.xvg.1#\n", + "GROMACS: gmx mdrun, version 2021.4-plumed-2.8.0\n", + "Executable: /srv/conda/envs/notebook/bin.SSE2/gmx_mpi\n", + "Data prefix: /srv/conda/envs/notebook\n", + "Working dir: /home/jovyan/Chapter_1\n", + "Command line:\n", + " gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -multidir sim_0 sim_1 sim_2 sim_3 sim_4 sim_5 -ntomp 12\n", "\n", - "Back Off! I just backed up NaCl_US.xtc to ./#NaCl_US.xtc.1#\n", "\n", - "Back Off! I just backed up NaCl_US.trr to ./#NaCl_US.trr.1#\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.2#\n", "\n", - "Back Off! I just backed up NaCl_US.edr to ./#NaCl_US.edr.1#\n", - "starting mdrun 'NaCl in water'\n", - "250000 steps, 500.0 ps.\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.4#\n", "\n", - "Writing final coordinates.\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.3#\n", "\n", - "Back Off! I just backed up NaCl_US.gro to ./#NaCl_US.gro.1#\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.4#\n", "\n", - " Core t (s) Wall t (s) (%)\n", - " Time: 37.447 37.447 100.0\n", - " (ns/day) (hour/ns)\n", - "Performance: 1153.636 0.021\n", + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.4#\n", "\n", - "GROMACS reminds you: \"I don't know how many of you have ever met Dijkstra, but you probably know that arrogance in computer science is measured in nano-Dijkstras.\" (Alan Kay)\n", - "\n" + "Back Off! I just backed up NaCl_US.log to ./#NaCl_US.log.4#\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Compiled SIMD: SSE2, but for this host/run AVX_512 might be better (see log).\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Reading file NaCl_US.tpr, VERSION 2021.4-plumed-2.8.0 (single precision)\n", + "Changing nstlist from 10 to 25, rlist from 0.607 to 0.67\n" + ] + } + ], + "source": [ + "%%bash \n", + "mpirun -np 6 gmx_mpi mdrun -deffnm NaCl_US -pf pullf.xvg -px pullx.xvg -multidir sim_{0..5} -ntomp 12" + ] + }, + { + "cell_type": "markdown", + "id": "4d6e5512", + "metadata": {}, + "source": [ + "Notably, since the spread of the distributions will be wider given smaller force constants, here we only consider 6 windows centered from 0.25 up to 0.55 nm so that it is less likely to have configurations with an ion-pair distance exceeding half of the box length. \n", + "\n", + "In the code below, we will need to change the following parameters:\n", + "- The value of `K` (line 8)\n", + "- The value of `d_max` (line 12)\n", + "- The value of `nbins` (line 13)\n", + "- The values of `K_k` (line 14)\n", + "\n", + "Note that we use a smaller number of bins because some regions may have very few samples. Using too many bins will possibly lead to bins with 0 samples. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "3f291e6f", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "could not broadcast input array from shape (3944,) into shape (5001,)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[30], line 22\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# Step 2: Read in and subsample the timeseries\u001b[39;00m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(K):\n\u001b[0;32m---> 22\u001b[0m \u001b[43md_kn\u001b[49m\u001b[43m[\u001b[49m\u001b[43mk\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mtranspose(np\u001b[38;5;241m.\u001b[39mloadtxt(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msim_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mk\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/pullx.xvg\u001b[39m\u001b[38;5;124m'\u001b[39m, comments\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m@\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m#\u001b[39m\u001b[38;5;124m'\u001b[39m]))[\u001b[38;5;241m1\u001b[39m]\n\u001b[1;32m 23\u001b[0m N_k[k] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(d_kn[k])\n\u001b[1;32m 24\u001b[0m d_temp \u001b[38;5;241m=\u001b[39m d_kn[k, \u001b[38;5;241m0\u001b[39m:N_k[k]]\n", + "\u001b[0;31mValueError\u001b[0m: could not broadcast input array from shape (3944,) into shape (5001,)" ] } ], + "source": [ + "import time\n", + "import pymbar\n", + "from pymbar import timeseries\n", + "import random\n", + "import scipy.stats\n", + "\n", + "# Step 1: Setting up\n", + "K = 6 # number of umbrellas\n", + "N_max = 5001 # number of data points in each timeseries of ion-pair distance\n", + "kT = 1.381e-23 * 6.022e23 / 1000 * 300 # 1 kT converted to kJ/mol at 300 K\n", + "beta_k = np.ones(K) / kT # inverse temperature of simulations (in 1/(kJ/mol)) \n", + "d_min, d_max = 0.25, 0.55 # minimum and maximum of the CV for plotting the FES\n", + "nbins = 15 # number of bins for FES\n", + "K_k = np.ones(K) * 1000 # spring constant (in kJ/mol/nm**2) for different simulations\n", + "N_k, g_k = np.zeros(K, int), np.zeros(K) # number of samples and statistical inefficiency of different simulations\n", + "d_kn = np.zeros([K, N_max]) # d_kn[k,n] is the ion-pair distance (in nm) for snapshot n from umbrella simulation k\n", + "u_kn = np.zeros([K, N_max]) # u_kn[k,n] is the reduced potential energy without umbrella restraints of snapshot n of umbrella simulation k\n", + "uncorrelated_samples = [] # Uncorrelated samples of different simulations\n", + "\n", + "# Step 2: Read in and subsample the timeseries\n", + "for k in range(K):\n", + " d_kn[k] = np.transpose(np.loadtxt(f'sim_{k}/pullx.xvg', comments=['@', '#']))[1]\n", + " N_k[k] = len(d_kn[k])\n", + " d_temp = d_kn[k, 0:N_k[k]]\n", + " g_k[k] = timeseries.statistical_inefficiency(d_temp) \n", + " indices = timeseries.subsample_correlated_data(d_temp, g=g_k[k]) # indices of the uncorrelated samples\n", + " \n", + " # Update u_kn and d_kn with uncorrelated samples\n", + " N_k[k] = len(indices) # At this point, N_k contains the number of uncorrelated samples for each state k \n", + " u_kn[k, 0:N_k[k]] = u_kn[k, indices]\n", + " d_kn[k, 0:N_k[k]] = d_kn[k, indices]\n", + " uncorrelated_samples.append(d_kn[k, indices])\n", + "\n", + "d0_k = np.array([d_kn[i][0] for i in range(K)]) \n", + "N_max = np.max(N_k) # shorten the array size\n", + "u_kln = np.zeros([K, K, N_max]) # u_kln[k,l,n] is the reduced potential energy of snapshot n from umbrella simulation k evaluated at umbrella l\n", + "u_kn -= u_kn.min() # shift the minimum of the FES to 0\n", + "\n", + "# Step 3: Bin the data\n", + "bin_center_i = np.zeros([nbins])\n", + "bin_edges = np.linspace(d_min, d_max, nbins + 1)\n", + "for i in range(nbins):\n", + " bin_center_i[i] = 0.5 * (bin_edges[i] + bin_edges[i + 1])\n", + " \n", + "# Step 4: Evaluate reduced energies in all umbrellas\n", + "for k in range(K):\n", + " for n in range(N_k[k]):\n", + " # Compute minimum-image ion-pair distance deviation from umbrella center l\n", + " dd = d_kn[k,n] - d0_k # delta d\n", + " # Compute energy of snapshot n from simulation k in umbrella potential l\n", + " u_kln[k,:,n] = u_kn[k,n] + beta_k[k] * (K_k / 2) * dd ** 2\n", + "\n", + "# Step 5: Compute, output, and plot the FES\n", + "fes = pymbar.FES(u_kln, N_k, verbose=False)\n", + "histo_params = {'bin_edges': bin_edges}\n", + "d_n = pymbar.utils.kn_to_n(d_kn, N_k=N_k)\n", + "fes.generate_fes(u_kn, d_n, fes_type='histogram', histogram_parameters=histo_params)\n", + "results = fes.get_fes(bin_center_i, reference_point=\"from-lowest\", uncertainty_method=\"analytical\")\n", + "f_i = results[\"f_i\"]\n", + "df_i = results[\"df_i\"]\n", + "\n", + "with open('results/fes_1000.dat', 'w') as f:\n", + " f.write(\"# free energy profile (in units of kT), from histogramming\\n\")\n", + " f.write(f\"# {'bin':>8s} {'f':>8s} {'df':>8s} \\n\")\n", + " for i in range(nbins):\n", + " f.write(f\"{bin_center_i[i]:>8.3f} {f_i[i]:>8.3f} {df_i[i]:>8.3f} \\n\")\n", + "\n", + "plt.figure()\n", + "plt.plot(bin_center_i, f_i)\n", + "plt.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", + "plt.xlabel('Ion-pair distance (nm)')\n", + "plt.ylabel('Free energy (kT)')\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ada806bf", + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure(figsize=(8, 3))\n", + "for i in range(6):\n", + " plt.hist(uncorrelated_samples[i], bins=50, alpha=0.5)\n", + "plt.xlabel('Ion-pair distance (nm)')\n", + "plt.ylabel('Count')\n", + "plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "daa04673", + "metadata": {}, + "source": [ + "Here we calculate the standard deviation of each distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d99d85a2", + "metadata": {}, + "outputs": [], + "source": [ + "samples_small = uncorrelated_samples # for plotting later\n", + "std_list = [f'{np.std(i):.3f}' for i in samples_small]\n", + "print(f'The standard deviation of all {len(std_list)} distributions are: {\" nm, \".join(std_list)} nm.')" + ] + }, + { + "cell_type": "markdown", + "id": "33f4bcc9", + "metadata": {}, + "source": [ + "### 5-2. Setting $k$ to $50000$ $\\mathrm{kJ/mol/nm^2}$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "068a9c5f", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "cp pull/NaCl_pull.mdp NaCl_umbrella.mdp\n", + "sed -i -e \"s/nsteps = 125000/nsteps = 250000/g\" NaCl_umbrella.mdp # simulation length: 500 ps for each umbrella\n", + "sed -i -e \"s/pull-coord1-rate = 0.0010 ; 0.0010 nm\\/ps -> pull distance in the 250 ps-simulation: 0.25 nm./pull-coord1-rate = 0/g\" NaCl_umbrella.mdp\n", + "sed -i -e \"s/pull-coord1-k = 1000 ; units: kJ\\/mol\\/nm^2/pull-coord1-k = 50000/g\" NaCl_umbrella.mdp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "979132df", + "metadata": {}, + "outputs": [], "source": [ "%%bash\n", - "source /Users/Wei-TseHsu/pkgs/gromacs/2022.5_mpi/bin/GMXRC # You'll need to replace this with your path of GMXRC\n", "for i in {0..7}\n", "do\n", " cp pull/NaCl_US.top sim_${i}/. # Use the same top file as in the pulling simulation\n", @@ -3682,23 +4290,10 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "0a2bf6a2", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Step 1: Setting up\n", "K = 8 # number of umbrellas\n", @@ -3771,23 +4366,10 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "d40f7ea1", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure(figsize=(8, 3))\n", "for i in range(8):\n", @@ -3807,18 +4389,10 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "c5a24c6c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The standard deviation of all 8 distributions are: 0.005 nm, 0.007 nm, 0.008 nm, 0.007 nm, 0.007 nm, 0.007 nm, 0.007 nm, 0.007 nm.\n" - ] - } - ], + "outputs": [], "source": [ "samples_large = uncorrelated_samples # for plotting later\n", "std_list = [f'{np.std(i):.3f}' for i in samples_small]\n", @@ -3835,23 +4409,10 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "c95d4934", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "dark" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create a 6-row x 9-column grid\n", "gs = gridspec.GridSpec(nrows=6, ncols=9)\n", @@ -3866,21 +4427,21 @@ "ax1 = plt.subplot(gs[:3, :4]) \n", "ax1.plot(bin_center_i, f_i)\n", "ax1.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", - "ax1.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax1.set_ylabel('Free energy (kT)', color='white')\n", + "ax1.set_xlabel('Ion-pair distance (nm)')\n", + "ax1.set_ylabel('Free energy (kT)')\n", "ax1.grid()\n", - "ax1.text(0.97, 0.95, 'k=500', transform=ax1.transAxes, va='top', ha='right', color='white')\n", - "plt.text(-0.1, 1.15, 'A', transform=ax1.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", + "ax1.text(0.97, 0.95, 'k=500', transform=ax1.transAxes, va='top', ha='right')\n", + "plt.text(-0.1, 1.15, 'A', transform=ax1.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", "\n", "# Create the second subplot in the first row\n", "ax2 = plt.subplot(gs[:3, 4:]) \n", "for i in range(6):\n", " ax2.hist(samples_small[i], bins=50, alpha=0.5)\n", - "ax2.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax2.set_ylabel('Number of \\nuncorrelated samples', color='white')\n", + "ax2.set_xlabel('Ion-pair distance (nm)')\n", + "ax2.set_ylabel('Number of \\nuncorrelated samples')\n", "ax2.grid()\n", - "plt.text(0.97, 0.95, 'k=500', transform=ax2.transAxes, va='top', ha='right', color='white')\n", - "plt.text(-0.1, 1.15, 'B', transform=ax2.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", + "plt.text(0.97, 0.95, 'k=500', transform=ax2.transAxes, va='top', ha='right')\n", + "plt.text(-0.1, 1.15, 'B', transform=ax2.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", "\n", "# Create the third subplot in the second row\n", "f_i = np.transpose(np.loadtxt('results/fes_50000.dat'))[1]\n", @@ -3889,26 +4450,26 @@ "ax3 = plt.subplot(gs[3:, :4])\n", "ax3.plot(bin_center_i, f_i)\n", "ax3.fill_between(bin_center_i, f_i - df_i, f_i + df_i, color='lightgreen')\n", - "ax3.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax3.set_ylabel('Free energy (kT)', color='white')\n", + "ax3.set_xlabel('Ion-pair distance (nm)')\n", + "ax3.set_ylabel('Free energy (kT)')\n", "ax3.grid()\n", - "plt.text(0.97, 0.95, 'k=50000', transform=ax3.transAxes, va='top', ha='right', color='white')\n", - "plt.text(-0.1, 1.15, 'C', transform=ax3.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", + "plt.text(0.97, 0.95, 'k=50000', transform=ax3.transAxes, va='top', ha='right')\n", + "plt.text(-0.1, 1.15, 'C', transform=ax3.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", "\n", "# Create the fourth subplot in the second row\n", "ax4 = plt.subplot(gs[3:, 4:]) \n", "for i in range(8):\n", " ax4.hist(samples_large[i], bins=50, alpha=0.5)\n", - "ax4.set_xlabel('Ion-pair distance (nm)', color='white')\n", - "ax4.set_ylabel('Number of \\nuncorrelated samples', color='white')\n", + "ax4.set_xlabel('Ion-pair distance (nm)')\n", + "ax4.set_ylabel('Number of \\nuncorrelated samples')\n", "ax4.grid()\n", - "plt.text(0.97, 0.95, 'k=50000', transform=ax4.transAxes, va='top', ha='right', color='white')\n", - "plt.text(-0.1, 1.15, 'D', transform=ax4.transAxes, fontweight='bold', va='top', ha='right', color='white', fontsize=16)\n", + "plt.text(0.97, 0.95, 'k=50000', transform=ax4.transAxes, va='top', ha='right')\n", + "plt.text(-0.1, 1.15, 'D', transform=ax4.transAxes, fontweight='bold', va='top', ha='right', fontsize=16)\n", "\n", - "setup_coordinates(ax1, color='white')\n", - "setup_coordinates(ax2, color='white')\n", - "setup_coordinates(ax3, color='white')\n", - "setup_coordinates(ax4, color='white')\n", + "# setup_coordinates(ax1, color='white')\n", + "# setup_coordinates(ax2, color='white')\n", + "# setup_coordinates(ax3, color='white')\n", + "# setup_coordinates(ax4, color='white')\n", "plt.tight_layout(w_pad=2)\n", "plt.savefig('results/f_profile_compare.png', transparent=True, dpi=600)" ] diff --git a/README.md b/README.md index ea7bc5c..ac7dc1a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -Enhanced sampling tutorials -=========================== +Hands-on tutorials: Enhanced sampling methods using GROMACS +===========================================================
@@ -7,14 +7,16 @@ Enhanced sampling tutorials
-This repository provides jupyter notebooks and simulation inputs that accompany the mini course [Hands-on tutorials: Enhanced sampling methods using GROMACS](https://weitsehsu.com/course/enhanced_sampling/) authored by [Wei-Tse Hsu](https://weitsehsu.com/). Methods introduced in this course includes the following: -- Umbrella sampling -- Metadynamics -- Temperature replica exchange -- Hamiltonian replica exchange -- Expanded ensemble -- Replica-exchange umbrella sampling -- Alchemical metadynamics +This repository provides jupyter notebooks and simulation inputs that accompany the course [Hands-on tutorials: Enhanced sampling methods using GROMACS](https://weitsehsu.com/course/enhanced_sampling/) authored by [Wei-Tse Hsu](https://weitsehsu.com/). The course includes a series of tutorials on different enhanced sampling methods as outlined below: +- Chapter 1. Umbrella sampling +- Chapter 2. Metadynamics +- Chapter 3. Temperature replica exchange +- Chapter 4. Hamiltonian replica exchange +- Chapter 5. Expanded ensemble +- Chapter 6. Replica-exchange umbrella sampling +- Chapter 7. Alchemical metadynamics + +For more information about this course, please visit the website linked above. ### Coopyright Copyright (c) 2023, Wei-Tse Hsu From 3b24283d46ba71f59cc20764a3627d4d914b7fa2 Mon Sep 17 00:00:00 2001 From: Wei-Tse Hsu Date: Thu, 26 Sep 2024 16:24:47 +0800 Subject: [PATCH 3/3] Backing up before removing position restraints from the umbrella sampling tutorial --- Chapter_1/umbrella_sampling.ipynb | 10 +++++----- README.md | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Chapter_1/umbrella_sampling.ipynb b/Chapter_1/umbrella_sampling.ipynb index 0e85846..26c1a90 100644 --- a/Chapter_1/umbrella_sampling.ipynb +++ b/Chapter_1/umbrella_sampling.ipynb @@ -316,16 +316,16 @@ "%%bash\n", "echo '; Pull code\n", "pull = yes ; Activate the pull code\n", - "pull-ncoords = 1 ; Here we only have 1 CV.\n", + "pull-ncoords = 1 ; Here we only have 1 CV\n", "pull-ngroups = 2 ; We have 2 pull groups\n", "pull-group1-name = NA ; index 1\n", "pull-group2-name = CL ; index 2\n", "pull-coord1-groups = 1 2 ; groups with indices 1 (NA) and 2 (CL) are involved\n", "pull-coord1-type = umbrella ; The umbrella potential (i.e., harmonic potential) is used.\n", - "pull-coord1-geometry = distance ; Increase the distance between the pull groups\n", - "pull-coord1-dim = Y Y Y ; We allow pulling from any directions.\n", - "pull-coord1-start = yes ; The harmonic potential is centered at the initial COM distance. \n", - "pull-coord1-rate = 0.0010 ; 0.0010 nm/ps -> pull distance in the 250 ps-simulation: 0.25 nm.\n", + "pull-coord1-geometry = distance ; Pull along the vector connecting the two groups\n", + "pull-coord1-dim = Y Y Y ; Dimensions that the pull coordinate acts on\n", + "pull-coord1-start = yes ; The harmonic potential is centered at the initial COM distance\n", + "pull-coord1-rate = 0.0010 ; 0.0010 nm/ps -> A deviation of 0.25 nm in a 250 ps-simulation\n", "pull-coord1-k = 1000 ; units: kJ/mol/nm^2' >> pull/NaCl_pull.mdp" ] }, diff --git a/README.md b/README.md index ac7dc1a..c55801e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ Hands-on tutorials: Enhanced sampling methods using GROMACS =========================================================== +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/wehs7661/enhanced_sampling_tutorials/HEAD) +
@@ -16,7 +18,7 @@ This repository provides jupyter notebooks and simulation inputs that accompany - Chapter 6. Replica-exchange umbrella sampling - Chapter 7. Alchemical metadynamics -For more information about this course, please visit the website linked above. +All the tutorials can be run on Binder as linked in the badge above. For more information about the course and more comprehensive disucssion about each method, please visit the course website linked above. ### Coopyright Copyright (c) 2023, Wei-Tse Hsu