Skip to content

Commit

Permalink
Adding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dprada committed Aug 6, 2024
1 parent 73fb5ae commit 44c81e9
Show file tree
Hide file tree
Showing 17 changed files with 507 additions and 136 deletions.
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ omit =
molsysmt/element/chain/chain_names.py
molsysmt/native/file_tng.py
molsysmt/native/file_xtc.py
molsysmt/thirds/nglview/patching_nglview.py

202 changes: 202 additions & 0 deletions docs/contents/user/tools/thirds/nglview/add_arrows.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "076f5fb3-fdc5-4cad-a0f2-2dd0dc0173a6",
"metadata": {},
"source": [
"# Add arrows"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "ce3cebe7-4369-4d23-a8ba-4b1ed7758c9f",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "651d53ded2944d8fb32196b30d0a8dc8",
"version_major": 2,
"version_minor": 0
},
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import molsysmt as msm\n",
"from molsysmt import pyunitwizard as puw\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7f117f22-46e0-4928-a192-dc68f7e9d9e3",
"metadata": {},
"outputs": [],
"source": [
"molecular_system = msm.convert('181L', selection='molecule_type==\"protein\"')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9ede7e3b-1de2-4414-9c5a-513866826718",
"metadata": {},
"outputs": [],
"source": [
"n_CAs, coordinates_CAs = msm.get(molecular_system, selection='atom_name==\"CA\"', n_atoms=True, coordinates=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "ec81e187-2f2a-4399-9192-1940a1dd1c37",
"metadata": {},
"outputs": [],
"source": [
"arrows = puw.quantity(2.0*np.ones([n_CAs,3]), 'angstroms')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9ef8c575-e40d-451b-a2e5-93192433a005",
"metadata": {},
"outputs": [],
"source": [
"view = msm.view(molecular_system)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1c3ab7aa-d99a-4ace-838b-225c2040ca0a",
"metadata": {},
"outputs": [],
"source": [
"msm.thirds.nglview.add_arrows(view, arrows, origin=coordinates_CAs)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4b119c2b-4f60-440e-9964-5979a32a380a",
"metadata": {},
"outputs": [],
"source": [
"msm.thirds.nglview.add_arrows(view, puw.quantity([[10,0,0],[0,10,0],[0,0,10]], 'angstroms'),\n",
" origin=puw.quantity([[0,0,0],[0,0,0],[0,0,0]], 'angstroms'),\n",
" color=['#FF0000', '#00FF00', '#0000FF'], radius='0.2 angstroms')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "929d66d7-d205-434b-b5e8-47fb27705f61",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5ef73157669947c0b4f4f9c1f63dca2a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NGLWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"view\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "105bad4e-7ee2-43de-9a80-68544a9ff2e8",
"metadata": {},
"outputs": [],
"source": [
"view = msm.view(molecular_system)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "a7f9cb89-6fa5-4f76-a570-a6d0faf46e38",
"metadata": {},
"outputs": [],
"source": [
"arrows = puw.quantity([[9,0,0],[0,6,0],[0,0,-12], [0,5,5]], 'angstroms')"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "44bb51fc-d81d-47bb-9a6d-9db96a95cd04",
"metadata": {},
"outputs": [],
"source": [
"msm.thirds.nglview.add_arrows(view, arrows, selection='atom_name==\"CA\" and group_index in [10,30,60,90]', color='#0B6E4F', \n",
" radius='0.5 angstroms')"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "5fab1a62-1800-4e6d-b968-2e0777171375",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "cb126cd2594746e79e6e993663cfd850",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NGLWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"view"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
74 changes: 50 additions & 24 deletions docs/contents/user/tools/thirds/nglview/add_contacts.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,23 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 1,
"id": "929d66d7-d205-434b-b5e8-47fb27705f61",
"metadata": {},
"outputs": [],
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f000a04f91a1434fbab99275485bd872",
"version_major": 2,
"version_minor": 0
},
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import molsysmt as msm\n",
"from molsysmt import pyunitwizard as puw\n",
Expand All @@ -23,7 +36,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 2,
"id": "09b930a3-ace1-47bc-ad85-fe345e5411c3",
"metadata": {},
"outputs": [],
Expand All @@ -33,36 +46,49 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"id": "79c2304f-5417-4590-9032-4fd8fb94118e",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "object of type 'int' has no len()",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m contacts \u001b[38;5;241m=\u001b[39m \u001b[43mmsm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_contacts\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolsys\u001b[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;43matom_name==\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mCA\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mthreshold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m4 angstroms\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mpairs\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[43moutput_indices\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",
"File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest.<locals>.digestor.<locals>.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/structure/get_contacts.py:39\u001b[0m, in \u001b[0;36mget_contacts\u001b[0;34m(molecular_system, selection, center_of_atoms, weights, structure_indices, selection_2, center_of_atoms_2, weights_2, structure_indices_2, threshold, pairs, pbc, syntax, output_type, output_indices, skip_digestion)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 37\u001b[0m atom_indices_2 \u001b[38;5;241m=\u001b[39m select(molecular_system, selection\u001b[38;5;241m=\u001b[39mselection_2, syntax\u001b[38;5;241m=\u001b[39msyntax)\n\u001b[0;32m---> 39\u001b[0m all_dists \u001b[38;5;241m=\u001b[39m \u001b[43mget_distances\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matom_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[43m \u001b[49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\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 41\u001b[0m \u001b[43m \u001b[49m\u001b[43mselection_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matom_indices_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweights_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_2\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 42\u001b[0m \u001b[43m \u001b[49m\u001b[43mstructure_indices_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpairs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpairs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpbc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpbc\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 44\u001b[0m length_units \u001b[38;5;241m=\u001b[39m puw\u001b[38;5;241m.\u001b[39mget_unit(all_dists)\n\u001b[1;32m 45\u001b[0m threshold \u001b[38;5;241m=\u001b[39m puw\u001b[38;5;241m.\u001b[39mget_value(threshold, to_unit\u001b[38;5;241m=\u001b[39mlength_units)\n",
"File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest.<locals>.digestor.<locals>.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/structure/get_distances.py:50\u001b[0m, in \u001b[0;36mget_distances\u001b[0;34m(molecular_system, selection, structure_indices, center_of_atoms, weights, molecular_system_2, selection_2, structure_indices_2, center_of_atoms_2, weights_2, pairs, pbc, output_type, output_indices, output_structure_indices, engine, syntax, skip_digestion)\u001b[0m\n\u001b[1;32m 47\u001b[0m pbc\u001b[38;5;241m=\u001b[39mhas_pbc(molecular_system)\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m pairs \u001b[38;5;129;01mand\u001b[39;00m (selection_2 \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43mis_iterable_of_pairs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mselection\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(selection, np\u001b[38;5;241m.\u001b[39mndarray):\n\u001b[1;32m 52\u001b[0m selection\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39marray(selection)\n",
"File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/variables.py:76\u001b[0m, in \u001b[0;36mis_iterable_of_pairs\u001b[0;34m(variable)\u001b[0m\n\u001b[1;32m 74\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 75\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(variable, (\u001b[38;5;28mlist\u001b[39m, \u001b[38;5;28mtuple\u001b[39m, \u001b[38;5;28mset\u001b[39m)):\n\u001b[0;32m---> 76\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mall\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mii\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mii\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mvariable\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m output\n",
"File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/variables.py:76\u001b[0m, in \u001b[0;36m<genexpr>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 74\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 75\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(variable, (\u001b[38;5;28mlist\u001b[39m, \u001b[38;5;28mtuple\u001b[39m, \u001b[38;5;28mset\u001b[39m)):\n\u001b[0;32m---> 76\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mii\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m ii \u001b[38;5;129;01min\u001b[39;00m variable)\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m output\n",
"\u001b[0;31mTypeError\u001b[0m: object of type 'int' has no len()"
]
}
],
"source": [
"contacts = msm.structure.get_contacts(molsys, selection='atom_name==\"CA\"', threshold='4 angstroms',\n",
" pairs=True, output_indices='atom')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6ddb306c-09b6-4089-bfe0-eede7e535fe8",
"metadata": {},
"outputs": [],
"source": [
"contacts = msm.structure.get_contacts(molsys, selection='atom_name==\"CA\"', threshold='9 angstroms',\n",
" output_type='pairs', output_indices='atom')"
"contacts"
]
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": null,
"id": "9d090ca6-6a7c-44b5-887b-7bc937adccbc",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b12b0284fe594c62990836adc550a77b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NGLWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"view = msm.view(molsys, standard=True)\n",
"msm.thirds.nglview.add_contacts(view, np.array(contacts[0]))\n",
Expand Down Expand Up @@ -94,7 +120,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.14"
"version": "3.11.9"
}
},
"nbformat": 4,
Expand Down
1 change: 1 addition & 0 deletions docs/contents/user/tools/thirds/nglview/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
.. toctree::
:maxdepth: 2
add_arrows.ipynb
add_hbonds.ipynb
color_by_value.ipynb
```
40 changes: 40 additions & 0 deletions molsysmt/_private/digestion/argument/origin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from ...exceptions import ArgumentError
import numpy as np
from molsysmt import pyunitwizard as puw

methods_where_bool = [
]

def digest_origin(origin, caller=None):

if caller in methods_where_bool:
if isinstance(origin, bool):
return origin

if caller.endswith('add_arrows'):
if origin is None:
return None

value = puw.get_value(origin)
unit = puw.get_unit(origin)

if not puw.check(unit, dimensionality={'[L]':1}):
raise ArgumentError('origin', value=origin, caller=caller, message=None)

if not isinstance(value, np.ndarray):
value = np.array(value)

shape = value.shape

if len(shape) == 1:
if shape[0] == 3:
return puw.quantity(value[np.newaxis, np.newaxis, :], unit, standardized=True)
elif len(shape) == 2:
if shape[1] == 3:
return puw.quantity(value[np.newaxis, :, :], unit, standardized=True)
elif len(shape) == 3:
if shape[2] == 3:
return puw.quantity(value, unit, standardized=True)

raise ArgumentError('origin', value=origin, caller=caller, message=None)

7 changes: 0 additions & 7 deletions molsysmt/form/string_pdb_id/to_molsysmt_MolSys.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,6 @@
@digest(form='string:pdb_id')
def to_molsysmt_MolSys(item, atom_indices='all', structure_indices='all', skip_digestion=False):

#from . import to_mmtf_MMTFDecoder
#from ..mmtf_MMTFDecoder import to_molsysmt_MolSys as mmtf_MMTFDecoder_to_molsysmt_MolSys

#tmp_item = to_mmtf_MMTFDecoder(item, skip_digestion=True)
#tmp_item = mmtf_MMTFDecoder_to_molsysmt_MolSys(tmp_item, atom_indices=atom_indices,
# structure_indices=structure_indices, skip_digestion=True)

from . import to_mmcif_PdbxContainers_DataContainer
from ..mmcif_PdbxContainers_DataContainer import to_molsysmt_MolSys as mmcif_PdbxContainers_DataContainer_to_molsysmt_MolSys

Expand Down
Loading

0 comments on commit 44c81e9

Please sign in to comment.