From e409d1e133215b17a155ba66a8e4f77a5c0fa814 Mon Sep 17 00:00:00 2001 From: Diego Prada Date: Fri, 17 May 2024 16:29:44 -0600 Subject: [PATCH] In process --- docs/contents/user/tools/basic/181L.h5msm | Bin 0 -> 222527 bytes .../user/tools/basic/append_structures.ipynb | 92 +- .../are_multiple_molecular_systems.ipynb | 28 +- docs/contents/user/tools/basic/compare.ipynb | 12 +- .../tools/basic/concatenate_structures.ipynb | 95 +- docs/contents/user/tools/basic/contains.ipynb | 60 +- docs/contents/user/tools/basic/convert.ipynb | 148 +- docs/contents/user/tools/basic/select.ipynb | 5937 ++++++++++++++++- molsysmt/_private/common_get.py | 505 +- molsysmt/basic/selector/molsysmt.py | 99 +- .../element/molecule/get_molecule_type.py | 3 +- .../to_molsysmt_MolSys.py | 46 +- molsysmt/form/molsysmt_MolSys/__init__.py | 2 + molsysmt/form/molsysmt_MolSys/to_XYZ.py | 11 + .../to_string_amino_acids_3.py | 4 +- .../form/string_pdb_id/to_string_pdb_text.py | 17 +- sandbox/Tests.ipynb | 121 +- 17 files changed, 6540 insertions(+), 640 deletions(-) create mode 100644 docs/contents/user/tools/basic/181L.h5msm create mode 100644 molsysmt/form/molsysmt_MolSys/to_XYZ.py diff --git a/docs/contents/user/tools/basic/181L.h5msm b/docs/contents/user/tools/basic/181L.h5msm new file mode 100644 index 0000000000000000000000000000000000000000..d31fb5c3a98888094cb1a43b9e7cd60224155d35 GIT binary patch literal 222527 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 DecIdF literal 0 HcmV?d00001 diff --git a/docs/contents/user/tools/basic/append_structures.ipynb b/docs/contents/user/tools/basic/append_structures.ipynb index 32904e40c..490d9d84a 100644 --- a/docs/contents/user/tools/basic/append_structures.ipynb +++ b/docs/contents/user/tools/basic/append_structures.ipynb @@ -45,7 +45,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0a8ffa12ece7495d8a80c3ab8d2b498a", + "model_id": "1b2c8b220a594145a196d9c20d3b0e50", "version_major": 2, "version_minor": 0 }, @@ -88,37 +88,37 @@ "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
formn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_peptidesn_structuresformn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_peptidesn_structures
molsysmt.MolSys223111111molsysmt.MolSys223111111
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -173,37 +173,37 @@ "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
formn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_peptidesn_structuresformn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_peptidesn_structures
molsysmt.MolSys223111113molsysmt.MolSys223111113
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -217,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "tags": [ "remove-input" @@ -233,13 +233,13 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0215ff885fd24bf1813fb5605036be64", + "model_id": "e12bd089b16040b4a320e6f4b8826ad6", "version_major": 2, "version_minor": 0 }, @@ -257,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "editable": true, "slideshow": { @@ -306,7 +306,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/are_multiple_molecular_systems.ipynb b/docs/contents/user/tools/basic/are_multiple_molecular_systems.ipynb index c9b7712c5..b92574015 100644 --- a/docs/contents/user/tools/basic/are_multiple_molecular_systems.ipynb +++ b/docs/contents/user/tools/basic/are_multiple_molecular_systems.ipynb @@ -45,7 +45,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7f9bfaec6c8744a28381796878bf06c6", + "model_id": "6a8bd0ae5f6d42fabf2822abbc527c73", "version_major": 2, "version_minor": 0 }, @@ -57,23 +57,23 @@ ], "source": [ "import molsysmt as msm\n", - "from molsysmt.systems import demo" + "from molsysmt import systems" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "molecular_system_A = '2LAO'\n", - "molecular_system_B = demo['Trp-Cage']['1l2y.mmtf']\n", - "molecular_system_C = demo['T4 lysozyme L99A']['t4_lysozyme_L99A.msmpk']" + "molecular_system_B = systems['Trp-Cage']['1l2y.h5msm']\n", + "molecular_system_C = systems['T4 lysozyme L99A']['t4_lysozyme_L99A.h5msm']" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -82,7 +82,7 @@ "True" ] }, - "execution_count": 9, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -128,7 +128,7 @@ "True" ] }, - "execution_count": 11, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -146,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -165,7 +165,7 @@ "False" ] }, - "execution_count": 13, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -202,7 +202,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/compare.ipynb b/docs/contents/user/tools/basic/compare.ipynb index 735d8c254..4c1e15ee6 100644 --- a/docs/contents/user/tools/basic/compare.ipynb +++ b/docs/contents/user/tools/basic/compare.ipynb @@ -48,7 +48,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96e8ebd49b4046dabf6eaf4696fbb09b", + "model_id": "324137bf21524b65b200ceede8d4e5b7", "version_major": 2, "version_minor": 0 }, @@ -226,7 +226,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "bd2ce323-000a-4edb-9b1a-1fe6e02a8552", "metadata": {}, "outputs": [ @@ -236,7 +236,7 @@ "{'n_groups': True, 'box': True, 'coordinates': True}" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -255,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "33cf40d9-ec1c-4d99-aea4-ebc7a45592f8", "metadata": {}, "outputs": [ @@ -265,7 +265,7 @@ "{'n_groups': True, 'box': True, 'coordinates': True}" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -303,7 +303,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/concatenate_structures.ipynb b/docs/contents/user/tools/basic/concatenate_structures.ipynb index 8ca4995ff..533075231 100644 --- a/docs/contents/user/tools/basic/concatenate_structures.ipynb +++ b/docs/contents/user/tools/basic/concatenate_structures.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "tags": [ "remove-input" @@ -39,16 +39,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9ea582c30e9749d5ba8b8572ed74cf98", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import molsysmt as msm" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -59,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -78,16 +91,59 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
formn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_peptidesn_structures
molsysmt.MolSys223111113
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.info(molecular_system_D)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "tags": [ "remove-input" @@ -103,16 +159,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "13375c3353cd4e58a557d9ff0ef04d30", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "NGLWidget(max_frame=2)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "msm.view(molecular_system_D)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "editable": true, "slideshow": { @@ -161,7 +232,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/contains.ipynb b/docs/contents/user/tools/basic/contains.ipynb index 4b6b48d2b..a08a73970 100644 --- a/docs/contents/user/tools/basic/contains.ipynb +++ b/docs/contents/user/tools/basic/contains.ipynb @@ -48,7 +48,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8abfc26fea4846c7aaea0de4825450a3", + "model_id": "038e66a02d194ff899e174429d147db1", "version_major": 2, "version_minor": 0 }, @@ -69,7 +69,7 @@ "metadata": {}, "outputs": [], "source": [ - "molecular_system = msm.convert('pdb_id:181L', to_form='molsysmt.MolSys')" + "molecular_system = msm.convert('181L')" ] }, { @@ -87,43 +87,43 @@ "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
formn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_watersn_ionsn_small_moleculesn_proteinsn_structuresformn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_watersn_ionsn_small_moleculesn_proteinsn_structures
molsysmt.MolSys1441302141614141362211molsysmt.MolSys1441302141614151362211
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -300,7 +300,7 @@ { "data": { "text/plain": [ - "False" + "True" ] }, "execution_count": 10, @@ -442,7 +442,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/convert.ipynb b/docs/contents/user/tools/basic/convert.ipynb index e8471c58e..99dae2646 100644 --- a/docs/contents/user/tools/basic/convert.ipynb +++ b/docs/contents/user/tools/basic/convert.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "tags": [ "remove-input" @@ -44,40 +44,27 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1bbcf8e8f4f749cbb2cd6491b6ff1f5e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import molsysmt as msm" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "molecular_system_A = '181L'\n", - "molecular_system_B = msm.convert(molecular_system_A, to_form='181L.mmtf')\n", + "molecular_system_B = msm.convert(molecular_system_A, to_form='181L.h5msm')\n", "molecular_system_C = msm.convert(molecular_system_B)\n", "molecular_system_D = msm.convert(molecular_system_C, to_form='string:pdb_text')\n", "molecular_system_E = msm.convert(molecular_system_D, to_form='mdtraj.Trajectory')\n", "molecular_system_F = msm.convert(molecular_system_E, to_form='nglview.NGLWidget')\n", "molecular_system_G = msm.convert(molecular_system_F, to_form='openmm.Topology')\n", - "molecular_system_H = msm.convert(molecular_system_G, to_form='string:aminoacids3')" + "molecular_system_H = msm.convert(molecular_system_G, to_form='string:amino_acids_3')" ] }, { @@ -102,62 +89,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
formn_atomsn_groupsn_componentsn_chainsn_moleculesn_entitiesn_watersn_ionsn_small_moleculesn_proteinsn_structures
openmm.Topology144130214161415136221None
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "msm.info(molecular_system_F)" ] @@ -181,7 +119,7 @@ "# As such, it will not be shown in documentation\n", "\n", "import os\n", - "os.remove('181L.mmtf')" + "os.remove('181L.h5msm')" ] }, { @@ -197,7 +135,7 @@ "metadata": {}, "outputs": [], "source": [ - "benzene = msm.convert('181L', to_form='string:pdb_text', selection='molecule_name==\"Benzene\"')" + "benzene = msm.convert('181L', to_form='string:pdb_text', selection='molecule_name==\"BENZENE\"')" ] }, { @@ -229,21 +167,73 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "360e85f74c0548f8855c20b444b52a12", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "from molsysmt.systems import demo" + "from molsysmt import systems\n", + "import molsysmt as msm" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "prmtop_file = demo['pentalanine']['pentalanine.prmtop']\n", - "inpcrd_file = demo['pentalanine']['pentalanine.inpcrd']" + "prmtop_file = systems['pentalanine']['pentalanine.prmtop']\n", + "inpcrd_file = systems['pentalanine']['pentalanine.inpcrd']" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "da1\n" + ] + }, + { + "ename": "NotCompatibleConversionError", + "evalue": "Error in conversion from file:prmtop to molsysmt.MolSys. The following input attributes of arguments are missing: {'solvent_dielectric', 'velocities', 'entity_type', 'cutoff_distance', 'entity_id', 'hydrogen_mass', 'salt_concentration', 'solute_dielectric', 'component_name', 'formal_charge', 'partial_charge', 'rigid_water', 'component_type', 'entity_name', 'kappa', 'component_id', 'flexible_constraints'}.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNotCompatibleConversionError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mmsm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43melement\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmolecule\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_molecule_type\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprmtop_file\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43melement\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmolecule\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mall\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mredefine_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/element/molecule/get_molecule_type.py:15\u001b[0m, in \u001b[0;36mget_molecule_type\u001b[0;34m(molecular_system, element, selection, redefine_indices, redefine_types, syntax, skip_digestion)\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m redefine_indices:\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mda1\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 15\u001b[0m molecule_types_from_molecule \u001b[38;5;241m=\u001b[39m \u001b[43mget_component_type\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43melement\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mcomponent\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[43m \u001b[49m\u001b[43mredefine_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mda2\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m element \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124matom\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/element/component/get_component_type.py:27\u001b[0m, in \u001b[0;36mget_component_type\u001b[0;34m(molecular_system, element, selection, redefine_indices, redefine_types, syntax, skip_digestion)\u001b[0m\n\u001b[1;32m 18\u001b[0m atom_indices \u001b[38;5;241m=\u001b[39m select(molecular_system, element\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124matom\u001b[39m\u001b[38;5;124m'\u001b[39m, selection\u001b[38;5;241m=\u001b[39mselection,\n\u001b[1;32m 19\u001b[0m syntax\u001b[38;5;241m=\u001b[39msyntax, skip_digestion\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 21\u001b[0m \u001b[38;5;66;03m#if element!='atom':\u001b[39;00m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;66;03m# aux_atom_indices = []\u001b[39;00m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;66;03m# for aux in atom_indices:\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;66;03m# aux_atom_indices += aux\u001b[39;00m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;66;03m# atom_indices = aux_atom_indices\u001b[39;00m\n\u001b[0;32m---> 27\u001b[0m component_indices \u001b[38;5;241m=\u001b[39m \u001b[43mget_component_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43melement\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43matom\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 28\u001b[0m \u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mall\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mredefine_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 29\u001b[0m \u001b[43m \u001b[49m\u001b[43mskip_digestion\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 31\u001b[0m unique_component_indices, first_atoms, n_atoms \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39munique(component_indices, return_index\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 32\u001b[0m return_counts\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 34\u001b[0m component_types\u001b[38;5;241m=\u001b[39m{}\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:52\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mskip_digestion\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# Define caller\u001b[39;00m\n\u001b[1;32m 56\u001b[0m caller \u001b[38;5;241m=\u001b[39m func\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__module__\u001b[39m\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;241m+\u001b[39mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/element/component/get_component_index.py:18\u001b[0m, in \u001b[0;36mget_component_index\u001b[0;34m(molecular_system, element, selection, redefine_indices, syntax, skip_digestion)\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmolsysmt\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m convert, get\n\u001b[1;32m 16\u001b[0m component_index_of_atoms \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 18\u001b[0m g \u001b[38;5;241m=\u001b[39m \u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_form\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mnetworkx.Graph\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskip_digestion\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 20\u001b[0m components \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(nx\u001b[38;5;241m.\u001b[39mconnected_components(g))\n\u001b[1;32m 22\u001b[0m aux_n_components \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(components)\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:52\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mskip_digestion\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# Define caller\u001b[39;00m\n\u001b[1;32m 56\u001b[0m caller \u001b[38;5;241m=\u001b[39m func\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__module__\u001b[39m\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;241m+\u001b[39mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/basic/convert.py:530\u001b[0m, in \u001b[0;36mconvert\u001b[0;34m(molecular_system, to_form, selection, structure_indices, syntax, verbose, skip_digestion, **kwargs)\u001b[0m\n\u001b[1;32m 528\u001b[0m \u001b[38;5;66;03m# If one to one\u001b[39;00m\n\u001b[1;32m 529\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(from_form, (\u001b[38;5;28mlist\u001b[39m, \u001b[38;5;28mtuple\u001b[39m)):\n\u001b[0;32m--> 530\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43m_convert_one_to_one\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrom_form\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_form\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mto_form\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 531\u001b[0m \u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mverbose\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskip_digestion\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 533\u001b[0m \u001b[38;5;66;03m# If multiple to one\u001b[39;00m\n\u001b[1;32m 534\u001b[0m \n\u001b[1;32m 535\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 536\u001b[0m \n\u001b[1;32m 537\u001b[0m \u001b[38;5;66;03m# conversions in private shortcuts\u001b[39;00m\n\u001b[1;32m 538\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28msorted\u001b[39m(from_form)) \u001b[38;5;129;01min\u001b[39;00m _multiple_conversion_shortcuts:\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/basic/convert.py:91\u001b[0m, in \u001b[0;36m_convert_one_to_one\u001b[0;34m(molecular_system, from_form, to_form, selection, structure_indices, syntax, verbose, **kwargs)\u001b[0m\n\u001b[1;32m 87\u001b[0m output \u001b[38;5;241m=\u001b[39m function(molecular_system, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mconversion_arguments, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m _dict_modules[from_form]\u001b[38;5;241m.\u001b[39m_convert_to) \u001b[38;5;129;01mand\u001b[39;00m (to_form \u001b[38;5;129;01min\u001b[39;00m _dict_modules[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39m_convert_to):\n\u001b[0;32m---> 91\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43m_convert_one_to_one\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrom_form\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_form\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmolsysmt.MolSys\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 93\u001b[0m output \u001b[38;5;241m=\u001b[39m _convert_one_to_one(output, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m, to_form\u001b[38;5;241m=\u001b[39mto_form)\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m output\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/basic/convert.py:85\u001b[0m, in \u001b[0;36m_convert_one_to_one\u001b[0;34m(molecular_system, from_form, to_form, selection, structure_indices, syntax, verbose, **kwargs)\u001b[0m\n\u001b[1;32m 82\u001b[0m missing_arguments\u001b[38;5;241m.\u001b[39mdiscard(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mget_missing_bonds\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(missing_arguments)\u001b[38;5;241m>\u001b[39m\u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m---> 85\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NotCompatibleConversionError(from_form, to_form, missing_arguments)\n\u001b[1;32m 87\u001b[0m output \u001b[38;5;241m=\u001b[39m function(molecular_system, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mconversion_arguments, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m _dict_modules[from_form]\u001b[38;5;241m.\u001b[39m_convert_to) \u001b[38;5;129;01mand\u001b[39;00m (to_form \u001b[38;5;129;01min\u001b[39;00m _dict_modules[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39m_convert_to):\n", + "\u001b[0;31mNotCompatibleConversionError\u001b[0m: Error in conversion from file:prmtop to molsysmt.MolSys. The following input attributes of arguments are missing: {'solvent_dielectric', 'velocities', 'entity_type', 'cutoff_distance', 'entity_id', 'hydrogen_mass', 'salt_concentration', 'solute_dielectric', 'component_name', 'formal_charge', 'partial_charge', 'rigid_water', 'component_type', 'entity_name', 'kappa', 'component_id', 'flexible_constraints'}." + ] + } + ], + "source": [ + "msm.element.molecule.get_molecule_type(prmtop_file, element='molecule', selection='all', redefine_indices=True)" ] }, { @@ -468,7 +458,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/docs/contents/user/tools/basic/select.ipynb b/docs/contents/user/tools/basic/select.ipynb index 2ef36dd39..6202378af 100644 --- a/docs/contents/user/tools/basic/select.ipynb +++ b/docs/contents/user/tools/basic/select.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "editable": true, "slideshow": { @@ -233,16 +233,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "731a9befc8bb479b8b7e90df0c099219", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import molsysmt as msm" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -251,7 +264,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "editable": true, "slideshow": { @@ -261,7 +274,18 @@ "remove-input" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 4, 10, 13, 17]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms with name CA or CB and id < 20\n", "msm.select(molecular_system, element='atom', selection='atom_name in [\"CA\",\"CB\"] and atom_id<20')" @@ -279,9 +303,1020 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 1,\n", + " 2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + " 51,\n", + " 52,\n", + " 53,\n", + " 54,\n", + " 55,\n", + " 56,\n", + " 57,\n", + " 58,\n", + " 59,\n", + " 60,\n", + " 61,\n", + " 62,\n", + " 63,\n", + " 64,\n", + " 65,\n", + " 66,\n", + " 67,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 71,\n", + " 72,\n", + " 73,\n", + " 74,\n", + " 75,\n", + " 76,\n", + " 77,\n", + " 78,\n", + " 79,\n", + " 80,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 87,\n", + " 88,\n", + " 89,\n", + " 90,\n", + " 91,\n", + " 92,\n", + " 93,\n", + " 94,\n", + " 95,\n", + " 96,\n", + " 97,\n", + " 98,\n", + " 99,\n", + " 100,\n", + " 101,\n", + " 102,\n", + " 103,\n", + " 104,\n", + " 105,\n", + " 106,\n", + " 107,\n", + " 108,\n", + " 109,\n", + " 110,\n", + " 111,\n", + " 112,\n", + " 113,\n", + " 114,\n", + " 115,\n", + " 116,\n", + " 117,\n", + " 118,\n", + " 119,\n", + " 120,\n", + " 121,\n", + " 122,\n", + " 123,\n", + " 124,\n", + " 125,\n", + " 126,\n", + " 127,\n", + " 128,\n", + " 129,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 133,\n", + " 134,\n", + " 135,\n", + " 136,\n", + " 137,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 141,\n", + " 142,\n", + " 143,\n", + " 144,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 148,\n", + " 149,\n", + " 150,\n", + " 151,\n", + " 152,\n", + " 153,\n", + " 154,\n", + " 155,\n", + " 156,\n", + " 157,\n", + " 158,\n", + " 159,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 163,\n", + " 164,\n", + " 165,\n", + " 166,\n", + " 167,\n", + " 168,\n", + " 169,\n", + " 170,\n", + " 171,\n", + " 172,\n", + " 173,\n", + " 174,\n", + " 175,\n", + " 176,\n", + " 177,\n", + " 178,\n", + " 179,\n", + " 180,\n", + " 181,\n", + " 182,\n", + " 183,\n", + " 184,\n", + " 185,\n", + " 186,\n", + " 187,\n", + " 188,\n", + " 189,\n", + " 190,\n", + " 191,\n", + " 192,\n", + " 193,\n", + " 194,\n", + " 195,\n", + " 196,\n", + " 197,\n", + " 198,\n", + " 199,\n", + " 200,\n", + " 201,\n", + " 202,\n", + " 203,\n", + " 204,\n", + " 205,\n", + " 206,\n", + " 207,\n", + " 208,\n", + " 209,\n", + " 210,\n", + " 211,\n", + " 212,\n", + " 213,\n", + " 214,\n", + " 215,\n", + " 216,\n", + " 217,\n", + " 218,\n", + " 219,\n", + " 220,\n", + " 221,\n", + " 222,\n", + " 223,\n", + " 224,\n", + " 225,\n", + " 226,\n", + " 227,\n", + " 228,\n", + " 229,\n", + " 230,\n", + " 231,\n", + " 232,\n", + " 233,\n", + " 234,\n", + " 235,\n", + " 236,\n", + " 237,\n", + " 238,\n", + " 239,\n", + " 240,\n", + " 241,\n", + " 242,\n", + " 243,\n", + " 244,\n", + " 245,\n", + " 246,\n", + " 247,\n", + " 248,\n", + " 249,\n", + " 250,\n", + " 251,\n", + " 252,\n", + " 253,\n", + " 254,\n", + " 255,\n", + " 256,\n", + " 257,\n", + " 258,\n", + " 259,\n", + " 260,\n", + " 261,\n", + " 262,\n", + " 263,\n", + " 264,\n", + " 265,\n", + " 266,\n", + " 267,\n", + " 268,\n", + " 269,\n", + " 270,\n", + " 271,\n", + " 272,\n", + " 273,\n", + " 274,\n", + " 275,\n", + " 276,\n", + " 277,\n", + " 278,\n", + " 279,\n", + " 280,\n", + " 281,\n", + " 282,\n", + " 283,\n", + " 284,\n", + " 285,\n", + " 286,\n", + " 287,\n", + " 288,\n", + " 289,\n", + " 290,\n", + " 291,\n", + " 292,\n", + " 293,\n", + " 294,\n", + " 295,\n", + " 296,\n", + " 297,\n", + " 298,\n", + " 299,\n", + " 300,\n", + " 301,\n", + " 302,\n", + " 303,\n", + " 304,\n", + " 305,\n", + " 306,\n", + " 307,\n", + " 308,\n", + " 309,\n", + " 310,\n", + " 311,\n", + " 312,\n", + " 313,\n", + " 314,\n", + " 315,\n", + " 316,\n", + " 317,\n", + " 318,\n", + " 319,\n", + " 320,\n", + " 321,\n", + " 322,\n", + " 323,\n", + " 324,\n", + " 325,\n", + " 326,\n", + " 327,\n", + " 328,\n", + " 329,\n", + " 330,\n", + " 331,\n", + " 332,\n", + " 333,\n", + " 334,\n", + " 335,\n", + " 336,\n", + " 337,\n", + " 338,\n", + " 339,\n", + " 340,\n", + " 341,\n", + " 342,\n", + " 343,\n", + " 344,\n", + " 345,\n", + " 346,\n", + " 347,\n", + " 348,\n", + " 349,\n", + " 350,\n", + " 351,\n", + " 352,\n", + " 353,\n", + " 354,\n", + " 355,\n", + " 356,\n", + " 357,\n", + " 358,\n", + " 359,\n", + " 360,\n", + " 361,\n", + " 362,\n", + " 363,\n", + " 364,\n", + " 365,\n", + " 366,\n", + " 367,\n", + " 368,\n", + " 369,\n", + " 370,\n", + " 371,\n", + " 372,\n", + " 373,\n", + " 374,\n", + " 375,\n", + " 376,\n", + " 377,\n", + " 378,\n", + " 379,\n", + " 380,\n", + " 381,\n", + " 382,\n", + " 383,\n", + " 384,\n", + " 385,\n", + " 386,\n", + " 387,\n", + " 388,\n", + " 389,\n", + " 390,\n", + " 391,\n", + " 392,\n", + " 393,\n", + " 394,\n", + " 395,\n", + " 396,\n", + " 397,\n", + " 398,\n", + " 399,\n", + " 400,\n", + " 401,\n", + " 402,\n", + " 403,\n", + " 404,\n", + " 405,\n", + " 406,\n", + " 407,\n", + " 408,\n", + " 409,\n", + " 410,\n", + " 411,\n", + " 412,\n", + " 413,\n", + " 414,\n", + " 415,\n", + " 416,\n", + " 417,\n", + " 418,\n", + " 419,\n", + " 420,\n", + " 421,\n", + " 422,\n", + " 423,\n", + " 424,\n", + " 425,\n", + " 426,\n", + " 427,\n", + " 428,\n", + " 429,\n", + " 430,\n", + " 431,\n", + " 432,\n", + " 433,\n", + " 434,\n", + " 435,\n", + " 436,\n", + " 437,\n", + " 438,\n", + " 439,\n", + " 440,\n", + " 441,\n", + " 442,\n", + " 443,\n", + " 444,\n", + " 445,\n", + " 446,\n", + " 447,\n", + " 448,\n", + " 449,\n", + " 450,\n", + " 451,\n", + " 452,\n", + " 453,\n", + " 454,\n", + " 455,\n", + " 456,\n", + " 457,\n", + " 458,\n", + " 459,\n", + " 460,\n", + " 461,\n", + " 462,\n", + " 463,\n", + " 464,\n", + " 465,\n", + " 466,\n", + " 467,\n", + " 468,\n", + " 469,\n", + " 470,\n", + " 471,\n", + " 472,\n", + " 473,\n", + " 474,\n", + " 475,\n", + " 476,\n", + " 477,\n", + " 478,\n", + " 479,\n", + " 480,\n", + " 481,\n", + " 482,\n", + " 483,\n", + " 484,\n", + " 485,\n", + " 486,\n", + " 487,\n", + " 488,\n", + " 489,\n", + " 490,\n", + " 491,\n", + " 492,\n", + " 493,\n", + " 494,\n", + " 495,\n", + " 496,\n", + " 497,\n", + " 498,\n", + " 499,\n", + " 500,\n", + " 501,\n", + " 502,\n", + " 503,\n", + " 504,\n", + " 505,\n", + " 506,\n", + " 507,\n", + " 508,\n", + " 509,\n", + " 510,\n", + " 511,\n", + " 512,\n", + " 513,\n", + " 514,\n", + " 515,\n", + " 516,\n", + " 517,\n", + " 518,\n", + " 519,\n", + " 520,\n", + " 521,\n", + " 522,\n", + " 523,\n", + " 524,\n", + " 525,\n", + " 526,\n", + " 527,\n", + " 528,\n", + " 529,\n", + " 530,\n", + " 531,\n", + " 532,\n", + " 533,\n", + " 534,\n", + " 535,\n", + " 536,\n", + " 537,\n", + " 538,\n", + " 539,\n", + " 540,\n", + " 541,\n", + " 542,\n", + " 543,\n", + " 544,\n", + " 545,\n", + " 546,\n", + " 547,\n", + " 548,\n", + " 549,\n", + " 550,\n", + " 551,\n", + " 552,\n", + " 553,\n", + " 554,\n", + " 555,\n", + " 556,\n", + " 557,\n", + " 558,\n", + " 559,\n", + " 560,\n", + " 561,\n", + " 562,\n", + " 563,\n", + " 564,\n", + " 565,\n", + " 566,\n", + " 567,\n", + " 568,\n", + " 569,\n", + " 570,\n", + " 571,\n", + " 572,\n", + " 573,\n", + " 574,\n", + " 575,\n", + " 576,\n", + " 577,\n", + " 578,\n", + " 579,\n", + " 580,\n", + " 581,\n", + " 582,\n", + " 583,\n", + " 584,\n", + " 585,\n", + " 586,\n", + " 587,\n", + " 588,\n", + " 589,\n", + " 590,\n", + " 591,\n", + " 592,\n", + " 593,\n", + " 594,\n", + " 595,\n", + " 596,\n", + " 597,\n", + " 598,\n", + " 599,\n", + " 600,\n", + " 601,\n", + " 602,\n", + " 603,\n", + " 604,\n", + " 605,\n", + " 606,\n", + " 607,\n", + " 608,\n", + " 609,\n", + " 610,\n", + " 611,\n", + " 612,\n", + " 613,\n", + " 614,\n", + " 615,\n", + " 616,\n", + " 617,\n", + " 618,\n", + " 619,\n", + " 620,\n", + " 621,\n", + " 622,\n", + " 623,\n", + " 624,\n", + " 625,\n", + " 626,\n", + " 627,\n", + " 628,\n", + " 629,\n", + " 630,\n", + " 631,\n", + " 632,\n", + " 633,\n", + " 634,\n", + " 635,\n", + " 636,\n", + " 637,\n", + " 638,\n", + " 639,\n", + " 640,\n", + " 641,\n", + " 642,\n", + " 643,\n", + " 644,\n", + " 645,\n", + " 646,\n", + " 647,\n", + " 648,\n", + " 649,\n", + " 650,\n", + " 651,\n", + " 652,\n", + " 653,\n", + " 654,\n", + " 655,\n", + " 656,\n", + " 657,\n", + " 658,\n", + " 659,\n", + " 660,\n", + " 661,\n", + " 662,\n", + " 663,\n", + " 664,\n", + " 665,\n", + " 666,\n", + " 667,\n", + " 668,\n", + " 669,\n", + " 670,\n", + " 671,\n", + " 672,\n", + " 673,\n", + " 674,\n", + " 675,\n", + " 676,\n", + " 677,\n", + " 678,\n", + " 679,\n", + " 680,\n", + " 681,\n", + " 682,\n", + " 683,\n", + " 684,\n", + " 685,\n", + " 686,\n", + " 687,\n", + " 688,\n", + " 689,\n", + " 690,\n", + " 691,\n", + " 692,\n", + " 693,\n", + " 694,\n", + " 695,\n", + " 696,\n", + " 697,\n", + " 698,\n", + " 699,\n", + " 700,\n", + " 701,\n", + " 702,\n", + " 703,\n", + " 704,\n", + " 705,\n", + " 706,\n", + " 707,\n", + " 708,\n", + " 709,\n", + " 710,\n", + " 711,\n", + " 712,\n", + " 713,\n", + " 714,\n", + " 715,\n", + " 716,\n", + " 717,\n", + " 718,\n", + " 719,\n", + " 720,\n", + " 721,\n", + " 722,\n", + " 723,\n", + " 724,\n", + " 725,\n", + " 726,\n", + " 727,\n", + " 728,\n", + " 729,\n", + " 730,\n", + " 731,\n", + " 732,\n", + " 733,\n", + " 734,\n", + " 735,\n", + " 736,\n", + " 737,\n", + " 738,\n", + " 739,\n", + " 740,\n", + " 741,\n", + " 742,\n", + " 743,\n", + " 744,\n", + " 745,\n", + " 746,\n", + " 747,\n", + " 748,\n", + " 749,\n", + " 750,\n", + " 751,\n", + " 752,\n", + " 753,\n", + " 754,\n", + " 755,\n", + " 756,\n", + " 757,\n", + " 758,\n", + " 759,\n", + " 760,\n", + " 761,\n", + " 762,\n", + " 763,\n", + " 764,\n", + " 765,\n", + " 766,\n", + " 767,\n", + " 768,\n", + " 769,\n", + " 770,\n", + " 771,\n", + " 772,\n", + " 773,\n", + " 774,\n", + " 775,\n", + " 776,\n", + " 777,\n", + " 778,\n", + " 779,\n", + " 780,\n", + " 781,\n", + " 782,\n", + " 783,\n", + " 784,\n", + " 785,\n", + " 786,\n", + " 787,\n", + " 788,\n", + " 789,\n", + " 790,\n", + " 791,\n", + " 792,\n", + " 793,\n", + " 794,\n", + " 795,\n", + " 796,\n", + " 797,\n", + " 798,\n", + " 799,\n", + " 800,\n", + " 801,\n", + " 802,\n", + " 803,\n", + " 804,\n", + " 805,\n", + " 806,\n", + " 807,\n", + " 808,\n", + " 809,\n", + " 810,\n", + " 811,\n", + " 812,\n", + " 813,\n", + " 814,\n", + " 815,\n", + " 816,\n", + " 817,\n", + " 818,\n", + " 819,\n", + " 820,\n", + " 821,\n", + " 822,\n", + " 823,\n", + " 824,\n", + " 825,\n", + " 826,\n", + " 827,\n", + " 828,\n", + " 829,\n", + " 830,\n", + " 831,\n", + " 832,\n", + " 833,\n", + " 834,\n", + " 835,\n", + " 836,\n", + " 837,\n", + " 838,\n", + " 839,\n", + " 840,\n", + " 841,\n", + " 842,\n", + " 843,\n", + " 844,\n", + " 845,\n", + " 846,\n", + " 847,\n", + " 848,\n", + " 849,\n", + " 850,\n", + " 851,\n", + " 852,\n", + " 853,\n", + " 854,\n", + " 855,\n", + " 856,\n", + " 857,\n", + " 858,\n", + " 859,\n", + " 860,\n", + " 861,\n", + " 862,\n", + " 863,\n", + " 864,\n", + " 865,\n", + " 866,\n", + " 867,\n", + " 868,\n", + " 869,\n", + " 870,\n", + " 871,\n", + " 872,\n", + " 873,\n", + " 874,\n", + " 875,\n", + " 876,\n", + " 877,\n", + " 878,\n", + " 879,\n", + " 880,\n", + " 881,\n", + " 882,\n", + " 883,\n", + " 884,\n", + " 885,\n", + " 886,\n", + " 887,\n", + " 888,\n", + " 889,\n", + " 890,\n", + " 891,\n", + " 892,\n", + " 893,\n", + " 894,\n", + " 895,\n", + " 896,\n", + " 897,\n", + " 898,\n", + " 899,\n", + " 900,\n", + " 901,\n", + " 902,\n", + " 903,\n", + " 904,\n", + " 905,\n", + " 906,\n", + " 907,\n", + " 908,\n", + " 909,\n", + " 910,\n", + " 911,\n", + " 912,\n", + " 913,\n", + " 914,\n", + " 915,\n", + " 916,\n", + " 917,\n", + " 918,\n", + " 919,\n", + " 920,\n", + " 921,\n", + " 922,\n", + " 923,\n", + " 924,\n", + " 925,\n", + " 926,\n", + " 927,\n", + " 928,\n", + " 929,\n", + " 930,\n", + " 931,\n", + " 932,\n", + " 933,\n", + " 934,\n", + " 935,\n", + " 936,\n", + " 937,\n", + " 938,\n", + " 939,\n", + " 940,\n", + " 941,\n", + " 942,\n", + " 943,\n", + " 944,\n", + " 945,\n", + " 946,\n", + " 947,\n", + " 948,\n", + " 949,\n", + " 950,\n", + " 951,\n", + " 952,\n", + " 953,\n", + " 954,\n", + " 955,\n", + " 956,\n", + " 957,\n", + " 958,\n", + " 959,\n", + " 960,\n", + " 961,\n", + " 962,\n", + " 963,\n", + " 964,\n", + " 965,\n", + " 966,\n", + " 967,\n", + " 968,\n", + " 969,\n", + " 970,\n", + " 971,\n", + " 972,\n", + " 973,\n", + " 974,\n", + " 975,\n", + " 976,\n", + " 977,\n", + " 978,\n", + " 979,\n", + " 980,\n", + " 981,\n", + " 982,\n", + " 983,\n", + " 984,\n", + " 985,\n", + " 986,\n", + " 987,\n", + " 988,\n", + " 989,\n", + " 990,\n", + " 991,\n", + " 992,\n", + " 993,\n", + " 994,\n", + " 995,\n", + " 996,\n", + " 997,\n", + " 998,\n", + " 999,\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Heavy atoms\n", "msm.select(molecular_system, 'not atom_type==\"H\"')" @@ -306,9 +1341,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='atom', selection=[0,1,2])" ] @@ -324,9 +1370,1020 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[2,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 11,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 18,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 27,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 34,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 42,\n", + " 44,\n", + " 47,\n", + " 49,\n", + " 52,\n", + " 54,\n", + " 57,\n", + " 59,\n", + " 60,\n", + " 65,\n", + " 67,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 72,\n", + " 73,\n", + " 74,\n", + " 75,\n", + " 76,\n", + " 79,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 88,\n", + " 90,\n", + " 94,\n", + " 96,\n", + " 97,\n", + " 102,\n", + " 106,\n", + " 108,\n", + " 112,\n", + " 114,\n", + " 115,\n", + " 116,\n", + " 121,\n", + " 123,\n", + " 127,\n", + " 129,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 135,\n", + " 137,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 143,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 150,\n", + " 152,\n", + " 153,\n", + " 154,\n", + " 157,\n", + " 159,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 165,\n", + " 167,\n", + " 168,\n", + " 169,\n", + " 170,\n", + " 173,\n", + " 175,\n", + " 176,\n", + " 177,\n", + " 182,\n", + " 184,\n", + " 186,\n", + " 189,\n", + " 191,\n", + " 192,\n", + " 193,\n", + " 194,\n", + " 197,\n", + " 199,\n", + " 200,\n", + " 205,\n", + " 207,\n", + " 210,\n", + " 212,\n", + " 215,\n", + " 217,\n", + " 219,\n", + " 222,\n", + " 224,\n", + " 225,\n", + " 226,\n", + " 227,\n", + " 228,\n", + " 229,\n", + " 230,\n", + " 233,\n", + " 235,\n", + " 236,\n", + " 241,\n", + " 243,\n", + " 244,\n", + " 246,\n", + " 247,\n", + " 251,\n", + " 253,\n", + " 254,\n", + " 259,\n", + " 261,\n", + " 262,\n", + " 263,\n", + " 266,\n", + " 268,\n", + " 269,\n", + " 270,\n", + " 275,\n", + " 277,\n", + " 281,\n", + " 283,\n", + " 284,\n", + " 285,\n", + " 288,\n", + " 290,\n", + " 291,\n", + " 292,\n", + " 295,\n", + " 297,\n", + " 300,\n", + " 302,\n", + " 303,\n", + " 304,\n", + " 307,\n", + " 309,\n", + " 311,\n", + " 314,\n", + " 316,\n", + " 317,\n", + " 318,\n", + " 319,\n", + " 320,\n", + " 321,\n", + " 322,\n", + " 325,\n", + " 327,\n", + " 328,\n", + " 329,\n", + " 330,\n", + " 333,\n", + " 335,\n", + " 336,\n", + " 338,\n", + " 339,\n", + " 343,\n", + " 345,\n", + " 346,\n", + " 347,\n", + " 348,\n", + " 351,\n", + " 353,\n", + " 354,\n", + " 355,\n", + " 358,\n", + " 360,\n", + " 361,\n", + " 363,\n", + " 366,\n", + " 368,\n", + " 370,\n", + " 373,\n", + " 375,\n", + " 376,\n", + " 377,\n", + " 378,\n", + " 382,\n", + " 384,\n", + " 387,\n", + " 389,\n", + " 390,\n", + " 391,\n", + " 393,\n", + " 398,\n", + " 400,\n", + " 401,\n", + " 402,\n", + " 403,\n", + " 406,\n", + " 408,\n", + " 410,\n", + " 413,\n", + " 415,\n", + " 416,\n", + " 421,\n", + " 423,\n", + " 424,\n", + " 425,\n", + " 428,\n", + " 430,\n", + " 431,\n", + " 432,\n", + " 433,\n", + " 437,\n", + " 439,\n", + " 440,\n", + " 441,\n", + " 442,\n", + " 443,\n", + " 444,\n", + " 445,\n", + " 448,\n", + " 450,\n", + " 451,\n", + " 452,\n", + " 457,\n", + " 459,\n", + " 460,\n", + " 461,\n", + " 462,\n", + " 465,\n", + " 467,\n", + " 470,\n", + " 472,\n", + " 475,\n", + " 477,\n", + " 478,\n", + " 479,\n", + " 484,\n", + " 486,\n", + " 487,\n", + " 492,\n", + " 494,\n", + " 497,\n", + " 499,\n", + " 500,\n", + " 501,\n", + " 502,\n", + " 505,\n", + " 507,\n", + " 509,\n", + " 512,\n", + " 514,\n", + " 515,\n", + " 516,\n", + " 518,\n", + " 523,\n", + " 525,\n", + " 529,\n", + " 533,\n", + " 535,\n", + " 538,\n", + " 540,\n", + " 541,\n", + " 542,\n", + " 543,\n", + " 544,\n", + " 545,\n", + " 546,\n", + " 549,\n", + " 551,\n", + " 553,\n", + " 556,\n", + " 560,\n", + " 562,\n", + " 563,\n", + " 564,\n", + " 569,\n", + " 571,\n", + " 572,\n", + " 573,\n", + " 576,\n", + " 578,\n", + " 582,\n", + " 584,\n", + " 585,\n", + " 586,\n", + " 587,\n", + " 590,\n", + " 592,\n", + " 593,\n", + " 594,\n", + " 599,\n", + " 601,\n", + " 602,\n", + " 603,\n", + " 604,\n", + " 607,\n", + " 609,\n", + " 610,\n", + " 611,\n", + " 612,\n", + " 615,\n", + " 617,\n", + " 618,\n", + " 619,\n", + " 620,\n", + " 624,\n", + " 626,\n", + " 627,\n", + " 632,\n", + " 634,\n", + " 635,\n", + " 636,\n", + " 637,\n", + " 638,\n", + " 639,\n", + " 640,\n", + " 644,\n", + " 648,\n", + " 650,\n", + " 651,\n", + " 652,\n", + " 653,\n", + " 656,\n", + " 658,\n", + " 662,\n", + " 664,\n", + " 665,\n", + " 666,\n", + " 667,\n", + " 669,\n", + " 670,\n", + " 671,\n", + " 672,\n", + " 673,\n", + " 676,\n", + " 678,\n", + " 679,\n", + " 680,\n", + " 683,\n", + " 685,\n", + " 686,\n", + " 687,\n", + " 690,\n", + " 692,\n", + " 693,\n", + " 694,\n", + " 695,\n", + " 698,\n", + " 702,\n", + " 704,\n", + " 705,\n", + " 707,\n", + " 708,\n", + " 712,\n", + " 714,\n", + " 718,\n", + " 720,\n", + " 721,\n", + " 722,\n", + " 727,\n", + " 729,\n", + " 730,\n", + " 731,\n", + " 733,\n", + " 738,\n", + " 740,\n", + " 741,\n", + " 742,\n", + " 744,\n", + " 749,\n", + " 751,\n", + " 752,\n", + " 753,\n", + " 754,\n", + " 757,\n", + " 759,\n", + " 760,\n", + " 761,\n", + " 762,\n", + " 763,\n", + " 764,\n", + " 765,\n", + " 769,\n", + " 771,\n", + " 772,\n", + " 773,\n", + " 774,\n", + " 775,\n", + " 776,\n", + " 777,\n", + " 781,\n", + " 785,\n", + " 787,\n", + " 788,\n", + " 789,\n", + " 794,\n", + " 796,\n", + " 798,\n", + " 801,\n", + " 803,\n", + " 804,\n", + " 809,\n", + " 811,\n", + " 812,\n", + " 813,\n", + " 818,\n", + " 820,\n", + " 821,\n", + " 822,\n", + " 823,\n", + " 826,\n", + " 828,\n", + " 829,\n", + " 830,\n", + " 833,\n", + " 835,\n", + " 838,\n", + " 840,\n", + " 841,\n", + " 842,\n", + " 847,\n", + " 849,\n", + " 850,\n", + " 851,\n", + " 852,\n", + " 856,\n", + " 858,\n", + " 859,\n", + " 860,\n", + " 863,\n", + " 865,\n", + " 868,\n", + " 870,\n", + " 871,\n", + " 872,\n", + " 877,\n", + " 879,\n", + " 882,\n", + " 884,\n", + " 888,\n", + " 890,\n", + " 893,\n", + " 895,\n", + " 898,\n", + " 902,\n", + " 904,\n", + " 905,\n", + " 906,\n", + " 907,\n", + " 908,\n", + " 909,\n", + " 910,\n", + " 913,\n", + " 915,\n", + " 916,\n", + " 918,\n", + " 919,\n", + " 923,\n", + " 925,\n", + " 926,\n", + " 927,\n", + " 930,\n", + " 932,\n", + " 933,\n", + " 934,\n", + " 935,\n", + " 938,\n", + " 940,\n", + " 941,\n", + " 942,\n", + " 945,\n", + " 947,\n", + " 951,\n", + " 953,\n", + " 954,\n", + " 955,\n", + " 958,\n", + " 962,\n", + " 964,\n", + " 965,\n", + " 966,\n", + " 971,\n", + " 973,\n", + " 975,\n", + " 978,\n", + " 980,\n", + " 981,\n", + " 986,\n", + " 988,\n", + " 989,\n", + " 990,\n", + " 995,\n", + " 997,\n", + " 998,\n", + " 999,\n", + " 1004,\n", + " 1006,\n", + " 1007,\n", + " 1008,\n", + " 1010,\n", + " 1015,\n", + " 1017,\n", + " 1018,\n", + " 1019,\n", + " 1024,\n", + " 1026,\n", + " 1029,\n", + " 1033,\n", + " 1035,\n", + " 1036,\n", + " 1037,\n", + " 1039,\n", + " 1044,\n", + " 1046,\n", + " 1048,\n", + " 1051,\n", + " 1053,\n", + " 1056,\n", + " 1058,\n", + " 1061,\n", + " 1063,\n", + " 1064,\n", + " 1065,\n", + " 1068,\n", + " 1070,\n", + " 1071,\n", + " 1072,\n", + " 1075,\n", + " 1077,\n", + " 1078,\n", + " 1079,\n", + " 1080,\n", + " 1083,\n", + " 1085,\n", + " 1087,\n", + " 1090,\n", + " 1092,\n", + " 1093,\n", + " 1094,\n", + " 1099,\n", + " 1101,\n", + " 1102,\n", + " 1103,\n", + " 1104,\n", + " 1107,\n", + " 1109,\n", + " 1112,\n", + " 1114,\n", + " 1117,\n", + " 1119,\n", + " 1120,\n", + " 1121,\n", + " 1124,\n", + " 1126,\n", + " 1129,\n", + " 1131,\n", + " 1132,\n", + " 1133,\n", + " 1138,\n", + " 1140,\n", + " 1141,\n", + " 1142,\n", + " 1143,\n", + " 1147,\n", + " 1149,\n", + " 1150,\n", + " 1151,\n", + " 1152,\n", + " 1155,\n", + " 1157,\n", + " 1161,\n", + " 1163,\n", + " 1164,\n", + " 1165,\n", + " 1166,\n", + " 1170,\n", + " 1172,\n", + " 1173,\n", + " 1174,\n", + " 1179,\n", + " 1181,\n", + " 1184,\n", + " 1186,\n", + " 1187,\n", + " 1188,\n", + " 1189,\n", + " 1191,\n", + " 1192,\n", + " 1193,\n", + " 1194,\n", + " 1195,\n", + " 1198,\n", + " 1200,\n", + " 1204,\n", + " 1206,\n", + " 1207,\n", + " 1208,\n", + " 1210,\n", + " 1215,\n", + " 1217,\n", + " 1218,\n", + " 1219,\n", + " 1222,\n", + " 1224,\n", + " 1225,\n", + " 1226,\n", + " 1229,\n", + " 1231,\n", + " 1232,\n", + " 1233,\n", + " 1234,\n", + " 1237,\n", + " 1239,\n", + " 1242,\n", + " 1244,\n", + " 1245,\n", + " 1246,\n", + " 1247,\n", + " 1248,\n", + " 1249,\n", + " 1250,\n", + " 1254,\n", + " 1256,\n", + " 1257,\n", + " 1258,\n", + " 1263,\n", + " 1265,\n", + " 1266,\n", + " 1267,\n", + " 1270,\n", + " 1272,\n", + " 1273,\n", + " 1274,\n", + " 1277,\n", + " 1279,\n", + " 1280,\n", + " 1281,\n", + " 1282,\n", + " 1284,\n", + " 1285,\n", + " 1286,\n", + " 1287,\n", + " 1288,\n", + " 1291,\n", + " 1293,\n", + " 1296,\n", + " 1298,\n", + " 1299,\n", + " 1300,\n", + " 1301,\n", + " 1304,\n", + " 1308,\n", + " 1310,\n", + " 1312,\n", + " 1315,\n", + " 1319,\n", + " 1321,\n", + " 1322,\n", + " 1323,\n", + " 1324,\n", + " 1328,\n", + " 1330,\n", + " 1331,\n", + " 1332,\n", + " 1335,\n", + " 1337,\n", + " 1340,\n", + " 1342,\n", + " 1344,\n", + " 1347,\n", + " 1349,\n", + " 1350,\n", + " 1351,\n", + " 1354,\n", + " 1356,\n", + " 1357,\n", + " 1358,\n", + " 1363,\n", + " 1365,\n", + " 1366,\n", + " 1367,\n", + " 1372,\n", + " 1374,\n", + " 1377,\n", + " 1379,\n", + " 1380,\n", + " 1381,\n", + " 1386,\n", + " 1388,\n", + " 1389,\n", + " 1390,\n", + " 1395,\n", + " 1397,\n", + " 1398,\n", + " 1399,\n", + " 1402,\n", + " 1404,\n", + " 1405,\n", + " 1407,\n", + " 1408,\n", + " 1412,\n", + " 1414,\n", + " 1415,\n", + " 1416,\n", + " 1421,\n", + " 1423,\n", + " 1424,\n", + " 1425,\n", + " 1426,\n", + " 1429,\n", + " 1431,\n", + " 1432,\n", + " 1433,\n", + " 1434,\n", + " 1437,\n", + " 1439,\n", + " 1440,\n", + " 1441,\n", + " 1443,\n", + " 1448,\n", + " 1450,\n", + " 1451,\n", + " 1452,\n", + " 1454,\n", + " 1459,\n", + " 1461,\n", + " 1462,\n", + " 1463,\n", + " 1464,\n", + " 1466,\n", + " 1467,\n", + " 1468,\n", + " 1469,\n", + " 1470,\n", + " 1473,\n", + " 1475,\n", + " 1476,\n", + " 1477,\n", + " 1480,\n", + " 1482,\n", + " 1483,\n", + " 1484,\n", + " 1486,\n", + " 1491,\n", + " 1493,\n", + " 1497,\n", + " 1499,\n", + " 1500,\n", + " 1501,\n", + " 1502,\n", + " 1506,\n", + " 1508,\n", + " 1509,\n", + " 1510,\n", + " 1511,\n", + " 1514,\n", + " 1518,\n", + " 1520,\n", + " 1522,\n", + " 1525,\n", + " 1527,\n", + " 1528,\n", + " 1533,\n", + " 1535,\n", + " 1536,\n", + " 1537,\n", + " 1538,\n", + " 1541,\n", + " 1543,\n", + " 1546,\n", + " 1548,\n", + " 1551,\n", + " 1553,\n", + " 1554,\n", + " 1555,\n", + " 1560,\n", + " 1562,\n", + " 1563,\n", + " 1564,\n", + " 1565,\n", + " 1568,\n", + " 1570,\n", + " 1571,\n", + " 1572,\n", + " 1574,\n", + " 1579,\n", + " 1581,\n", + " 1582,\n", + " 1583,\n", + " 1584,\n", + " 1587,\n", + " 1589,\n", + " 1590,\n", + " 1591,\n", + " 1592,\n", + " 1595,\n", + " 1597,\n", + " 1598,\n", + " 1599,\n", + " 1600,\n", + " 1601,\n", + " 1602,\n", + " 1603,\n", + " 1607,\n", + " 1611,\n", + " 1615,\n", + " 1617,\n", + " 1621,\n", + " 1623,\n", + " 1624,\n", + " 1625,\n", + " 1628,\n", + " 1630,\n", + " 1632,\n", + " 1635,\n", + " 1637,\n", + " 1640,\n", + " 1642,\n", + " 1643,\n", + " 1644,\n", + " 1645,\n", + " 1649,\n", + " 1651,\n", + " 1652,\n", + " 1657,\n", + " 1659,\n", + " 1662,\n", + " 1664,\n", + " 1665,\n", + " 1666,\n", + " 1668,\n", + " 1673,\n", + " 1675,\n", + " 1677,\n", + " 1680,\n", + " 1682,\n", + " 1683,\n", + " 1684,\n", + " 1685,\n", + " 1688,\n", + " 1690,\n", + " 1691,\n", + " 1692,\n", + " 1693,\n", + " 1694,\n", + " 1695,\n", + " 1696,\n", + " 1700,\n", + " 1702,\n", + " 1703,\n", + " 1704,\n", + " 1709,\n", + " 1711,\n", + " 1712,\n", + " 1714,\n", + " 1717,\n", + " 1719,\n", + " 1720,\n", + " 1721,\n", + " 1723,\n", + " 1728,\n", + " 1730,\n", + " 1731,\n", + " 1736,\n", + " 1738,\n", + " 1739,\n", + " 1740,\n", + " 1741,\n", + " 1744,\n", + " 1746,\n", + " 1747,\n", + " 1752,\n", + " 1756,\n", + " 1758,\n", + " 1759,\n", + " 1760,\n", + " 1761,\n", + " 1762,\n", + " 1763,\n", + " 1764,\n", + " 1767,\n", + " 1769,\n", + " 1770,\n", + " 1771,\n", + " 1772,\n", + " 1775,\n", + " 1777,\n", + " 1778,\n", + " 1779,\n", + " 1782,\n", + " 1786,\n", + " 1790,\n", + " 1792,\n", + " 1795,\n", + " 1797,\n", + " 1801,\n", + " 1803,\n", + " 1804,\n", + " 1805,\n", + " 1806,\n", + " 1809,\n", + " 1811,\n", + " 1812,\n", + " 1813,\n", + " 1814,\n", + " 1818,\n", + " 1820,\n", + " 1821,\n", + " 1822,\n", + " 1825,\n", + " 1827,\n", + " 1828,\n", + " 1829,\n", + " 1834,\n", + " 1836,\n", + " 1837,\n", + " 1838,\n", + " 1839,\n", + " 1840,\n", + " 1841,\n", + " 1842,\n", + " 1845,\n", + " 1847,\n", + " 1848,\n", + " 1849,\n", + " 1852,\n", + " 1854,\n", + " 1855,\n", + " 1856,\n", + " 1861,\n", + " 1863,\n", + " 1864,\n", + " 1865,\n", + " 1866,\n", + " 1869,\n", + " 1871,\n", + " 1872,\n", + " 1873,\n", + " 1874,\n", + " 1877,\n", + " 1879,\n", + " 1880,\n", + " 1881,\n", + " 1886,\n", + " 1888,\n", + " 1891,\n", + " 1893,\n", + " 1895,\n", + " 1898,\n", + " 1900,\n", + " 1901,\n", + " 1902,\n", + " 1903,\n", + " 1908,\n", + " 1910,\n", + " 1914,\n", + " 1916,\n", + " 1917,\n", + " 1918,\n", + " 1919,\n", + " 1923,\n", + " 1925,\n", + " 1926,\n", + " 1927,\n", + " 1930,\n", + " 1932,\n", + " 1933,\n", + " 1934,\n", + " 1939,\n", + " 1941,\n", + " 1942,\n", + " 1943,\n", + " 1946,\n", + " 1948,\n", + " 1949,\n", + " 1950,\n", + " 1951,\n", + " 1954,\n", + " 1956,\n", + " 1959,\n", + " 1961,\n", + " 1964,\n", + " 1966,\n", + " 1969,\n", + " 1971,\n", + " 1972,\n", + " 1977,\n", + " 1979,\n", + " 1980,\n", + " ...]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms of type C not named CA\n", "msm.select(molecular_system, 'atom_type==\"C\" and not atom_name==\"CA\"')" @@ -334,9 +2391,1020 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 3,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 12,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 19,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 28,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 35,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 43,\n", + " 45,\n", + " 48,\n", + " 50,\n", + " 53,\n", + " 55,\n", + " 58,\n", + " 60,\n", + " 61,\n", + " 62,\n", + " 63,\n", + " 66,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 71,\n", + " 72,\n", + " 73,\n", + " 74,\n", + " 75,\n", + " 76,\n", + " 77,\n", + " 80,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 89,\n", + " 91,\n", + " 92,\n", + " 95,\n", + " 97,\n", + " 98,\n", + " 99,\n", + " 100,\n", + " 103,\n", + " 104,\n", + " 107,\n", + " 109,\n", + " 110,\n", + " 113,\n", + " 115,\n", + " 116,\n", + " 117,\n", + " 118,\n", + " 119,\n", + " 122,\n", + " 124,\n", + " 125,\n", + " 128,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 133,\n", + " 136,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 141,\n", + " 144,\n", + " 146,\n", + " 147,\n", + " 148,\n", + " 151,\n", + " 153,\n", + " 154,\n", + " 155,\n", + " 158,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 163,\n", + " 166,\n", + " 168,\n", + " 169,\n", + " 170,\n", + " 171,\n", + " 174,\n", + " 176,\n", + " 177,\n", + " 178,\n", + " 179,\n", + " 180,\n", + " 183,\n", + " 185,\n", + " 186,\n", + " 187,\n", + " 190,\n", + " 192,\n", + " 193,\n", + " 194,\n", + " 195,\n", + " 198,\n", + " 200,\n", + " 201,\n", + " 202,\n", + " 203,\n", + " 206,\n", + " 208,\n", + " 211,\n", + " 213,\n", + " 216,\n", + " 218,\n", + " 219,\n", + " 220,\n", + " 223,\n", + " 225,\n", + " 226,\n", + " 227,\n", + " 228,\n", + " 229,\n", + " 230,\n", + " 231,\n", + " 234,\n", + " 236,\n", + " 237,\n", + " 238,\n", + " 239,\n", + " 242,\n", + " 244,\n", + " 245,\n", + " 246,\n", + " 247,\n", + " 248,\n", + " 249,\n", + " 252,\n", + " 254,\n", + " 255,\n", + " 256,\n", + " 257,\n", + " 260,\n", + " 262,\n", + " 263,\n", + " 264,\n", + " 267,\n", + " 269,\n", + " 270,\n", + " 271,\n", + " 272,\n", + " 273,\n", + " 276,\n", + " 278,\n", + " 279,\n", + " 282,\n", + " 284,\n", + " 285,\n", + " 286,\n", + " 289,\n", + " 291,\n", + " 292,\n", + " 293,\n", + " 296,\n", + " 298,\n", + " 301,\n", + " 303,\n", + " 304,\n", + " 305,\n", + " 308,\n", + " 310,\n", + " 311,\n", + " 312,\n", + " 315,\n", + " 317,\n", + " 318,\n", + " 319,\n", + " 320,\n", + " 321,\n", + " 322,\n", + " 323,\n", + " 326,\n", + " 328,\n", + " 329,\n", + " 330,\n", + " 331,\n", + " 334,\n", + " 336,\n", + " 337,\n", + " 338,\n", + " 339,\n", + " 340,\n", + " 341,\n", + " 344,\n", + " 346,\n", + " 347,\n", + " 348,\n", + " 349,\n", + " 352,\n", + " 354,\n", + " 355,\n", + " 356,\n", + " 359,\n", + " 361,\n", + " 362,\n", + " 363,\n", + " 364,\n", + " 367,\n", + " 369,\n", + " 370,\n", + " 371,\n", + " 374,\n", + " 376,\n", + " 377,\n", + " 378,\n", + " 379,\n", + " 380,\n", + " 383,\n", + " 385,\n", + " 388,\n", + " 390,\n", + " 391,\n", + " 392,\n", + " 393,\n", + " 394,\n", + " 395,\n", + " 396,\n", + " 399,\n", + " 401,\n", + " 402,\n", + " 403,\n", + " 404,\n", + " 407,\n", + " 409,\n", + " 410,\n", + " 411,\n", + " 414,\n", + " 416,\n", + " 417,\n", + " 418,\n", + " 419,\n", + " 422,\n", + " 424,\n", + " 425,\n", + " 426,\n", + " 429,\n", + " 431,\n", + " 432,\n", + " 433,\n", + " 434,\n", + " 435,\n", + " 438,\n", + " 440,\n", + " 441,\n", + " 442,\n", + " 443,\n", + " 444,\n", + " 445,\n", + " 446,\n", + " 449,\n", + " 451,\n", + " 452,\n", + " 453,\n", + " 454,\n", + " 455,\n", + " 458,\n", + " 460,\n", + " 461,\n", + " 462,\n", + " 463,\n", + " 466,\n", + " 468,\n", + " 471,\n", + " 473,\n", + " 476,\n", + " 478,\n", + " 479,\n", + " 480,\n", + " 481,\n", + " 482,\n", + " 485,\n", + " 487,\n", + " 488,\n", + " 489,\n", + " 490,\n", + " 493,\n", + " 495,\n", + " 498,\n", + " 500,\n", + " 501,\n", + " 502,\n", + " 503,\n", + " 506,\n", + " 508,\n", + " 509,\n", + " 510,\n", + " 513,\n", + " 515,\n", + " 516,\n", + " 517,\n", + " 518,\n", + " 519,\n", + " 520,\n", + " 521,\n", + " 524,\n", + " 526,\n", + " 527,\n", + " 530,\n", + " 531,\n", + " 534,\n", + " 536,\n", + " 539,\n", + " 541,\n", + " 542,\n", + " 543,\n", + " 544,\n", + " 545,\n", + " 546,\n", + " 547,\n", + " 550,\n", + " 552,\n", + " 553,\n", + " 554,\n", + " 557,\n", + " 558,\n", + " 561,\n", + " 563,\n", + " 564,\n", + " 565,\n", + " 566,\n", + " 567,\n", + " 570,\n", + " 572,\n", + " 573,\n", + " 574,\n", + " 577,\n", + " 579,\n", + " 580,\n", + " 583,\n", + " 585,\n", + " 586,\n", + " 587,\n", + " 588,\n", + " 591,\n", + " 593,\n", + " 594,\n", + " 595,\n", + " 596,\n", + " 597,\n", + " 600,\n", + " 602,\n", + " 603,\n", + " 604,\n", + " 605,\n", + " 608,\n", + " 610,\n", + " 611,\n", + " 612,\n", + " 613,\n", + " 616,\n", + " 618,\n", + " 619,\n", + " 620,\n", + " 621,\n", + " 622,\n", + " 625,\n", + " 627,\n", + " 628,\n", + " 629,\n", + " 630,\n", + " 633,\n", + " 635,\n", + " 636,\n", + " 637,\n", + " 638,\n", + " 639,\n", + " 640,\n", + " 641,\n", + " 642,\n", + " 645,\n", + " 646,\n", + " 649,\n", + " 651,\n", + " 652,\n", + " 653,\n", + " 654,\n", + " 657,\n", + " 659,\n", + " 660,\n", + " 663,\n", + " 665,\n", + " 666,\n", + " 667,\n", + " 668,\n", + " 669,\n", + " 670,\n", + " 671,\n", + " 672,\n", + " 673,\n", + " 674,\n", + " 677,\n", + " 679,\n", + " 680,\n", + " 681,\n", + " 684,\n", + " 686,\n", + " 687,\n", + " 688,\n", + " 691,\n", + " 693,\n", + " 694,\n", + " 695,\n", + " 696,\n", + " 699,\n", + " 700,\n", + " 703,\n", + " 705,\n", + " 706,\n", + " 707,\n", + " 708,\n", + " 709,\n", + " 710,\n", + " 713,\n", + " 715,\n", + " 716,\n", + " 719,\n", + " 721,\n", + " 722,\n", + " 723,\n", + " 724,\n", + " 725,\n", + " 728,\n", + " 730,\n", + " 731,\n", + " 732,\n", + " 733,\n", + " 734,\n", + " 735,\n", + " 736,\n", + " 739,\n", + " 741,\n", + " 742,\n", + " 743,\n", + " 744,\n", + " 745,\n", + " 746,\n", + " 747,\n", + " 750,\n", + " 752,\n", + " 753,\n", + " 754,\n", + " 755,\n", + " 758,\n", + " 760,\n", + " 761,\n", + " 762,\n", + " 763,\n", + " 764,\n", + " 765,\n", + " 766,\n", + " 767,\n", + " 770,\n", + " 772,\n", + " 773,\n", + " 774,\n", + " 775,\n", + " 776,\n", + " 777,\n", + " 778,\n", + " 779,\n", + " 782,\n", + " 783,\n", + " 786,\n", + " 788,\n", + " 789,\n", + " 790,\n", + " 791,\n", + " 792,\n", + " 795,\n", + " 797,\n", + " 798,\n", + " 799,\n", + " 802,\n", + " 804,\n", + " 805,\n", + " 806,\n", + " 807,\n", + " 810,\n", + " 812,\n", + " 813,\n", + " 814,\n", + " 815,\n", + " 816,\n", + " 819,\n", + " 821,\n", + " 822,\n", + " 823,\n", + " 824,\n", + " 827,\n", + " 829,\n", + " 830,\n", + " 831,\n", + " 834,\n", + " 836,\n", + " 839,\n", + " 841,\n", + " 842,\n", + " 843,\n", + " 844,\n", + " 845,\n", + " 848,\n", + " 850,\n", + " 851,\n", + " 852,\n", + " 853,\n", + " 854,\n", + " 857,\n", + " 859,\n", + " 860,\n", + " 861,\n", + " 864,\n", + " 866,\n", + " 869,\n", + " 871,\n", + " 872,\n", + " 873,\n", + " 874,\n", + " 875,\n", + " 878,\n", + " 880,\n", + " 883,\n", + " 885,\n", + " 886,\n", + " 889,\n", + " 891,\n", + " 894,\n", + " 896,\n", + " 899,\n", + " 900,\n", + " 903,\n", + " 905,\n", + " 906,\n", + " 907,\n", + " 908,\n", + " 909,\n", + " 910,\n", + " 911,\n", + " 914,\n", + " 916,\n", + " 917,\n", + " 918,\n", + " 919,\n", + " 920,\n", + " 921,\n", + " 924,\n", + " 926,\n", + " 927,\n", + " 928,\n", + " 931,\n", + " 933,\n", + " 934,\n", + " 935,\n", + " 936,\n", + " 939,\n", + " 941,\n", + " 942,\n", + " 943,\n", + " 946,\n", + " 948,\n", + " 949,\n", + " 952,\n", + " 954,\n", + " 955,\n", + " 956,\n", + " 959,\n", + " 960,\n", + " 963,\n", + " 965,\n", + " 966,\n", + " 967,\n", + " 968,\n", + " 969,\n", + " 972,\n", + " 974,\n", + " 975,\n", + " 976,\n", + " 979,\n", + " 981,\n", + " 982,\n", + " 983,\n", + " 984,\n", + " 987,\n", + " 989,\n", + " 990,\n", + " 991,\n", + " 992,\n", + " 993,\n", + " 996,\n", + " 998,\n", + " 999,\n", + " 1000,\n", + " 1001,\n", + " 1002,\n", + " 1005,\n", + " 1007,\n", + " 1008,\n", + " 1009,\n", + " 1010,\n", + " 1011,\n", + " 1012,\n", + " 1013,\n", + " 1016,\n", + " 1018,\n", + " 1019,\n", + " 1020,\n", + " 1021,\n", + " 1022,\n", + " 1025,\n", + " 1027,\n", + " 1030,\n", + " 1031,\n", + " 1034,\n", + " 1036,\n", + " 1037,\n", + " 1038,\n", + " 1039,\n", + " 1040,\n", + " 1041,\n", + " 1042,\n", + " 1045,\n", + " 1047,\n", + " 1048,\n", + " 1049,\n", + " 1052,\n", + " 1054,\n", + " 1057,\n", + " 1059,\n", + " 1062,\n", + " 1064,\n", + " 1065,\n", + " 1066,\n", + " 1069,\n", + " 1071,\n", + " 1072,\n", + " 1073,\n", + " 1076,\n", + " 1078,\n", + " 1079,\n", + " 1080,\n", + " 1081,\n", + " 1084,\n", + " 1086,\n", + " 1087,\n", + " 1088,\n", + " 1091,\n", + " 1093,\n", + " 1094,\n", + " 1095,\n", + " 1096,\n", + " 1097,\n", + " 1100,\n", + " 1102,\n", + " 1103,\n", + " 1104,\n", + " 1105,\n", + " 1108,\n", + " 1110,\n", + " 1113,\n", + " 1115,\n", + " 1118,\n", + " 1120,\n", + " 1121,\n", + " 1122,\n", + " 1125,\n", + " 1127,\n", + " 1130,\n", + " 1132,\n", + " 1133,\n", + " 1134,\n", + " 1135,\n", + " 1136,\n", + " 1139,\n", + " 1141,\n", + " 1142,\n", + " 1143,\n", + " 1144,\n", + " 1145,\n", + " 1148,\n", + " 1150,\n", + " 1151,\n", + " 1152,\n", + " 1153,\n", + " 1156,\n", + " 1158,\n", + " 1159,\n", + " 1162,\n", + " 1164,\n", + " 1165,\n", + " 1166,\n", + " 1167,\n", + " 1168,\n", + " 1171,\n", + " 1173,\n", + " 1174,\n", + " 1175,\n", + " 1176,\n", + " 1177,\n", + " 1180,\n", + " 1182,\n", + " 1185,\n", + " 1187,\n", + " 1188,\n", + " 1189,\n", + " 1190,\n", + " 1191,\n", + " 1192,\n", + " 1193,\n", + " 1194,\n", + " 1195,\n", + " 1196,\n", + " 1199,\n", + " 1201,\n", + " 1202,\n", + " 1205,\n", + " 1207,\n", + " 1208,\n", + " 1209,\n", + " 1210,\n", + " 1211,\n", + " 1212,\n", + " 1213,\n", + " 1216,\n", + " 1218,\n", + " 1219,\n", + " 1220,\n", + " 1223,\n", + " 1225,\n", + " 1226,\n", + " 1227,\n", + " 1230,\n", + " 1232,\n", + " 1233,\n", + " 1234,\n", + " 1235,\n", + " 1238,\n", + " 1240,\n", + " 1243,\n", + " 1245,\n", + " 1246,\n", + " 1247,\n", + " 1248,\n", + " 1249,\n", + " 1250,\n", + " 1251,\n", + " 1252,\n", + " 1255,\n", + " 1257,\n", + " 1258,\n", + " 1259,\n", + " 1260,\n", + " 1261,\n", + " 1264,\n", + " 1266,\n", + " 1267,\n", + " 1268,\n", + " 1271,\n", + " 1273,\n", + " 1274,\n", + " 1275,\n", + " 1278,\n", + " 1280,\n", + " 1281,\n", + " 1282,\n", + " 1283,\n", + " 1284,\n", + " 1285,\n", + " 1286,\n", + " 1287,\n", + " 1288,\n", + " 1289,\n", + " 1292,\n", + " 1294,\n", + " 1297,\n", + " 1299,\n", + " 1300,\n", + " 1301,\n", + " 1302,\n", + " 1305,\n", + " 1306,\n", + " 1309,\n", + " 1311,\n", + " 1312,\n", + " 1313,\n", + " 1316,\n", + " 1317,\n", + " 1320,\n", + " 1322,\n", + " 1323,\n", + " 1324,\n", + " 1325,\n", + " 1326,\n", + " 1329,\n", + " 1331,\n", + " 1332,\n", + " 1333,\n", + " 1336,\n", + " 1338,\n", + " 1341,\n", + " 1343,\n", + " 1344,\n", + " 1345,\n", + " 1348,\n", + " 1350,\n", + " 1351,\n", + " 1352,\n", + " 1355,\n", + " 1357,\n", + " 1358,\n", + " 1359,\n", + " 1360,\n", + " 1361,\n", + " 1364,\n", + " 1366,\n", + " 1367,\n", + " 1368,\n", + " 1369,\n", + " 1370,\n", + " 1373,\n", + " 1375,\n", + " 1378,\n", + " 1380,\n", + " 1381,\n", + " 1382,\n", + " 1383,\n", + " 1384,\n", + " 1387,\n", + " 1389,\n", + " 1390,\n", + " 1391,\n", + " 1392,\n", + " 1393,\n", + " 1396,\n", + " 1398,\n", + " 1399,\n", + " 1400,\n", + " 1403,\n", + " 1405,\n", + " 1406,\n", + " 1407,\n", + " 1408,\n", + " 1409,\n", + " 1410,\n", + " 1413,\n", + " 1415,\n", + " 1416,\n", + " 1417,\n", + " 1418,\n", + " 1419,\n", + " 1422,\n", + " 1424,\n", + " 1425,\n", + " 1426,\n", + " 1427,\n", + " 1430,\n", + " 1432,\n", + " 1433,\n", + " 1434,\n", + " 1435,\n", + " 1438,\n", + " 1440,\n", + " 1441,\n", + " 1442,\n", + " 1443,\n", + " 1444,\n", + " 1445,\n", + " 1446,\n", + " 1449,\n", + " 1451,\n", + " 1452,\n", + " 1453,\n", + " 1454,\n", + " 1455,\n", + " 1456,\n", + " 1457,\n", + " 1460,\n", + " 1462,\n", + " 1463,\n", + " 1464,\n", + " 1465,\n", + " 1466,\n", + " 1467,\n", + " 1468,\n", + " 1469,\n", + " 1470,\n", + " 1471,\n", + " 1474,\n", + " 1476,\n", + " 1477,\n", + " 1478,\n", + " 1481,\n", + " 1483,\n", + " 1484,\n", + " 1485,\n", + " 1486,\n", + " 1487,\n", + " 1488,\n", + " 1489,\n", + " 1492,\n", + " 1494,\n", + " 1495,\n", + " 1498,\n", + " 1500,\n", + " 1501,\n", + " 1502,\n", + " 1503,\n", + " 1504,\n", + " 1507,\n", + " 1509,\n", + " 1510,\n", + " 1511,\n", + " 1512,\n", + " 1515,\n", + " 1516,\n", + " 1519,\n", + " 1521,\n", + " 1522,\n", + " 1523,\n", + " 1526,\n", + " 1528,\n", + " 1529,\n", + " 1530,\n", + " 1531,\n", + " 1534,\n", + " 1536,\n", + " 1537,\n", + " 1538,\n", + " 1539,\n", + " 1542,\n", + " 1544,\n", + " 1547,\n", + " 1549,\n", + " 1552,\n", + " 1554,\n", + " 1555,\n", + " 1556,\n", + " 1557,\n", + " 1558,\n", + " 1561,\n", + " 1563,\n", + " 1564,\n", + " 1565,\n", + " 1566,\n", + " 1569,\n", + " 1571,\n", + " 1572,\n", + " 1573,\n", + " 1574,\n", + " 1575,\n", + " 1576,\n", + " 1577,\n", + " 1580,\n", + " 1582,\n", + " 1583,\n", + " 1584,\n", + " 1585,\n", + " 1588,\n", + " 1590,\n", + " 1591,\n", + " 1592,\n", + " 1593,\n", + " 1596,\n", + " 1598,\n", + " 1599,\n", + " 1600,\n", + " 1601,\n", + " 1602,\n", + " 1603,\n", + " 1604,\n", + " 1605,\n", + " 1608,\n", + " 1609,\n", + " 1612,\n", + " 1613,\n", + " 1616,\n", + " 1618,\n", + " ...]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms not named CA, CB or C\n", "msm.select(molecular_system, 'atom_name!=[\"CA\",\"CB\",\"C\"]')" @@ -351,13 +3419,188 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[3818,\n", + " 3819,\n", + " 3820,\n", + " 3821,\n", + " 3822,\n", + " 3823,\n", + " 3824,\n", + " 3825,\n", + " 3826,\n", + " 3827,\n", + " 3828,\n", + " 3829,\n", + " 3830,\n", + " 3831,\n", + " 3832,\n", + " 3833,\n", + " 3834,\n", + " 3835,\n", + " 3836,\n", + " 3837,\n", + " 3838,\n", + " 3839,\n", + " 3840,\n", + " 3841,\n", + " 3842,\n", + " 3843,\n", + " 3844,\n", + " 3845,\n", + " 3846,\n", + " 3847,\n", + " 3848,\n", + " 3849,\n", + " 3850,\n", + " 3851,\n", + " 3852,\n", + " 3853,\n", + " 3854,\n", + " 3855,\n", + " 3856,\n", + " 3857,\n", + " 3858,\n", + " 3859,\n", + " 3860,\n", + " 3861,\n", + " 3862,\n", + " 3863,\n", + " 3864,\n", + " 3865,\n", + " 3866,\n", + " 3867,\n", + " 3868,\n", + " 3869,\n", + " 3870,\n", + " 3871,\n", + " 3872,\n", + " 3873,\n", + " 3874,\n", + " 3875,\n", + " 3876,\n", + " 3877,\n", + " 3878,\n", + " 3879,\n", + " 3880,\n", + " 3881,\n", + " 3882,\n", + " 3883,\n", + " 3884,\n", + " 3885,\n", + " 3886,\n", + " 3887,\n", + " 3888,\n", + " 3889,\n", + " 3890,\n", + " 3891,\n", + " 3892,\n", + " 3893,\n", + " 3894,\n", + " 3895,\n", + " 3896,\n", + " 3897,\n", + " 3898,\n", + " 3899,\n", + " 3900,\n", + " 3901,\n", + " 3902,\n", + " 3903,\n", + " 3904,\n", + " 3905,\n", + " 3906,\n", + " 3907,\n", + " 3908,\n", + " 3909,\n", + " 3910,\n", + " 3911,\n", + " 3912,\n", + " 3913,\n", + " 3914,\n", + " 3915,\n", + " 3916,\n", + " 3917,\n", + " 3918,\n", + " 3919,\n", + " 3920,\n", + " 3921,\n", + " 3922,\n", + " 3923,\n", + " 3924,\n", + " 3925,\n", + " 3926,\n", + " 3927,\n", + " 3928,\n", + " 3929,\n", + " 3930,\n", + " 3931,\n", + " 3932,\n", + " 3933,\n", + " 3934,\n", + " 3935,\n", + " 3936,\n", + " 3937,\n", + " 3938,\n", + " 3939,\n", + " 3940,\n", + " 3941,\n", + " 3942,\n", + " 3943,\n", + " 3944,\n", + " 3945,\n", + " 3946,\n", + " 3947,\n", + " 3948,\n", + " 3949,\n", + " 3950,\n", + " 3951,\n", + " 3952,\n", + " 3953,\n", + " 3954,\n", + " 3955,\n", + " 3956,\n", + " 3957,\n", + " 3958,\n", + " 3959,\n", + " 3960,\n", + " 3961,\n", + " 3962,\n", + " 3963,\n", + " 3964,\n", + " 3965,\n", + " 3966,\n", + " 3967,\n", + " 3968,\n", + " 3969,\n", + " 3970,\n", + " 3971,\n", + " 3972,\n", + " 3973,\n", + " 3974,\n", + " 3975,\n", + " 3976,\n", + " 3977,\n", + " 3978,\n", + " 3979,\n", + " 3980,\n", + " 3981,\n", + " 3982]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms belonging to molecules of type water.\n", "msm.select(molecular_system, 'molecule_type==\"water\"')" @@ -365,9 +3608,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[25, 26, 27, 28, 29, 30, 31]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Heavy atoms belonging to molecules of type protein.\n", "msm.select(molecular_system, 'molecule_type==\"protein\" and atom_type!=\"H\" and group_index==3')" @@ -375,13 +3629,424 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + " 51,\n", + " 52,\n", + " 53,\n", + " 54,\n", + " 100,\n", + " 101,\n", + " 102,\n", + " 103,\n", + " 141,\n", + " 142,\n", + " 143,\n", + " 144,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 203,\n", + " 204,\n", + " 205,\n", + " 206,\n", + " 207,\n", + " 208,\n", + " 209,\n", + " 210,\n", + " 211,\n", + " 212,\n", + " 257,\n", + " 258,\n", + " 259,\n", + " 260,\n", + " 261,\n", + " 262,\n", + " 263,\n", + " 279,\n", + " 280,\n", + " 281,\n", + " 282,\n", + " 283,\n", + " 284,\n", + " 285,\n", + " 286,\n", + " 287,\n", + " 288,\n", + " 289,\n", + " 290,\n", + " 291,\n", + " 292,\n", + " 293,\n", + " 294,\n", + " 295,\n", + " 296,\n", + " 297,\n", + " 380,\n", + " 381,\n", + " 382,\n", + " 383,\n", + " 384,\n", + " 463,\n", + " 464,\n", + " 465,\n", + " 466,\n", + " 467,\n", + " 468,\n", + " 469,\n", + " 470,\n", + " 471,\n", + " 472,\n", + " 490,\n", + " 491,\n", + " 492,\n", + " 493,\n", + " 494,\n", + " 527,\n", + " 528,\n", + " 529,\n", + " 530,\n", + " 531,\n", + " 532,\n", + " 533,\n", + " 534,\n", + " 535,\n", + " 554,\n", + " 555,\n", + " 556,\n", + " 557,\n", + " 567,\n", + " 568,\n", + " 569,\n", + " 570,\n", + " 571,\n", + " 572,\n", + " 573,\n", + " 642,\n", + " 643,\n", + " 644,\n", + " 645,\n", + " 674,\n", + " 675,\n", + " 676,\n", + " 677,\n", + " 678,\n", + " 679,\n", + " 680,\n", + " 681,\n", + " 682,\n", + " 683,\n", + " 684,\n", + " 685,\n", + " 686,\n", + " 687,\n", + " 696,\n", + " 697,\n", + " 698,\n", + " 699,\n", + " 779,\n", + " 780,\n", + " 781,\n", + " 782,\n", + " 824,\n", + " 825,\n", + " 826,\n", + " 827,\n", + " 828,\n", + " 829,\n", + " 830,\n", + " 831,\n", + " 832,\n", + " 833,\n", + " 834,\n", + " 835,\n", + " 854,\n", + " 855,\n", + " 856,\n", + " 857,\n", + " 858,\n", + " 859,\n", + " 860,\n", + " 861,\n", + " 862,\n", + " 863,\n", + " 864,\n", + " 865,\n", + " 875,\n", + " 876,\n", + " 877,\n", + " 878,\n", + " 879,\n", + " 886,\n", + " 887,\n", + " 888,\n", + " 889,\n", + " 890,\n", + " 891,\n", + " 892,\n", + " 893,\n", + " 894,\n", + " 895,\n", + " 896,\n", + " 897,\n", + " 898,\n", + " 899,\n", + " 921,\n", + " 922,\n", + " 923,\n", + " 924,\n", + " 925,\n", + " 926,\n", + " 927,\n", + " 936,\n", + " 937,\n", + " 938,\n", + " 939,\n", + " 940,\n", + " 941,\n", + " 942,\n", + " 949,\n", + " 950,\n", + " 951,\n", + " 952,\n", + " 953,\n", + " 954,\n", + " 955,\n", + " 956,\n", + " 957,\n", + " 958,\n", + " 959,\n", + " 1022,\n", + " 1023,\n", + " 1024,\n", + " 1025,\n", + " 1026,\n", + " 1027,\n", + " 1028,\n", + " 1029,\n", + " 1030,\n", + " 1049,\n", + " 1050,\n", + " 1051,\n", + " 1052,\n", + " 1053,\n", + " 1054,\n", + " 1055,\n", + " 1056,\n", + " 1057,\n", + " 1058,\n", + " 1059,\n", + " 1060,\n", + " 1061,\n", + " 1062,\n", + " 1063,\n", + " 1064,\n", + " 1065,\n", + " 1066,\n", + " 1067,\n", + " 1068,\n", + " 1069,\n", + " 1070,\n", + " 1071,\n", + " 1072,\n", + " 1105,\n", + " 1106,\n", + " 1107,\n", + " 1108,\n", + " 1109,\n", + " 1110,\n", + " 1111,\n", + " 1112,\n", + " 1113,\n", + " 1114,\n", + " 1115,\n", + " 1116,\n", + " 1117,\n", + " 1118,\n", + " 1119,\n", + " 1120,\n", + " 1121,\n", + " 1122,\n", + " 1123,\n", + " 1124,\n", + " 1125,\n", + " 1126,\n", + " 1177,\n", + " 1178,\n", + " 1179,\n", + " 1180,\n", + " 1181,\n", + " 1213,\n", + " 1214,\n", + " 1215,\n", + " 1216,\n", + " 1217,\n", + " 1218,\n", + " 1219,\n", + " 1220,\n", + " 1221,\n", + " 1222,\n", + " 1223,\n", + " 1224,\n", + " 1225,\n", + " 1226,\n", + " 1235,\n", + " 1236,\n", + " 1237,\n", + " 1238,\n", + " 1239,\n", + " 1268,\n", + " 1269,\n", + " 1270,\n", + " 1271,\n", + " 1272,\n", + " 1273,\n", + " 1274,\n", + " 1289,\n", + " 1290,\n", + " 1291,\n", + " 1292,\n", + " 1293,\n", + " 1302,\n", + " 1303,\n", + " 1304,\n", + " 1305,\n", + " 1313,\n", + " 1314,\n", + " 1315,\n", + " 1316,\n", + " 1326,\n", + " 1327,\n", + " 1328,\n", + " 1329,\n", + " 1330,\n", + " 1331,\n", + " 1332,\n", + " 1333,\n", + " 1334,\n", + " 1335,\n", + " 1336,\n", + " 1337,\n", + " 1370,\n", + " 1371,\n", + " 1372,\n", + " 1373,\n", + " 1374,\n", + " 1393,\n", + " 1394,\n", + " 1395,\n", + " 1396,\n", + " 1397,\n", + " 1398,\n", + " 1399,\n", + " 1471,\n", + " 1472,\n", + " 1473,\n", + " 1474,\n", + " 1475,\n", + " 1476,\n", + " 1477,\n", + " 1512,\n", + " 1513,\n", + " 1514,\n", + " 1515,\n", + " 1539,\n", + " 1540,\n", + " 1541,\n", + " 1542,\n", + " 1543,\n", + " 1544,\n", + " 1545,\n", + " 1546,\n", + " 1547,\n", + " 1548,\n", + " 1605,\n", + " 1606,\n", + " 1607,\n", + " 1608,\n", + " 1609,\n", + " 1610,\n", + " 1611,\n", + " 1612,\n", + " 1619,\n", + " 1620,\n", + " 1621,\n", + " 1622,\n", + " 1623,\n", + " 1624,\n", + " 1625,\n", + " 1633,\n", + " 1634,\n", + " 1635,\n", + " 1636,\n", + " 1637,\n", + " 1655,\n", + " 1656,\n", + " 1657,\n", + " 1658,\n", + " 1659,\n", + " 1750,\n", + " 1751,\n", + " 1752,\n", + " 1753,\n", + " 1773,\n", + " 1774,\n", + " 1775,\n", + " 1776,\n", + " 1777,\n", + " 1778,\n", + " 1779,\n", + " 1780,\n", + " 1781,\n", + " 1782,\n", + " 1783,\n", + " 1784,\n", + " 1785,\n", + " 1786,\n", + " 1787,\n", + " 1788,\n", + " 1789,\n", + " 1790,\n", + " 1791,\n", + " 1792,\n", + " 1843,\n", + " 1844,\n", + " 1845,\n", + " 1846,\n", + " 1847,\n", + " 1848,\n", + " 1849,\n", + " 1884,\n", + " 1885,\n", + " 1886,\n", + " 1887,\n", + " 1888]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms belonging to residues named GLY, ALA or VAL in chain id A.\n", "msm.select(molecular_system, 'group_name==[\"GLY\",\"ALA\",\"VAL\"] and chain_name==\"A\"')" @@ -396,9 +4061,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[10, 11, 12, 13]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, selection=[10,11,12,13])" ] @@ -414,9 +4090,85 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[5,\n", + " 6,\n", + " 7,\n", + " 27,\n", + " 28,\n", + " 39,\n", + " 50,\n", + " 60,\n", + " 61,\n", + " 64,\n", + " 70,\n", + " 107,\n", + " 111,\n", + " 113,\n", + " 115,\n", + " 116,\n", + " 133,\n", + " 137,\n", + " 138,\n", + " 145,\n", + " 146,\n", + " 148,\n", + " 155,\n", + " 162,\n", + " 168,\n", + " 175,\n", + " 180,\n", + " 200,\n", + " 201,\n", + " 213,\n", + " 216,\n", + " 233,\n", + " 245,\n", + " 254,\n", + " 255,\n", + " 256,\n", + " 276,\n", + " 277,\n", + " 288,\n", + " 299,\n", + " 309,\n", + " 310,\n", + " 313,\n", + " 319,\n", + " 356,\n", + " 360,\n", + " 362,\n", + " 364,\n", + " 365,\n", + " 382,\n", + " 386,\n", + " 387,\n", + " 394,\n", + " 395,\n", + " 397,\n", + " 404,\n", + " 411,\n", + " 417,\n", + " 424,\n", + " 429,\n", + " 449,\n", + " 450,\n", + " 462,\n", + " 465,\n", + " 482,\n", + " 494]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Groups with name \"ALA\"\n", "msm.select(molecular_system, element='group', selection='group_name==\"ALA\"')" @@ -424,9 +4176,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 5, 9]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Groups of atoms index 34, 44 or 64\n", "msm.select(molecular_system, element='group', selection='atom_index==[34,44,64]')" @@ -434,13 +4197,271 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 1,\n", + " 2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + " 51,\n", + " 52,\n", + " 53,\n", + " 54,\n", + " 55,\n", + " 56,\n", + " 57,\n", + " 58,\n", + " 59,\n", + " 60,\n", + " 61,\n", + " 62,\n", + " 63,\n", + " 64,\n", + " 65,\n", + " 66,\n", + " 67,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 71,\n", + " 72,\n", + " 73,\n", + " 74,\n", + " 75,\n", + " 76,\n", + " 77,\n", + " 78,\n", + " 79,\n", + " 80,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 87,\n", + " 88,\n", + " 89,\n", + " 90,\n", + " 91,\n", + " 92,\n", + " 93,\n", + " 94,\n", + " 95,\n", + " 96,\n", + " 97,\n", + " 98,\n", + " 99,\n", + " 100,\n", + " 101,\n", + " 102,\n", + " 103,\n", + " 104,\n", + " 105,\n", + " 106,\n", + " 107,\n", + " 108,\n", + " 109,\n", + " 110,\n", + " 111,\n", + " 112,\n", + " 113,\n", + " 114,\n", + " 115,\n", + " 116,\n", + " 117,\n", + " 118,\n", + " 119,\n", + " 120,\n", + " 121,\n", + " 122,\n", + " 123,\n", + " 124,\n", + " 125,\n", + " 126,\n", + " 127,\n", + " 128,\n", + " 129,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 133,\n", + " 134,\n", + " 135,\n", + " 136,\n", + " 137,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 141,\n", + " 142,\n", + " 143,\n", + " 144,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 148,\n", + " 149,\n", + " 150,\n", + " 151,\n", + " 152,\n", + " 153,\n", + " 154,\n", + " 155,\n", + " 156,\n", + " 157,\n", + " 158,\n", + " 159,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 163,\n", + " 164,\n", + " 165,\n", + " 166,\n", + " 167,\n", + " 168,\n", + " 169,\n", + " 170,\n", + " 171,\n", + " 172,\n", + " 173,\n", + " 174,\n", + " 175,\n", + " 176,\n", + " 177,\n", + " 178,\n", + " 179,\n", + " 180,\n", + " 181,\n", + " 182,\n", + " 183,\n", + " 184,\n", + " 185,\n", + " 186,\n", + " 187,\n", + " 188,\n", + " 189,\n", + " 190,\n", + " 191,\n", + " 192,\n", + " 193,\n", + " 194,\n", + " 195,\n", + " 196,\n", + " 197,\n", + " 198,\n", + " 199,\n", + " 200,\n", + " 201,\n", + " 202,\n", + " 203,\n", + " 204,\n", + " 205,\n", + " 206,\n", + " 207,\n", + " 208,\n", + " 209,\n", + " 210,\n", + " 211,\n", + " 212,\n", + " 213,\n", + " 214,\n", + " 215,\n", + " 216,\n", + " 217,\n", + " 218,\n", + " 219,\n", + " 220,\n", + " 221,\n", + " 222,\n", + " 223,\n", + " 224,\n", + " 225,\n", + " 226,\n", + " 227,\n", + " 228,\n", + " 229,\n", + " 230,\n", + " 231,\n", + " 232,\n", + " 233,\n", + " 234,\n", + " 235,\n", + " 236,\n", + " 237,\n", + " 238,\n", + " 239,\n", + " 240,\n", + " 241,\n", + " 242,\n", + " 243,\n", + " 244,\n", + " 245,\n", + " 246,\n", + " 247]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Groups belonging to chain id A or C and molecule of type anything but water\n", "msm.select(molecular_system, element='group', selection='chain_name in [\"A\", \"C\"] and molecule_type!=\"water\"')" @@ -448,13 +4469,188 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + " 51,\n", + " 52,\n", + " 53,\n", + " 54,\n", + " 55,\n", + " 56,\n", + " 57,\n", + " 58,\n", + " 59,\n", + " 60,\n", + " 61,\n", + " 62,\n", + " 63,\n", + " 64,\n", + " 65,\n", + " 66,\n", + " 67,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 71,\n", + " 72,\n", + " 73,\n", + " 74,\n", + " 75,\n", + " 76,\n", + " 77,\n", + " 78,\n", + " 79,\n", + " 80,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 87,\n", + " 88,\n", + " 89,\n", + " 90,\n", + " 91,\n", + " 92,\n", + " 93,\n", + " 94,\n", + " 95,\n", + " 96,\n", + " 97,\n", + " 98,\n", + " 99,\n", + " 100,\n", + " 101,\n", + " 102,\n", + " 103,\n", + " 104,\n", + " 105,\n", + " 106,\n", + " 107,\n", + " 108,\n", + " 109,\n", + " 110,\n", + " 111,\n", + " 112,\n", + " 113,\n", + " 114,\n", + " 115,\n", + " 116,\n", + " 117,\n", + " 118,\n", + " 119,\n", + " 120,\n", + " 121,\n", + " 122,\n", + " 123,\n", + " 124,\n", + " 125,\n", + " 126,\n", + " 127,\n", + " 128,\n", + " 129,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 133,\n", + " 134,\n", + " 135,\n", + " 136,\n", + " 137,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 141,\n", + " 142,\n", + " 143,\n", + " 144,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 148,\n", + " 149,\n", + " 150,\n", + " 151,\n", + " 152,\n", + " 153,\n", + " 154,\n", + " 155,\n", + " 156,\n", + " 157,\n", + " 158,\n", + " 159,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 163,\n", + " 164,\n", + " 165,\n", + " 166]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Molecules of type water\n", "msm.select(molecular_system, 'molecule_type==\"water\"', element='molecule')" @@ -462,9 +4658,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Chains with molecules of type water\n", "msm.select(molecular_system, 'molecule_type==\"water\"', element='chain')" @@ -472,9 +4679,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[42, 43, 44, 45]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Bonds in group index 5\n", "msm.select(molecular_system, 'group_index==5', element='bond')" @@ -489,18 +4707,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='group', selection=[0,1,2,3,4,5,6,7,8,9,10,11])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[3900, 3910, 3920]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='molecule', selection=[3900, 3910, 3920])" ] @@ -516,9 +4756,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[77,\n", + " 78,\n", + " 79,\n", + " 80,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 87,\n", + " 88,\n", + " 89,\n", + " 90,\n", + " 91,\n", + " 92,\n", + " 93,\n", + " 94,\n", + " 95,\n", + " 96,\n", + " 97,\n", + " 98,\n", + " 99]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms in groups with indices 10, 11 or 12.\n", "indices = [10,11,12]\n", @@ -527,9 +4800,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[10, 11, 12, 16, 17, 18, 19, 25, 26, 27, 28]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Atoms named CA, C, O or N in groups with indices 10 to 29.\n", "indices = list(range(10,30))\n", @@ -539,9 +4823,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 100, 200]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Groups with indices equal to 0, 100 or 200\n", "indices = [0,100,200]\n", @@ -559,27 +4854,81 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[89,\n", + " 480,\n", + " 489,\n", + " 527,\n", + " 547,\n", + " 550,\n", + " 552,\n", + " 554,\n", + " 557,\n", + " 566,\n", + " 600,\n", + " 723,\n", + " 734,\n", + " 3818,\n", + " 3819,\n", + " 3820,\n", + " 3833,\n", + " 3836,\n", + " 3854,\n", + " 3866,\n", + " 3870,\n", + " 3872]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'chain_name==\"A\" within 0.3 nm of chain_name==\"B\"')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[119, 213, 473, 531, 654, 696, 799, 1049]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, '(atom_name==\"N\" and chain_name==\"A\") within 3 angstroms of (atom_type==\"O\" and molecule_type==\"water\")')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[10, 42, 62, 72, 73]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, '(atom_name==\"CA\" and chain_name==\"A\") within 0.5 nm of (atom_name==\"CA\" and chain_name==\"B\")',\n", " element='group')" @@ -594,9 +4943,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[1521, 1522, 1723, 1724, 3882]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'chain_name==\"A\" not within 7.8 nanometers of chain_name==\"B\"')" ] @@ -610,18 +4970,82 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[89,\n", + " 480,\n", + " 489,\n", + " 527,\n", + " 547,\n", + " 550,\n", + " 552,\n", + " 554,\n", + " 557,\n", + " 566,\n", + " 600,\n", + " 723,\n", + " 734,\n", + " 3818,\n", + " 3819,\n", + " 3820,\n", + " 3833,\n", + " 3836,\n", + " 3854,\n", + " 3866,\n", + " 3870,\n", + " 3872]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'chain_name==\"A\" within 0.3 nm without pbc of chain_name==\"B\"')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[89,\n", + " 480,\n", + " 489,\n", + " 527,\n", + " 547,\n", + " 550,\n", + " 552,\n", + " 554,\n", + " 557,\n", + " 566,\n", + " 600,\n", + " 723,\n", + " 734,\n", + " 3818,\n", + " 3819,\n", + " 3820,\n", + " 3833,\n", + " 3836,\n", + " 3854,\n", + " 3866,\n", + " 3870,\n", + " 3872]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'chain_name==\"A\" within 0.3 nm with pbc of chain_name==\"B\"')" ] @@ -637,26 +5061,894 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 9,\n", + " 16,\n", + " 25,\n", + " 32,\n", + " 40,\n", + " 45,\n", + " 50,\n", + " 55,\n", + " 63,\n", + " 77,\n", + " 86,\n", + " 92,\n", + " 100,\n", + " 104,\n", + " 110,\n", + " 119,\n", + " 125,\n", + " 133,\n", + " 141,\n", + " 148,\n", + " 155,\n", + " 163,\n", + " 171,\n", + " 180,\n", + " 187,\n", + " 195,\n", + " 203,\n", + " 208,\n", + " 213,\n", + " 220,\n", + " 231,\n", + " 239,\n", + " 249,\n", + " 257,\n", + " 264,\n", + " 273,\n", + " 279,\n", + " 286,\n", + " 293,\n", + " 298,\n", + " 305,\n", + " 312,\n", + " 323,\n", + " 331,\n", + " 341,\n", + " 349,\n", + " 356,\n", + " 364,\n", + " 371,\n", + " 380,\n", + " 385,\n", + " 396,\n", + " 404,\n", + " 411,\n", + " 419,\n", + " 426,\n", + " 435,\n", + " 446,\n", + " 455,\n", + " 463,\n", + " 468,\n", + " 473,\n", + " 482,\n", + " 490,\n", + " 495,\n", + " 503,\n", + " 510,\n", + " 521,\n", + " 527,\n", + " 531,\n", + " 536,\n", + " 547,\n", + " 554,\n", + " 558,\n", + " 567,\n", + " 574,\n", + " 580,\n", + " 588,\n", + " 597,\n", + " 605,\n", + " 613,\n", + " 622,\n", + " 630,\n", + " 642,\n", + " 646,\n", + " 654,\n", + " 660,\n", + " 674,\n", + " 681,\n", + " 688,\n", + " 696,\n", + " 700,\n", + " 710,\n", + " 716,\n", + " 725,\n", + " 736,\n", + " 747,\n", + " 755,\n", + " 767,\n", + " 779,\n", + " 783,\n", + " 792,\n", + " 799,\n", + " 807,\n", + " 816,\n", + " 824,\n", + " 831,\n", + " 836,\n", + " 845,\n", + " 854,\n", + " 861,\n", + " 866,\n", + " 875,\n", + " 880,\n", + " 886,\n", + " 891,\n", + " 896,\n", + " 900,\n", + " 911,\n", + " 921,\n", + " 928,\n", + " 936,\n", + " 943,\n", + " 949,\n", + " 956,\n", + " 960,\n", + " 969,\n", + " 976,\n", + " 984,\n", + " 993,\n", + " 1002,\n", + " 1013,\n", + " 1022,\n", + " 1027,\n", + " 1031,\n", + " 1042,\n", + " 1049,\n", + " 1054,\n", + " 1059,\n", + " 1066,\n", + " 1073,\n", + " 1081,\n", + " 1088,\n", + " 1097,\n", + " 1105,\n", + " 1110,\n", + " 1115,\n", + " 1122,\n", + " 1127,\n", + " 1136,\n", + " 1145,\n", + " 1153,\n", + " 1159,\n", + " 1168,\n", + " 1177,\n", + " 1182,\n", + " 1196,\n", + " 1202,\n", + " 1213,\n", + " 1220,\n", + " 1227,\n", + " 1235,\n", + " 1240,\n", + " 1252,\n", + " 1261,\n", + " 1268,\n", + " 1275,\n", + " 1289,\n", + " 1294,\n", + " 1302,\n", + " 1306,\n", + " 1313,\n", + " 1317,\n", + " 1326,\n", + " 1333,\n", + " 1338,\n", + " 1345,\n", + " 1352,\n", + " 1361,\n", + " 1370,\n", + " 1375,\n", + " 1384,\n", + " 1393,\n", + " 1400,\n", + " 1410,\n", + " 1419,\n", + " 1427,\n", + " 1435,\n", + " 1446,\n", + " 1457,\n", + " 1471,\n", + " 1478,\n", + " 1489,\n", + " 1495,\n", + " 1504,\n", + " 1512,\n", + " 1516,\n", + " 1523,\n", + " 1531,\n", + " 1539,\n", + " 1544,\n", + " 1549,\n", + " 1558,\n", + " 1566,\n", + " 1577,\n", + " 1585,\n", + " 1593,\n", + " 1605,\n", + " 1609,\n", + " 1613,\n", + " 1619,\n", + " 1626,\n", + " 1633,\n", + " 1638,\n", + " 1647,\n", + " 1655,\n", + " 1660,\n", + " 1671,\n", + " 1678,\n", + " 1686,\n", + " 1698,\n", + " 1707,\n", + " 1715,\n", + " 1726,\n", + " 1734,\n", + " 1742,\n", + " 1750,\n", + " 1754,\n", + " 1765,\n", + " 1773,\n", + " 1780,\n", + " 1784,\n", + " 1788,\n", + " 1793,\n", + " 1799,\n", + " 1807,\n", + " 1816,\n", + " 1823,\n", + " 1832,\n", + " 1843,\n", + " 1850,\n", + " 1859,\n", + " 1867,\n", + " 1875,\n", + " 1884,\n", + " 1889,\n", + " 1896,\n", + " 1906,\n", + " 1912,\n", + " 1921,\n", + " 1928,\n", + " 1937,\n", + " 1944,\n", + " 1952,\n", + " 1957,\n", + " 1962,\n", + " 1967,\n", + " 1975,\n", + " 1989,\n", + " 1998,\n", + " 2004,\n", + " 2012,\n", + " 2016,\n", + " 2022,\n", + " 2031,\n", + " 2037,\n", + " 2045,\n", + " 2053,\n", + " 2060,\n", + " 2067,\n", + " 2075,\n", + " 2083,\n", + " 2092,\n", + " 2099,\n", + " 2107,\n", + " 2115,\n", + " 2120,\n", + " 2125,\n", + " 2132,\n", + " 2143,\n", + " 2151,\n", + " 2161,\n", + " 2169,\n", + " 2176,\n", + " 2185,\n", + " 2191,\n", + " 2198,\n", + " 2205,\n", + " 2210,\n", + " 2217,\n", + " 2224,\n", + " 2235,\n", + " 2243,\n", + " 2253,\n", + " 2261,\n", + " 2268,\n", + " 2276,\n", + " 2283,\n", + " 2292,\n", + " 2297,\n", + " 2308,\n", + " 2316,\n", + " 2323,\n", + " 2331,\n", + " 2338,\n", + " 2347,\n", + " 2358,\n", + " 2367,\n", + " 2375,\n", + " 2380,\n", + " 2385,\n", + " 2394,\n", + " 2402,\n", + " 2407,\n", + " 2415,\n", + " 2422,\n", + " 2433,\n", + " 2439,\n", + " 2443,\n", + " 2448,\n", + " 2459,\n", + " 2466,\n", + " 2470,\n", + " 2479,\n", + " 2486,\n", + " 2492,\n", + " 2500,\n", + " 2509,\n", + " 2517,\n", + " 2525,\n", + " 2534,\n", + " 2542,\n", + " 2554,\n", + " 2558,\n", + " 2566,\n", + " 2572,\n", + " 2586,\n", + " 2593,\n", + " 2600,\n", + " 2608,\n", + " 2612,\n", + " 2622,\n", + " 2628,\n", + " 2637,\n", + " 2648,\n", + " 2659,\n", + " 2667,\n", + " 2679,\n", + " 2691,\n", + " 2695,\n", + " 2704,\n", + " 2711,\n", + " 2719,\n", + " 2728,\n", + " 2736,\n", + " 2743,\n", + " 2748,\n", + " 2757,\n", + " 2766,\n", + " 2773,\n", + " 2778,\n", + " 2787,\n", + " 2792,\n", + " 2798,\n", + " 2803,\n", + " 2808,\n", + " 2812,\n", + " 2823,\n", + " 2833,\n", + " 2840,\n", + " 2848,\n", + " 2855,\n", + " 2861,\n", + " 2868,\n", + " 2872,\n", + " 2881,\n", + " 2888,\n", + " 2896,\n", + " 2905,\n", + " 2914,\n", + " 2925,\n", + " 2934,\n", + " 2939,\n", + " 2943,\n", + " 2954,\n", + " 2961,\n", + " 2966,\n", + " 2971,\n", + " 2978,\n", + " 2985,\n", + " 2993,\n", + " 3000,\n", + " 3009,\n", + " 3017,\n", + " 3022,\n", + " 3027,\n", + " 3034,\n", + " 3039,\n", + " 3048,\n", + " 3057,\n", + " 3065,\n", + " 3071,\n", + " 3080,\n", + " 3089,\n", + " 3094,\n", + " 3108,\n", + " 3114,\n", + " 3125,\n", + " 3132,\n", + " 3139,\n", + " 3147,\n", + " 3152,\n", + " 3164,\n", + " 3173,\n", + " 3180,\n", + " 3187,\n", + " 3201,\n", + " 3206,\n", + " 3214,\n", + " 3218,\n", + " 3225,\n", + " 3229,\n", + " 3238,\n", + " 3245,\n", + " 3250,\n", + " 3257,\n", + " 3264,\n", + " 3273,\n", + " 3282,\n", + " 3287,\n", + " 3296,\n", + " 3305,\n", + " 3312,\n", + " 3322,\n", + " 3331,\n", + " 3339,\n", + " 3347,\n", + " 3358,\n", + " 3369,\n", + " 3383,\n", + " 3390,\n", + " 3401,\n", + " 3407,\n", + " 3416,\n", + " 3424,\n", + " 3428,\n", + " 3435,\n", + " 3443,\n", + " 3451,\n", + " 3456,\n", + " 3461,\n", + " 3470,\n", + " 3478,\n", + " 3489,\n", + " 3497,\n", + " 3505,\n", + " 3517,\n", + " 3521,\n", + " 3525,\n", + " 3531,\n", + " 3538,\n", + " 3545,\n", + " 3550,\n", + " 3559,\n", + " 3567,\n", + " 3572,\n", + " 3583,\n", + " 3590,\n", + " 3598,\n", + " 3610,\n", + " 3619,\n", + " 3627,\n", + " 3638,\n", + " 3646,\n", + " 3654,\n", + " 3662,\n", + " 3666,\n", + " 3677,\n", + " 3685,\n", + " 3692,\n", + " 3696,\n", + " 3700,\n", + " 3705,\n", + " 3711,\n", + " 3719,\n", + " 3728,\n", + " 3735,\n", + " 3744,\n", + " 3755,\n", + " 3762,\n", + " 3771,\n", + " 3779,\n", + " 3787,\n", + " 3796,\n", + " 3801,\n", + " 3808]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'atom_name==\"N\" bonded to atom_type==\"C\"')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": { "tags": [ "scroll-output" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[3,\n", + " 12,\n", + " 19,\n", + " 23,\n", + " 28,\n", + " 35,\n", + " 43,\n", + " 48,\n", + " 53,\n", + " 58,\n", + " 61,\n", + " 66,\n", + " 80,\n", + " 89,\n", + " 95,\n", + " 98,\n", + " 103,\n", + " 107,\n", + " 109,\n", + " 113,\n", + " 117,\n", + " 118,\n", + " 122,\n", + " 124,\n", + " 128,\n", + " 136,\n", + " 144,\n", + " 151,\n", + " 158,\n", + " 166,\n", + " 174,\n", + " 178,\n", + " 179,\n", + " 183,\n", + " 185,\n", + " 190,\n", + " 198,\n", + " 201,\n", + " 206,\n", + " 211,\n", + " 216,\n", + " 218,\n", + " 223,\n", + " 234,\n", + " 237,\n", + " 238,\n", + " 242,\n", + " 252,\n", + " 255,\n", + " 256,\n", + " 260,\n", + " 267,\n", + " 271,\n", + " 276,\n", + " 282,\n", + " 289,\n", + " 296,\n", + " 301,\n", + " 308,\n", + " 310,\n", + " 315,\n", + " 326,\n", + " 334,\n", + " 344,\n", + " 352,\n", + " 359,\n", + " 367,\n", + " 369,\n", + " 374,\n", + " 383,\n", + " 388,\n", + " 399,\n", + " 407,\n", + " 409,\n", + " 414,\n", + " 417,\n", + " 422,\n", + " 429,\n", + " 438,\n", + " 449,\n", + " 453,\n", + " 458,\n", + " 466,\n", + " 471,\n", + " 476,\n", + " 480,\n", + " 485,\n", + " 488,\n", + " 493,\n", + " 498,\n", + " 506,\n", + " 508,\n", + " 513,\n", + " 524,\n", + " 526,\n", + " 530,\n", + " 534,\n", + " 539,\n", + " 550,\n", + " 552,\n", + " 557,\n", + " 561,\n", + " 565,\n", + " 566,\n", + " 570,\n", + " 577,\n", + " 579,\n", + " 583,\n", + " 591,\n", + " 595,\n", + " 600,\n", + " 608,\n", + " 616,\n", + " 625,\n", + " 628,\n", + " 629,\n", + " 633,\n", + " 641,\n", + " 645,\n", + " 649,\n", + " 657,\n", + " 659,\n", + " 663,\n", + " 677,\n", + " 684,\n", + " 691,\n", + " 699,\n", + " 703,\n", + " 713,\n", + " 715,\n", + " 719,\n", + " 723,\n", + " 724,\n", + " 728,\n", + " 739,\n", + " 750,\n", + " 758,\n", + " 766,\n", + " 770,\n", + " 778,\n", + " 782,\n", + " 786,\n", + " 790,\n", + " 791,\n", + " 795,\n", + " 797,\n", + " 802,\n", + " 805,\n", + " 810,\n", + " 814,\n", + " 815,\n", + " 819,\n", + " 827,\n", + " 834,\n", + " 839,\n", + " 843,\n", + " 844,\n", + " 848,\n", + " 857,\n", + " 864,\n", + " 869,\n", + " 873,\n", + " 878,\n", + " 883,\n", + " 889,\n", + " 894,\n", + " 899,\n", + " 903,\n", + " 914,\n", + " 924,\n", + " 931,\n", + " 939,\n", + " 946,\n", + " 952,\n", + " 959,\n", + " 963,\n", + " 967,\n", + " 968,\n", + " 972,\n", + " 974,\n", + " 979,\n", + " 982,\n", + " 987,\n", + " 991,\n", + " 992,\n", + " 996,\n", + " 1000,\n", + " 1001,\n", + " 1005,\n", + " 1016,\n", + " 1020,\n", + " 1021,\n", + " 1025,\n", + " 1030,\n", + " 1034,\n", + " 1045,\n", + " 1047,\n", + " 1052,\n", + " 1057,\n", + " 1062,\n", + " 1069,\n", + " 1076,\n", + " 1084,\n", + " 1086,\n", + " 1091,\n", + " 1095,\n", + " 1100,\n", + " 1108,\n", + " 1113,\n", + " 1118,\n", + " 1125,\n", + " 1130,\n", + " 1134,\n", + " 1139,\n", + " 1148,\n", + " 1156,\n", + " 1158,\n", + " 1162,\n", + " 1171,\n", + " 1175,\n", + " 1176,\n", + " 1180,\n", + " 1185,\n", + " 1199,\n", + " 1201,\n", + " 1205,\n", + " 1216,\n", + " 1223,\n", + " 1230,\n", + " 1238,\n", + " 1243,\n", + " 1251,\n", + " 1255,\n", + " 1259,\n", + " 1260,\n", + " 1264,\n", + " 1271,\n", + " 1278,\n", + " 1292,\n", + " 1297,\n", + " 1305,\n", + " 1309,\n", + " 1311,\n", + " 1316,\n", + " 1320,\n", + " 1329,\n", + " 1336,\n", + " 1341,\n", + " 1343,\n", + " 1348,\n", + " 1355,\n", + " 1359,\n", + " 1364,\n", + " 1368,\n", + " 1373,\n", + " 1378,\n", + " 1382,\n", + " 1387,\n", + " 1391,\n", + " 1392,\n", + " 1396,\n", + " 1403,\n", + " 1413,\n", + " 1417,\n", + " 1418,\n", + " 1422,\n", + " 1430,\n", + " 1438,\n", + " 1449,\n", + " 1460,\n", + " 1474,\n", + " 1481,\n", + " 1492,\n", + " 1494,\n", + " 1498,\n", + " 1507,\n", + " 1515,\n", + " 1519,\n", + " 1521,\n", + " 1526,\n", + " 1529,\n", + " 1530,\n", + " 1534,\n", + " 1542,\n", + " 1547,\n", + " 1552,\n", + " 1556,\n", + " 1561,\n", + " 1569,\n", + " 1580,\n", + " 1588,\n", + " 1596,\n", + " 1604,\n", + " 1608,\n", + " 1612,\n", + " 1616,\n", + " 1618,\n", + " 1622,\n", + " 1629,\n", + " 1631,\n", + " 1636,\n", + " 1641,\n", + " 1650,\n", + " 1653,\n", + " 1658,\n", + " 1663,\n", + " 1674,\n", + " 1676,\n", + " 1681,\n", + " 1689,\n", + " 1697,\n", + " 1701,\n", + " 1705,\n", + " 1710,\n", + " 1718,\n", + " 1729,\n", + " 1732,\n", + " 1733,\n", + " 1737,\n", + " 1745,\n", + " 1748,\n", + " 1753,\n", + " 1757,\n", + " 1768,\n", + " 1776,\n", + " 1783,\n", + " 1787,\n", + " 1791,\n", + " 1796,\n", + " 1798,\n", + " 1802,\n", + " 1810,\n", + " 1819,\n", + " 1826,\n", + " 1830,\n", + " 1831,\n", + " 1835,\n", + " 1846,\n", + " 1853,\n", + " 1857,\n", + " 1858,\n", + " 1862,\n", + " 1870,\n", + " 1878,\n", + " 1882,\n", + " 1883,\n", + " 1887,\n", + " 1892,\n", + " 1894,\n", + " 1899,\n", + " 1905]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, '(atom_type==\"O\" and chain_name==\"A\") bonded to (atom_type==\"C\" and chain_name==\"A\")')" ] @@ -670,9 +5962,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[363, 1714, 2275, 3626]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, '(all not bonded to atom_type==[\"H\",\"N\",\"C\",\"O\"]) and molecule_type==\"protein\"')" ] @@ -686,9 +5989,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[119, 213, 473, 531, 654, 696, 799, 1049]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, '((atom_name==\"N\" and chain_name==\"A\") bonded to atom_type==\"C\") within 3 angstroms of (atom_type==\"O\" and molecule_type==\"water\")')" ] @@ -706,9 +6020,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[86, 87, 88, 89, 90, 91],\n", + " [273, 274, 275, 276, 277, 278],\n", + " [880, 881, 882, 883, 884, 885],\n", + " [943, 944, 945, 946, 947, 948]]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'all in groups of molecule_index==0 and group_name==\"CYS\"')" ] @@ -722,9 +6050,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[87, 88, 90], [274, 275, 277], [881, 882, 884], [944, 945, 947]]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'atom_type==\"C\" in groups of molecule_index==0 and group_name==\"CYS\"')" ] @@ -738,9 +6077,85 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[5,\n", + " 6,\n", + " 7,\n", + " 27,\n", + " 28,\n", + " 39,\n", + " 50,\n", + " 60,\n", + " 61,\n", + " 64,\n", + " 70,\n", + " 107,\n", + " 111,\n", + " 113,\n", + " 115,\n", + " 116,\n", + " 133,\n", + " 137,\n", + " 138,\n", + " 145,\n", + " 146,\n", + " 148,\n", + " 155,\n", + " 162,\n", + " 168,\n", + " 175,\n", + " 180,\n", + " 200,\n", + " 201,\n", + " 213,\n", + " 216,\n", + " 233,\n", + " 245],\n", + " [254,\n", + " 255,\n", + " 256,\n", + " 276,\n", + " 277,\n", + " 288,\n", + " 299,\n", + " 309,\n", + " 310,\n", + " 313,\n", + " 319,\n", + " 356,\n", + " 360,\n", + " 362,\n", + " 364,\n", + " 365,\n", + " 382,\n", + " 386,\n", + " 387,\n", + " 394,\n", + " 395,\n", + " 397,\n", + " 404,\n", + " 411,\n", + " 417,\n", + " 424,\n", + " 429,\n", + " 449,\n", + " 450,\n", + " 462,\n", + " 465,\n", + " 482,\n", + " 494]]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='group',\n", " selection='group_name==\"ALA\" in components of molecule_name==\"TRIOSEPHOSPHATE ISOMERASE\"')" @@ -748,9 +6163,184 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + " 51,\n", + " 52,\n", + " 53,\n", + " 54,\n", + " 55,\n", + " 56,\n", + " 57,\n", + " 58,\n", + " 59,\n", + " 60,\n", + " 61,\n", + " 62,\n", + " 63,\n", + " 64,\n", + " 65,\n", + " 66,\n", + " 67,\n", + " 68,\n", + " 69,\n", + " 70,\n", + " 71,\n", + " 72,\n", + " 73,\n", + " 74],\n", + " [75,\n", + " 76,\n", + " 77,\n", + " 78,\n", + " 79,\n", + " 80,\n", + " 81,\n", + " 82,\n", + " 83,\n", + " 84,\n", + " 85,\n", + " 86,\n", + " 87,\n", + " 88,\n", + " 89,\n", + " 90,\n", + " 91,\n", + " 92,\n", + " 93,\n", + " 94,\n", + " 95,\n", + " 96,\n", + " 97,\n", + " 98,\n", + " 99,\n", + " 100,\n", + " 101,\n", + " 102,\n", + " 103,\n", + " 104,\n", + " 105,\n", + " 106,\n", + " 107,\n", + " 108,\n", + " 109,\n", + " 110,\n", + " 111,\n", + " 112,\n", + " 113,\n", + " 114,\n", + " 115,\n", + " 116,\n", + " 117,\n", + " 118,\n", + " 119,\n", + " 120,\n", + " 121,\n", + " 122,\n", + " 123,\n", + " 124,\n", + " 125,\n", + " 126,\n", + " 127,\n", + " 128,\n", + " 129,\n", + " 130,\n", + " 131,\n", + " 132,\n", + " 133,\n", + " 134,\n", + " 135,\n", + " 136,\n", + " 137,\n", + " 138,\n", + " 139,\n", + " 140,\n", + " 141,\n", + " 142,\n", + " 143,\n", + " 144,\n", + " 145,\n", + " 146,\n", + " 147,\n", + " 148,\n", + " 149,\n", + " 150,\n", + " 151,\n", + " 152,\n", + " 153,\n", + " 154,\n", + " 155,\n", + " 156,\n", + " 157,\n", + " 158,\n", + " 159,\n", + " 160,\n", + " 161,\n", + " 162,\n", + " 163,\n", + " 164,\n", + " 165,\n", + " 166]]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='molecule',\n", " selection='entity_name==\"water\" in chains of chain_name==[\"A\",\"B\"]')" @@ -765,9 +6355,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[[86, 87, 88, 89, 90, 91],\n", + " [273, 274, 275, 276, 277, 278],\n", + " [880, 881, 882, 883, 884, 885],\n", + " [943, 944, 945, 946, 947, 948]],\n", + " [[1998, 1999, 2000, 2001, 2002, 2003],\n", + " [2185, 2186, 2187, 2188, 2189, 2190],\n", + " [2792, 2793, 2794, 2795, 2796, 2797],\n", + " [2855, 2856, 2857, 2858, 2859, 2860]]]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, 'all in groups of group_name==\"CYS\" in components of component_index==[0,1]')" ] @@ -783,31 +6391,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "sel1 = msm.select(molecular_system, 'all in groups of all in components of all')\n", "sel2 = msm.select(molecular_system, 'all in groups of all in components')\n", "sel3 = msm.select(molecular_system, 'all in groups in components of all')\n", - "sel4 = msm.select(molecular_system, 'all in groups in components')" + "sel4 = msm.select(molecular_system, 'all in groups in components')\n", + "sel5 = msm.select(molecular_system, 'in groups in components')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Are \"sel1\" and \"sel3\" equivalent selections?: True\n", + "Are \"sel3\" and \"sel5\" equivalent selections?: True\n" + ] + } + ], "source": [ "equal = True\n", - "for component1, component4 in zip(sel1, sel4):\n", - " for group1, group4 in zip(component1, component4):\n", - " for atom1, atom4 in zip(group1, group4):\n", - " if atom1!=atom4:\n", + "for component1, component3 in zip(sel1, sel3):\n", + " for group1, group3 in zip(component1, component3):\n", + " for atom1, atom3 in zip(group1, group3):\n", + " if atom1!=atom3:\n", " equal = False\n", " break\n", "\n", - "print(f'Are \"sel1\" and \"sel4\" equivalent selections?: {equal}')" + "print(f'Are \"sel1\" and \"sel3\" equivalent selections?: {equal}')\n", + "\n", + "equal = True\n", + "for component3, component5 in zip(sel3, sel5):\n", + " for group3, group5 in zip(component3, component5):\n", + " for atom3, atom5 in zip(group3, group5):\n", + " if atom3!=atom5:\n", + " equal = False\n", + " break\n", + "\n", + "print(f'Are \"sel3\" and \"sel5\" equivalent selections?: {equal}')" ] }, { @@ -821,9 +6449,55 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[240, 332, 701, 912, 1401, 2152, 2244, 2613, 2824, 3313],\n", + " [181,\n", + " 214,\n", + " 306,\n", + " 365,\n", + " 405,\n", + " 504,\n", + " 548,\n", + " 793,\n", + " 970,\n", + " 1043,\n", + " 1082,\n", + " 1307,\n", + " 1339,\n", + " 1517,\n", + " 1627,\n", + " 1672,\n", + " 1890,\n", + " 2093,\n", + " 2126,\n", + " 2218,\n", + " 2277,\n", + " 2317,\n", + " 2416,\n", + " 2460,\n", + " 2705,\n", + " 2882,\n", + " 2955,\n", + " 2994,\n", + " 3219,\n", + " 3251,\n", + " 3429,\n", + " 3539,\n", + " 3584,\n", + " 3802],\n", + " [64, 661, 1183, 1276, 1458, 1976, 2573, 3095, 3188, 3370]]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, ['group_name==\"HIS\" and atom_name==\"CA\"',\n", " 'group_name==\"THR\" and atom_name==\"CA\"',\n", @@ -839,9 +6513,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[[240, 332, 701, 912, 1401, 2152, 2244, 2613, 2824, 3313],\n", + " [78, 79, 81, 82, 83, 84, 87, 88, 90, 93, 94, 96, 97],\n", + " [3],\n", + " [4, 5, 6]]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "group_indices=[10,11,12]\n", "msm.select(molecular_system, ['group_name==\"HIS\" and atom_name==\"CA\"',\n", @@ -861,9 +6549,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([10, 13, 17, 20, 26, 29])" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, selection='(name =~ \"C[A-B]\") and (resid 1 to 3)', syntax='MDTraj')" ] @@ -879,18 +6578,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'@25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44'" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, selection='group_index==[3,4,5]', to_syntax='NGLView')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'index 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44'" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, selection='group_index==[3,4,5]', to_syntax='MDTraj')" ] @@ -904,18 +6625,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'7:A 8:A 9:A'" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='group', selection='group_index==[3,4,5]', to_syntax='NGLView')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'resid 3 4 5'" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "msm.select(molecular_system, element='group', selection='group_index==[3,4,5]', to_syntax='MDTraj')" ] diff --git a/molsysmt/_private/common_get.py b/molsysmt/_private/common_get.py index a56fceedc..a47195ede 100644 --- a/molsysmt/_private/common_get.py +++ b/molsysmt/_private/common_get.py @@ -17,7 +17,7 @@ def get_atom_index_from_atom(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_group_id_from_atom(item, indices='all'): @@ -32,7 +32,7 @@ def get_group_id_from_atom(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_group_name_from_atom(item, indices='all'): @@ -48,7 +48,7 @@ def get_group_name_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_group_type_from_atom(item, indices='all'): @@ -64,7 +64,7 @@ def get_group_type_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_component_id_from_atom(item, indices='all'): @@ -79,7 +79,7 @@ def get_component_id_from_atom(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_component_name_from_atom(item, indices='all'): @@ -95,7 +95,7 @@ def get_component_name_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_component_type_from_atom(item, indices='all'): @@ -111,7 +111,7 @@ def get_component_type_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_id_from_atom(item, indices='all'): @@ -126,7 +126,7 @@ def get_chain_id_from_atom(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_name_from_atom(item, indices='all'): @@ -142,7 +142,7 @@ def get_chain_name_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_type_from_atom(item, indices='all'): @@ -158,7 +158,7 @@ def get_chain_type_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_id_from_atom(item, indices='all'): @@ -173,7 +173,7 @@ def get_molecule_id_from_atom(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_name_from_atom(item, indices='all'): @@ -189,7 +189,7 @@ def get_molecule_name_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_type_from_atom(item, indices='all'): @@ -205,7 +205,7 @@ def get_molecule_type_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_id_from_atom(item, indices='all'): @@ -220,7 +220,7 @@ def get_entity_id_from_atom(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_name_from_atom(item, indices='all'): @@ -236,7 +236,7 @@ def get_entity_name_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_type_from_atom(item, indices='all'): @@ -252,7 +252,7 @@ def get_entity_type_from_atom(item, indices='all'): output = output.astype(object) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_n_atoms_from_atom(item, indices='all'): @@ -368,7 +368,7 @@ def get_bonded_atoms_from_atom(item, indices='all'): del(G, edges) - return output + return output.tolist() @digest(form=form) def get_bond_index_from_atom(item, indices='all'): @@ -392,11 +392,9 @@ def get_bond_index_from_atom(item, indices='all'): for ii in indices: if ii in G: - output.append(np.array([n['index'] for n in G[ii].values()])) + output.append(np.array([n['index'] for n in G[ii].values()]).tolist()) else: - output.append(np.array([])) - - output = np.array(output, dtype=object) + output.append(np.array([]).tolist()) del(G, edges, edge_indices) @@ -426,8 +424,6 @@ def get_n_bonds_from_atom(item, indices='all'): else: output.append(0) - output = np.array(output) - del(G, edges) return output @@ -441,13 +437,13 @@ def get_inner_bond_index_from_atom(item, indices='all'): raise _NotImplementedMethodError @digest(form=form) -def get_n_aminoacids_from_atom(item, indices='all'): +def get_n_amino_acids_from_atom(item, indices='all'): group_indices = get_group_index_from_atom(item, indices=indices) group_indices = np.unique(group_indices) group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_atom(item, indices='all'): @@ -456,7 +452,7 @@ def get_n_nucleotides_from_atom(item, indices='all'): group_indices = np.unique(group_indices) group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_atom(item, indices='all'): @@ -465,7 +461,7 @@ def get_n_ions_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_atom(item, indices='all'): @@ -474,7 +470,7 @@ def get_n_waters_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_atom(item, indices='all'): @@ -483,7 +479,7 @@ def get_n_small_molecules_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_atom(item, indices='all'): @@ -492,7 +488,7 @@ def get_n_peptides_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_atom(item, indices='all'): @@ -501,7 +497,7 @@ def get_n_proteins_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_atom(item, indices='all'): @@ -510,7 +506,7 @@ def get_n_dnas_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_atom(item, indices='all'): @@ -519,7 +515,7 @@ def get_n_rnas_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_atom(item, indices='all'): @@ -528,7 +524,7 @@ def get_n_lipids_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_atom(item, indices='all'): @@ -537,7 +533,7 @@ def get_n_oligosaccharides_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_atom(item, indices='all'): @@ -546,7 +542,7 @@ def get_n_saccharides_from_atom(item, indices='all'): molecule_indices = np.unique(molecule_indices) molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## From group @@ -565,7 +561,7 @@ def get_atom_index_from_group(item, indices='all'): for ii in indices_aux: mask = (target_index_from_atom==ii) - output.append(np.unique(attribute_from_atom[mask])) + output.append(np.unique(attribute_from_atom[mask]).tolist()) del(indices_aux, attribute_from_atom, target_index_from_atom) @@ -574,7 +570,7 @@ def get_atom_index_from_group(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_atom_id_from_group(item, indices='all'): @@ -596,7 +592,7 @@ def get_atom_id_from_group(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_name_from_group(item, indices='all'): @@ -618,7 +614,7 @@ def get_atom_name_from_group(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_type_from_group(item, indices='all'): @@ -640,7 +636,7 @@ def get_atom_type_from_group(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_index_from_group(item, indices='all'): @@ -654,7 +650,7 @@ def get_group_index_from_group(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_component_index_from_group(item, indices='all'): @@ -668,7 +664,7 @@ def get_component_index_from_group(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_component_id_from_group(item, indices='all'): @@ -682,7 +678,7 @@ def get_component_id_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_component_name_from_group(item, indices='all'): @@ -696,7 +692,7 @@ def get_component_name_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_component_type_from_group(item, indices='all'): @@ -710,7 +706,7 @@ def get_component_type_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_index_from_group(item, indices='all'): @@ -724,7 +720,7 @@ def get_chain_index_from_group(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_chain_id_from_group(item, indices='all'): @@ -738,7 +734,7 @@ def get_chain_id_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_name_from_group(item, indices='all'): @@ -752,7 +748,7 @@ def get_chain_name_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_type_from_group(item, indices='all'): @@ -766,7 +762,7 @@ def get_chain_type_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_index_from_group(item, indices='all'): @@ -780,7 +776,7 @@ def get_molecule_index_from_group(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_molecule_id_from_group(item, indices='all'): @@ -794,7 +790,7 @@ def get_molecule_id_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_name_from_group(item, indices='all'): @@ -808,7 +804,7 @@ def get_molecule_name_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_type_from_group(item, indices='all'): @@ -822,7 +818,7 @@ def get_molecule_type_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_index_from_group(item, indices='all'): @@ -836,7 +832,7 @@ def get_entity_index_from_group(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_entity_id_from_group(item, indices='all'): @@ -850,7 +846,7 @@ def get_entity_id_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_name_from_group(item, indices='all'): @@ -864,7 +860,7 @@ def get_entity_name_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_type_from_group(item, indices='all'): @@ -878,7 +874,7 @@ def get_entity_type_from_group(item, indices='all'): aux_dict = dict(zip(aux_unique_indices, aux_vals)) output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_n_atoms_from_group(item, indices='all'): @@ -974,7 +970,7 @@ def get_n_bonds_from_group(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_n_inner_bonds_from_group(item, indices='all'): @@ -987,7 +983,7 @@ def get_n_inner_bonds_from_group(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_inner_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_formal_charge_from_group(item, indices='all'): @@ -1020,23 +1016,21 @@ def get_partial_charge_from_group(item, indices='all'): charges = get_partial_charge_from_atom(item, atom_indices) output.append(np.sum(charges)) - output = np.array(output) - return output @digest(form=form) -def get_n_aminoacids_from_group(item, indices='all'): +def get_n_amino_acids_from_group(item, indices='all'): group_types = get_group_type_from_group(item, indices=indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_group(item, indices='all'): group_types = get_group_type_from_group(item, indices=indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_group(item, indices='all'): @@ -1045,7 +1039,7 @@ def get_n_ions_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_group(item, indices='all'): @@ -1054,7 +1048,7 @@ def get_n_waters_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_group(item, indices='all'): @@ -1063,7 +1057,7 @@ def get_n_small_molecules_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_group(item, indices='all'): @@ -1072,7 +1066,7 @@ def get_n_peptides_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_group(item, indices='all'): @@ -1081,7 +1075,7 @@ def get_n_proteins_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_group(item, indices='all'): @@ -1090,7 +1084,7 @@ def get_n_dnas_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_group(item, indices='all'): @@ -1099,7 +1093,7 @@ def get_n_rnas_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_group(item, indices='all'): @@ -1108,7 +1102,7 @@ def get_n_lipids_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_group(item, indices='all'): @@ -1117,7 +1111,7 @@ def get_n_oligosaccharides_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_group(item, indices='all'): @@ -1126,7 +1120,7 @@ def get_n_saccharides_from_group(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## From component @@ -1154,7 +1148,7 @@ def get_atom_index_from_component(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_atom_id_from_component(item, indices='all'): @@ -1176,7 +1170,7 @@ def get_atom_id_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_name_from_component(item, indices='all'): @@ -1198,7 +1192,7 @@ def get_atom_name_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_type_from_component(item, indices='all'): @@ -1220,7 +1214,7 @@ def get_atom_type_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_index_from_component(item, indices='all'): @@ -1245,7 +1239,7 @@ def get_group_index_from_component(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_group_id_from_component(item, indices='all'): @@ -1267,7 +1261,7 @@ def get_group_id_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_name_from_component(item, indices='all'): @@ -1289,7 +1283,7 @@ def get_group_name_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_type_from_component(item, indices='all'): @@ -1311,7 +1305,7 @@ def get_group_type_from_component(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_index_from_component(item, indices='all'): @@ -1325,7 +1319,7 @@ def get_component_index_from_component(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_chain_index_from_component(item, indices='all'): @@ -1339,7 +1333,7 @@ def get_chain_index_from_component(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_chain_id_from_component(item, indices='all'): @@ -1354,7 +1348,7 @@ def get_chain_id_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_name_from_component(item, indices='all'): @@ -1369,7 +1363,7 @@ def get_chain_name_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_chain_type_from_component(item, indices='all'): @@ -1384,7 +1378,7 @@ def get_chain_type_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_index_from_component(item, indices='all'): @@ -1398,7 +1392,7 @@ def get_molecule_index_from_component(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_molecule_id_from_component(item, indices='all'): @@ -1413,7 +1407,7 @@ def get_molecule_id_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_name_from_component(item, indices='all'): @@ -1428,7 +1422,7 @@ def get_molecule_name_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_molecule_type_from_component(item, indices='all'): @@ -1443,7 +1437,7 @@ def get_molecule_type_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_index_from_component(item, indices='all'): @@ -1457,7 +1451,7 @@ def get_entity_index_from_component(item, indices='all'): del(atom_index_from_target, first_atom_index_from_target) - return output + return output.tolist() @digest(form=form) def get_entity_id_from_component(item, indices='all'): @@ -1472,7 +1466,7 @@ def get_entity_id_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_name_from_component(item, indices='all'): @@ -1487,7 +1481,7 @@ def get_entity_name_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_type_from_component(item, indices='all'): @@ -1502,7 +1496,7 @@ def get_entity_type_from_component(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_n_atoms_from_component(item, indices='all'): @@ -1512,7 +1506,6 @@ def get_n_atoms_from_component(item, indices='all'): output = get_atom_index_from_component(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -1523,7 +1516,6 @@ def get_n_groups_from_component(item, indices='all'): output = get_group_index_from_component(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -1595,7 +1587,7 @@ def get_n_bonds_from_component(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_n_inner_bonds_from_component(item, indices='all'): @@ -1608,7 +1600,7 @@ def get_n_inner_bonds_from_component(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_inner_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_formal_charge_from_component(item, indices='all'): @@ -1643,13 +1635,13 @@ def get_partial_charge_from_group(item, indices='all'): return output @digest(form=form) -def get_n_aminoacids_from_component(item, indices='all'): +def get_n_amino_acids_from_component(item, indices='all'): group_indices = get_group_index_from_component(item, indices=indices) group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_component(item, indices='all'): @@ -1658,7 +1650,7 @@ def get_n_nucleotides_from_component(item, indices='all'): group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_component(item, indices='all'): @@ -1667,7 +1659,7 @@ def get_n_ions_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_component(item, indices='all'): @@ -1676,7 +1668,7 @@ def get_n_waters_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_component(item, indices='all'): @@ -1685,7 +1677,7 @@ def get_n_small_molecules_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_component(item, indices='all'): @@ -1694,7 +1686,7 @@ def get_n_peptides_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_component(item, indices='all'): @@ -1703,7 +1695,7 @@ def get_n_proteins_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_component(item, indices='all'): @@ -1712,7 +1704,7 @@ def get_n_dnas_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_component(item, indices='all'): @@ -1721,7 +1713,7 @@ def get_n_rnas_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_component(item, indices='all'): @@ -1730,7 +1722,7 @@ def get_n_lipids_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_component(item, indices='all'): @@ -1739,7 +1731,7 @@ def get_n_oligosaccharides_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_component(item, indices='all'): @@ -1748,7 +1740,7 @@ def get_n_saccharides_from_component(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## molecule @@ -1776,7 +1768,7 @@ def get_atom_index_from_molecule(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_atom_id_from_molecule(item, indices='all'): @@ -1798,7 +1790,7 @@ def get_atom_id_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_name_from_molecule(item, indices='all'): @@ -1820,7 +1812,7 @@ def get_atom_name_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_type_from_molecule(item, indices='all'): @@ -1842,7 +1834,7 @@ def get_atom_type_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_index_from_molecule(item, indices='all'): @@ -1867,7 +1859,7 @@ def get_group_index_from_molecule(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_group_id_from_molecule(item, indices='all'): @@ -1889,7 +1881,7 @@ def get_group_id_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_name_from_molecule(item, indices='all'): @@ -1911,7 +1903,7 @@ def get_group_name_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_type_from_molecule(item, indices='all'): @@ -1933,7 +1925,7 @@ def get_group_type_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_index_from_molecule(item, indices='all'): @@ -1958,7 +1950,7 @@ def get_component_index_from_molecule(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_component_id_from_molecule(item, indices='all'): @@ -1980,7 +1972,7 @@ def get_component_id_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_name_from_molecule(item, indices='all'): @@ -2002,7 +1994,7 @@ def get_component_name_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_type_from_molecule(item, indices='all'): @@ -2024,7 +2016,7 @@ def get_component_type_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_chain_index_from_molecule(item, indices='all'): @@ -2049,7 +2041,7 @@ def get_chain_index_from_molecule(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_chain_id_from_molecule(item, indices='all'): @@ -2071,7 +2063,7 @@ def get_chain_id_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_chain_name_from_molecule(item, indices='all'): @@ -2093,7 +2085,7 @@ def get_chain_name_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_chain_type_from_molecule(item, indices='all'): @@ -2115,7 +2107,7 @@ def get_chain_type_from_molecule(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_molecule_index_from_molecule(item, indices='all'): @@ -2129,7 +2121,7 @@ def get_molecule_index_from_molecule(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_entity_index_from_molecule(item, indices='all'): @@ -2158,7 +2150,7 @@ def get_entity_id_from_molecule(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_name_from_molecule(item, indices='all'): @@ -2173,7 +2165,7 @@ def get_entity_name_from_molecule(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_entity_type_from_molecule(item, indices='all'): @@ -2188,7 +2180,7 @@ def get_entity_type_from_molecule(item, indices='all'): output = np.vectorize(aux_dict.__getitem__)(aux_indices) del(aux_indices, aux_unique_indices, aux_vals, aux_dict) - return output + return output.tolist() @digest(form=form) def get_n_atoms_from_molecule(item, indices='all'): @@ -2198,7 +2190,6 @@ def get_n_atoms_from_molecule(item, indices='all'): output = get_atom_index_from_molecule(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2209,7 +2200,6 @@ def get_n_groups_from_molecule(item, indices='all'): output = get_group_index_from_molecule(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2220,7 +2210,6 @@ def get_n_components_from_molecule(item, indices='all'): output = get_component_index_from_molecule(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2244,7 +2233,6 @@ def get_n_chains_from_molecule(item, indices='all'): output = get_chain_index_from_molecule(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2275,7 +2263,7 @@ def get_n_bonds_from_molecule(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_n_inner_bonds_from_molecule(item, indices='all'): @@ -2288,7 +2276,7 @@ def get_n_inner_bonds_from_molecule(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_inner_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_formal_charge_from_molecule(item, indices='all'): @@ -2302,8 +2290,6 @@ def get_formal_charge_from_molecule(item, indices='all'): charges = get_formal_charge_from_atom(item, atom_indices) output.append(np.sum(charges)) - output = np.array(output) - return output @digest(form=form) @@ -2318,18 +2304,16 @@ def get_partial_charge_from_molecule(item, indices='all'): charges = get_partial_charge_from_atom(item, atom_indices) output.append(np.sum(charges)) - output = np.array(output) - return output @digest(form=form) -def get_n_aminoacids_from_molecule(item, indices='all'): +def get_n_amino_acids_from_molecule(item, indices='all'): group_indices = get_group_index_from_molecule(item, indices=indices) group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_molecule(item, indices='all'): @@ -2338,77 +2322,77 @@ def get_n_nucleotides_from_molecule(item, indices='all'): group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_molecule(item, indices='all'): molecule_types = get_molecule_type_from_molecule(item, indices=indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## chain @@ -2436,7 +2420,7 @@ def get_atom_index_from_chain(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_atom_id_from_chain(item, indices='all'): @@ -2458,7 +2442,7 @@ def get_atom_id_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_name_from_chain(item, indices='all'): @@ -2480,7 +2464,7 @@ def get_atom_name_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_atom_type_from_chain(item, indices='all'): @@ -2502,7 +2486,7 @@ def get_atom_type_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_index_from_chain(item, indices='all'): @@ -2527,7 +2511,7 @@ def get_group_index_from_chain(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_group_id_from_chain(item, indices='all'): @@ -2549,7 +2533,7 @@ def get_group_id_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_name_from_chain(item, indices='all'): @@ -2571,7 +2555,7 @@ def get_group_name_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_group_type_from_chain(item, indices='all'): @@ -2593,7 +2577,7 @@ def get_group_type_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_index_from_chain(item, indices='all'): @@ -2618,7 +2602,7 @@ def get_component_index_from_chain(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_component_id_from_chain(item, indices='all'): @@ -2640,7 +2624,7 @@ def get_component_id_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_name_from_chain(item, indices='all'): @@ -2662,7 +2646,7 @@ def get_component_name_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_component_type_from_chain(item, indices='all'): @@ -2684,7 +2668,7 @@ def get_component_type_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_chain_index_from_chain(item, indices='all'): @@ -2698,7 +2682,7 @@ def get_chain_index_from_chain(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_molecule_index_from_chain(item, indices='all'): @@ -2723,7 +2707,7 @@ def get_molecule_index_from_chain(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_molecule_id_from_chain(item, indices='all'): @@ -2745,7 +2729,7 @@ def get_molecule_id_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_molecule_name_from_chain(item, indices='all'): @@ -2767,7 +2751,7 @@ def get_molecule_name_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_molecule_type_from_chain(item, indices='all'): @@ -2789,7 +2773,7 @@ def get_molecule_type_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_entity_index_from_chain(item, indices='all'): @@ -2814,7 +2798,7 @@ def get_entity_index_from_chain(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_entity_id_from_chain(item, indices='all'): @@ -2836,7 +2820,7 @@ def get_entity_id_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_entity_name_from_chain(item, indices='all'): @@ -2858,7 +2842,7 @@ def get_entity_name_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_entity_type_from_chain(item, indices='all'): @@ -2880,7 +2864,7 @@ def get_entity_type_from_chain(item, indices='all'): del(aux_indices) - return output + return output.tolist() @digest(form=form) def get_n_atoms_from_chain(item, indices='all'): @@ -2890,7 +2874,6 @@ def get_n_atoms_from_chain(item, indices='all'): output = get_atom_index_from_chain(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2901,7 +2884,6 @@ def get_n_groups_from_chain(item, indices='all'): output = get_group_index_from_chain(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2912,7 +2894,6 @@ def get_n_components_from_chain(item, indices='all'): output = get_component_index_from_chain(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2923,7 +2904,6 @@ def get_n_molecules_from_chain(item, indices='all'): output = get_molecule_index_from_chain(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -2967,7 +2947,7 @@ def get_n_bonds_from_chain(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_n_inner_bonds_from_chain(item, indices='all'): @@ -2980,7 +2960,7 @@ def get_n_inner_bonds_from_chain(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_inner_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_formal_charge_from_chain(item, indices='all'): @@ -3015,13 +2995,13 @@ def get_partial_charge_from_chain(item, indices='all'): return output @digest(form=form) -def get_n_aminoacids_from_chain(item, indices='all'): +def get_n_amino_acids_from_chain(item, indices='all'): group_indices = get_group_index_from_chain(item, indices=indices) group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_chain(item, indices='all'): @@ -3030,7 +3010,7 @@ def get_n_nucleotides_from_chain(item, indices='all'): group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_chain(item, indices='all'): @@ -3039,7 +3019,7 @@ def get_n_ions_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_chain(item, indices='all'): @@ -3048,7 +3028,7 @@ def get_n_waters_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_chain(item, indices='all'): @@ -3057,7 +3037,7 @@ def get_n_small_molecules_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_chain(item, indices='all'): @@ -3066,7 +3046,7 @@ def get_n_peptides_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_chain(item, indices='all'): @@ -3075,7 +3055,7 @@ def get_n_proteins_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_chain(item, indices='all'): @@ -3084,7 +3064,7 @@ def get_n_dnas_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_chain(item, indices='all'): @@ -3093,7 +3073,7 @@ def get_n_rnas_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_chain(item, indices='all'): @@ -3102,7 +3082,7 @@ def get_n_lipids_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_chain(item, indices='all'): @@ -3111,7 +3091,7 @@ def get_n_oligosaccharides_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_chain(item, indices='all'): @@ -3120,7 +3100,7 @@ def get_n_saccharides_from_chain(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## From entity @@ -3148,7 +3128,7 @@ def get_atom_index_from_entity(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() @digest(form=form) def get_atom_id_from_entity(item, indices='all'): @@ -3170,7 +3150,8 @@ def get_atom_id_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_atom_name_from_entity(item, indices='all'): @@ -3192,7 +3173,8 @@ def get_atom_name_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_atom_type_from_entity(item, indices='all'): @@ -3214,7 +3196,8 @@ def get_atom_type_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_group_index_from_entity(item, indices='all'): @@ -3239,7 +3222,8 @@ def get_group_index_from_entity(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() + @digest(form=form) def get_group_id_from_entity(item, indices='all'): @@ -3261,7 +3245,8 @@ def get_group_id_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_group_name_from_entity(item, indices='all'): @@ -3283,7 +3268,8 @@ def get_group_name_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_group_type_from_entity(item, indices='all'): @@ -3305,7 +3291,8 @@ def get_group_type_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_component_index_from_entity(item, indices='all'): @@ -3330,7 +3317,8 @@ def get_component_index_from_entity(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() + @digest(form=form) def get_component_id_from_entity(item, indices='all'): @@ -3352,7 +3340,8 @@ def get_component_id_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_component_name_from_entity(item, indices='all'): @@ -3374,7 +3363,8 @@ def get_component_name_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_component_type_from_entity(item, indices='all'): @@ -3396,7 +3386,8 @@ def get_component_type_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_chain_index_from_entity(item, indices='all'): @@ -3421,7 +3412,8 @@ def get_chain_index_from_entity(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() + @digest(form=form) def get_chain_id_from_entity(item, indices='all'): @@ -3443,7 +3435,8 @@ def get_chain_id_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_chain_name_from_entity(item, indices='all'): @@ -3465,7 +3458,8 @@ def get_chain_name_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_chain_type_from_entity(item, indices='all'): @@ -3487,7 +3481,8 @@ def get_chain_type_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_molecule_index_from_entity(item, indices='all'): @@ -3512,7 +3507,8 @@ def get_molecule_index_from_entity(item, indices='all'): else: output = np.array(output, dtype=object) - return output + return output.tolist() + @digest(form=form) def get_molecule_id_from_entity(item, indices='all'): @@ -3534,7 +3530,8 @@ def get_molecule_id_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_molecule_name_from_entity(item, indices='all'): @@ -3556,7 +3553,8 @@ def get_molecule_name_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_molecule_type_from_entity(item, indices='all'): @@ -3578,7 +3576,8 @@ def get_molecule_type_from_entity(item, indices='all'): del(aux_indices) - return output + return output.tolist() + @digest(form=form) def get_entity_index_from_entity(item, indices='all'): @@ -3592,7 +3591,8 @@ def get_entity_index_from_entity(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() + @digest(form=form) def get_n_atoms_from_entity(item, indices='all'): @@ -3602,7 +3602,6 @@ def get_n_atoms_from_entity(item, indices='all'): output = get_atom_index_from_entity(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -3613,7 +3612,6 @@ def get_n_groups_from_entity(item, indices='all'): output = get_group_index_from_entity(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -3624,7 +3622,6 @@ def get_n_components_from_entity(item, indices='all'): output = get_component_index_from_entity(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -3635,7 +3632,6 @@ def get_n_molecules_from_entity(item, indices='all'): output = get_molecule_index_from_entity(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -3646,7 +3642,6 @@ def get_n_chains_from_entity(item, indices='all'): output = get_chain_index_from_entity(item, indices=indices) output = [ii.shape[0] for ii in output] - output = np.array(output) return output @digest(form=form) @@ -3676,7 +3671,7 @@ def get_n_bonds_from_entity(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_n_inner_bonds_from_entity(item, indices='all'): @@ -3689,7 +3684,7 @@ def get_n_inner_bonds_from_entity(item, indices='all'): for aux_indices in atom_indices: aux_val = get_n_inner_bonds_from_atom(item, indices=aux_indices) output.append(np.sum(aux_val)) - return np.array(output) + return output @digest(form=form) def get_formal_charge_from_entity(item, indices='all'): @@ -3724,13 +3719,13 @@ def get_partial_charge_from_entity(item, indices='all'): return output @digest(form=form) -def get_n_aminoacids_from_entity(item, indices='all'): +def get_n_amino_acids_from_entity(item, indices='all'): group_indices = get_group_index_from_entity(item, indices=indices) group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in molecule_types]) @digest(form=form) def get_n_nucleotides_from_entity(item, indices='all'): @@ -3739,7 +3734,7 @@ def get_n_nucleotides_from_entity(item, indices='all'): group_indices = np.unique(group_indices).shape[0] group_types = get_group_type_from_group(item, indices=group_indices) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in molecule_types]) @digest(form=form) def get_n_ions_from_entity(item, indices='all'): @@ -3748,7 +3743,7 @@ def get_n_ions_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='ion').sum() + return sum([ii=='ion' for ii in molecule_types]) @digest(form=form) def get_n_waters_from_entity(item, indices='all'): @@ -3757,7 +3752,7 @@ def get_n_waters_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='water').sum() + return sum([ii=='water' for ii in molecule_types]) @digest(form=form) def get_n_small_molecules_from_entity(item, indices='all'): @@ -3766,7 +3761,7 @@ def get_n_small_molecules_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='small molecule').sum() + return sum([ii=='small molecule' for ii in molecule_types]) @digest(form=form) def get_n_peptides_from_entity(item, indices='all'): @@ -3775,7 +3770,7 @@ def get_n_peptides_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_entity(item, indices='all'): @@ -3784,7 +3779,7 @@ def get_n_proteins_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_entity(item, indices='all'): @@ -3793,7 +3788,7 @@ def get_n_dnas_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_entity(item, indices='all'): @@ -3802,7 +3797,7 @@ def get_n_rnas_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_entity(item, indices='all'): @@ -3811,7 +3806,7 @@ def get_n_lipids_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_entity(item, indices='all'): @@ -3820,7 +3815,7 @@ def get_n_oligosaccharides_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_entity(item, indices='all'): @@ -3829,82 +3824,82 @@ def get_n_saccharides_from_entity(item, indices='all'): molecule_indices = np.unique(molecule_indices).shape[0] molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) ## system @digest(form=form) -def get_n_aminoacids_from_system(item): +def get_n_amino_acids_from_system(item): group_types = get_group_type_from_group(item) - return (group_types=='aminoacid').sum() + return sum([ii=='amino acid' for ii in group_types]) @digest(form=form) def get_n_nucleotides_from_system(item): group_types = get_group_type_from_group(item) - return (group_types=='nucleotide').sum() + return sum([ii=='nucleotide' for ii in group_types]) @digest(form=form) def get_n_ions_from_system(item): - - molecule_types = get_group_type_from_group(item) - return (molecule_types=='ion').sum() + + group_types = get_group_type_from_group(item) + return sum([ii=='ion' for ii in group_types]) @digest(form=form) def get_n_waters_from_system(item): - molecule_types = get_group_type_from_group(item) - return (molecule_types=='water').sum() + group_types = get_group_type_from_group(item) + return sum([ii=='water' for ii in group_types]) @digest(form=form) def get_n_small_molecules_from_system(item): - molecule_types = get_group_type_from_group(item) - return (molecule_types=='small molecule').sum() + group_types = get_group_type_from_group(item) + return sum([ii=='small molecule' for ii in group_types]) @digest(form=form) def get_n_peptides_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='peptide').sum() + return sum([ii=='peptide' for ii in molecule_types]) @digest(form=form) def get_n_proteins_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='protein').sum() + return sum([ii=='protein' for ii in molecule_types]) @digest(form=form) def get_n_dnas_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='dna').sum() + return sum([ii=='dna' for ii in molecule_types]) @digest(form=form) def get_n_rnas_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='rna').sum() + return sum([ii=='rna' for ii in molecule_types]) @digest(form=form) def get_n_lipids_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='lipid').sum() + return sum([ii=='lipid' for ii in molecule_types]) @digest(form=form) def get_n_oligosaccharides_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='oligosaccharide').sum() + return sum([ii=='oligosaccharide' for ii in molecule_types]) @digest(form=form) def get_n_saccharides_from_system(item): molecule_types = get_molecule_type_from_molecule(item) - return (molecule_types=='saccharide').sum() + return sum([ii=='saccharide' for ii in molecule_types]) @digest(form=form) def get_coordinates_from_system(item, structure_indices='all'): @@ -4059,7 +4054,7 @@ def get_bond_index_from_bond(item, indices='all'): else: output = np.array(indices, dtype=int) - return output + return output.tolist() @digest(form=form) def get_n_bonds_from_bond(item, indices='all'): diff --git a/molsysmt/basic/selector/molsysmt.py b/molsysmt/basic/selector/molsysmt.py index 891b20ffa..603611a9e 100644 --- a/molsysmt/basic/selector/molsysmt.py +++ b/molsysmt/basic/selector/molsysmt.py @@ -326,6 +326,20 @@ def select_bonded_to(molecular_system, selection): 'entities': [], } +#_aux_dict_in_elements_in = { +# 'entities': [], +# 'chains': ['molecules', +# 'entities'], +# 'molecules': ['chains', +# 'entities'], +# 'components': ['molecules', +# 'chains', +# 'entities'], +# 'groups': ['components', +# 'molecules', +# 'chains', +# 'entities'], +# } def select_in_elements_of(molecular_system, selection): @@ -366,25 +380,36 @@ def select_in_elements_of(molecular_system, selection): kwarg = {_element_index[element_1]: True} pre_output = get(molecular_system, element=element_2, selection=aafter, skip_digestion=True, **kwarg) - mask = get(molecular_system, element=element_1, selection=bbefore, skip_digestion=True, - **kwarg) - output_2 = [np.intersect1d(ii, mask) for ii in pre_output] - output_2 = [ii for ii in output_2 if ii.shape[0] > 0] - - if before == '': - before = 'all' - - mask = select(molecular_system, selection=before) + if is_all(bbefore): + output_2 = pre_output + else: + mask = get(molecular_system, element=element_1, selection=bbefore, skip_digestion=True, + **kwarg) + output_2 = [np.intersect1d(ii, mask).tolist() for ii in pre_output] + output_2 = [ii for ii in output_2 if len(ii) > 0] output = [] - for aux_after in output_2: + aux_output_2 = np.concatenate(output_2).tolist() + pre_output = get(molecular_system, element=element_1, selection=aux_output_2, skip_digestion=True, + atom_index=True) + aux_dict = {ii:jj for ii,jj in zip(aux_output_2, pre_output)} - pre_output = get(molecular_system, element=element_1, selection=aux_after, skip_digestion=True, - atom_index=True) - aux_output = [np.intersect1d(ii, mask).tolist() for ii in pre_output] - aux_output = [ii for ii in aux_output if len(ii) > 0] - output.append(aux_output) + if before == '': + before = 'all' + + if is_all(before): + for aux_after in output_2: + pre_output = [aux_dict[ii] for ii in aux_after] + aux_output = [ii for ii in pre_output if len(ii) > 0] + output.append(aux_output) + else: + mask = select(molecular_system, selection=before) + for aux_after in output_2: + pre_output = [aux_dict[ii] for ii in aux_after] + aux_output = [np.intersect1d(ii, mask).tolist() for ii in pre_output] + aux_output = [ii for ii in aux_output if len(ii) > 0] + output.append(aux_output) return output @@ -402,7 +427,7 @@ def select_in_elements_of(molecular_system, selection): pre_output = get(molecular_system, element=element_1, selection=after, skip_digestion=True, atom_index=True) - mask = select(molecular_system, selection=before, skip_digestion=True) + mask = select(molecular_system, selection=before) output = [np.intersect1d(ii, mask).tolist() for ii in pre_output] output = [ii for ii in output if len(ii) > 0] @@ -411,27 +436,27 @@ def select_in_elements_of(molecular_system, selection): raise NotImplementedError -def select_in_groups_of(molecular_system, selection): - - from molsysmt.basic import get - - before, after = selection.split('in groups of') - before = before.strip() - after = after.strip() - - if before == '' or is_all(before): - - output = get(molecular_system, element='group', selection=after, atom_index=True) - output = [ii for ii in output] - - else: - - pre_output = get(molecular_system, element='group', selection=after, atom_index=True) - mask = select(molecular_system, selection=before) - output = [np.intersect1d(ii, mask) for ii in pre_output] - output = [ii for ii in output if ii.shape[0] > 0] - - return output +#def select_in_groups_of(molecular_system, selection): +# +# from molsysmt.basic import get +# +# before, after = selection.split('in groups of') +# before = before.strip() +# after = after.strip() +# +# if before == '' or is_all(before): +# +# output = get(molecular_system, element='group', selection=after, atom_index=True) +# output = [ii for ii in output] +# +# else: +# +# pre_output = get(molecular_system, element='group', selection=after, atom_index=True) +# mask = select(molecular_system, selection=before) +# output = [np.intersect1d(ii, mask) for ii in pre_output] +# output = [ii for ii in output if ii.shape[0] > 0] +# +# return output def selection_with_special_subsentences(selection): diff --git a/molsysmt/element/molecule/get_molecule_type.py b/molsysmt/element/molecule/get_molecule_type.py index 1cb503b04..33639544f 100644 --- a/molsysmt/element/molecule/get_molecule_type.py +++ b/molsysmt/element/molecule/get_molecule_type.py @@ -11,9 +11,10 @@ def get_molecule_type(molecular_system, element='atom', selection='all', if redefine_indices: - + print('da1') molecule_types_from_molecule = get_component_type(molecular_system, element='component', selection=selection, redefine_indices=True, syntax=syntax) + print('da2') if element == 'atom': aux = get(molecular_system, element='atom', selection=selection, syntax=syntax, diff --git a/molsysmt/form/mmcif_PdbxContainers_DataContainer/to_molsysmt_MolSys.py b/molsysmt/form/mmcif_PdbxContainers_DataContainer/to_molsysmt_MolSys.py index 5369836f9..e22a3e0a1 100644 --- a/molsysmt/form/mmcif_PdbxContainers_DataContainer/to_molsysmt_MolSys.py +++ b/molsysmt/form/mmcif_PdbxContainers_DataContainer/to_molsysmt_MolSys.py @@ -112,34 +112,36 @@ def to_molsysmt_MolSys(item, atom_indices='all', structure_indices='all', skip_d atom_names = atom_name_array[aux_atom_indices] group_name = group_name_array[group_index] - dict_aux = {ii:jj for ii,jj in zip(atom_names,aux_atom_indices)} - dict_mask = {ii:False for ii in atom_names} + if group_name in bonds_intra_group: - aux_atom_pairs_bonded = [] + dict_aux = {ii:jj for ii,jj in zip(atom_names,aux_atom_indices)} + dict_mask = {ii:False for ii in atom_names} - for at1, at2 in bonds_intra_group[group_name]: - try: - aux_atom_pairs_bonded.append(sorted([dict_aux[at1],dict_aux[at2]])) - dict_mask[at1]=True - dict_mask[at2]=True - except: - pass + aux_atom_pairs_bonded = [] - remains = [ii for ii,jj in dict_mask.items() if not jj] - - if len(remains): - if set(remains)==set(['H1','H3']): - for at1, at2 in [['N', 'H1'], ['N', 'H3']]: + for at1, at2 in bonds_intra_group[group_name]: + try: aux_atom_pairs_bonded.append(sorted([dict_aux[at1],dict_aux[at2]])) - atom_pairs_bonded += aux_atom_pairs_bonded - elif len(aux_atom_indices)==1: - atom_pairs_bonded += [] + dict_mask[at1]=True + dict_mask[at2]=True + except: + pass + + remains = [ii for ii,jj in dict_mask.items() if not jj] + + if len(remains): + if set(remains)==set(['H1','H3']): + for at1, at2 in [['N', 'H1'], ['N', 'H3']]: + aux_atom_pairs_bonded.append(sorted([dict_aux[at1],dict_aux[at2]])) + atom_pairs_bonded += aux_atom_pairs_bonded + elif len(aux_atom_indices)==1: + atom_pairs_bonded += [] + else: + print(f'Warning! The bonds of group {group_name} were recalculated by MolSysMT.') + aux_pairs_bonded = get_bonded_atom_pairs(group_name, atom_names, aux_atom_indices) + atom_pairs_bonded += aux_atom_pairs_bonded else: - print(f'Warning! The bonds of group {group_name} were recalculated by MolSysMT.') - aux_pairs_bonded = get_bonded_atom_pairs(group_name, atom_names, aux_atom_indices) atom_pairs_bonded += aux_atom_pairs_bonded - else: - atom_pairs_bonded += aux_atom_pairs_bonded else: diff --git a/molsysmt/form/molsysmt_MolSys/__init__.py b/molsysmt/form/molsysmt_MolSys/__init__.py index 9596478ae..7bb2ba812 100644 --- a/molsysmt/form/molsysmt_MolSys/__init__.py +++ b/molsysmt/form/molsysmt_MolSys/__init__.py @@ -41,6 +41,7 @@ from .to_pdbfixer_PDBFixer import to_pdbfixer_PDBFixer from .to_biopython_Seq import to_biopython_Seq from .to_biopython_SeqRecord import to_biopython_SeqRecord +from .to_XYZ import to_XYZ from .to_file_msmpk import to_file_msmpk from .to_file_h5msm import to_file_h5msm from .to_file_pdb import to_file_pdb @@ -64,6 +65,7 @@ 'pdbfixer.PDBFixer': to_pdbfixer_PDBFixer, 'biopython.Seq': to_biopython_Seq, 'biopython.SeqRecord': to_biopython_SeqRecord, + 'XYZ': to_XYZ, 'string:pdb_text': to_string_pdb_text, 'string:amino_acids_1': to_string_amino_acids_1, 'string:amino_acids_3': to_string_amino_acids_3, diff --git a/molsysmt/form/molsysmt_MolSys/to_XYZ.py b/molsysmt/form/molsysmt_MolSys/to_XYZ.py new file mode 100644 index 000000000..aae8c6e2e --- /dev/null +++ b/molsysmt/form/molsysmt_MolSys/to_XYZ.py @@ -0,0 +1,11 @@ +from molsysmt._private.digestion import digest + +@digest(form='molsysmt.MolSys') +def to_XYZ(item, atom_indices='all', structure_indices='all', skip_digestion=False): + + from . import get_coordinates_from_atom + + tmp_item = get_coordinates_from_atom(item, indices=atom_indices, structure_indices=structure_indices, skip_digestion=True) + + return tmp_item + diff --git a/molsysmt/form/openmm_Topology/to_string_amino_acids_3.py b/molsysmt/form/openmm_Topology/to_string_amino_acids_3.py index 7d501423f..58f3eac12 100644 --- a/molsysmt/form/openmm_Topology/to_string_amino_acids_3.py +++ b/molsysmt/form/openmm_Topology/to_string_amino_acids_3.py @@ -1,13 +1,13 @@ from molsysmt._private.digestion import digest @digest(form='openmm.Topology') -def to_string_amino_acids_3(item, atom_indices='all', skip_digestion=False): +def to_string_amino_acids_3(item, group_indices='all', skip_digestion=False): from . import to_molsysmt_Topology from ..molsysmt_Topology import to_string_amino_acids_3 as molsysmt_Topology_to_string_amino_acids_3 tmp_item = to_molsysmt_Topology(item, skip_digestion=True) - tmp_item = molsysmt_Topology_to_string_amino_acids_3(tmp_item, atom_indices=atom_indices, skip_digestion=True) + tmp_item = molsysmt_Topology_to_string_amino_acids_3(tmp_item, group_indices=group_indices, skip_digestion=True) return tmp_item diff --git a/molsysmt/form/string_pdb_id/to_string_pdb_text.py b/molsysmt/form/string_pdb_id/to_string_pdb_text.py index c971578ac..df015ba7d 100644 --- a/molsysmt/form/string_pdb_id/to_string_pdb_text.py +++ b/molsysmt/form/string_pdb_id/to_string_pdb_text.py @@ -3,20 +3,13 @@ @digest(form='string:pdb_id') def to_string_pdb_text(item, atom_indices='all', structure_indices='all', skip_digestion=False): - from . import to_file_pdb - from ..string_pdb_text import extract as extract_string_pdb_text - from os import remove + from . import to_molsysmt_MolSys + from ..molsysmt_MolSys import to_string_pdb_text as molsysmt_MolSys_to_string_pdb_text - tmp_item = to_file_pdb(item) + tmp_item = to_molsysmt_MolSys(item, atom_indices=atom_indices, structure_indices=structure_indices, + skip_digestion=True) - tmp_file = tmp_item - fff = open(tmp_item, 'r') - tmp_item = fff.read() - fff.close() - remove(tmp_file) - - tmp_item = extract_string_pdb_text(tmp_item, atom_indices=atom_indices, structure_indices=structure_indices, - copy_if_all=False, skip_digestion=True) + tmp_item = molsysmt_MolSys_to_string_pdb_text(tmp_item, skip_digestion=True) return tmp_item diff --git a/sandbox/Tests.ipynb b/sandbox/Tests.ipynb index c9bac8a02..395ac4700 100644 --- a/sandbox/Tests.ipynb +++ b/sandbox/Tests.ipynb @@ -3,13 +3,21 @@ { "cell_type": "markdown", "id": "c2f52c6d-731a-4ca3-b14b-0f83beafe76c", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "# Testing basic tools in documentation\n", "\n", "\n", "[x] Add \n", - "[x] Get\n" + "[x] Append \n", + "[x] Are multiple \n", + "[x] Compare \n", + "[x] Concatenate structures \n", + "[x] Contains \n", + "\n", + "\n" ] }, { @@ -21,7 +29,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a4e8fb7ba002470d881083ff62b26554", + "model_id": "0e2f0f848d2646a792332ffad5d012de", "version_major": 2, "version_minor": 0 }, @@ -38,66 +46,125 @@ { "cell_type": "code", "execution_count": 2, - "id": "4cdc4f01-cba8-494c-b029-e3cb4e801786", + "id": "26a3594c-d02f-4cf5-a55d-5db661c7e635", "metadata": {}, "outputs": [], "source": [ - "molsys = msm.convert('1TCD')" + "molsys = msm.convert('181L')" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "b02a20f2-e896-4f69-9075-fc92642fafb0", + "execution_count": 9, + "id": "00573488-f6c6-44f4-9734-775b1f31d889", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 51.9 s, sys: 381 ms, total: 52.3 s\n", - "Wall time: 52.4 s\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
entity_identity_nameentity_type
00T4 LYSOZYMEprotein
11CHLORIDE IONion
222-HYDROXYETHYL DISULFIDEsmall molecule
33BENZENEsmall molecule
44waterwater
\n", + "
" + ], + "text/plain": [ + " entity_id entity_name entity_type\n", + "0 0 T4 LYSOZYME protein\n", + "1 1 CHLORIDE ION ion\n", + "2 2 2-HYDROXYETHYL DISULFIDE small molecule\n", + "3 3 BENZENE small molecule\n", + "4 4 water water" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "%%time\n", - "sel1 = msm.select(molsys, 'all in groups of all in components of all')" + "molsys.topology.entities" ] }, { "cell_type": "code", "execution_count": null, - "id": "d2ef1e2d-a120-4ed1-82f5-c18c1a4aa30b", + "id": "4cdc4f01-cba8-494c-b029-e3cb4e801786", "metadata": {}, "outputs": [], "source": [ - "sel2 = msm.select(molsys, 'all in groups of all in components')" + "item = msm.convert('181L','mmcif.PdbxContainers.DataContainer')" ] }, { "cell_type": "code", "execution_count": null, - "id": "f3513c99-3b57-452b-b57d-a01b30e692bb", + "id": "c9b7fe10-d644-4d8d-b26c-fbcfc5d8136d", "metadata": {}, "outputs": [], "source": [ - "sel2" + "item.getObj('chem_comp_bond')" ] }, { "cell_type": "code", "execution_count": null, - "id": "5ab33dbf-a8b9-427a-969e-56bacc8a72a2", + "id": "6b3ace66-6693-479d-a2a1-6df688c4769f", "metadata": {}, "outputs": [], - "source": [ - "sel1 = msm.select(molecular_system, 'all in groups of all in components of all')\n", - "sel2 = msm.select(molecular_system, 'all in groups of all in components')\n", - "sel3 = msm.select(molecular_system, 'all in groups in components of all')\n", - "sel4 = msm.select(molecular_system, 'all in groups in components')\n", - "sel5 = msm.select(molecular_system, 'in groups in components')" - ] + "source": [] } ], "metadata": {